From 3fae59c2bd4ef70bd10abb3469c19bb57d2d2330 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 20 Feb 2024 11:44:10 -0800 Subject: [PATCH 001/100] Add read-only note for development --- docs/more/development.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/more/development.md b/docs/more/development.md index b1252112..8e3fac13 100644 --- a/docs/more/development.md +++ b/docs/more/development.md @@ -51,6 +51,7 @@ To ensure cohesiveness of various widgets, the following should be used as a gui - Please only submit widgets that have been requested and have at least 10 'up-votes'. The purpose of this requirement is to avoid the addition (and maintenance) of service widgets that might only benefit a small number of users. - Widgets should be only one row of blocks -- Widgets should be no more than 4 blocks wide +- Widgets should be no more than 4 blocks wide and generally conform to the styling / design choices of other widgets - Minimize the number of API calls - Avoid the use of custom proxy unless absolutely necessary +- Widgets should be 'read-only', as in they should not make write changes using the relevant tool's API. Homepage widgets are designed to surface information, not to be a (usually worse) replacement for the tool itself. From 291bf422f919f1ccd2d860b00710ef1d2f6d710d Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 20 Feb 2024 22:19:53 -0800 Subject: [PATCH 002/100] Enhancement: support different bytes multipliers for disk space for resources / glances and metrics widgets (#2966) --- docs/widgets/info/glances.md | 1 + docs/widgets/info/resources.md | 1 + docs/widgets/services/glances.md | 1 + src/components/widgets/glances/glances.jsx | 5 +++-- src/components/widgets/resources/disk.jsx | 7 ++++--- src/components/widgets/resources/resources.jsx | 8 +++++--- src/utils/config/service-helpers.js | 2 ++ src/widgets/glances/metrics/fs.jsx | 9 +++++---- 8 files changed, 22 insertions(+), 12 deletions(-) diff --git a/docs/widgets/info/glances.md b/docs/widgets/info/glances.md index e6fc2a61..b7fd7efd 100644 --- a/docs/widgets/info/glances.md +++ b/docs/widgets/info/glances.md @@ -17,6 +17,7 @@ The Glances widget allows you to monitor the resources (CPU, memory, storage, te cputemp: true # disabled by default uptime: true # disabled by default disk: / # disabled by default, use mount point of disk(s) in glances. Can also be a list (see below) + diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk expanded: true # show the expanded view label: MyMachine # optional ``` diff --git a/docs/widgets/info/resources.md b/docs/widgets/info/resources.md index 35f2177b..b4f85d69 100644 --- a/docs/widgets/info/resources.md +++ b/docs/widgets/info/resources.md @@ -22,6 +22,7 @@ _Note: unfortunately, the package used for getting CPU temp ([systeminformation] uptime: true units: imperial # only used by cpu temp refresh: 3000 # optional, in ms + diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk ``` You can also pass a `label` option, which allows you to group resources under named sections, diff --git a/docs/widgets/services/glances.md b/docs/widgets/services/glances.md index d8f9e9ca..134dcb5f 100644 --- a/docs/widgets/services/glances.md +++ b/docs/widgets/services/glances.md @@ -18,6 +18,7 @@ widget: username: user # optional if auth enabled in Glances password: pass # optional if auth enabled in Glances metric: cpu + diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk ``` _Please note, this widget does not need an `href`, `icon` or `description` on its parent service. To achieve the same effect as the examples above, see as an example:_ diff --git a/src/components/widgets/glances/glances.jsx b/src/components/widgets/glances/glances.jsx index 0834b775..905a179a 100644 --- a/src/components/widgets/glances/glances.jsx +++ b/src/components/widgets/glances/glances.jsx @@ -21,6 +21,7 @@ function convertToFahrenheit(t) { export default function Widget({ options }) { const { t, i18n } = useTranslation(); const { settings } = useContext(SettingsContext); + const diskUnits = options.diskUnits === "bbytes" ? "common.bbytes" : "common.bytes"; const { data, error } = useSWR( `/api/widgets/glances?${new URLSearchParams({ lang: i18n.language, ...options }).toString()}`, @@ -132,9 +133,9 @@ export default function Widget({ options }) { } {options.memory && } {Array.isArray(options.disk) - ? options.disk.map((disk) => ) - : options.disk && } + ? options.disk.map((disk) => ( + + )) + : options.disk && } {options.cputemp && } {options.uptime && } diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index 67502a7a..9f997915 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -395,6 +395,7 @@ export function cleanServiceGroups(groups) { chart, metric, pointsLimit, + diskUnits, // glances, customapi, iframe refreshInterval, @@ -533,6 +534,7 @@ export function cleanServiceGroups(groups) { } if (refreshInterval) cleanedService.widget.refreshInterval = refreshInterval; if (pointsLimit) cleanedService.widget.pointsLimit = pointsLimit; + if (diskUnits) cleanedService.widget.diskUnits = diskUnits; } if (type === "mjpeg") { if (stream) cleanedService.widget.stream = stream; diff --git a/src/widgets/glances/metrics/fs.jsx b/src/widgets/glances/metrics/fs.jsx index 9cd0cec6..16d8d153 100644 --- a/src/widgets/glances/metrics/fs.jsx +++ b/src/widgets/glances/metrics/fs.jsx @@ -13,6 +13,7 @@ export default function Component({ service }) { const { widget } = service; const { chart, refreshInterval = defaultInterval } = widget; const [, fsName] = widget.metric.split("fs:"); + const diskUnits = widget.diskUnits === "bbytes" ? "common.bbytes" : "common.bytes"; const { data, error } = useWidgetAPI(widget, "fs", { refreshInterval: Math.max(defaultInterval, refreshInterval), @@ -60,7 +61,7 @@ export default function Component({ service }) { {fsData.used && chart && (
- {t("common.bbytes", { + {t(diskUnits, { value: fsData.used, maximumFractionDigits: 0, })}{" "} @@ -69,7 +70,7 @@ export default function Component({ service }) { )}
- {t("common.bbytes", { + {t(diskUnits, { value: fsData.free, maximumFractionDigits: 1, })}{" "} @@ -81,7 +82,7 @@ export default function Component({ service }) { {fsData.used && (
- {t("common.bbytes", { + {t(diskUnits, { value: fsData.used, maximumFractionDigits: 0, })}{" "} @@ -93,7 +94,7 @@ export default function Component({ service }) {
- {t("common.bbytes", { + {t(diskUnits, { value: fsData.size, maximumFractionDigits: 1, })}{" "} From fce694e2b966b0cd9b0275fc8ec11190e2fe3ed8 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 21 Feb 2024 00:41:21 -0800 Subject: [PATCH 003/100] Feature: add gitea widget (#2968) --- docs/widgets/services/gitea.md | 17 +++++++++++++++++ mkdocs.yml | 1 + public/locales/en/common.json | 5 +++++ src/utils/proxy/api-helpers.js | 2 +- src/widgets/components.js | 1 + src/widgets/gitea/component.jsx | 32 ++++++++++++++++++++++++++++++++ src/widgets/gitea/widget.js | 22 ++++++++++++++++++++++ src/widgets/widgets.js | 2 ++ 8 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 docs/widgets/services/gitea.md create mode 100644 src/widgets/gitea/component.jsx create mode 100644 src/widgets/gitea/widget.js diff --git a/docs/widgets/services/gitea.md b/docs/widgets/services/gitea.md new file mode 100644 index 00000000..bf75aa69 --- /dev/null +++ b/docs/widgets/services/gitea.md @@ -0,0 +1,17 @@ +--- +title: Gitea +description: Gitea Widget Configuration +--- + +Learn more about [Gitea](https://gitea.com). + +API token requires `notifications` and `repository` permissions. See the [gitea documentation](https://docs.gitea.com/development/api-usage#generating-and-listing-api-tokens) for details on generating tokens. + +Allowed fields: ["notifications", "issues", "pulls"] + +```yaml +widget: + type: gitea + url: http://gitea.host.or.ip:port + key: giteaapitoken +``` diff --git a/mkdocs.yml b/mkdocs.yml index e9d531ba..c6ecfda9 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -57,6 +57,7 @@ nav: - widgets/services/gamedig.md - widgets/services/gatus.md - widgets/services/ghostfolio.md + - widgets/services/gitea.md - widgets/services/glances.md - widgets/services/gluetun.md - widgets/services/gotify.md diff --git a/public/locales/en/common.json b/public/locales/en/common.json index cc6846a0..7d5097fb 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -831,5 +831,10 @@ "plants": "Plants", "photos": "Photos", "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" } } diff --git a/src/utils/proxy/api-helpers.js b/src/utils/proxy/api-helpers.js index cfb4307e..5fc22e1e 100644 --- a/src/utils/proxy/api-helpers.js +++ b/src/utils/proxy/api-helpers.js @@ -57,7 +57,7 @@ export function jsonArrayFilter(data, filter) { export function sanitizeErrorURL(errorURL) { // Dont display sensitive params on frontend const url = new URL(errorURL); - ["apikey", "api_key", "token", "t"].forEach((key) => { + ["apikey", "api_key", "token", "t", "access_token"].forEach((key) => { if (url.searchParams.has(key)) url.searchParams.set(key, "***"); }); return url.toString(); diff --git a/src/widgets/components.js b/src/widgets/components.js index 784f05b2..9054c4d2 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -31,6 +31,7 @@ const components = { gamedig: dynamic(() => import("./gamedig/component")), gatus: dynamic(() => import("./gatus/component")), ghostfolio: dynamic(() => import("./ghostfolio/component")), + gitea: dynamic(() => import("./gitea/component")), glances: dynamic(() => import("./glances/component")), gluetun: dynamic(() => import("./gluetun/component")), gotify: dynamic(() => import("./gotify/component")), diff --git a/src/widgets/gitea/component.jsx b/src/widgets/gitea/component.jsx new file mode 100644 index 00000000..b193efd2 --- /dev/null +++ b/src/widgets/gitea/component.jsx @@ -0,0 +1,32 @@ +import Container from "components/services/widget/container"; +import Block from "components/services/widget/block"; +import useWidgetAPI from "utils/proxy/use-widget-api"; + +export default function Component({ service }) { + const { widget } = service; + + const { data: giteaNotifications, error: giteaNotificationsError } = useWidgetAPI(widget, "notifications"); + const { data: giteaIssues, error: giteaIssuesError } = useWidgetAPI(widget, "issues"); + + if (giteaNotificationsError || giteaIssuesError) { + return ; + } + + if (!giteaNotifications || !giteaIssues) { + return ( + + + + + + ); + } + + return ( + + + + + + ); +} diff --git a/src/widgets/gitea/widget.js b/src/widgets/gitea/widget.js new file mode 100644 index 00000000..32871b00 --- /dev/null +++ b/src/widgets/gitea/widget.js @@ -0,0 +1,22 @@ +import { asJson } from "utils/proxy/api-helpers"; +import genericProxyHandler from "utils/proxy/handlers/generic"; + +const widget = { + api: "{url}/api/v1/{endpoint}?access_token={key}", + proxyHandler: genericProxyHandler, + + mappings: { + notifications: { + endpoint: "notifications", + }, + issues: { + endpoint: "repos/issues/search", + map: (data) => ({ + pulls: asJson(data).filter((issue) => issue.pull_request), + issues: asJson(data).filter((issue) => !issue.pull_request), + }), + }, + }, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 6f50d9ef..5804253d 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -25,6 +25,7 @@ import fritzbox from "./fritzbox/widget"; import gamedig from "./gamedig/widget"; import gatus from "./gatus/widget"; import ghostfolio from "./ghostfolio/widget"; +import gitea from "./gitea/widget"; import glances from "./glances/widget"; import gluetun from "./gluetun/widget"; import gotify from "./gotify/widget"; @@ -133,6 +134,7 @@ const widgets = { gamedig, gatus, ghostfolio, + gitea, glances, gluetun, gotify, From 45a9e2a6dab5cbef7a30ed6a02535fc6a3218aa7 Mon Sep 17 00:00:00 2001 From: RoboMagus <68224306+RoboMagus@users.noreply.github.com> Date: Fri, 23 Feb 2024 14:44:24 +0100 Subject: [PATCH 004/100] Documentation: fix plant-it docs (#2987) * Fix plant-it docs * Run pre-commit --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/{planit.md => plantit.md} | 2 ++ 1 file changed, 2 insertions(+) rename docs/widgets/services/{planit.md => plantit.md} (82%) diff --git a/docs/widgets/services/planit.md b/docs/widgets/services/plantit.md similarity index 82% rename from docs/widgets/services/planit.md rename to docs/widgets/services/plantit.md index d1cebfaa..f11b942b 100644 --- a/docs/widgets/services/planit.md +++ b/docs/widgets/services/plantit.md @@ -7,6 +7,8 @@ Learn more about [Plantit](https://github.com/MDeLuise/plant-it). API key can be created from the REST API. +Allowed fields: `["events", "plants", "photos", "species"]`. + ```yaml widget: type: plantit From 8157b03380a12f89496e9228d87c2eaa9cd7c846 Mon Sep 17 00:00:00 2001 From: Zerebos Date: Fri, 23 Feb 2024 09:02:11 -0500 Subject: [PATCH 005/100] Feature: stash widget (#2238) (#2984) --- docs/widgets/services/stash.md | 20 +++++++++++ mkdocs.yml | 1 + public/locales/en/common.json | 16 +++++++++ src/widgets/components.js | 1 + src/widgets/stash/component.jsx | 62 +++++++++++++++++++++++++++++++++ src/widgets/stash/widget.js | 40 +++++++++++++++++++++ src/widgets/widgets.js | 2 ++ 7 files changed, 142 insertions(+) create mode 100644 docs/widgets/services/stash.md create mode 100644 src/widgets/stash/component.jsx create mode 100644 src/widgets/stash/widget.js diff --git a/docs/widgets/services/stash.md b/docs/widgets/services/stash.md new file mode 100644 index 00000000..b2d3e0ef --- /dev/null +++ b/docs/widgets/services/stash.md @@ -0,0 +1,20 @@ +--- +title: Stash +description: Stash Widget Configuration +--- + +Learn more about [Stash](https://github.com/stashapp/stash). + +Find your API key from inside Stash at `Settings > Security > API Key`. Note that the API key is only required if your Stash instance has login credentials. + +Allowed fields: `["scenes", "scenesPlayed", "playCount", "playDuration", "sceneSize", "sceneDuration", "images", "imageSize", "galleries", "performers", "studios", "movies", "tags", "oCount"]`. + +If more than 4 fields are provided, only the first 4 are displayed. + +```yaml +widget: + type: stash + url: http://stash.host.or.ip + key: stashapikey + fields: ["scenes", "images"] # optional - default fields shown +``` diff --git a/mkdocs.yml b/mkdocs.yml index c6ecfda9..4c574e18 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -124,6 +124,7 @@ nav: - widgets/services/scrutiny.md - widgets/services/sonarr.md - widgets/services/speedtest-tracker.md + - widgets/services/stash.md - widgets/services/syncthing-relay-server.md - widgets/services/tailscale.md - widgets/services/tdarr.md diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 7d5097fb..f6c1b841 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -836,5 +836,21 @@ "notifications": "Notifications", "issues": "Issues", "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Movies", + "tags": "Tags", + "oCount": "O Count" } } diff --git a/src/widgets/components.js b/src/widgets/components.js index 9054c4d2..74d5fe1f 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -97,6 +97,7 @@ const components = { scrutiny: dynamic(() => import("./scrutiny/component")), sonarr: dynamic(() => import("./sonarr/component")), speedtest: dynamic(() => import("./speedtest/component")), + stash: dynamic(() => import("./stash/component")), strelaysrv: dynamic(() => import("./strelaysrv/component")), tailscale: dynamic(() => import("./tailscale/component")), tautulli: dynamic(() => import("./tautulli/component")), diff --git a/src/widgets/stash/component.jsx b/src/widgets/stash/component.jsx new file mode 100644 index 00000000..66f949c1 --- /dev/null +++ b/src/widgets/stash/component.jsx @@ -0,0 +1,62 @@ +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 default function Component({ service }) { + const { t } = useTranslation(); + + const { widget } = service; + const { data: stats, error: stashError } = useWidgetAPI(widget, "stats"); + + if (stashError) { + return ; + } + + if (!stats) { + return ( + + + + + ); + } + + // Provide a default if not set in the config + if (!widget.fields) { + widget.fields = ["scenes", "images"]; + } + + // Limit to a maximum of 4 at a time + if (widget.fields.length > 4) { + widget.fields = widget.fields.slice(0, 4); + } + + return ( + + + + + + + + + + + + + + + + + + + ); +} diff --git a/src/widgets/stash/widget.js b/src/widgets/stash/widget.js new file mode 100644 index 00000000..82803c72 --- /dev/null +++ b/src/widgets/stash/widget.js @@ -0,0 +1,40 @@ +import { asJson } from "utils/proxy/api-helpers"; +import genericProxyHandler from "utils/proxy/handlers/generic"; + +const widget = { + api: "{url}/{endpoint}?apikey={key}", + proxyHandler: genericProxyHandler, + + mappings: { + stats: { + method: "POST", + endpoint: "graphql", + headers: { + "content-type": "application/json", + }, + body: JSON.stringify({ + query: `{ + stats { + scene_count + scenes_size + scenes_duration + image_count + images_size + gallery_count + performer_count + studio_count + movie_count + tag_count + total_o_count + total_play_duration + total_play_count + scenes_played + } + }`, + }), + map: (data) => asJson(data).data.stats, + }, + }, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 5804253d..2eae4ba9 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -89,6 +89,7 @@ import sabnzbd from "./sabnzbd/widget"; import scrutiny from "./scrutiny/widget"; import sonarr from "./sonarr/widget"; import speedtest from "./speedtest/widget"; +import stash from "./stash/widget"; import strelaysrv from "./strelaysrv/widget"; import tailscale from "./tailscale/widget"; import tautulli from "./tautulli/widget"; @@ -201,6 +202,7 @@ const widgets = { scrutiny, sonarr, speedtest, + stash, strelaysrv, tailscale, tautulli, From 67d99a5512e11d45bc457fffd940b1835a9963c3 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 23 Feb 2024 17:04:38 -0800 Subject: [PATCH 006/100] Change: use byterate for Sabnzbd (#2990) --- src/widgets/sabnzbd/component.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/sabnzbd/component.jsx b/src/widgets/sabnzbd/component.jsx index d7fde734..260375a4 100644 --- a/src/widgets/sabnzbd/component.jsx +++ b/src/widgets/sabnzbd/component.jsx @@ -37,7 +37,7 @@ export default function Component({ service }) { return ( - + From 1893c9b8daacf06fa2822d428c885baac4e9c064 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 23 Feb 2024 20:16:11 -0800 Subject: [PATCH 007/100] Fix: Google search suggestions with accented characters (#2993) --- src/pages/api/search/searchSuggestion.js | 2 +- src/utils/proxy/cached-fetch.js | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/pages/api/search/searchSuggestion.js b/src/pages/api/search/searchSuggestion.js index c1c936c9..fa8eba0d 100644 --- a/src/pages/api/search/searchSuggestion.js +++ b/src/pages/api/search/searchSuggestion.js @@ -19,5 +19,5 @@ export default async function handler(req, res) { return res.json([query, []]); // Responde with the same array format but with no suggestions. } - return res.send(await cachedFetch(`${provider.suggestionUrl}${encodeURIComponent(query)}`, 5)); + return res.send(await cachedFetch(`${provider.suggestionUrl}${encodeURIComponent(query)}`, 5, "Mozilla/5.0")); } diff --git a/src/utils/proxy/cached-fetch.js b/src/utils/proxy/cached-fetch.js index 30b00f77..ae3c4610 100644 --- a/src/utils/proxy/cached-fetch.js +++ b/src/utils/proxy/cached-fetch.js @@ -2,7 +2,7 @@ import cache from "memory-cache"; const defaultDuration = 5; -export default async function cachedFetch(url, duration) { +export default async function cachedFetch(url, duration, ua) { const cached = cache.get(url); // eslint-disable-next-line no-param-reassign @@ -13,7 +13,13 @@ export default async function cachedFetch(url, duration) { } // wrapping text in JSON.parse to handle utf-8 issues - const data = JSON.parse(await fetch(url).then((res) => res.text())); + const options = {}; + if (ua) { + options.headers = { + "User-Agent": ua, + }; + } + const data = await fetch(url, options).then((res) => res.json()); cache.put(url, data, duration * 1000 * 60); return data; } From 5a19640c8307a59d31f27efa884bcbb2ed9afe8f Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 23 Feb 2024 21:22:24 -0800 Subject: [PATCH 008/100] Move to discussion-first issues --- .github/ISSUE_TEMPLATE/bug_report.yml | 33 +++++++++++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 2 +- CONTRIBUTING.md | 3 +-- 3 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..5998536b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,33 @@ +name: 🐛 Bug report +description: Please only raise an issue if you've been advised to do so in a GitHub discussion. Thanks! 🙏 +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + ## ⚠️ Please note + The starting point for a bug report should always be a [GitHub discussion](https://github.com/gethomepage/homepage/discussions/new?category=support) + Thank you for contributing to homepage! ✊ + - type: checkboxes + id: pre-flight + attributes: + label: Before submitting, please confirm the following + options: + - label: I confirm this was discussed, and the maintainers suggest I open an issue. + required: true + - label: I am aware that if I create this issue without a discussion, it will be removed without a response. + required: true + - type: input + id: discussion + attributes: + label: Discussion Link + description: | + Please link to the GitHub discussion that led to this issue. + validations: + required: true + - type: textarea + id: additional + attributes: + label: Additional context + description: Optional + render: Text diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index ce15fd04..22d29ff5 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -2,7 +2,7 @@ blank_issues_enabled: false contact_links: - name: 🤔 Questions and Help url: https://github.com/gethomepage/homepage/discussions - about: For support or general questions. + about: For support, possible bug reports or general questions. - name: 💬 Chat url: https://discord.gg/k4ruYNrudu about: Want to discuss homepage with others? Check out our chat. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f2361c43..7dfb6a6d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -18,7 +18,7 @@ In short, when you submit code changes, your submissions are understood to be un ## Report bugs using Github [discussions](https://github.com/gethomepage/homepage/discussions) -We use GitHub discussions to triage bugs. Report a bug by [opening a new discussion](https://github.com/gethomepage/homepage/discussions/new?category=support); it's that easy! +We use GitHub discussions to triage bugs. Report a bug by [opening a new discussion](https://github.com/gethomepage/homepage/discussions/new?category=support); it's that easy! Please do not open an issue unless instructed to do so by a project maintainer. ## Write bug reports with detail, background, and sample configurations @@ -56,7 +56,6 @@ This document was adapted from the open-source contribution guidelines for [Face The homepage team appreciates all effort and interest from the community in filing bug reports, creating feature requests, sharing ideas and helping other community members. That said, in an effort to keep the repository organized and managebale the project uses automatic handling of certain areas: -- Issues that cannot be reproduced will be marked 'stale' after 7 days of inactivity and closed after 14 further days of inactivity. - Issues, pull requests and discussions that are closed will be locked after 30 days of inactivity. - Discussions with a marked answer will be automatically closed. - Discussions in the 'General' or 'Support' categories will be closed after 180 days of inactivity. From 000d06aa04edbde62595c19fd8ca8399ed650d81 Mon Sep 17 00:00:00 2001 From: flightcode Date: Sat, 24 Feb 2024 14:33:30 +0000 Subject: [PATCH 009/100] Documentation: Fix link in Home Assistant service widget docs (#2994) --- docs/widgets/services/homeassistant.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/widgets/services/homeassistant.md b/docs/widgets/services/homeassistant.md index e4e1e5b4..fc98ed88 100644 --- a/docs/widgets/services/homeassistant.md +++ b/docs/widgets/services/homeassistant.md @@ -18,7 +18,7 @@ The `custom` property will have no effect as long as the `fields` property is de - state labels and values can be user defined and may reference entity attributes in curly brackets - if no state label is defined it will default to `"{attributes.friendly_name}"` - if no state value is defined it will default to `"{state} {attributes.unit_of_measurement}"` -- `template` will query the specified template, see (Home Assistant Templating)[https://www.home-assistant.io/docs/configuration/templating] +- `template` will query the specified template, see [Home Assistant Templating](https://www.home-assistant.io/docs/configuration/templating) - if no template label is defined it will be empty ```yaml From c5876f22fed5515eb7f7235e4b4968c0864c0a9e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 24 Feb 2024 15:30:03 -0800 Subject: [PATCH 010/100] Chore(deps): Bump systeminformation from 5.21.24 to 5.22.0 (#2999) Bumps [systeminformation](https://github.com/sebhildebrandt/systeminformation) from 5.21.24 to 5.22.0. - [Changelog](https://github.com/sebhildebrandt/systeminformation/blob/master/CHANGELOG.md) - [Commits](https://github.com/sebhildebrandt/systeminformation/compare/v5.21.24...v5.22.0) --- updated-dependencies: - dependency-name: systeminformation dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index c89b7099..4b422ce0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,7 @@ "recharts": "^2.11.0", "rrule": "^2.8.1", "swr": "^1.3.0", - "systeminformation": "^5.21.24", + "systeminformation": "^5.22.0", "tough-cookie": "^4.1.3", "urbackup-server-api": "^0.8.9", "winston": "^3.11.0", @@ -6494,9 +6494,9 @@ } }, "node_modules/systeminformation": { - "version": "5.21.24", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.21.24.tgz", - "integrity": "sha512-xQada8ByGGFoRXJaUptGgddn3i7IjtSdqNdCKzB8xkzsM7pHnfLYBWxkPdGzhZ0Z/l+W1yo+aZQZ74d2isj8kw==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.22.0.tgz", + "integrity": "sha512-oAP80ymt8ssrAzjX8k3frbL7ys6AotqC35oikG6/SG15wBw+tG9nCk4oPaXIhEaAOAZ8XngxUv3ORq2IuR3r4Q==", "os": [ "darwin", "linux", diff --git a/package.json b/package.json index 0b0bd4b9..4bb07498 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "recharts": "^2.11.0", "rrule": "^2.8.1", "swr": "^1.3.0", - "systeminformation": "^5.21.24", + "systeminformation": "^5.22.0", "tough-cookie": "^4.1.3", "urbackup-server-api": "^0.8.9", "winston": "^3.11.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 80842057..077425b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,8 +84,8 @@ dependencies: specifier: ^1.3.0 version: 1.3.0(react@18.2.0) systeminformation: - specifier: ^5.21.24 - version: 5.21.24 + specifier: ^5.22.0 + version: 5.22.0 tough-cookie: specifier: ^4.1.3 version: 4.1.3 @@ -4139,8 +4139,8 @@ packages: react: 18.2.0 dev: false - /systeminformation@5.21.24: - resolution: {integrity: sha512-xQada8ByGGFoRXJaUptGgddn3i7IjtSdqNdCKzB8xkzsM7pHnfLYBWxkPdGzhZ0Z/l+W1yo+aZQZ74d2isj8kw==} + /systeminformation@5.22.0: + resolution: {integrity: sha512-oAP80ymt8ssrAzjX8k3frbL7ys6AotqC35oikG6/SG15wBw+tG9nCk4oPaXIhEaAOAZ8XngxUv3ORq2IuR3r4Q==} engines: {node: '>=8.0.0'} os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] hasBin: true From b07221b8e9d06d9e4e7f8abc656ae46002fcedc6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 24 Feb 2024 15:30:40 -0800 Subject: [PATCH 011/100] Chore(deps-dev): Bump eslint from 8.56.0 to 8.57.0 (#3000) Bumps [eslint](https://github.com/eslint/eslint) from 8.56.0 to 8.57.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.56.0...v8.57.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 18 +++---- package.json | 2 +- pnpm-lock.yaml | 120 +++++++++++++++++++++++----------------------- 3 files changed, 70 insertions(+), 70 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4b422ce0..6fe29fda 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,7 +43,7 @@ "devDependencies": { "@tailwindcss/forms": "^0.5.7", "autoprefixer": "^10.4.17", - "eslint": "^8.56.0", + "eslint": "^8.57.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-next": "^12.3.4", "eslint-config-prettier": "^9.1.0", @@ -165,9 +165,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2376,16 +2376,16 @@ } }, "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", diff --git a/package.json b/package.json index 4bb07498..b528de12 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "devDependencies": { "@tailwindcss/forms": "^0.5.7", "autoprefixer": "^10.4.17", - "eslint": "^8.56.0", + "eslint": "^8.57.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-next": "^12.3.4", "eslint-config-prettier": "^9.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 077425b7..5676724e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -112,32 +112,32 @@ devDependencies: specifier: ^10.4.17 version: 10.4.17(postcss@8.4.33) eslint: - specifier: ^8.56.0 - version: 8.56.0 + specifier: ^8.57.0 + version: 8.57.0 eslint-config-airbnb: specifier: ^19.0.4 - version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint@8.56.0) + version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint@8.57.0) eslint-config-next: specifier: ^12.3.4 - version: 12.3.4(eslint@8.56.0)(typescript@4.9.5) + version: 12.3.4(eslint@8.57.0)(typescript@4.9.5) eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@8.56.0) + version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.56.0) + version: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: specifier: ^6.8.0 - version: 6.8.0(eslint@8.56.0) + version: 6.8.0(eslint@8.57.0) eslint-plugin-prettier: specifier: ^4.2.1 - version: 4.2.1(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4) + version: 4.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.4) eslint-plugin-react: specifier: ^7.33.2 - version: 7.33.2(eslint@8.56.0) + version: 7.33.2(eslint@8.57.0) eslint-plugin-react-hooks: specifier: ^4.6.0 - version: 4.6.0(eslint@8.56.0) + version: 4.6.0(eslint@8.57.0) postcss: specifier: ^8.4.33 version: 8.4.33 @@ -189,13 +189,13 @@ packages: kuler: 2.0.0 dev: false - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.56.0 + eslint: 8.57.0 eslint-visitor-keys: 3.4.3 dev: true @@ -221,8 +221,8 @@ packages: - supports-color dev: true - /@eslint/js@8.56.0: - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + /@eslint/js@8.57.0: + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -603,7 +603,7 @@ packages: resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} dev: false - /@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@4.9.5): + /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -617,7 +617,7 @@ packages: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) debug: 4.3.4 - eslint: 8.56.0 + eslint: 8.57.0 typescript: 4.9.5 transitivePeerDependencies: - supports-color @@ -1601,7 +1601,7 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.1)(eslint@8.56.0): + /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0): resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -1609,14 +1609,14 @@ packages: eslint-plugin-import: ^2.25.2 dependencies: confusing-browser-globals: 1.0.11 - eslint: 8.56.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.56.0) + eslint: 8.57.0 + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) object.assign: 4.1.5 object.entries: 1.1.7 semver: 6.3.1 dev: true - /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint@8.56.0): + /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint@8.57.0): resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==} engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1626,17 +1626,17 @@ packages: eslint-plugin-react: ^7.28.0 eslint-plugin-react-hooks: ^4.3.0 dependencies: - eslint: 8.56.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.56.0) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) - eslint-plugin-react: 7.33.2(eslint@8.56.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) + eslint: 8.57.0 + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) + eslint-plugin-react: 7.33.2(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) object.assign: 4.1.5 object.entries: 1.1.7 dev: true - /eslint-config-next@12.3.4(eslint@8.56.0)(typescript@4.9.5): + /eslint-config-next@12.3.4(eslint@8.57.0)(typescript@4.9.5): resolution: {integrity: sha512-WuT3gvgi7Bwz00AOmKGhOeqnyA5P29Cdyr0iVjLyfDbk+FANQKcOjFUTZIdyYfe5Tq1x4TGcmoe4CwctGvFjHQ==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -1647,27 +1647,27 @@ packages: dependencies: '@next/eslint-plugin-next': 12.3.4 '@rushstack/eslint-patch': 1.7.2 - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) - eslint: 8.56.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@4.9.5) + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.56.0) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) - eslint-plugin-react: 7.33.2(eslint@8.56.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) + eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) + eslint-plugin-react: 7.33.2(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) typescript: 4.9.5 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color dev: true - /eslint-config-prettier@9.1.0(eslint@8.56.0): + /eslint-config-prettier@9.1.0(eslint@8.57.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.56.0 + eslint: 8.57.0 dev: true /eslint-import-resolver-node@0.3.9: @@ -1680,7 +1680,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.29.1)(eslint@8.56.0): + /eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.29.1)(eslint@8.57.0): resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==} engines: {node: '>=4'} peerDependencies: @@ -1688,8 +1688,8 @@ packages: eslint-plugin-import: '*' dependencies: debug: 4.3.4 - eslint: 8.56.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.56.0) + eslint: 8.57.0 + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) glob: 7.2.3 is-glob: 4.0.3 resolve: 1.22.8 @@ -1698,7 +1698,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1)(eslint@8.56.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -1719,16 +1719,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@4.9.5) debug: 3.2.7 - eslint: 8.56.0 + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -1738,16 +1738,16 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@4.9.5) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.56.0 + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -1763,7 +1763,7 @@ packages: - supports-color dev: true - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0): + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} engines: {node: '>=4.0'} peerDependencies: @@ -1779,7 +1779,7 @@ packages: damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 es-iterator-helpers: 1.0.15 - eslint: 8.56.0 + eslint: 8.57.0 hasown: 2.0.0 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -1788,7 +1788,7 @@ packages: object.fromentries: 2.0.7 dev: true - /eslint-plugin-prettier@4.2.1(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4): + /eslint-plugin-prettier@4.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.4): resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1799,22 +1799,22 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.56.0 - eslint-config-prettier: 9.1.0(eslint@8.56.0) + eslint: 8.57.0 + eslint-config-prettier: 9.1.0(eslint@8.57.0) prettier: 3.2.4 prettier-linter-helpers: 1.0.0 dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): + /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.56.0 + eslint: 8.57.0 dev: true - /eslint-plugin-react@7.33.2(eslint@8.56.0): + /eslint-plugin-react@7.33.2(eslint@8.57.0): resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} peerDependencies: @@ -1825,7 +1825,7 @@ packages: array.prototype.tosorted: 1.1.2 doctrine: 2.1.0 es-iterator-helpers: 1.0.15 - eslint: 8.56.0 + eslint: 8.57.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 @@ -1852,15 +1852,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + /eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 + '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 From 708a67ad03c838a7d4ff12d8ffb0250569aea792 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 24 Feb 2024 15:30:56 -0800 Subject: [PATCH 012/100] Chore(deps-dev): Bump postcss from 8.4.33 to 8.4.35 (#3001) Bumps [postcss](https://github.com/postcss/postcss) from 8.4.33 to 8.4.35. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.33...8.4.35) --- updated-dependencies: - dependency-name: postcss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- pnpm-lock.yaml | 40 ++++++++++++++++++++-------------------- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6fe29fda..df7e580d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,7 +52,7 @@ "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", - "postcss": "^8.4.33", + "postcss": "^8.4.35", "prettier": "^3.2.4", "tailwind-scrollbar": "^3.0.5", "tailwindcss": "^3.4.1", @@ -5228,9 +5228,9 @@ } }, "node_modules/postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "dev": true, "funding": [ { diff --git a/package.json b/package.json index b528de12..a866440a 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", - "postcss": "^8.4.33", + "postcss": "^8.4.35", "prettier": "^3.2.4", "tailwind-scrollbar": "^3.0.5", "tailwindcss": "^3.4.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5676724e..05738b1a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -110,7 +110,7 @@ devDependencies: version: 0.5.7(tailwindcss@3.4.1) autoprefixer: specifier: ^10.4.17 - version: 10.4.17(postcss@8.4.33) + version: 10.4.17(postcss@8.4.35) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -139,8 +139,8 @@ devDependencies: specifier: ^4.6.0 version: 4.6.0(eslint@8.57.0) postcss: - specifier: ^8.4.33 - version: 8.4.33 + specifier: ^8.4.35 + version: 8.4.35 prettier: specifier: ^3.2.4 version: 3.2.4 @@ -849,7 +849,7 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false - /autoprefixer@10.4.17(postcss@8.4.33): + /autoprefixer@10.4.17(postcss@8.4.35): resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} engines: {node: ^10 || ^12 || >=14} hasBin: true @@ -861,7 +861,7 @@ packages: fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.33 + postcss: 8.4.35 postcss-value-parser: 4.2.0 dev: true @@ -3361,29 +3361,29 @@ packages: engines: {node: '>= 6'} dev: true - /postcss-import@15.1.0(postcss@8.4.33): + /postcss-import@15.1.0(postcss@8.4.35): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.33 + postcss: 8.4.35 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 dev: true - /postcss-js@4.0.1(postcss@8.4.33): + /postcss-js@4.0.1(postcss@8.4.35): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.33 + postcss: 8.4.35 dev: true - /postcss-load-config@4.0.2(postcss@8.4.33): + /postcss-load-config@4.0.2(postcss@8.4.35): resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} peerDependencies: @@ -3396,17 +3396,17 @@ packages: optional: true dependencies: lilconfig: 3.0.0 - postcss: 8.4.33 + postcss: 8.4.35 yaml: 2.3.4 dev: true - /postcss-nested@6.0.1(postcss@8.4.33): + /postcss-nested@6.0.1(postcss@8.4.35): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.33 + postcss: 8.4.35 postcss-selector-parser: 6.0.15 dev: true @@ -3431,8 +3431,8 @@ packages: source-map-js: 1.0.2 dev: false - /postcss@8.4.33: - resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} + /postcss@8.4.35: + resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 @@ -4174,11 +4174,11 @@ packages: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.33 - postcss-import: 15.1.0(postcss@8.4.33) - postcss-js: 4.0.1(postcss@8.4.33) - postcss-load-config: 4.0.2(postcss@8.4.33) - postcss-nested: 6.0.1(postcss@8.4.33) + postcss: 8.4.35 + postcss-import: 15.1.0(postcss@8.4.35) + postcss-js: 4.0.1(postcss@8.4.35) + postcss-load-config: 4.0.2(postcss@8.4.35) + postcss-nested: 6.0.1(postcss@8.4.35) postcss-selector-parser: 6.0.15 resolve: 1.22.8 sucrase: 3.35.0 From da57b2779a1cfe3143bc79a1993d564519c06bc9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 24 Feb 2024 15:31:40 -0800 Subject: [PATCH 013/100] Chore(deps): Bump recharts from 2.11.0 to 2.12.1 (#3002) Bumps [recharts](https://github.com/recharts/recharts) from 2.11.0 to 2.12.1. - [Release notes](https://github.com/recharts/recharts/releases) - [Changelog](https://github.com/recharts/recharts/blob/3.x/CHANGELOG.md) - [Commits](https://github.com/recharts/recharts/compare/v2.11...v2.12.1) --- updated-dependencies: - dependency-name: recharts dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 59 ++++++++++++++++++++++------------------------- package.json | 2 +- pnpm-lock.yaml | 44 +++++++++++++++-------------------- 3 files changed, 47 insertions(+), 58 deletions(-) diff --git a/package-lock.json b/package-lock.json index df7e580d..1401704b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "react-dom": "^18.2.0", "react-i18next": "^11.18.6", "react-icons": "^4.12.0", - "recharts": "^2.11.0", + "recharts": "^2.12.1", "rrule": "^2.8.1", "swr": "^1.3.0", "systeminformation": "^5.22.0", @@ -2130,11 +2130,12 @@ } }, "node_modules/dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", "dependencies": { - "@babel/runtime": "^7.1.2" + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" } }, "node_modules/dom-serializer": { @@ -5539,38 +5540,33 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, "node_modules/react-smooth": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.5.tgz", - "integrity": "sha512-BMP2Ad42tD60h0JW6BFaib+RJuV5dsXJK9Baxiv/HlNFjvRLqA9xrNKxVWnUIZPQfzUwGXIlU/dSYLU+54YGQA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.0.tgz", + "integrity": "sha512-2NMXOBY1uVUQx1jBeENGA497HK20y6CPGYL1ZnJLeoQ8rrc3UfmOM82sRxtzpcoCkUMy4CS0RGylfuVhuFjBgg==", "dependencies": { - "fast-equals": "^5.0.0", - "react-transition-group": "2.9.0" + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" }, "peerDependencies": { - "prop-types": "^15.6.0", - "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", "dependencies": { - "dom-helpers": "^3.4.0", + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" + "prop-types": "^15.6.2" }, "peerDependencies": { - "react": ">=15.0.0", - "react-dom": ">=15.0.0" + "react": ">=16.6.0", + "react-dom": ">=16.6.0" } }, "node_modules/read-cache": { @@ -5608,15 +5604,15 @@ } }, "node_modules/recharts": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.11.0.tgz", - "integrity": "sha512-5s+u1m5Hwxb2nh0LABkE3TS/lFqFHyWl7FnPbQhHobbQQia4ih1t3o3+ikPYr31Ns+kYe4FASIthKeKi/YYvMg==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.1.tgz", + "integrity": "sha512-35vUCEBPf+pM+iVgSgVTn86faKya5pc4JO6cYJL63qOK2zDEyzDn20Tdj+CDI/3z+VcpKyQ8ZBQ9OiQ+vuAbjg==", "dependencies": { "clsx": "^2.0.0", "eventemitter3": "^4.0.1", - "lodash": "^4.17.19", + "lodash": "^4.17.21", "react-is": "^16.10.2", - "react-smooth": "^2.0.5", + "react-smooth": "^4.0.0", "recharts-scale": "^0.4.4", "tiny-invariant": "^1.3.1", "victory-vendor": "^36.6.8" @@ -5625,7 +5621,6 @@ "node": ">=14" }, "peerDependencies": { - "prop-types": "^15.6.0", "react": "^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" } diff --git a/package.json b/package.json index a866440a..b9499853 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "react-dom": "^18.2.0", "react-i18next": "^11.18.6", "react-icons": "^4.12.0", - "recharts": "^2.11.0", + "recharts": "^2.12.1", "rrule": "^2.8.1", "swr": "^1.3.0", "systeminformation": "^5.22.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 05738b1a..4c1837a8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -75,8 +75,8 @@ dependencies: specifier: ^4.12.0 version: 4.12.0(react@18.2.0) recharts: - specifier: ^2.11.0 - version: 2.11.0(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) + specifier: ^2.12.1 + version: 2.12.1(react-dom@18.2.0)(react@18.2.0) rrule: specifier: ^2.8.1 version: 2.8.1 @@ -1432,10 +1432,11 @@ packages: esutils: 2.0.3 dev: true - /dom-helpers@3.4.0: - resolution: {integrity: sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==} + /dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: '@babel/runtime': 7.23.9 + csstype: 3.1.3 dev: false /dom-serializer@2.0.0: @@ -3558,36 +3559,31 @@ packages: /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - /react-lifecycles-compat@3.0.4: - resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} - dev: false - - /react-smooth@2.0.5(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-BMP2Ad42tD60h0JW6BFaib+RJuV5dsXJK9Baxiv/HlNFjvRLqA9xrNKxVWnUIZPQfzUwGXIlU/dSYLU+54YGQA==} + /react-smooth@4.0.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-2NMXOBY1uVUQx1jBeENGA497HK20y6CPGYL1ZnJLeoQ8rrc3UfmOM82sRxtzpcoCkUMy4CS0RGylfuVhuFjBgg==} peerDependencies: - prop-types: ^15.6.0 - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: fast-equals: 5.0.1 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-transition-group: 2.9.0(react-dom@18.2.0)(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) dev: false - /react-transition-group@2.9.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==} + /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: - react: '>=15.0.0' - react-dom: '>=15.0.0' + react: '>=16.6.0' + react-dom: '>=16.6.0' dependencies: - dom-helpers: 3.4.0 + '@babel/runtime': 7.23.9 + dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-lifecycles-compat: 3.0.4 dev: false /react@18.2.0: @@ -3646,22 +3642,20 @@ packages: decimal.js-light: 2.5.1 dev: false - /recharts@2.11.0(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-5s+u1m5Hwxb2nh0LABkE3TS/lFqFHyWl7FnPbQhHobbQQia4ih1t3o3+ikPYr31Ns+kYe4FASIthKeKi/YYvMg==} + /recharts@2.12.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-35vUCEBPf+pM+iVgSgVTn86faKya5pc4JO6cYJL63qOK2zDEyzDn20Tdj+CDI/3z+VcpKyQ8ZBQ9OiQ+vuAbjg==} engines: {node: '>=14'} peerDependencies: - prop-types: ^15.6.0 react: ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: clsx: 2.1.0 eventemitter3: 4.0.7 lodash: 4.17.21 - prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-is: 16.13.1 - react-smooth: 2.0.5(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) + react-smooth: 4.0.0(react-dom@18.2.0)(react@18.2.0) recharts-scale: 0.4.5 tiny-invariant: 1.3.1 victory-vendor: 36.8.4 From abce57379d22518ddb2e1bb2007029251e48af6c Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 27 Feb 2024 00:32:05 -0800 Subject: [PATCH 014/100] Documentation: fix repository typo (#3013) --- .github/workflows/repo-maintenance.yml | 12 ++++++------ CONTRIBUTING.md | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/repo-maintenance.yml b/.github/workflows/repo-maintenance.yml index d1f7e4fd..7cf47c51 100644 --- a/.github/workflows/repo-maintenance.yml +++ b/.github/workflows/repo-maintenance.yml @@ -42,17 +42,17 @@ jobs: This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new discussion for related concerns. - See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-respoistory-maintenance) for more details. + See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-repository-maintenance) for more details. pr-comment: > This pull request has been automatically locked since there has not been any recent activity after it was closed. Please open a new discussion for related concerns. - See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-respoistory-maintenance) for more details. + See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-repository-maintenance) for more details. discussion-comment: > This discussion has been automatically locked since there has not been any recent activity after it was closed. Please open a new discussion for related concerns. - See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-respoistory-maintenance) for more details. + See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-repository-maintenance) for more details. close-answered-discussions: name: 'Close Answered Discussions' runs-on: ubuntu-latest @@ -92,7 +92,7 @@ jobs: }`; const commentVariables = { discussion: discussion.id, - body: 'This discussion has been automatically closed because it was marked as answered. See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-respoistory-maintenance) for more details.', + body: 'This discussion has been automatically closed because it was marked as answered. See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-repository-maintenance) for more details.', } await github.graphql(addCommentMutation, commentVariables) @@ -182,7 +182,7 @@ jobs: }`; const commentVariables = { discussion: discussion.id, - body: 'This discussion has been automatically closed due to inactivity. See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-respoistory-maintenance) for more details.', + body: 'This discussion has been automatically closed due to inactivity. See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-repository-maintenance) for more details.', } await github.graphql(addCommentMutation, commentVariables); @@ -260,7 +260,7 @@ jobs: }`; const commentVariables = { discussion: discussion.id, - body: 'This discussion has been automatically closed due to lack of community support. See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-respoistory-maintenance) for more details.', + body: 'This discussion has been automatically closed due to lack of community support. See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-repository-maintenance) for more details.', } await github.graphql(addCommentMutation, commentVariables); diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7dfb6a6d..48f2818d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -52,7 +52,7 @@ By contributing, you agree that your contributions will be licensed under its GN This document was adapted from the open-source contribution guidelines for [Facebook's Draft](https://github.com/facebook/draft-js/blob/main/CONTRIBUTING.md) -# Automatic Respoistory Maintenance +# Automatic Respository Maintenance The homepage team appreciates all effort and interest from the community in filing bug reports, creating feature requests, sharing ideas and helping other community members. That said, in an effort to keep the repository organized and managebale the project uses automatic handling of certain areas: From 68e4b98ddbb27e61cb132c2ba304752ee3be2928 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 28 Feb 2024 01:46:06 -0800 Subject: [PATCH 015/100] Fix: support cyrillic characters in quicklaunch (#3020) --- src/pages/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 39ac6cf2..b5aac8a9 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -225,7 +225,7 @@ function Home({ initialSettings }) { if (e.target.tagName === "BODY" || e.target.id === "inner_wrapper") { if ( (e.key.length === 1 && - e.key.match(/(\w|\s|[à-ü]|[À-Ü])/g) && + e.key.match(/(\w|\s|[à-ü]|[À-Ü]|[\w\u0430-\u044f])/gi) && !(e.altKey || e.ctrlKey || e.metaKey || e.shiftKey)) || e.key.match(/([à-ü]|[À-Ü])/g) || // accented characters may require modifier keys (e.key === "v" && (e.ctrlKey || e.metaKey)) From e92ccc30ba87adc21a1db3f6f9bf8f99c93142d4 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 28 Feb 2024 11:44:32 -0800 Subject: [PATCH 016/100] Fix: only log errors directly if exist --- src/pages/api/config/[path].js | 2 +- src/pages/api/docker/stats/[...service].js | 2 +- src/pages/api/docker/status/[...service].js | 2 +- src/pages/api/kubernetes/stats/[...service].js | 2 +- src/pages/api/kubernetes/status/[...service].js | 2 +- src/pages/api/services/proxy.js | 4 ++-- src/pages/api/widgets/kubernetes.js | 2 +- src/pages/index.jsx | 2 +- src/utils/config/service-helpers.js | 2 +- src/utils/proxy/http.js | 4 ++-- src/widgets/audiobookshelf/proxy.js | 2 +- src/widgets/gamedig/proxy.js | 2 +- src/widgets/minecraft/proxy.js | 2 +- src/widgets/pyload/proxy.js | 2 +- 14 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/pages/api/config/[path].js b/src/pages/api/config/[path].js index 7f3b6a07..6cb04698 100644 --- a/src/pages/api/config/[path].js +++ b/src/pages/api/config/[path].js @@ -28,7 +28,7 @@ export default async function handler(req, res) { res.setHeader("Content-Type", mimeType); return res.status(200).send(fileContent); } catch (error) { - logger.error(error); + if (error) logger.error(error); return res.status(500).end("Internal Server Error"); } } diff --git a/src/pages/api/docker/stats/[...service].js b/src/pages/api/docker/stats/[...service].js index 715e5188..e92bad7c 100644 --- a/src/pages/api/docker/stats/[...service].js +++ b/src/pages/api/docker/stats/[...service].js @@ -80,7 +80,7 @@ export default async function handler(req, res) { error: "not found", }); } catch (e) { - logger.error(e); + if (e) logger.error(e); return res.status(500).send({ error: { message: e?.message ?? "Unknown error" }, }); diff --git a/src/pages/api/docker/status/[...service].js b/src/pages/api/docker/status/[...service].js index 96c6bea6..f9dc640b 100644 --- a/src/pages/api/docker/status/[...service].js +++ b/src/pages/api/docker/status/[...service].js @@ -108,7 +108,7 @@ export default async function handler(req, res) { status: "not found", }); } catch (e) { - logger.error(e); + if (e) logger.error(e); return res.status(500).send({ error: { message: e?.message ?? "Unknown error" }, }); diff --git a/src/pages/api/kubernetes/stats/[...service].js b/src/pages/api/kubernetes/stats/[...service].js index 90a67bec..b1bf8345 100644 --- a/src/pages/api/kubernetes/stats/[...service].js +++ b/src/pages/api/kubernetes/stats/[...service].js @@ -106,7 +106,7 @@ export default async function handler(req, res) { stats, }); } catch (e) { - logger.error(e); + if (e) logger.error(e); res.status(500).send({ error: "unknown error", }); diff --git a/src/pages/api/kubernetes/status/[...service].js b/src/pages/api/kubernetes/status/[...service].js index 1ca19126..f771d69d 100644 --- a/src/pages/api/kubernetes/status/[...service].js +++ b/src/pages/api/kubernetes/status/[...service].js @@ -59,7 +59,7 @@ export default async function handler(req, res) { status, }); } catch (e) { - logger.error(e); + if (e) logger.error(e); res.status(500).send({ error: "unknown error", }); diff --git a/src/pages/api/services/proxy.js b/src/pages/api/services/proxy.js index 80856419..be4a96a6 100644 --- a/src/pages/api/services/proxy.js +++ b/src/pages/api/services/proxy.js @@ -71,8 +71,8 @@ export default async function handler(req, res) { logger.debug("Unknown proxy service type: %s", type); return res.status(403).json({ error: "Unkown proxy service type" }); - } catch (ex) { - logger.error(ex); + } catch (e) { + if (e) logger.error(e); return res.status(500).send({ error: "Unexpected error" }); } } diff --git a/src/pages/api/widgets/kubernetes.js b/src/pages/api/widgets/kubernetes.js index b55b02d7..0859212f 100644 --- a/src/pages/api/widgets/kubernetes.js +++ b/src/pages/api/widgets/kubernetes.js @@ -94,7 +94,7 @@ export default async function handler(req, res) { nodes: Object.entries(nodeMap).map(([name, node]) => ({ name, ...node })), }); } catch (e) { - logger.error("exception %s", e); + if (e) logger.error(e); return res.status(500).send({ error: "unknown error", }); diff --git a/src/pages/index.jsx b/src/pages/index.jsx index b5aac8a9..b62f9ab2 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -65,7 +65,7 @@ export async function getStaticProps() { }, }; } catch (e) { - if (logger) { + if (logger && e) { logger.error(e); } return { diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index 9f997915..77c9a673 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -325,7 +325,7 @@ export async function servicesFromKubernetes() { return mappedServiceGroups; } catch (e) { - logger.error(e); + if (e) logger.error(e); throw e; } } diff --git a/src/utils/proxy/http.js b/src/utils/proxy/http.js index 1755dd93..ff34ce0d 100644 --- a/src/utils/proxy/http.js +++ b/src/utils/proxy/http.js @@ -44,7 +44,7 @@ function handleRequest(requestor, url, params) { // zlib errors responseContent.on("error", (e) => { - logger.error(e); + if (e) logger.error(e); responseContent = response; // fallback }); response.pipe(responseContent); @@ -112,7 +112,7 @@ export async function httpProxy(url, params = {}) { constructedUrl.port ? `:${constructedUrl.port}` : "", constructedUrl.pathname, ); - logger.error(err); + if (err) logger.error(err); return [500, "application/json", { error: { message: err?.message ?? "Unknown error", url, rawError: err } }, null]; } } diff --git a/src/widgets/audiobookshelf/proxy.js b/src/widgets/audiobookshelf/proxy.js index c4dba5cd..9701c1fe 100644 --- a/src/widgets/audiobookshelf/proxy.js +++ b/src/widgets/audiobookshelf/proxy.js @@ -63,7 +63,7 @@ export default async function audiobookshelfProxyHandler(req, res) { return res.status(200).send(libraryStats); } catch (e) { - logger.error(e.message); + if (e) logger.error(e); return res.status(500).send({ error: { message: e.message } }); } } diff --git a/src/widgets/gamedig/proxy.js b/src/widgets/gamedig/proxy.js index 0029834c..8a7e55c5 100644 --- a/src/widgets/gamedig/proxy.js +++ b/src/widgets/gamedig/proxy.js @@ -28,7 +28,7 @@ export default async function gamedigProxyHandler(req, res) { ping: serverData.ping, }); } catch (e) { - logger.error(e); + if (e) logger.error(e); res.status(200).send({ online: false, diff --git a/src/widgets/minecraft/proxy.js b/src/widgets/minecraft/proxy.js index 7aeedfb9..f7bac9d4 100644 --- a/src/widgets/minecraft/proxy.js +++ b/src/widgets/minecraft/proxy.js @@ -18,7 +18,7 @@ export default async function minecraftProxyHandler(req, res) { players: pingResponse.players, }); } catch (e) { - logger.error(e); + if (e) logger.error(e); res.status(200).send({ version: undefined, online: false, diff --git a/src/widgets/pyload/proxy.js b/src/widgets/pyload/proxy.js index 802a67c6..4d7cd116 100644 --- a/src/widgets/pyload/proxy.js +++ b/src/widgets/pyload/proxy.js @@ -103,7 +103,7 @@ export default async function pyloadProxyHandler(req, res) { } } } catch (e) { - logger.error(e); + if (e) logger.error(e); return res.status(500).send({ error: { message: `Error communicating with Pyload API: ${e.toString()}` } }); } From f0910a9e8b43e2bb007f4adb140584327d30afef Mon Sep 17 00:00:00 2001 From: russkinz <68681047+russkinz@users.noreply.github.com> Date: Thu, 29 Feb 2024 09:32:27 +1300 Subject: [PATCH 017/100] Documentation: fix openwrt docs (#3016) --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/openwrt.md | 38 ++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/docs/widgets/services/openwrt.md b/docs/widgets/services/openwrt.md index c1c3ee94..3759d2b0 100644 --- a/docs/widgets/services/openwrt.md +++ b/docs/widgets/services/openwrt.md @@ -26,29 +26,35 @@ In order for homepage to access the OpenWRT RPC endpoints you will need to [crea Create an ACL named `homepage.json` in `/usr/share/rpcd/acl.d/`, the following permissions will suffice: -``` +```json { - "homepage": { - "description": "Homepage widget", - "read": { - "ubus": { - "network.interface.wan": ["status"], - "network.interface.lan": ["status"], - "network.device": ["status"] - "system": ["info"] - } - }, - } + "homepage": { + "description": "Homepage widget", + "read": { + "ubus": { + "network.interface.wan": ["status"], + "network.interface.lan": ["status"], + "network.device": ["status"], + "system": ["info"] + } + } + } } ``` -Then add a user that will use that ACL in `/etc/config/rpc`: +Create a `crypt(5)` password hash using the following command in the OpenWRT shell: -```config login +```sh +uhttpd -m "" +``` + +Then add a user that will use the ACL and hashed password in `/etc/config/rpcd`: + +``` +config login option username 'homepage' - option password '' + option password '' list read homepage - list write '*' ``` This username and password will be used in Homepage's services.yaml to grant access. From 5892d7407c7c300ee857db44d9ef657d769c86cc Mon Sep 17 00:00:00 2001 From: RoboMagus <68224306+RoboMagus@users.noreply.github.com> Date: Thu, 29 Feb 2024 16:34:26 +0100 Subject: [PATCH 018/100] Fix: docker status labels colors (#3028) --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- src/components/services/status.jsx | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/components/services/status.jsx b/src/components/services/status.jsx index e0f74210..606570d2 100644 --- a/src/components/services/status.jsx +++ b/src/components/services/status.jsx @@ -16,24 +16,25 @@ export default function Status({ service, style }) { colorClass = "text-rose-500/80"; } else if (data) { if (data.status?.includes("running")) { - if (data.health === "starting") { - statusTitle = t("docker.starting"); - colorClass = "text-blue-500/80"; - } - - if (data.health === "unhealthy") { - statusTitle = t("docker.unhealthy"); - colorClass = "text-orange-400/50 dark:text-orange-400/80"; - } + colorClass = "text-emerald-500/80"; if (!data.health) { statusLabel = data.status.replace("running", t("docker.running")); } else { statusLabel = data.health === "healthy" ? t("docker.healthy") : data.health; + + if (data.health === "starting") { + statusLabel = t("docker.starting"); + colorClass = "text-blue-500/80"; + } + + if (data.health === "unhealthy") { + statusLabel = t("docker.unhealthy"); + colorClass = "text-orange-400/50 dark:text-orange-400/80"; + } } statusTitle = statusLabel; - colorClass = "text-emerald-500/80"; } if (data.status === "not found" || data.status === "exited" || data.status?.startsWith("partial")) { @@ -41,6 +42,7 @@ export default function Status({ service, style }) { else if (data.status === "exited") statusLabel = t("docker.exited"); else statusLabel = data.status.replace("partial", t("docker.partial")); colorClass = "text-orange-400/50 dark:text-orange-400/80"; + statusTitle = statusLabel; } } @@ -52,7 +54,9 @@ export default function Status({ service, style }) { return (
{style !== "dot" ? ( From 70f0eb3af64c35a00ef1de21cd90ad4e6517006c Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 29 Feb 2024 07:40:09 -0800 Subject: [PATCH 019/100] Minor status refactoring --- src/components/services/item.jsx | 1 - src/components/services/status.jsx | 9 ++------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/components/services/item.jsx b/src/components/services/item.jsx index 480e58d5..a38dfaa3 100644 --- a/src/components/services/item.jsx +++ b/src/components/services/item.jsx @@ -36,7 +36,6 @@ export default function Item({ service, group, useEqualHeights }) {
{style !== "dot" ? (
{statusLabel}
From fc1bf53f8fbe94cf52211043c96da0a3693dcf6c Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 29 Feb 2024 23:42:33 -0800 Subject: [PATCH 020/100] Fix: info widget gaps (#3038) --- src/components/widgets/widget/container.jsx | 4 ++-- src/pages/index.jsx | 18 +++++++----------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/components/widgets/widget/container.jsx b/src/components/widgets/widget/container.jsx index 442aa084..c9240dd3 100644 --- a/src/components/widgets/widget/container.jsx +++ b/src/components/widgets/widget/container.jsx @@ -16,7 +16,7 @@ export function getAllClasses(options, additionalClassNames = "") { } return classNames( - "flex flex-col justify-center ml-2 mr-2", + "flex flex-col justify-center", "mt-2 m:mb-0 rounded-md shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 dark:bg-white/5 p-2 pl-3 pr-3", additionalClassNames, ); @@ -24,7 +24,7 @@ export function getAllClasses(options, additionalClassNames = "") { let widgetAlignedClasses = "flex flex-col max-w:full sm:basis-auto self-center grow-0 flex-wrap"; if (options?.style?.isRightAligned) { - widgetAlignedClasses = "flex flex-col justify-center first:ml-auto ml-2 mr-2 "; + widgetAlignedClasses = "flex flex-col justify-center"; } return classNames(widgetAlignedClasses, additionalClassNames); diff --git a/src/pages/index.jsx b/src/pages/index.jsx index b62f9ab2..10b2f6d5 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -161,10 +161,10 @@ function Index({ initialSettings, fallback }) { const headerStyles = { boxed: - "m-6 mb-0 sm:m-9 sm:mb-0 rounded-md shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 dark:bg-white/5 p-3", - underlined: "m-6 mb-0 sm:m-9 sm:mb-1 border-b-2 pb-4 border-theme-800 dark:border-theme-200/50", - clean: "m-6 mb-0 sm:m-9 sm:mb-0", - boxedWidgets: "m-6 mb-0 sm:m-9 sm:mb-0 sm:mt-1", + "m-5 mb-0 sm:m-9 sm:mb-0 rounded-md shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 dark:bg-white/5 p-3", + underlined: "m-5 mb-0 sm:m-9 sm:mb-1 border-b-2 pb-4 border-theme-800 dark:border-theme-200/50", + clean: "m-5 mb-0 sm:m-9 sm:mb-0", + boxedWidgets: "m-5 mb-0 sm:m-9 sm:mb-0 sm:mt-1", }; function Home({ initialSettings }) { @@ -282,7 +282,7 @@ function Home({ initialSettings }) { return ( <> {tabs.length > 0 && ( -
+
    -
    +
    {widgets && ( <> {widgets @@ -436,7 +432,7 @@ function Home({ initialSettings }) { id="information-widgets-right" className={classNames( "m-auto flex flex-wrap grow sm:basis-auto justify-between md:justify-end", - headerStyle === "boxedWidgets" ? "sm:ml-4" : "sm:ml-2", + "m-auto flex flex-wrap grow sm:basis-auto justify-between md:justify-end gap-x-2", )} > {widgets From bb311ce1a062fcd52034a09c3ecc71945c6397a5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Mar 2024 09:02:02 -0800 Subject: [PATCH 021/100] Chore(deps-dev): Bump prettier from 3.2.4 to 3.2.5 (#3042) Bumps [prettier](https://github.com/prettier/prettier) from 3.2.4 to 3.2.5. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.2.4...3.2.5) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- pnpm-lock.yaml | 14 +++++++------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1401704b..cfcbe64a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,7 +53,7 @@ "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", "postcss": "^8.4.35", - "prettier": "^3.2.4", + "prettier": "^3.2.5", "tailwind-scrollbar": "^3.0.5", "tailwindcss": "^3.4.1", "typescript": "^4.9.5" @@ -5340,9 +5340,9 @@ } }, "node_modules/prettier": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", - "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" diff --git a/package.json b/package.json index b9499853..8b59fb8c 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", "postcss": "^8.4.35", - "prettier": "^3.2.4", + "prettier": "^3.2.5", "tailwind-scrollbar": "^3.0.5", "tailwindcss": "^3.4.1", "typescript": "^4.9.5" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4c1837a8..57126312 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -131,7 +131,7 @@ devDependencies: version: 6.8.0(eslint@8.57.0) eslint-plugin-prettier: specifier: ^4.2.1 - version: 4.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.4) + version: 4.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) eslint-plugin-react: specifier: ^7.33.2 version: 7.33.2(eslint@8.57.0) @@ -142,8 +142,8 @@ devDependencies: specifier: ^8.4.35 version: 8.4.35 prettier: - specifier: ^3.2.4 - version: 3.2.4 + specifier: ^3.2.5 + version: 3.2.5 tailwind-scrollbar: specifier: ^3.0.5 version: 3.0.5(tailwindcss@3.4.1) @@ -1789,7 +1789,7 @@ packages: object.fromentries: 2.0.7 dev: true - /eslint-plugin-prettier@4.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.4): + /eslint-plugin-prettier@4.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1802,7 +1802,7 @@ packages: dependencies: eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) - prettier: 3.2.4 + prettier: 3.2.5 prettier-linter-helpers: 1.0.0 dev: true @@ -3453,8 +3453,8 @@ packages: fast-diff: 1.3.0 dev: true - /prettier@3.2.4: - resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} + /prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} hasBin: true dev: true From 89fe81968102509fcaeeec2e1a6e53493ef3ea0e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Mar 2024 09:02:34 -0800 Subject: [PATCH 022/100] Chore(deps): Bump recharts from 2.12.1 to 2.12.2 (#3043) Bumps [recharts](https://github.com/recharts/recharts) from 2.12.1 to 2.12.2. - [Release notes](https://github.com/recharts/recharts/releases) - [Changelog](https://github.com/recharts/recharts/blob/3.x/CHANGELOG.md) - [Commits](https://github.com/recharts/recharts/compare/v2.12.1...v2.12.2) --- updated-dependencies: - dependency-name: recharts dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index cfcbe64a..49e57222 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "react-dom": "^18.2.0", "react-i18next": "^11.18.6", "react-icons": "^4.12.0", - "recharts": "^2.12.1", + "recharts": "^2.12.2", "rrule": "^2.8.1", "swr": "^1.3.0", "systeminformation": "^5.22.0", @@ -5604,9 +5604,9 @@ } }, "node_modules/recharts": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.1.tgz", - "integrity": "sha512-35vUCEBPf+pM+iVgSgVTn86faKya5pc4JO6cYJL63qOK2zDEyzDn20Tdj+CDI/3z+VcpKyQ8ZBQ9OiQ+vuAbjg==", + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.2.tgz", + "integrity": "sha512-9bpxjXSF5g81YsKkTSlaX7mM4b6oYI1mIYck6YkUcWuL3tomADccI51/6thY4LmvhYuRTwpfrOvE80Zc3oBRfQ==", "dependencies": { "clsx": "^2.0.0", "eventemitter3": "^4.0.1", diff --git a/package.json b/package.json index 8b59fb8c..35d388a5 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "react-dom": "^18.2.0", "react-i18next": "^11.18.6", "react-icons": "^4.12.0", - "recharts": "^2.12.1", + "recharts": "^2.12.2", "rrule": "^2.8.1", "swr": "^1.3.0", "systeminformation": "^5.22.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 57126312..08a5004a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -75,8 +75,8 @@ dependencies: specifier: ^4.12.0 version: 4.12.0(react@18.2.0) recharts: - specifier: ^2.12.1 - version: 2.12.1(react-dom@18.2.0)(react@18.2.0) + specifier: ^2.12.2 + version: 2.12.2(react-dom@18.2.0)(react@18.2.0) rrule: specifier: ^2.8.1 version: 2.8.1 @@ -3642,8 +3642,8 @@ packages: decimal.js-light: 2.5.1 dev: false - /recharts@2.12.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-35vUCEBPf+pM+iVgSgVTn86faKya5pc4JO6cYJL63qOK2zDEyzDn20Tdj+CDI/3z+VcpKyQ8ZBQ9OiQ+vuAbjg==} + /recharts@2.12.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-9bpxjXSF5g81YsKkTSlaX7mM4b6oYI1mIYck6YkUcWuL3tomADccI51/6thY4LmvhYuRTwpfrOvE80Zc3oBRfQ==} engines: {node: '>=14'} peerDependencies: react: ^16.0.0 || ^17.0.0 || ^18.0.0 From 4d68f55dfa15725be671676bc667e57b816688a0 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 1 Mar 2024 11:30:07 -0800 Subject: [PATCH 023/100] Fix: omada widget missing switches field, enforce default and max fields (#3047) --- src/widgets/omada/component.jsx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/widgets/omada/component.jsx b/src/widgets/omada/component.jsx index d0565e43..c4da6067 100644 --- a/src/widgets/omada/component.jsx +++ b/src/widgets/omada/component.jsx @@ -17,12 +17,20 @@ export default function Component({ service }) { return ; } + if (!widget.fields) { + widget.fields = ["connectedAp", "activeUser", "alerts", "connectedGateway"]; + } else if (widget.fields?.length > 4) { + widget.fields = widget.fields.slice(0, 4); + } + if (!omadaData) { return ( + + ); } @@ -32,9 +40,8 @@ export default function Component({ service }) { - {omadaData.connectedGateways > 0 && ( - - )} + + ); } From 8e9920a9d8c0ccace568e4767260a510ae9e843d Mon Sep 17 00:00:00 2001 From: RoboMagus <68224306+RoboMagus@users.noreply.github.com> Date: Sun, 3 Mar 2024 17:57:52 +0100 Subject: [PATCH 024/100] Feature: ESPHome widget (#2986) Co-Authored-By: RoboMagus <68224306+RoboMagus@users.noreply.github.com> Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/esphome.md | 16 ++++++++++++ mkdocs.yml | 1 + public/locales/en/common.json | 6 +++++ src/widgets/components.js | 1 + src/widgets/esphome/component.jsx | 41 +++++++++++++++++++++++++++++++ src/widgets/esphome/widget.js | 8 ++++++ src/widgets/widgets.js | 2 ++ 7 files changed, 75 insertions(+) create mode 100644 docs/widgets/services/esphome.md create mode 100644 src/widgets/esphome/component.jsx create mode 100644 src/widgets/esphome/widget.js diff --git a/docs/widgets/services/esphome.md b/docs/widgets/services/esphome.md new file mode 100644 index 00000000..6038cb61 --- /dev/null +++ b/docs/widgets/services/esphome.md @@ -0,0 +1,16 @@ +--- +title: ESPHome +description: ESPHome Widget Configuration +--- + +Learn more about [ESPHome](https://esphome.io/). + +Show the number of ESPHome devices based on their state. + +Allowed fields: `["total", "online", "offline", "unknown"]`. + +```yaml +widget: + type: esphome + url: http://esphome.host.or.ip:port +``` diff --git a/mkdocs.yml b/mkdocs.yml index 4c574e18..b7f8ec6a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -49,6 +49,7 @@ nav: - widgets/services/diskstation.md - widgets/services/downloadstation.md - widgets/services/emby.md + - widgets/services/esphome.md - widgets/services/evcc.md - widgets/services/fileflows.md - widgets/services/flood.md diff --git a/public/locales/en/common.json b/public/locales/en/common.json index f6c1b841..b040e1fd 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -107,6 +107,12 @@ "episodes": "Episodes", "songs": "Songs" }, + "esphome": { + "offline": "Offline", + "online": "Online", + "total": "Total", + "unknown": "Unknown" + }, "evcc": { "pv_power": "Production", "battery_soc": "Battery", diff --git a/src/widgets/components.js b/src/widgets/components.js index 74d5fe1f..8b9c277d 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -23,6 +23,7 @@ const components = { docker: dynamic(() => import("./docker/component")), kubernetes: dynamic(() => import("./kubernetes/component")), emby: dynamic(() => import("./emby/component")), + esphome: dynamic(() => import("./esphome/component")), evcc: dynamic(() => import("./evcc/component")), fileflows: dynamic(() => import("./fileflows/component")), flood: dynamic(() => import("./flood/component")), diff --git a/src/widgets/esphome/component.jsx b/src/widgets/esphome/component.jsx new file mode 100644 index 00000000..c44352fa --- /dev/null +++ b/src/widgets/esphome/component.jsx @@ -0,0 +1,41 @@ +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"; + +export default function Component({ service }) { + const { t } = useTranslation(); + + const { widget } = service; + const { data: resultData, error: resultError } = useWidgetAPI(widget); + + if (resultError) { + return ; + } + + if (!resultData) { + return ( + + + + + + + ); + } + + const total = Object.keys(resultData).length; + const online = Object.entries(resultData).filter(([, v]) => v === true).length; + const offline = Object.entries(resultData).filter(([, v]) => v === false).length; + const unknown = Object.entries(resultData).filter(([, v]) => v === null).length; + + return ( + + + + + + + ); +} diff --git a/src/widgets/esphome/widget.js b/src/widgets/esphome/widget.js new file mode 100644 index 00000000..c5a87b68 --- /dev/null +++ b/src/widgets/esphome/widget.js @@ -0,0 +1,8 @@ +import genericProxyHandler from "utils/proxy/handlers/generic"; + +const widget = { + api: "{url}/ping", + proxyHandler: genericProxyHandler, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 2eae4ba9..11cc8af9 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -17,6 +17,7 @@ import deluge from "./deluge/widget"; import diskstation from "./diskstation/widget"; import downloadstation from "./downloadstation/widget"; import emby from "./emby/widget"; +import esphome from "./esphome/widget"; import evcc from "./evcc/widget"; import fileflows from "./fileflows/widget"; import flood from "./flood/widget"; @@ -127,6 +128,7 @@ const widgets = { diskstation, downloadstation, emby, + esphome, evcc, fileflows, flood, From b05b9b14200009237f091279192f9050d678009b Mon Sep 17 00:00:00 2001 From: teffalump <90264+teffalump@users.noreply.github.com> Date: Sun, 3 Mar 2024 15:27:40 -0800 Subject: [PATCH 025/100] Feature: Add tandoor widget (#3060) --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/tandoor.md | 15 +++++++++++ public/locales/en/common.json | 5 ++++ src/utils/proxy/handlers/credentialed.js | 4 ++- src/widgets/components.js | 1 + src/widgets/tandoor/component.jsx | 32 ++++++++++++++++++++++++ src/widgets/tandoor/widget.js | 17 +++++++++++++ src/widgets/widgets.js | 2 ++ 7 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 docs/widgets/services/tandoor.md create mode 100644 src/widgets/tandoor/component.jsx create mode 100644 src/widgets/tandoor/widget.js diff --git a/docs/widgets/services/tandoor.md b/docs/widgets/services/tandoor.md new file mode 100644 index 00000000..134bc8fd --- /dev/null +++ b/docs/widgets/services/tandoor.md @@ -0,0 +1,15 @@ +--- +title: Tandoor +description: Tandoor Widget Configuration +--- + +Generate a user API key under `Settings > API > Generate`. For the token's scope, use `read`. + +Allowed fields: `["users", "recipes", "keywords"]`. + +```yaml +widget: + type: tandoor + url: http://tandoor-frontend.host.or.ip + key: tandoor-api-token +``` diff --git a/public/locales/en/common.json b/public/locales/en/common.json index b040e1fd..00279dec 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -858,5 +858,10 @@ "movies": "Movies", "tags": "Tags", "oCount": "O Count" + }, + "tandoor": { + "users": "Users", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/src/utils/proxy/handlers/credentialed.js b/src/utils/proxy/handlers/credentialed.js index 02338b82..de2111b1 100644 --- a/src/utils/proxy/handlers/credentialed.js +++ b/src/utils/proxy/handlers/credentialed.js @@ -29,7 +29,9 @@ export default async function credentialedProxyHandler(req, res, map) { } else if (widget.type === "gotify") { headers["X-gotify-Key"] = `${widget.key}`; } else if ( - ["authentik", "cloudflared", "ghostfolio", "mealie", "tailscale", "pterodactyl"].includes(widget.type) + ["authentik", "cloudflared", "ghostfolio", "mealie", "tailscale", "tandoor", "pterodactyl"].includes( + widget.type, + ) ) { headers.Authorization = `Bearer ${widget.key}`; } else if (widget.type === "truenas") { diff --git a/src/widgets/components.js b/src/widgets/components.js index 8b9c277d..06502982 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -101,6 +101,7 @@ const components = { stash: dynamic(() => import("./stash/component")), strelaysrv: dynamic(() => import("./strelaysrv/component")), tailscale: dynamic(() => import("./tailscale/component")), + tandoor: dynamic(() => import("./tandoor/component")), tautulli: dynamic(() => import("./tautulli/component")), tdarr: dynamic(() => import("./tdarr/component")), traefik: dynamic(() => import("./traefik/component")), diff --git a/src/widgets/tandoor/component.jsx b/src/widgets/tandoor/component.jsx new file mode 100644 index 00000000..40d2b88e --- /dev/null +++ b/src/widgets/tandoor/component.jsx @@ -0,0 +1,32 @@ +import Container from "components/services/widget/container"; +import Block from "components/services/widget/block"; +import useWidgetAPI from "utils/proxy/use-widget-api"; + +export default function Component({ service }) { + const { widget } = service; + + const { data: spaceData, error: spaceError } = useWidgetAPI(widget, "space"); + const { data: keywordData, error: keywordError } = useWidgetAPI(widget, "keyword"); + + if (spaceError || keywordError) { + const finalError = spaceError ?? keywordError; + return ; + } + + if (!spaceData || !keywordData) { + return ( + + + + + + ); + } + return ( + + + + + + ); +} diff --git a/src/widgets/tandoor/widget.js b/src/widgets/tandoor/widget.js new file mode 100644 index 00000000..90eaa6d3 --- /dev/null +++ b/src/widgets/tandoor/widget.js @@ -0,0 +1,17 @@ +import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; + +const widget = { + api: "{url}/api/{endpoint}/", + proxyHandler: credentialedProxyHandler, + + mappings: { + space: { + endpoint: "space", + }, + keyword: { + endpoint: "keyword", + }, + }, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 11cc8af9..477f4ca9 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -93,6 +93,7 @@ import speedtest from "./speedtest/widget"; import stash from "./stash/widget"; import strelaysrv from "./strelaysrv/widget"; import tailscale from "./tailscale/widget"; +import tandoor from "./tandoor/widget"; import tautulli from "./tautulli/widget"; import tdarr from "./tdarr/widget"; import traefik from "./traefik/widget"; @@ -207,6 +208,7 @@ const widgets = { stash, strelaysrv, tailscale, + tandoor, tautulli, tdarr, traefik, From 9caede1cc39e551c4897e759bedc1f7b9a8b4755 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 4 Mar 2024 11:09:36 -0800 Subject: [PATCH 026/100] Change: default merge pihole blocked fields (#3065) --- docs/widgets/services/pihole.md | 4 +++- src/widgets/pihole/component.jsx | 11 ++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/widgets/services/pihole.md b/docs/widgets/services/pihole.md index a12f57a8..8079d1b1 100644 --- a/docs/widgets/services/pihole.md +++ b/docs/widgets/services/pihole.md @@ -9,6 +9,8 @@ As of v2022.12 [PiHole requires the use of an API key](https://pi-hole.net/blog/ Allowed fields: `["queries", "blocked", "blocked_percent", "gravity"]`. +Note: by default the "blocked" and "blocked_percent" fields are merged e.g. "1,234 (15%)" but explicitly including the "blocked_percent" field will change them to display separately. + ```yaml widget: type: pihole @@ -16,4 +18,4 @@ widget: key: yourpiholeapikey # optional ``` -_Added in v0.1.0, updated in v0.6.18_ +_Added in v0.1.0, updated in v0.8.9_ diff --git a/src/widgets/pihole/component.jsx b/src/widgets/pihole/component.jsx index c9b03610..a36071a1 100644 --- a/src/widgets/pihole/component.jsx +++ b/src/widgets/pihole/component.jsx @@ -15,6 +15,10 @@ export default function Component({ service }) { return ; } + if (!widget.fields) { + widget.fields = ["queries", "blocked", "gravity"]; + } + if (!piholeData) { return ( @@ -26,10 +30,15 @@ export default function Component({ service }) { ); } + let blockedValue = `${t("common.number", { value: parseInt(piholeData.ads_blocked_today, 10) })}`; + if (!widget.fields.includes("blocked_percent")) { + blockedValue += ` (${t("common.percent", { value: parseFloat(piholeData.ads_percentage_today.toPrecision(3)) })})`; + } + return ( - + Date: Wed, 6 Mar 2024 08:51:53 +0000 Subject: [PATCH 027/100] Enhancement: support `LOG_TARGETS` environment variable (#3075) --- docs/configs/settings.md | 2 + src/utils/logger.js | 121 +++++++++++++++++++++++---------------- 2 files changed, 73 insertions(+), 50 deletions(-) diff --git a/docs/configs/settings.md b/docs/configs/settings.md index 9ee86a85..a4480571 100644 --- a/docs/configs/settings.md +++ b/docs/configs/settings.md @@ -406,6 +406,8 @@ By default the homepage logfile is written to the a `logs` subdirectory of the ` logpath: /logfile/path ``` +By default, logs are sent both to `stdout` and to a file at the path specified. This can be changed by setting the `LOG_TARGETS` environment variable to one of `both` (default), `stdout` or `file`. + ## Show Docker Stats You can show all docker stats expanded in `settings.yaml`: diff --git a/src/utils/logger.js b/src/utils/logger.js index cbf84b3b..a3a6ee87 100644 --- a/src/utils/logger.js +++ b/src/utils/logger.js @@ -3,68 +3,89 @@ import { format as utilFormat } from "node:util"; import winston from "winston"; -import checkAndCopyConfig, { getSettings, CONF_DIR } from "utils/config/config"; +import checkAndCopyConfig, { CONF_DIR, getSettings } from "utils/config/config"; let winstonLogger; -function init() { - checkAndCopyConfig("settings.yaml"); +function combineMessageAndSplat() { + return { + // eslint-disable-next-line no-unused-vars + transform: (info, opts) => { + // combine message and args if any + // eslint-disable-next-line no-param-reassign + info.message = utilFormat(info.message, ...(info[Symbol.for("splat")] || [])); + return info; + }, + }; +} + +function messageFormatter(logInfo) { + if (logInfo.label) { + if (logInfo.stack) { + return `[${logInfo.timestamp}] ${logInfo.level}: <${logInfo.label}> ${logInfo.stack}`; + } + return `[${logInfo.timestamp}] ${logInfo.level}: <${logInfo.label}> ${logInfo.message}`; + } + + if (logInfo.stack) { + return `[${logInfo.timestamp}] ${logInfo.level}: ${logInfo.stack}`; + } + return `[${logInfo.timestamp}] ${logInfo.level}: ${logInfo.message}`; +} + +function getConsoleLogger() { + return new winston.transports.Console({ + format: winston.format.combine( + winston.format.errors({ stack: true }), + combineMessageAndSplat(), + winston.format.timestamp(), + winston.format.colorize(), + winston.format.printf(messageFormatter), + ), + handleExceptions: true, + handleRejections: true, + }); +} + +function getFileLogger() { const settings = getSettings(); const logpath = settings.logpath || CONF_DIR; - function combineMessageAndSplat() { - return { - // eslint-disable-next-line no-unused-vars - transform: (info, opts) => { - // combine message and args if any - // eslint-disable-next-line no-param-reassign - info.message = utilFormat(info.message, ...(info[Symbol.for("splat")] || [])); - return info; - }, - }; - } + return new winston.transports.File({ + format: winston.format.combine( + winston.format.errors({ stack: true }), + combineMessageAndSplat(), + winston.format.timestamp(), + winston.format.printf(messageFormatter), + ), + filename: `${logpath}/logs/homepage.log`, + handleExceptions: true, + handleRejections: true, + }); +} - function messageFormatter(logInfo) { - if (logInfo.label) { - if (logInfo.stack) { - return `[${logInfo.timestamp}] ${logInfo.level}: <${logInfo.label}> ${logInfo.stack}`; - } - return `[${logInfo.timestamp}] ${logInfo.level}: <${logInfo.label}> ${logInfo.message}`; - } +function init() { + checkAndCopyConfig("settings.yaml"); + const configuredTargets = process.env.LOG_TARGETS || "both"; + const loggingTransports = []; - if (logInfo.stack) { - return `[${logInfo.timestamp}] ${logInfo.level}: ${logInfo.stack}`; - } - return `[${logInfo.timestamp}] ${logInfo.level}: ${logInfo.message}`; + switch (configuredTargets) { + case "both": + loggingTransports.push(getConsoleLogger(), getFileLogger()); + break; + case "stdout": + loggingTransports.push(getConsoleLogger()); + break; + case "file": + loggingTransports.push(getFileLogger()); + break; + default: + loggingTransports.push(getConsoleLogger(), getFileLogger()); } winstonLogger = winston.createLogger({ level: process.env.LOG_LEVEL || "info", - transports: [ - new winston.transports.Console({ - format: winston.format.combine( - winston.format.errors({ stack: true }), - combineMessageAndSplat(), - winston.format.timestamp(), - winston.format.colorize(), - winston.format.printf(messageFormatter), - ), - handleExceptions: true, - handleRejections: true, - }), - - new winston.transports.File({ - format: winston.format.combine( - winston.format.errors({ stack: true }), - combineMessageAndSplat(), - winston.format.timestamp(), - winston.format.printf(messageFormatter), - ), - filename: `${logpath}/logs/homepage.log`, - handleExceptions: true, - handleRejections: true, - }), - ], + transports: loggingTransports, }); // patch the console log mechanism to use our logger From a660b4209599174aa2bf21a6f72e68558c5ad4ed Mon Sep 17 00:00:00 2001 From: sgrtye <55668018+sgrtye@users.noreply.github.com> Date: Thu, 7 Mar 2024 15:20:44 +0000 Subject: [PATCH 028/100] Fix: truncate long process names in glances widget (#3079) --- src/widgets/glances/metrics/process.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/glances/metrics/process.jsx b/src/widgets/glances/metrics/process.jsx index cd21356d..0b2e8e4b 100644 --- a/src/widgets/glances/metrics/process.jsx +++ b/src/widgets/glances/metrics/process.jsx @@ -62,7 +62,7 @@ export default function Component({ service }) {
    {statusMap[item.status]}
    -
    {item.name}
    +
    {item.name}
    {item.cpu_percent.toFixed(1)}%
    {t("common.bytes", { From 83d1ea5ec49a7473c6e564778f157f9fcefd8db1 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 8 Mar 2024 15:32:18 -0800 Subject: [PATCH 029/100] Update bug_report.yml --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 5998536b..08eebdf9 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -13,7 +13,7 @@ body: attributes: label: Before submitting, please confirm the following options: - - label: I confirm this was discussed, and the maintainers suggest I open an issue. + - label: I confirm this was discussed, and the maintainers suggest I open an issue (note that AI bots are not maintainers). required: true - label: I am aware that if I create this issue without a discussion, it will be removed without a response. required: true From b5258c5200f3ef7f57646e08264fb4c9510abd00 Mon Sep 17 00:00:00 2001 From: Ben Phelps Date: Sun, 10 Mar 2024 08:52:57 +0200 Subject: [PATCH 030/100] Enhancement: Add formatting options to weather widgets (#3093) --- docs/widgets/info/openmeteo.md | 2 ++ docs/widgets/info/openweathermap.md | 2 ++ docs/widgets/info/weather.md | 2 ++ src/components/widgets/openmeteo/openmeteo.jsx | 1 + src/components/widgets/openweathermap/weather.jsx | 2 +- src/components/widgets/weather/weather.jsx | 1 + 6 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/widgets/info/openmeteo.md b/docs/widgets/info/openmeteo.md index 4cc49e26..fb5bb171 100644 --- a/docs/widgets/info/openmeteo.md +++ b/docs/widgets/info/openmeteo.md @@ -13,6 +13,8 @@ No registration is required at all! See [https://open-meteo.com/en/docs](https:/ timezone: Europe/Kiev # optional units: metric # or imperial cache: 5 # Time in minutes to cache API responses, to stay within limits + format: # optional, Intl.NumberFormat options + maximumFractionDigits: 1 ``` You can optionally not pass a `latitude` and `longitude` and the widget will use your current location (requires a secure context, eg. HTTPS). diff --git a/docs/widgets/info/openweathermap.md b/docs/widgets/info/openweathermap.md index 04733f5d..320d5d85 100644 --- a/docs/widgets/info/openweathermap.md +++ b/docs/widgets/info/openweathermap.md @@ -14,6 +14,8 @@ The free tier "One Call API" is all that's required, you will need to [subscribe provider: openweathermap apiKey: youropenweathermapkey # required only if not using provider, this reveals api key in requests cache: 5 # Time in minutes to cache API responses, to stay within limits + format: # optional, Intl.NumberFormat options + maximumFractionDigits: 1 ``` You can optionally not pass a `latitude` and `longitude` and the widget will use your current location (requires a secure context, eg. HTTPS). diff --git a/docs/widgets/info/weather.md b/docs/widgets/info/weather.md index 6357f0c0..ab13b673 100644 --- a/docs/widgets/info/weather.md +++ b/docs/widgets/info/weather.md @@ -15,6 +15,8 @@ The free tier is all that's required, you will need to [register](https://www.we units: metric # or imperial apiKey: yourweatherapikey cache: 5 # Time in minutes to cache API responses, to stay within limits + format: # optional, Intl.NumberFormat options + maximumFractionDigits: 1 ``` You can optionally not pass a `latitude` and `longitude` and the widget will use your current location (requires a secure context, eg. HTTPS). diff --git a/src/components/widgets/openmeteo/openmeteo.jsx b/src/components/widgets/openmeteo/openmeteo.jsx index 8baddfa5..4c47fc4a 100644 --- a/src/components/widgets/openmeteo/openmeteo.jsx +++ b/src/components/widgets/openmeteo/openmeteo.jsx @@ -46,6 +46,7 @@ function Widget({ options }) { value: data.current_weather.temperature, style: "unit", unit, + ...options.format, })} {t(`wmo.${data.current_weather.weathercode}-${timeOfDay}`)} diff --git a/src/components/widgets/openweathermap/weather.jsx b/src/components/widgets/openweathermap/weather.jsx index 7b442990..df0280e3 100644 --- a/src/components/widgets/openweathermap/weather.jsx +++ b/src/components/widgets/openweathermap/weather.jsx @@ -42,7 +42,7 @@ function Widget({ options }) { {options.label && `${options.label}, `} - {t("common.number", { value: data.main.temp, style: "unit", unit })} + {t("common.number", { value: data.main.temp, style: "unit", unit, ...options.format })} {data.weather[0].description} diff --git a/src/components/widgets/weather/weather.jsx b/src/components/widgets/weather/weather.jsx index 08074ee5..4ebb08c5 100644 --- a/src/components/widgets/weather/weather.jsx +++ b/src/components/widgets/weather/weather.jsx @@ -45,6 +45,7 @@ function Widget({ options }) { value: options.units === "metric" ? data.current.temp_c : data.current.temp_f, style: "unit", unit, + ...options.format, })} {data.current.condition.text} From 2d5f93668ab12d87fdcdbee1be9806d7da41564c Mon Sep 17 00:00:00 2001 From: Christian DeLuca <32560733+cadeluca@users.noreply.github.com> Date: Sun, 10 Mar 2024 16:24:13 -0400 Subject: [PATCH 031/100] Feature: Add Homebox widget (#3095) --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/homebox.md | 23 +++++++ mkdocs.yml | 1 + public/locales/en/common.json | 8 +++ src/widgets/components.js | 1 + src/widgets/homebox/component.jsx | 58 +++++++++++++++++ src/widgets/homebox/proxy.js | 103 ++++++++++++++++++++++++++++++ src/widgets/homebox/widget.js | 7 ++ src/widgets/widgets.js | 2 + 8 files changed, 203 insertions(+) create mode 100644 docs/widgets/services/homebox.md create mode 100644 src/widgets/homebox/component.jsx create mode 100644 src/widgets/homebox/proxy.js create mode 100644 src/widgets/homebox/widget.js diff --git a/docs/widgets/services/homebox.md b/docs/widgets/services/homebox.md new file mode 100644 index 00000000..af9ebad5 --- /dev/null +++ b/docs/widgets/services/homebox.md @@ -0,0 +1,23 @@ +--- +title: Homebox +description: Homebox Widget Configuration +--- + +Learn more about [Homebox](https://github.com/hay-kot/homebox). + +Uses the same username and password used to login from the web. + +The `totalValue` field will attempt to format using the currency you have configured in Homebox. + +Allowed fields: `["items", "totalWithWarranty", "locations", "labels", "users", "totalValue"]`. + +If more than 4 fields are provided, only the first 4 are displayed. + +```yaml +widget: + type: homebox + url: http://homebox.host.or.ip:port + username: username + password: password + fields: ["items", "locations", "totalValue"] # optional - default fields shown +``` diff --git a/mkdocs.yml b/mkdocs.yml index b7f8ec6a..a0994fad 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -66,6 +66,7 @@ nav: - widgets/services/hdhomerun.md - widgets/services/healthchecks.md - widgets/services/homeassistant.md + - widgets/services/homebox.md - widgets/services/homebridge.md - widgets/services/iframe.md - widgets/services/immich.md diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 00279dec..9f4c4b13 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -863,5 +863,13 @@ "users": "Users", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Users", + "totalValue": "Total Value" } } diff --git a/src/widgets/components.js b/src/widgets/components.js index 06502982..f3d567bb 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -40,6 +40,7 @@ const components = { hdhomerun: dynamic(() => import("./hdhomerun/component")), peanut: dynamic(() => import("./peanut/component")), homeassistant: dynamic(() => import("./homeassistant/component")), + homebox: dynamic(() => import("./homebox/component")), homebridge: dynamic(() => import("./homebridge/component")), healthchecks: dynamic(() => import("./healthchecks/component")), immich: dynamic(() => import("./immich/component")), diff --git a/src/widgets/homebox/component.jsx b/src/widgets/homebox/component.jsx new file mode 100644 index 00000000..18ea520e --- /dev/null +++ b/src/widgets/homebox/component.jsx @@ -0,0 +1,58 @@ +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 homeboxDefaultFields = ["items", "locations", "totalValue"]; + +export default function Component({ service }) { + const { t } = useTranslation(); + const { widget } = service; + const { data: homeboxData, error: homeboxError } = useWidgetAPI(widget); + + if (homeboxError) { + return ; + } + + // Default fields + if (!widget.fields?.length > 0) { + widget.fields = homeboxDefaultFields; + } + const MAX_ALLOWED_FIELDS = 4; + // Limits max number of displayed fields + if (widget.fields?.length > MAX_ALLOWED_FIELDS) { + widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS); + } + + if (!homeboxData) { + return ( + + + + + + + + + ); + } + + return ( + + + + + + + + + ); +} diff --git a/src/widgets/homebox/proxy.js b/src/widgets/homebox/proxy.js new file mode 100644 index 00000000..0d6fdf13 --- /dev/null +++ b/src/widgets/homebox/proxy.js @@ -0,0 +1,103 @@ +import cache from "memory-cache"; + +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; +import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; + +const proxyName = "homeboxProxyHandler"; +const sessionTokenCacheKey = `${proxyName}__sessionToken`; +const logger = createLogger(proxyName); + +async function login(widget, service) { + logger.debug("Homebox is rejecting the request, logging in."); + + const loginUrl = new URL(`${widget.url}/api/v1/users/login`).toString(); + const loginBody = `username=${encodeURIComponent(widget.username)}&password=${encodeURIComponent(widget.password)}`; + const loginParams = { + method: "POST", + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + body: loginBody, + }; + + const [, , data] = await httpProxy(loginUrl, loginParams); + + try { + const { token, expiresAt } = JSON.parse(data.toString()); + const expiresAtDate = new Date(expiresAt).getTime(); + cache.put(`${sessionTokenCacheKey}.${service}`, token, expiresAtDate - Date.now()); + return { token }; + } catch (e) { + logger.error("Unable to login to Homebox API: %s", e); + } + + return { token: false }; +} + +async function apiCall(widget, endpoint, service) { + const key = `${sessionTokenCacheKey}.${service}`; + const url = new URL(formatApiCall("{url}/api/v1/{endpoint}", { endpoint, ...widget })); + const headers = { + "Content-Type": "application/json", + Authorization: `${cache.get(key)}`, + }; + const params = { method: "GET", headers }; + + let [status, contentType, data, responseHeaders] = await httpProxy(url, params); + + if (status === 401 || status === 403) { + logger.debug("Homebox API rejected the request, attempting to obtain new access token"); + const { token } = await login(widget, service); + headers.Authorization = `${token}`; + + // retry request with new token + [status, contentType, data, responseHeaders] = await httpProxy(url, params); + + if (status !== 200) { + logger.error("HTTP %d logging in to Homebox, data: %s", status, data); + return { status, contentType, data: null, responseHeaders }; + } + } + + if (status !== 200) { + logger.error("HTTP %d getting data from Homebox, data: %s", status, data); + return { status, contentType, data: null, responseHeaders }; + } + + return { status, contentType, data: JSON.parse(data.toString()), responseHeaders }; +} + +export default async function homeboxProxyHandler(req, res) { + const { group, service } = req.query; + + if (!group || !service) { + logger.debug("Invalid or missing service '%s' or group '%s'", service, group); + return res.status(400).json({ error: "Invalid proxy service type" }); + } + + const widget = await getServiceWidget(group, service); + if (!widget) { + logger.debug("Invalid or missing widget for service '%s' in group '%s'", service, group); + return res.status(400).json({ error: "Invalid proxy service type" }); + } + + if (!cache.get(`${sessionTokenCacheKey}.${service}`)) { + await login(widget, service); + } + + // Get stats for the main blocks + const { data: groupStats } = await apiCall(widget, "groups/statistics", service); + + // Get group info for currency + const { data: groupData } = await apiCall(widget, "groups", service); + + return res.status(200).send({ + items: groupStats?.totalItems, + locations: groupStats?.totalLocations, + labels: groupStats?.totalLabels, + totalWithWarranty: groupStats?.totalWithWarranty, + totalValue: groupStats?.totalItemPrice, + users: groupStats?.totalUsers, + currencyCode: groupData?.currency, + }); +} diff --git a/src/widgets/homebox/widget.js b/src/widgets/homebox/widget.js new file mode 100644 index 00000000..37b06a4f --- /dev/null +++ b/src/widgets/homebox/widget.js @@ -0,0 +1,7 @@ +import homeboxProxyHandler from "./proxy"; + +const widget = { + proxyHandler: homeboxProxyHandler, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 477f4ca9..a9cae230 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -33,6 +33,7 @@ import gotify from "./gotify/widget"; import grafana from "./grafana/widget"; import hdhomerun from "./hdhomerun/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"; @@ -145,6 +146,7 @@ const widgets = { grafana, hdhomerun, homeassistant, + homebox, homebridge, healthchecks, ical: calendar, From c89c4884b60ff2e492675aa03297ef5810e31886 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 10 Mar 2024 14:20:36 -0700 Subject: [PATCH 032/100] New Crowdin translations by GitHub Action (#2708) Co-authored-by: Crowdin Bot --- public/locales/af/common.json | 72 +- public/locales/ar/common.json | 72 +- public/locales/bg/common.json | 64 +- public/locales/ca/common.json | 64 +- public/locales/cs/common.json | 124 +++- public/locales/da/common.json | 88 ++- public/locales/de/common.json | 69 +- public/locales/el/common.json | 64 +- public/locales/eo/common.json | 64 +- public/locales/es/common.json | 64 +- public/locales/eu/common.json | 64 +- public/locales/fi/common.json | 64 +- public/locales/fr/common.json | 100 ++- public/locales/he/common.json | 64 +- public/locales/hi/common.json | 64 +- public/locales/hr/common.json | 294 ++++---- public/locales/hu/common.json | 200 ++++-- public/locales/id/common.json | 1002 +++++++++++++++------------- public/locales/it/common.json | 84 ++- public/locales/ja/common.json | 120 +++- public/locales/ko/common.json | 64 +- public/locales/lv/common.json | 64 +- public/locales/ms/common.json | 428 +++++++----- public/locales/nl/common.json | 64 +- public/locales/no/common.json | 64 +- public/locales/pl/common.json | 90 ++- public/locales/pt/common.json | 64 +- public/locales/pt_BR/common.json | 64 +- public/locales/ro/common.json | 64 +- public/locales/ru/common.json | 100 ++- public/locales/sk/common.json | 78 ++- public/locales/sl/common.json | 68 +- public/locales/sr/common.json | 64 +- public/locales/sv/common.json | 68 +- public/locales/te/common.json | 64 +- public/locales/th/common.json | 64 +- public/locales/tr/common.json | 64 +- public/locales/uk/common.json | 64 +- public/locales/vi/common.json | 64 +- public/locales/yue/common.json | 76 ++- public/locales/zh-Hans/common.json | 120 +++- public/locales/zh-Hant/common.json | 88 ++- 42 files changed, 3631 insertions(+), 1118 deletions(-) diff --git a/public/locales/af/common.json b/public/locales/af/common.json index 102f24c4..9145dec2 100644 --- a/public/locales/af/common.json +++ b/public/locales/af/common.json @@ -107,6 +107,12 @@ "episodes": "Episodes", "songs": "Liedjies" }, + "esphome": { + "offline": "Vanlyn", + "online": "Aanlyn", + "total": "Totaal", + "unknown": "Onbekend" + }, "evcc": { "pv_power": "Produksie", "battery_soc": "Battery", @@ -419,7 +425,8 @@ "search": "Soek", "custom": "Pasgemaak", "visit": "Besoek", - "url": "URL" + "url": "URL", + "searchsuggestion": "Voorstelling" }, "wmo": { "0-day": "Sonnig", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Kanale", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Kanaal", + "channelNetwork": "Netwerk", + "signalStrength": "Sterkte", + "signalQuality": "Kwaliteit", + "symbolQuality": "Kwaliteit", + "networkRate": "Bistempo", + "clientIP": "Kliënt" }, "scrutiny": { "passed": "Geslaag", @@ -694,6 +709,11 @@ "targets_down": "Teikens Af", "targets_total": "Totale Teikens" }, + "gatus": { + "up": "Werwe Op", + "down": "Werwe Af", + "uptime": "Optyd" + }, "ghostfolio": { "gross_percent_today": "Vandag", "gross_percent_1y": "Een jaar", @@ -775,6 +795,14 @@ "passed": "Geslaag", "failed": "Misluk" }, + "openwrt": { + "uptime": "Optyd", + "cpuLoad": "SVE-lading gemiddelde (5m)", + "up": "Op", + "down": "Af", + "bytesTx": "Oorgedra", + "bytesRx": "Ontvang" + }, "uptimerobot": { "status": "Status", "uptime": "Optyd", @@ -797,11 +825,43 @@ "noEventsFound": "Geen gebeure gevind nie" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "Platform", + "totalRoms": "Totale ROMs" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "Waarskuwings", + "criticals": "Kritici" + }, + "plantit": { + "events": "Gebeure", + "plants": "Plante", + "photos": "Foto's", + "species": "Spesies" + }, + "gitea": { + "notifications": "Kennisgewings", + "issues": "Kwessies", + "pulls": "Trek Versoeke" + }, + "stash": { + "scenes": "Tonele", + "scenesPlayed": "Tonele Gekyk", + "playCount": "Totale Toneelstukke", + "playDuration": "Tyd Gekyk", + "sceneSize": "Toneel Grootte", + "sceneDuration": "Tonele Duur", + "images": "Beelde", + "imageSize": "Beeldgrootte", + "galleries": "Galerye", + "performers": "Kunstenaars", + "studios": "Ateljees", + "movies": "Flieks", + "tags": "Merkers", + "oCount": "O Tel" + }, + "tandoor": { + "users": "Gebruikers", + "recipes": "Resepte", + "keywords": "Sleutelwoorde" } } diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index d81b4a95..93da6cc1 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -107,6 +107,12 @@ "episodes": "حلقات", "songs": "أغاني" }, + "esphome": { + "offline": "غير متصل", + "online": "مُتّصل", + "total": "المجموع", + "unknown": "مجهول" + }, "evcc": { "pv_power": "إنتاج", "battery_soc": "البطارية", @@ -419,7 +425,8 @@ "search": "البحث", "custom": "مُخصّص", "visit": "زيارة", - "url": "الرابط" + "url": "الرابط", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "مشمس", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "القنوات", - "hd": "جودة HD" + "hd": "جودة HD", + "tunerCount": "Tuners", + "channelNumber": "القناة", + "channelNetwork": "الشبكة", + "signalStrength": "القوة", + "signalQuality": "الجودة", + "symbolQuality": "الجودة", + "networkRate": "معدل البت", + "clientIP": "العميل" }, "scrutiny": { "passed": "إجتاز", @@ -694,6 +709,11 @@ "targets_down": "الأهداف لا تعمل", "targets_total": "الأهداف الإجمالية" }, + "gatus": { + "up": "المواقع تعمل", + "down": "مواقع لا تعمل", + "uptime": "مدة التشغيل" + }, "ghostfolio": { "gross_percent_today": "اليوم", "gross_percent_1y": "سنة", @@ -775,6 +795,14 @@ "passed": "إجتاز", "failed": "فشل" }, + "openwrt": { + "uptime": "مدة التشغيل", + "cpuLoad": "متوسط حمولة المعالج (5دق)", + "up": "يعمل", + "down": "لا يعمل", + "bytesTx": "مرسلة", + "bytesRx": "تم الإستلام" + }, "uptimerobot": { "status": "الحالة", "uptime": "مدة التشغيل", @@ -797,11 +825,43 @@ "noEventsFound": "لم يتم العثور على أحداث" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "المِنصات", + "totalRoms": "مجموع الروومات" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "تحذيرات", + "criticals": "حرج" + }, + "plantit": { + "events": "أحداث", + "plants": "نباتات", + "photos": "الصور", + "species": "الأنواع" + }, + "gitea": { + "notifications": "الإشعارات", + "issues": "المُشكِلات", + "pulls": "طلبات السحب" + }, + "stash": { + "scenes": "المشاهد", + "scenesPlayed": "Scenes Played", + "playCount": "إجمالي المشغلات", + "playDuration": "وقت المشاهدة", + "sceneSize": "حجم المشاهد", + "sceneDuration": "مدة المشهد", + "images": "صور", + "imageSize": "حجم الصور", + "galleries": "المعارض", + "performers": "Performers", + "studios": "استوديوهات", + "movies": "أفلام", + "tags": "التصنيفات", + "oCount": "عدد O" + }, + "tandoor": { + "users": "المستخدمون", + "recipes": "وصفات", + "keywords": "Keywords" } } diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index 2bf20ccc..04aef92f 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -107,6 +107,12 @@ "episodes": "Episodes", "songs": "Songs" }, + "esphome": { + "offline": "Изключен", + "online": "Online", + "total": "Общо", + "unknown": "Неизв." + }, "evcc": { "pv_power": "Production", "battery_soc": "Battery", @@ -419,7 +425,8 @@ "search": "Търсене", "custom": "Custom", "visit": "Visit", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Слънчево", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Канали", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Bitrate", + "clientIP": "Client" }, "scrutiny": { "passed": "Passed", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Uptime" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Passed", "failed": "Failed" }, + "openwrt": { + "uptime": "Uptime", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "Статус", "uptime": "Uptime", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Филми", + "tags": "Тагове", + "oCount": "O Count" + }, + "tandoor": { + "users": "Потребители", + "recipes": "Рецепти", + "keywords": "Keywords" } } diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index 7c638792..87c9afe3 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -107,6 +107,12 @@ "episodes": "Episodes", "songs": "Songs" }, + "esphome": { + "offline": "Fora de línia", + "online": "Online", + "total": "Total", + "unknown": "Desconegut" + }, "evcc": { "pv_power": "Production", "battery_soc": "Battery", @@ -419,7 +425,8 @@ "search": "Search", "custom": "Custom", "visit": "Visit", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Assolellat", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Canals", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Taxa de bits", + "clientIP": "Client" }, "scrutiny": { "passed": "Aprobat", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Temps actiu" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Aprobat", "failed": "Error" }, + "openwrt": { + "uptime": "Temps actiu", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "Estat", "uptime": "Temps actiu", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Movies", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Usuaris", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index 3e3e540b..de7999ae 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -14,7 +14,7 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", - "months": "mo", + "months": "měs.", "days": "d", "hours": "h", "minutes": "m", @@ -39,7 +39,7 @@ "placeholder": "Hledat…" }, "resources": { - "cpu": "Procesor", + "cpu": "CPU", "mem": "RAM", "total": "Celkem", "free": "Volné", @@ -70,7 +70,7 @@ "rx": "RX", "tx": "TX", "mem": "RAM", - "cpu": "Procesor", + "cpu": "CPU", "running": "Běží", "offline": "Offline", "error": "Chyba", @@ -87,15 +87,15 @@ "ping": "Odezva", "down": "Down", "up": "Up", - "not_available": "Not Available" + "not_available": "Není k dispozici" }, "siteMonitor": { - "http_status": "HTTP status", + "http_status": "Stav HTTP", "error": "Chyba", - "response": "Response", + "response": "Odpověď", "down": "Down", "up": "Up", - "not_available": "Not Available" + "not_available": "Není k dispozici" }, "emby": { "playing": "Přehrává", @@ -107,12 +107,18 @@ "episodes": "Epizody", "songs": "Skladby" }, + "esphome": { + "offline": "Offline", + "online": "Online", + "total": "Celkem", + "unknown": "Neznámý" + }, "evcc": { "pv_power": "Produkce", - "battery_soc": "Battery", - "grid_power": "Grid", - "home_power": "Consumption", - "charge_power": "Charger", + "battery_soc": "Baterie", + "grid_power": "Mřížka", + "home_power": "Spotřeba", + "charge_power": "Nabíječka", "watt_hour": "Wh" }, "flood": { @@ -127,20 +133,20 @@ }, "fritzbox": { "connectionStatus": "Stav", - "connectionStatusUnconfigured": "Unconfigured", - "connectionStatusConnecting": "Connecting", - "connectionStatusAuthenticating": "Authenticating", - "connectionStatusPendingDisconnect": "Pending Disconnect", - "connectionStatusDisconnecting": "Disconnecting", - "connectionStatusDisconnected": "Disconnected", - "connectionStatusConnected": "Connected", + "connectionStatusUnconfigured": "Nenastaveno", + "connectionStatusConnecting": "Připojuji", + "connectionStatusAuthenticating": "Ověřování", + "connectionStatusPendingDisconnect": "Čeká na odpojení", + "connectionStatusDisconnecting": "Odpojování", + "connectionStatusDisconnected": "Odpojeno", + "connectionStatusConnected": "Připojeno", "uptime": "Doba spuštění", "maxDown": "Max. Down", "maxUp": "Max. Up", "down": "Down", "up": "Up", - "received": "Received", - "sent": "Sent", + "received": "Přijaté", + "sent": "Odeslané", "externalIPAddress": "Ext. IP" }, "caddy": { @@ -163,7 +169,7 @@ "transcoding": "Překódovávání", "bitrate": "Přenosová rychlost", "no_active": "Žádný aktivní stream", - "plex_connection_error": "Check Plex Connection" + "plex_connection_error": "Zkontrolujte připojení Plexu" }, "omada": { "connectedAp": "Připojené APs", @@ -210,8 +216,8 @@ "memUsage": "Využití paměti", "systemTempC": "Teplota systému", "poolUsage": "Využití fondu", - "volumeUsage": "Volume Usage", - "invalid": "Invalid" + "volumeUsage": "Využití svazku", + "invalid": "Neplatné" }, "deluge": { "download": "Stahování", @@ -243,7 +249,7 @@ "lidarr": { "wanted": "Hledané", "queued": "Ve frontě", - "artists": "Artists" + "artists": "Interpreti" }, "readarr": { "wanted": "Hledané", @@ -272,8 +278,8 @@ }, "pialert": { "total": "Celkem", - "connected": "Connected", - "new_devices": "New Devices", + "connected": "Připojeno", + "new_devices": "Nová zařízení", "down_alerts": "Down Alerts" }, "pihole": { @@ -389,17 +395,17 @@ }, "proxmox": { "mem": "RAM", - "cpu": "Procesor", + "cpu": "CPU", "lxc": "LXC", "vms": "Virtuální Stroje" }, "glances": { - "cpu": "Procesor", + "cpu": "CPU", "load": "Zatížení", "wait": "Počkejte prosím", "temp": "TEPLOTA", "_temp": "Temp", - "warn": "Warn", + "warn": "Varováni", "uptime": "BĚŽÍ", "total": "Celkem", "free": "Volné", @@ -419,7 +425,8 @@ "search": "Hledat", "custom": "Vlastní", "visit": "Navštivte", - "url": "Odkaz" + "url": "Odkaz", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Slunečno", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Kanály", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Přenosová rychlost", + "clientIP": "Client" }, "scrutiny": { "passed": "Úspěšné", @@ -610,7 +625,7 @@ "proxmoxbackupserver": { "datastore_usage": "Datové úložiště", "failed_tasks_24h": "Neúspěšné úlohy 24h", - "cpu_usage": "Procesor", + "cpu_usage": "CPU", "memory_usage": "Paměť" }, "immich": { @@ -694,6 +709,11 @@ "targets_down": "Cíle vypnuté", "targets_total": "Cíle celkem" }, + "gatus": { + "up": "Stránky Up", + "down": "Stránky Down", + "uptime": "Doba spuštění" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "Jeden rok", @@ -775,6 +795,14 @@ "passed": "Úspěšné", "failed": "Selhalo" }, + "openwrt": { + "uptime": "Doba spuštění", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Přijaté" + }, "uptimerobot": { "status": "Stav", "uptime": "Doba spuštění", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Fotografie", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Problémy", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Filmy", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Uživatelé", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/da/common.json b/public/locales/da/common.json index 1bcfdc7f..310d2e67 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -14,9 +14,9 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", - "months": "mo", + "months": "mnd", "days": "d", - "hours": "h", + "hours": "t", "minutes": "m", "seconds": "s" }, @@ -90,7 +90,7 @@ "not_available": "Ikke tilgængelig" }, "siteMonitor": { - "http_status": "HTTP status", + "http_status": "HTTP-status", "error": "Fejl", "response": "Response", "down": "Ned", @@ -107,6 +107,12 @@ "episodes": "Episoder", "songs": "Sange" }, + "esphome": { + "offline": "Offline", + "online": "Online", + "total": "Total", + "unknown": "Ukendt" + }, "evcc": { "pv_power": "Produktion", "battery_soc": "Batteri", @@ -139,9 +145,9 @@ "maxUp": "Max. Up", "down": "Ned", "up": "Op", - "received": "Received", - "sent": "Sent", - "externalIPAddress": "Ext. IP" + "received": "Modtaget", + "sent": "Sendt", + "externalIPAddress": "Ekstern IP" }, "caddy": { "upstreams": "Upstreams", @@ -405,7 +411,7 @@ "free": "Fri", "used": "Brugt", "days": "d", - "hours": "h", + "hours": "t", "crit": "Crit", "read": "Læst", "write": "Skriv", @@ -419,7 +425,8 @@ "search": "Søg", "custom": "Brugerdefinerede", "visit": "Besøg", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Solrig", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Kanaler", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Bitrate", + "clientIP": "Client" }, "scrutiny": { "passed": "Bestået", @@ -547,12 +562,12 @@ "total": "Total" }, "peanut": { - "battery_charge": "Battery Charge", + "battery_charge": "Batteriniveau", "ups_load": "UPS Load", "ups_status": "UPS Status", "online": "Online", - "on_battery": "On Battery", - "low_battery": "Low Battery" + "on_battery": "På batteri", + "low_battery": "Lavt batteriniveau" }, "nextdns": { "wait": "Vent venligst", @@ -694,6 +709,11 @@ "targets_down": "Mål Nede", "targets_total": "Totale Mål" }, + "gatus": { + "up": "Sider Oppe", + "down": "Sider Nede", + "uptime": "Oppetid" + }, "ghostfolio": { "gross_percent_today": "I dag", "gross_percent_1y": "Et År", @@ -775,6 +795,14 @@ "passed": "Bestået", "failed": "Fejlet" }, + "openwrt": { + "uptime": "Oppetid", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Op", + "down": "Ned", + "bytesTx": "Transmitted", + "bytesRx": "Modtaget" + }, "uptimerobot": { "status": "Status", "uptime": "Oppetid", @@ -797,11 +825,43 @@ "noEventsFound": "No events found" }, "romm": { - "platforms": "Platforms", + "platforms": "Platforme", "totalRoms": "Total ROMs" }, "netdata": { - "warnings": "Warnings", + "warnings": "Advarsler", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Billeder", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Problemer", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Film", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Brugere", + "recipes": "Opskrifter", + "keywords": "Keywords" } } diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 93d41110..7238a685 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -107,6 +107,12 @@ "episodes": "Episoden", "songs": "Songs" }, + "esphome": { + "offline": "Offline", + "online": "Online", + "total": "Gesamt", + "unknown": "Unbekannt" + }, "evcc": { "pv_power": "Erzeugung", "battery_soc": "Batterie", @@ -379,7 +385,7 @@ "down": "Offline" }, "miniflux": { - "read": "Lesen", + "read": "Gelesen", "unread": "Ungelesen" }, "authentik": { @@ -407,7 +413,7 @@ "days": "d", "hours": "h", "crit": "Krit", - "read": "Lesen", + "read": "Gelesen", "write": "Schreiben", "gpu": "GPU", "mem": "RAM", @@ -536,7 +542,15 @@ }, "hdhomerun": { "channels": "Kanäle", - "hd": "HD" + "hd": "HD", + "tunerCount": "Empfänger", + "channelNumber": "Kanal", + "channelNetwork": "Netzwerk", + "signalStrength": "Stärke", + "signalQuality": "Qualität", + "symbolQuality": "Qualität", + "networkRate": "Bitrate", + "clientIP": "Client" }, "scrutiny": { "passed": "Bestanden", @@ -695,6 +709,11 @@ "targets_down": "Ziele Down", "targets_total": "Alle Ziele" }, + "gatus": { + "up": "Seiten verfügbar", + "down": "Seiten nicht verfügbar", + "uptime": "Betriebszeit" + }, "ghostfolio": { "gross_percent_today": "Heute", "gross_percent_1y": "Ein Jahr", @@ -776,6 +795,14 @@ "passed": "Bestanden", "failed": "Fehlgeschlagen" }, + "openwrt": { + "uptime": "Betriebszeit", + "cpuLoad": "CPU-Last (5 min-Durchschnitt)", + "up": "Senden", + "down": "Empfangen", + "bytesTx": "Übertragen", + "bytesRx": "Empfangen" + }, "uptimerobot": { "status": "Status", "uptime": "Betriebszeit", @@ -798,11 +825,43 @@ "noEventsFound": "Keine Termine gefunden" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "Plattformen", + "totalRoms": "ROMs gesamt" }, "netdata": { "warnings": "Warnungen", "criticals": "Kritisch" + }, + "plantit": { + "events": "Ereignisse", + "plants": "Pflanzen", + "photos": "Fotos", + "species": "Spezies" + }, + "gitea": { + "notifications": "Benachrichtigungen", + "issues": "Probleme", + "pulls": "Pull-Requests" + }, + "stash": { + "scenes": "Szenen", + "scenesPlayed": "Gespielte Szenen", + "playCount": "Wiedergaben gesamt", + "playDuration": "Zeit angesehen", + "sceneSize": "Szenengröße", + "sceneDuration": "Szenendauer", + "images": "Bilder", + "imageSize": "Bildgröße", + "galleries": "Galerien", + "performers": "Darsteller", + "studios": "Studios", + "movies": "Filme", + "tags": "Schlagwörter", + "oCount": "O-Anzahl" + }, + "tandoor": { + "users": "Benutzer", + "recipes": "Rezepte", + "keywords": "Schlagwörter" } } diff --git a/public/locales/el/common.json b/public/locales/el/common.json index b318cfda..7f990025 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -107,6 +107,12 @@ "episodes": "Επεισόδια", "songs": "Τραγούδια" }, + "esphome": { + "offline": "Εκτός σύνδεσης", + "online": "Συνδεδεμένοι", + "total": "Σύνολο", + "unknown": "Άγνωστο" + }, "evcc": { "pv_power": "Παραγωγή", "battery_soc": "Μπαταρία", @@ -419,7 +425,8 @@ "search": "Search", "custom": "Custom", "visit": "Visit", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Λιακάδα", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Channels", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Ρυθμός bit", + "clientIP": "Client" }, "scrutiny": { "passed": "Passed", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Χρόνος Λειτουργίας" + }, "ghostfolio": { "gross_percent_today": "Σήμερα", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Passed", "failed": "Failed" }, + "openwrt": { + "uptime": "Χρόνος Λειτουργίας", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "Κατάσταση", "uptime": "Χρόνος Λειτουργίας", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Ταινίες", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Χρήστες", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json index 42a2f460..0eae83da 100644 --- a/public/locales/eo/common.json +++ b/public/locales/eo/common.json @@ -107,6 +107,12 @@ "episodes": "Epizodoj", "songs": "Kantoj" }, + "esphome": { + "offline": "Malkonekta", + "online": "Online", + "total": "Totalo", + "unknown": "Nekonata" + }, "evcc": { "pv_power": "Production", "battery_soc": "Battery", @@ -419,7 +425,8 @@ "search": "Search", "custom": "Custom", "visit": "Visit", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Suna", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Kanaloj", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Bitrapido", + "clientIP": "Client" }, "scrutiny": { "passed": "Passed", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Uptime" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Passed", "failed": "Failed" }, + "openwrt": { + "uptime": "Uptime", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "Stato", "uptime": "Uptime", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Filmoj", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Uzantoj", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/es/common.json b/public/locales/es/common.json index 97dabdc2..aac49d63 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -107,6 +107,12 @@ "episodes": "Episodios", "songs": "Canciones" }, + "esphome": { + "offline": "Desconectado", + "online": "En línea", + "total": "Total", + "unknown": "Desconocido" + }, "evcc": { "pv_power": "Producción", "battery_soc": "Batería", @@ -419,7 +425,8 @@ "search": "Buscar", "custom": "Personalizado", "visit": "Visitar", - "url": "Enlace" + "url": "Enlace", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Soleado", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Canales", - "hd": "Alta definición" + "hd": "Alta definición", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Tasa de bits", + "clientIP": "Client" }, "scrutiny": { "passed": "Aprobado", @@ -694,6 +709,11 @@ "targets_down": "Objetivos inactivos", "targets_total": "Objetivos totales" }, + "gatus": { + "up": "Sitios activos", + "down": "Sitios inactivos", + "uptime": "Tiempo activo" + }, "ghostfolio": { "gross_percent_today": "Hoy", "gross_percent_1y": "Un año", @@ -775,6 +795,14 @@ "passed": "Aprobado", "failed": "Fallido" }, + "openwrt": { + "uptime": "Tiempo activo", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Activo", + "down": "Inactivo", + "bytesTx": "Transmitted", + "bytesRx": "Recibido" + }, "uptimerobot": { "status": "Estado", "uptime": "Tiempo activo", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Fotos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Números", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Películas", + "tags": "Etiquetas", + "oCount": "O Count" + }, + "tandoor": { + "users": "Usuarios", + "recipes": "Recetas", + "keywords": "Keywords" } } diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json index a6a2402e..4d7109e8 100644 --- a/public/locales/eu/common.json +++ b/public/locales/eu/common.json @@ -107,6 +107,12 @@ "episodes": "Episodes", "songs": "Abestiak" }, + "esphome": { + "offline": "Offline", + "online": "Online", + "total": "Guztira", + "unknown": "Ezezaguna" + }, "evcc": { "pv_power": "Production", "battery_soc": "Battery", @@ -419,7 +425,8 @@ "search": "Search", "custom": "Custom", "visit": "Visit", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Sunny", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Channels", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Bit-tasa", + "clientIP": "Client" }, "scrutiny": { "passed": "Passed", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Uptime" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Passed", "failed": "Failed" }, + "openwrt": { + "uptime": "Uptime", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "Status", "uptime": "Uptime", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Movies", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Users", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index 0fd030be..eccbbfd0 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -107,6 +107,12 @@ "episodes": "Episodes", "songs": "Songs" }, + "esphome": { + "offline": "Offline", + "online": "Online", + "total": "Yhteensä", + "unknown": "Unknown" + }, "evcc": { "pv_power": "Production", "battery_soc": "Battery", @@ -419,7 +425,8 @@ "search": "Search", "custom": "Custom", "visit": "Visit", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Sunny", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Channels", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Bittinopeus", + "clientIP": "Client" }, "scrutiny": { "passed": "Passed", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Uptime" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Passed", "failed": "Failed" }, + "openwrt": { + "uptime": "Uptime", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "Tila", "uptime": "Uptime", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Movies", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Users", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 0cd5435a..5602b7b9 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -25,7 +25,7 @@ "api_error": "Erreur API", "information": "Informations", "status": "Statut", - "url": "Url", + "url": "URL", "raw_error": "Erreur brute", "response_data": "Données de réponse" }, @@ -39,7 +39,7 @@ "placeholder": "Recherche…" }, "resources": { - "cpu": "Cpu", + "cpu": "CPU", "mem": "Mém", "total": "Total", "free": "Libre", @@ -70,7 +70,7 @@ "rx": "Rx", "tx": "Tx", "mem": "Mém", - "cpu": "Cpu", + "cpu": "CPU", "running": "Démarré", "offline": "Hors ligne", "error": "Erreur", @@ -107,6 +107,12 @@ "episodes": "Épisodes", "songs": "Musique" }, + "esphome": { + "offline": "Hors ligne", + "online": "En ligne", + "total": "Total", + "unknown": "Inconnu" + }, "evcc": { "pv_power": "Production", "battery_soc": "Batterie", @@ -150,7 +156,7 @@ }, "changedetectionio": { "totalObserved": "Total Observé", - "diffsDetected": "Diffs Detectées" + "diffsDetected": "Diffs détectées" }, "channelsdvrserver": { "shows": "Affichages", @@ -166,7 +172,7 @@ "plex_connection_error": "Vérifier la connexion à Plex" }, "omada": { - "connectedAp": "APs connectées", + "connectedAp": "AP connectés", "activeUser": "Équipts actifs", "alerts": "Alertes", "connectedGateway": "Passerelles connectées", @@ -389,12 +395,12 @@ }, "proxmox": { "mem": "Mém", - "cpu": "Cpu", + "cpu": "CPU", "lxc": "LxC", "vms": "VMs" }, "glances": { - "cpu": "Cpu", + "cpu": "CPU", "load": "Charge", "wait": "Veuillez patienter", "temp": "Temp", @@ -419,7 +425,8 @@ "search": "Recherche", "custom": "Personnalisé", "visit": "Aller vers", - "url": "Url" + "url": "URL", + "searchsuggestion": "Suggestions" }, "wmo": { "0-day": "Ensoleillé", @@ -529,13 +536,21 @@ "total": "Total" }, "gluetun": { - "public_ip": "IP Publique", + "public_ip": "IP publique", "region": "Région", "country": "Pays" }, "hdhomerun": { "channels": "Chaînes", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Canal", + "channelNetwork": "Réseau", + "signalStrength": "Force", + "signalQuality": "Qualité", + "symbolQuality": "Qualité", + "networkRate": "Débit", + "clientIP": "Client" }, "scrutiny": { "passed": "Réussi", @@ -547,11 +562,11 @@ "total": "Total" }, "peanut": { - "battery_charge": "Battery Charge", + "battery_charge": "Charge Batterie", "ups_load": "Charge de l'UPS", "ups_status": "État de l'UPS", "online": "En ligne", - "on_battery": "On Battery", + "on_battery": "Sur Batterie", "low_battery": "Batterie Faible" }, "nextdns": { @@ -577,7 +592,7 @@ }, "opnsense": { "cpu": "Charge CPU", - "memory": "Mém. Utilisée", + "memory": "Mém. utilisée", "wanUpload": "WAN Envoi", "wanDownload": "WAN Récep." }, @@ -610,7 +625,7 @@ "proxmoxbackupserver": { "datastore_usage": "Datastore", "failed_tasks_24h": "Tâches échouées 24h", - "cpu_usage": "Cpu", + "cpu_usage": "CPU", "memory_usage": "Mémoire" }, "immich": { @@ -633,7 +648,7 @@ "categories": "Catégories" }, "komga": { - "libraries": "Librairies", + "libraries": "Bibliothèques", "series": "Séries TV", "books": "Livres" }, @@ -666,7 +681,7 @@ "alertstriggered": "Alertes déclenchées" }, "nextcloud": { - "cpuload": "Charge Cpu", + "cpuload": "Charge CPU", "memoryusage": "Utilisation Mémoire", "freespace": "Libre", "activeusers": "Utilisateurs Actifs", @@ -694,6 +709,11 @@ "targets_down": "Down", "targets_total": "Total" }, + "gatus": { + "up": "En ligne", + "down": "Hors ligne", + "uptime": "Démarré depuis" + }, "ghostfolio": { "gross_percent_today": "Aujourd'hui", "gross_percent_1y": "Un an", @@ -775,6 +795,14 @@ "passed": "Réussi", "failed": "Échoué" }, + "openwrt": { + "uptime": "Démarré depuis", + "cpuLoad": "Charge moyenne CPU (5 min)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmis", + "bytesRx": "Reçu" + }, "uptimerobot": { "status": "Statut", "uptime": "Démarré depuis", @@ -797,11 +825,43 @@ "noEventsFound": "Aucun événement trouvé" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "Plateformes", + "totalRoms": "Total des ROMs" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "Avertissements", + "criticals": "Urgent" + }, + "plantit": { + "events": "Événements", + "plants": "Plantes", + "photos": "Photos", + "species": "Espèces" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Anomalies", + "pulls": "Demandes de tirage" + }, + "stash": { + "scenes": "Scènes", + "scenesPlayed": "Scènes jouées", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Taille des images", + "galleries": "Galeries", + "performers": "Performers", + "studios": "Studios", + "movies": "Films", + "tags": "Étiquettes", + "oCount": "O Count" + }, + "tandoor": { + "users": "Utilisateurs", + "recipes": "Recettes", + "keywords": "Mots-clés" } } diff --git a/public/locales/he/common.json b/public/locales/he/common.json index 0c4caf80..6897b709 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -107,6 +107,12 @@ "episodes": "Episodes", "songs": "Songs" }, + "esphome": { + "offline": "כבוי", + "online": "Online", + "total": "סה\"כ", + "unknown": "Unknown" + }, "evcc": { "pv_power": "Production", "battery_soc": "Battery", @@ -419,7 +425,8 @@ "search": "Search", "custom": "Custom", "visit": "Visit", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Sunny", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Channels", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "סיביות", + "clientIP": "Client" }, "scrutiny": { "passed": "Passed", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Uptime" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Passed", "failed": "Failed" }, + "openwrt": { + "uptime": "Uptime", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "סטטוס", "uptime": "Uptime", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Movies", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Users", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index ca628d3b..65ed254a 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -107,6 +107,12 @@ "episodes": "Episodes", "songs": "Songs" }, + "esphome": { + "offline": "Offline", + "online": "Online", + "total": "Total", + "unknown": "Unknown" + }, "evcc": { "pv_power": "Production", "battery_soc": "Battery", @@ -419,7 +425,8 @@ "search": "Search", "custom": "Custom", "visit": "Visit", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Sunny", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Channels", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Bitrate", + "clientIP": "Client" }, "scrutiny": { "passed": "Passed", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Uptime" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Passed", "failed": "Failed" }, + "openwrt": { + "uptime": "Uptime", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "Status", "uptime": "Uptime", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Movies", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Users", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index 5c23c742..84a2126c 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -14,10 +14,10 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", - "months": "mo", - "days": "d", + "months": "mj", + "days": "dan(a)", "hours": "h", - "minutes": "m", + "minutes": "min", "seconds": "s" }, "widget": { @@ -46,12 +46,12 @@ "used": "Korišteno", "load": "Opterećenje", "temp": "TEMP", - "max": "Maks", - "uptime": "UP" + "max": "Maks.", + "uptime": "Vrijeme rada" }, "unifi": { "users": "Korisnici", - "uptime": "Radno vrijeme", + "uptime": "Vrijeme rada", "days": "Dani", "wan": "WAN", "lan": "LAN", @@ -61,8 +61,8 @@ "wlan_devices": "WLAN uređaji", "lan_users": "LAN korisnici", "wlan_users": "WLAN korisnici", - "up": "UP", - "down": "PRIMANJE", + "up": "Vrijeme rada", + "down": "NEDOSTUPNO", "wait": "Pričekaj", "empty_data": "Stanje podsustava nepoznato" }, @@ -85,17 +85,17 @@ "ping": { "error": "Greška", "ping": "Ping", - "down": "Down", - "up": "Up", - "not_available": "Not Available" + "down": "Nedostupno", + "up": "Dostupno", + "not_available": "Nije dostupno" }, "siteMonitor": { - "http_status": "HTTP status", + "http_status": "Stanje HTTP-a", "error": "Greška", - "response": "Response", - "down": "Down", - "up": "Up", - "not_available": "Not Available" + "response": "Odgovor", + "down": "Nedostupno", + "up": "Dostupno", + "not_available": "Nije dostupno" }, "emby": { "playing": "Reprodukcija", @@ -107,13 +107,19 @@ "episodes": "Epizode", "songs": "Pjesme" }, + "esphome": { + "offline": "Offline", + "online": "Online", + "total": "Ukupno", + "unknown": "Nepoznato" + }, "evcc": { "pv_power": "Proizvodnja", "battery_soc": "Baterija", "grid_power": "Raspored", "home_power": "Potrošnja", "charge_power": "Punjač", - "watt_hour": "Wh" + "watt_hour": "Kilovat-sat" }, "flood": { "download": "Preuzimanje", @@ -127,21 +133,21 @@ }, "fritzbox": { "connectionStatus": "Stanje", - "connectionStatusUnconfigured": "Unconfigured", - "connectionStatusConnecting": "Connecting", - "connectionStatusAuthenticating": "Authenticating", - "connectionStatusPendingDisconnect": "Pending Disconnect", - "connectionStatusDisconnecting": "Disconnecting", - "connectionStatusDisconnected": "Disconnected", + "connectionStatusUnconfigured": "Nekonfigurirano", + "connectionStatusConnecting": "Povezivanje", + "connectionStatusAuthenticating": "Autentificiranje", + "connectionStatusPendingDisconnect": "Odspajanje u tijeku", + "connectionStatusDisconnecting": "Odspajanje", + "connectionStatusDisconnected": "Odspojeno", "connectionStatusConnected": "Povezano", - "uptime": "Radno vrijeme", - "maxDown": "Max. Down", - "maxUp": "Max. Up", - "down": "Down", - "up": "Up", - "received": "Received", - "sent": "Sent", - "externalIPAddress": "Ext. IP" + "uptime": "Vrijeme rada", + "maxDown": "Maksimum preuzimanja", + "maxUp": "Maksimum prijenosa", + "down": "Nedostupno", + "up": "Dostupno", + "received": "Primljeno", + "sent": "Poslano", + "externalIPAddress": "Eksterna IP adresa" }, "caddy": { "upstreams": "Glavne grane", @@ -255,17 +261,17 @@ "missingMovies": "Nedostajući filmovi" }, "ombi": { - "pending": "Predstoji", + "pending": "U tijeku", "approved": "Odobreno", "available": "Dostupno" }, "jellyseerr": { - "pending": "Predstoji", + "pending": "U tijeku", "approved": "Odobreno", "available": "Dostupno" }, "overseerr": { - "pending": "Predstoji", + "pending": "U tijeku", "processing": "Obrada", "approved": "Odobreno", "available": "Dostupno" @@ -274,7 +280,7 @@ "total": "Ukupno", "connected": "Povezano", "new_devices": "Novi uređaji", - "down_alerts": "Obavijest o rušenju" + "down_alerts": "Obavijesti o nedostupnosti" }, "pihole": { "queries": "Upiti", @@ -398,20 +404,20 @@ "load": "Opterećenje", "wait": "Pričekaj", "temp": "TEMP", - "_temp": "Temp", + "_temp": "Temperatura", "warn": "Upozori", - "uptime": "UP", + "uptime": "Vrijeme rada", "total": "Ukupno", "free": "Slobodno", "used": "Korišteno", - "days": "d", + "days": "dan(a)", "hours": "h", - "crit": "Crit", + "crit": "Krritično", "read": "Pročitano", - "write": "Write", + "write": "Piši", "gpu": "GPU", - "mem": "Mem", - "swap": "Swap" + "mem": "Memorija", + "swap": "Virtualna memorija" }, "quicklaunch": { "bookmark": "Straničnik", @@ -419,7 +425,8 @@ "search": "Traži", "custom": "Prilagođeno", "visit": "Posjeti", - "url": "URL" + "url": "URL", + "searchsuggestion": "Prijedlog" }, "wmo": { "0-day": "Sunčano", @@ -486,15 +493,15 @@ "up_to_date": "Aktualno", "child_bridges": "Podređeni mosotvi", "child_bridges_status": "{{ok}}/{{total}}", - "up": "Up", - "pending": "Predstoji", - "down": "Down" + "up": "Dostupno", + "pending": "U tijeku", + "down": "Nedostupno" }, "healthchecks": { "new": "Novo", - "up": "Up", + "up": "Dostupno", "grace": "U razdoblju odgode", - "down": "Down", + "down": "Nedostupno", "paused": "Zaustavljeno", "status": "Stanje", "last_ping": "Zadnji ping", @@ -519,7 +526,7 @@ }, "truenas": { "load": "Opterećenje sustava", - "uptime": "Radno vrijeme", + "uptime": "Vrijeme rada", "alerts": "Upozorenja" }, "pyload": { @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Kanali", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuneri", + "channelNumber": "Kanal", + "channelNetwork": "Mreža", + "signalStrength": "Jačina", + "signalQuality": "Kvaliteta", + "symbolQuality": "Kvaliteta", + "networkRate": "Stopa bitova", + "clientIP": "Klijent" }, "scrutiny": { "passed": "Uspjelo", @@ -547,12 +562,12 @@ "total": "Ukupno" }, "peanut": { - "battery_charge": "Battery Charge", - "ups_load": "UPS Load", - "ups_status": "UPS Status", + "battery_charge": "Napunjenost baterije", + "ups_load": "UPS opterećenje", + "ups_status": "UPS stanje", "online": "Online", - "on_battery": "On Battery", - "low_battery": "Low Battery" + "on_battery": "Koristi bateriju", + "low_battery": "Slaba baterija" }, "nextdns": { "wait": "Pričekaj", @@ -561,7 +576,7 @@ "mikrotik": { "cpuLoad": "CPU opterećenje", "memoryUsed": "Korištena memorija", - "uptime": "Radno vrijeme", + "uptime": "Vrijeme rada", "numberOfLeases": "Unajmljivanja" }, "xteve": { @@ -570,10 +585,10 @@ "streams_xepg": "XEPG kanali" }, "opendtu": { - "yieldDay": "Today", - "absolutePower": "Power", - "relativePower": "Power %", - "limit": "Limit" + "yieldDay": "Danas", + "absolutePower": "Snaga", + "relativePower": "Postotak snage", + "limit": "Ograničenje" }, "opnsense": { "cpu": "CPU opterećenje", @@ -601,9 +616,9 @@ "load": "Prosječno opterećenje", "memory": "Korištenje memorije", "wanStatus": "Stanje WAN-a", - "up": "Up", - "down": "Down", - "temp": "Temp", + "up": "Dostupno", + "down": "Nedostupno", + "temp": "Temperatura", "disk": "Korištenje diska", "wanIP": "WAN IP" }, @@ -620,17 +635,17 @@ "storage": "Spremište" }, "uptimekuma": { - "up": "Aktivne stranice", - "down": "Neaktivne stranice", - "uptime": "Radno vrijeme", + "up": "Dostupne stranice", + "down": "Nedostupne stranice", + "uptime": "Vrijeme rada", "incident": "Slučaj", - "m": "m" + "m": "min" }, "atsumeru": { "series": "Serije", - "archives": "Archives", - "chapters": "Chapters", - "categories": "Categories" + "archives": "Arhive", + "chapters": "Poglavlja", + "categories": "Kategorije" }, "komga": { "libraries": "Biblioteke", @@ -639,7 +654,7 @@ }, "diskstation": { "days": "Dani", - "uptime": "Radno vrijeme", + "uptime": "Vrijeme rada", "volumeAvailable": "Dostupno" }, "mylar": { @@ -662,7 +677,7 @@ "grafana": { "dashboards": "Pregledne ploče", "datasources": "Izvori podataka", - "totalalerts": "Ukupno upozorenja", + "totalalerts": "Ukupni broj upozorenja", "alertstriggered": "Aktivirana upozorenja" }, "nextcloud": { @@ -682,7 +697,7 @@ }, "unmanic": { "active_workers": "Aktivni radnici", - "total_workers": "Ukupni radnici", + "total_workers": "Ukupni broj radnika", "records_total": "Količina zapisa u redu čekanja" }, "pterodactyl": { @@ -692,10 +707,15 @@ "prometheus": { "targets_up": "Aktivni ciljevi", "targets_down": "Neaktivni ciljevi", - "targets_total": "Ukupno ciljeva" + "targets_total": "Ukupni broj ciljeva" + }, + "gatus": { + "up": "Dostupne stranice", + "down": "Nedostupne stranice", + "uptime": "Vrijeme rada" }, "ghostfolio": { - "gross_percent_today": "Today", + "gross_percent_today": "Danas", "gross_percent_1y": "Jedna godina", "gross_percent_max": "Svo vrijeme" }, @@ -711,13 +731,13 @@ "switches_on": "Prekidači uključeni" }, "whatsupdocker": { - "monitoring": "Monitoring", + "monitoring": "Praćenje", "updates": "Aktualiziranja" }, "calibreweb": { "books": "Knjige", - "authors": "Authors", - "categories": "Categories", + "authors": "Autori", + "categories": "Kategorije", "series": "Serije" }, "jdownloader": { @@ -731,77 +751,117 @@ "totalFiles": "Datoteke" }, "azuredevops": { - "result": "Result", + "result": "Rezultat", "status": "Stanje", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", + "buildId": "ID izgradnje", + "succeeded": "Uspjelo", + "notStarted": "Nije započeto", "failed": "Neuspjelo", - "canceled": "Canceled", - "inProgress": "In Progress", - "totalPrs": "Total PRs", - "myPrs": "My PRs", + "canceled": "Prekinuto", + "inProgress": "U tijeku", + "totalPrs": "Ukupni broj PR-ova", + "myPrs": "Moji zahtjevi za preuzimanje (PR-ovi)", "approved": "Odobreno" }, "gamedig": { "status": "Stanje", "online": "Online", "offline": "Offline", - "name": "Name", - "map": "Map", - "currentPlayers": "Current players", + "name": "Ime", + "map": "Karta", + "currentPlayers": "Trenutačni igrači", "players": "Igrači", - "maxPlayers": "Max players", - "bots": "Bots", + "maxPlayers": "Maks. broj igrača", + "bots": "Botovi", "ping": "Ping" }, "urbackup": { - "ok": "Ok", - "errored": "Errors", - "noRecent": "Out of Date", - "totalUsed": "Used Storage" + "ok": "U redu", + "errored": "Greške", + "noRecent": "Zastarjelo", + "totalUsed": "Korištena memorija" }, "mealie": { - "recipes": "Recipes", + "recipes": "Recepti", "users": "Korisnici", - "categories": "Categories", - "tags": "Tags" + "categories": "Kategorije", + "tags": "Oznake" }, "openmediavault": { - "downloading": "Downloading", + "downloading": "Preuzimanje", "total": "Ukupno", "running": "Pokrenuto", "stopped": "Prekinuto", "passed": "Uspjelo", "failed": "Neuspjelo" }, + "openwrt": { + "uptime": "Vrijeme rada", + "cpuLoad": "Prosjećno CPU opterećenje (5m)", + "up": "Dostupno", + "down": "Nedostupno", + "bytesTx": "Preneseno", + "bytesRx": "Primljeno" + }, "uptimerobot": { "status": "Stanje", - "uptime": "Radno vrijeme", - "lastDown": "Last Downtime", - "downDuration": "Downtime Duration", - "sitesUp": "Aktivne stranice", - "sitesDown": "Neaktivne stranice", + "uptime": "Vrijeme rada", + "lastDown": "Zadnja nedostupnost", + "downDuration": "Trajanje nedostupnosti", + "sitesUp": "Dostupne stranice", + "sitesDown": "Nedostupne stranice", "paused": "Zaustavljeno", - "notyetchecked": "Not Yet Checked", - "up": "Up", - "seemsdown": "Seems Down", - "down": "Down", + "notyetchecked": "Još nije provjereno", + "up": "Dostupno", + "seemsdown": "Čini se da je nedostupno", + "down": "Nedostupno", "unknown": "Nepoznato" }, "calendar": { - "inCinemas": "In cinemas", - "physicalRelease": "Physical release", - "digitalRelease": "Digital release", - "noEventsToday": "No events for today!", - "noEventsFound": "No events found" + "inCinemas": "U kinima", + "physicalRelease": "Fizičko izdanje", + "digitalRelease": "Digitalno izdanje", + "noEventsToday": "Danas nema događaja!", + "noEventsFound": "Nema događaja" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "Platforme", + "totalRoms": "Ukupne ROM memorije" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "Upozorenja", + "criticals": "Kritično" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Fotografije", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Problemi", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Filmovi", + "tags": "Oznake", + "oCount": "O Count" + }, + "tandoor": { + "users": "Korisnici", + "recipes": "Recepti", + "keywords": "Keywords" } } diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index 4c047536..ae844fd6 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -14,18 +14,18 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", - "months": "mo", - "days": "d", - "hours": "h", - "minutes": "m", - "seconds": "s" + "months": "hó", + "days": "n", + "hours": "ó", + "minutes": "p", + "seconds": "mp" }, "widget": { "missing_type": "Hiányzó Widget Típus: {{type}}", "api_error": "API Hiba", "information": "Információ", "status": "Státusz", - "url": "URL", + "url": "LINK", "raw_error": "Nyers hiba", "response_data": "Válaszadatok" }, @@ -40,12 +40,12 @@ }, "resources": { "cpu": "Processzor", - "mem": "MEM", + "mem": "RAM", "total": "Összes", "free": "Szabad", "used": "Használt", "load": "Terhelés", - "temp": "TEMP", + "temp": "HŐ", "max": "Max", "uptime": "FUT" }, @@ -69,10 +69,10 @@ "docker": { "rx": "RX", "tx": "TX", - "mem": "MEM", + "mem": "RAM", "cpu": "Processzor", "running": "Futó", - "offline": "Offline", + "offline": "Nem elérhető", "error": "Hiba", "unknown": "Ismeretlen", "healthy": "Egészséges", @@ -107,6 +107,12 @@ "episodes": "Epizód", "songs": "Zeneszám" }, + "esphome": { + "offline": "Nem elérhető", + "online": "Csatlakozva", + "total": "Összes", + "unknown": "Ismeretlen" + }, "evcc": { "pv_power": "Termelés", "battery_soc": "Akkumulátor", @@ -118,8 +124,8 @@ "flood": { "download": "Letöltés", "upload": "Feltöltés", - "leech": "Leech", - "seed": "Seed" + "leech": "Letöltés", + "seed": "Feltöltés" }, "freshrss": { "subscriptions": "Előfizetések", @@ -135,8 +141,8 @@ "connectionStatusDisconnected": "Kapcsolat bontva", "connectionStatusConnected": "Csatlakoztatott", "uptime": "Üzemidő", - "maxDown": "Max. Down", - "maxUp": "Max. Up", + "maxDown": "Max let.", + "maxUp": "Max felt.", "down": "Le", "up": "Fel", "received": "Fogadott", @@ -196,14 +202,14 @@ "transmission": { "download": "Letöltés", "upload": "Feltöltés", - "leech": "Leech", - "seed": "Seed" + "leech": "Letöltés", + "seed": "Feltöltés" }, "qbittorrent": { "download": "Letöltés", "upload": "Feltöltés", - "leech": "Leech", - "seed": "Seed" + "leech": "Letöltés", + "seed": "Feltöltés" }, "qnap": { "cpuUsage": "Processzor Használat", @@ -216,14 +222,14 @@ "deluge": { "download": "Letöltés", "upload": "Feltöltés", - "leech": "Leech", - "seed": "Seed" + "leech": "Letöltés", + "seed": "Feltöltés" }, "downloadstation": { "download": "Letöltés", "upload": "Feltöltés", - "leech": "Leech", - "seed": "Seed" + "leech": "Letöltés", + "seed": "Feltöltés" }, "sonarr": { "wanted": "Keresett", @@ -304,12 +310,12 @@ "never": "Soha", "last_seen": "Utoljára látott", "now": "Most", - "years": "{{number}}y", - "weeks": "{{number}}w", - "days": "{{number}}d", - "hours": "{{number}}h", - "minutes": "{{number}}m", - "seconds": "{{number}}s", + "years": "{{number}}év", + "weeks": "{{number}}h", + "days": "{{number}}n", + "hours": "{{number}}ó", + "minutes": "{{number}}p", + "seconds": "{{number}}mp", "ago": "{{value}} Ezelőtt" }, "tdarr": { @@ -376,7 +382,7 @@ "version": "Verzió", "status": "Státusz", "up": "Csatlakozva", - "down": "Offline" + "down": "Nem elérhető" }, "miniflux": { "read": "Olvasott", @@ -388,7 +394,7 @@ "failedLoginsLast24H": "Sikertelen bejelentkezések (24h)" }, "proxmox": { - "mem": "MEM", + "mem": "RAM", "cpu": "Processzor", "lxc": "LXC", "vms": "VM-ek" @@ -397,21 +403,21 @@ "cpu": "Processzor", "load": "Terhelés", "wait": "Kérjük várjon", - "temp": "TEMP", + "temp": "HŐ", "_temp": "Hőmérséklet", "warn": "Figyelmeztet", "uptime": "FUT", "total": "Összes", "free": "Szabad", "used": "Használt", - "days": "d", - "hours": "h", - "crit": "Crit", + "days": "n", + "hours": "ó", + "crit": "Kritikus", "read": "Olvasott", "write": "Írás", "gpu": "GPU", "mem": "Memória", - "swap": "Swap" + "swap": "Csere" }, "quicklaunch": { "bookmark": "Könyvjelző", @@ -419,7 +425,8 @@ "search": "Keresés", "custom": "Egyedi", "visit": "Megnéz", - "url": "URL" + "url": "LINK", + "searchsuggestion": "Javaslat" }, "wmo": { "0-day": "Napos", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Csatornák", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Bitráta", + "clientIP": "Client" }, "scrutiny": { "passed": "Megfelelt", @@ -547,12 +562,12 @@ "total": "Összes" }, "peanut": { - "battery_charge": "Battery Charge", - "ups_load": "UPS Load", - "ups_status": "UPS Status", + "battery_charge": "Akku töltöttsége", + "ups_load": "UPS terheltsége", + "ups_status": "UPS állapot", "online": "Csatlakozva", - "on_battery": "On Battery", - "low_battery": "Low Battery" + "on_battery": "Akkuról", + "low_battery": "Alacsony töltöttség" }, "nextdns": { "wait": "Kérjük Várjon", @@ -570,10 +585,10 @@ "streams_xepg": "XEPG Csatornák" }, "opendtu": { - "yieldDay": "Today", - "absolutePower": "Power", - "relativePower": "Power %", - "limit": "Limit" + "yieldDay": "Ma", + "absolutePower": "Energia", + "relativePower": "Energia %", + "limit": "Korlát" }, "opnsense": { "cpu": "Processzor Terhelés", @@ -624,13 +639,13 @@ "down": "Nem Elérhető Webhelyek", "uptime": "Üzemidő", "incident": "Incidens", - "m": "m" + "m": "p" }, "atsumeru": { "series": "Sorozat", - "archives": "Archives", - "chapters": "Chapters", - "categories": "Categories" + "archives": "Archívum", + "chapters": "Fejezetek", + "categories": "Kategóriák" }, "komga": { "libraries": "Könyvtárak", @@ -694,8 +709,13 @@ "targets_down": "Célpontok Állnak", "targets_total": "Összes Célpont" }, + "gatus": { + "up": "Futó Webhelyek", + "down": "Nem Elérhető Webhelyek", + "uptime": "Üzemidő" + }, "ghostfolio": { - "gross_percent_today": "Today", + "gross_percent_today": "Ma", "gross_percent_1y": "Egy év", "gross_percent_max": "Mindig" }, @@ -716,8 +736,8 @@ }, "calibreweb": { "books": "Könyvek", - "authors": "Authors", - "categories": "Categories", + "authors": "Szerzők", + "categories": "Kategóriák", "series": "Sorozat" }, "jdownloader": { @@ -731,22 +751,22 @@ "totalFiles": "Fájlok" }, "azuredevops": { - "result": "Result", + "result": "Eredmény", "status": "Státusz", - "buildId": "Build ID", - "succeeded": "Succeeded", + "buildId": "Gyártás ID", + "succeeded": "Sikerült", "notStarted": "Nem indult", "failed": "Sikertelen", "canceled": "Megszakítva", "inProgress": "Folyamatban", - "totalPrs": "Total PRs", - "myPrs": "My PRs", + "totalPrs": "Minden PR", + "myPrs": "Saját PR-ek", "approved": "Engedélyezett" }, "gamedig": { "status": "Státusz", "online": "Csatlakozva", - "offline": "Offline", + "offline": "Nem elérhető", "name": "Név", "map": "Térkép", "currentPlayers": "Jelenlegi játékosok", @@ -764,7 +784,7 @@ "mealie": { "recipes": "Receptek", "users": "Felhasználók", - "categories": "Categories", + "categories": "Kategóriák", "tags": "Címkék" }, "openmediavault": { @@ -775,33 +795,73 @@ "passed": "Megfelelt", "failed": "Sikertelen" }, + "openwrt": { + "uptime": "Üzemidő", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Fel", + "down": "Le", + "bytesTx": "Transmitted", + "bytesRx": "Fogadott" + }, "uptimerobot": { "status": "Státusz", "uptime": "Üzemidő", - "lastDown": "Last Downtime", - "downDuration": "Downtime Duration", + "lastDown": "Utolsó leállás", + "downDuration": "Leállás ideje", "sitesUp": "Futó Webhelyek", "sitesDown": "Nem Elérhető Webhelyek", "paused": "Szünetel", - "notyetchecked": "Not Yet Checked", + "notyetchecked": "Még nincs ellenőrizve", "up": "Fel", - "seemsdown": "Seems Down", + "seemsdown": "Elérhetetlennek tűnik", "down": "Le", "unknown": "Ismeretlen" }, "calendar": { - "inCinemas": "In cinemas", - "physicalRelease": "Physical release", + "inCinemas": "Mozikban", + "physicalRelease": "Fizikai kiadás", "digitalRelease": "Digitális kiadás", "noEventsToday": "Ezen a napon nincsenek események!", "noEventsFound": "Nem található esemény" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "Felület", + "totalRoms": "Minden ROM" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "Figyelmeztetések", + "criticals": "Kritikusok" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Fényképek", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Problémák", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Film", + "tags": "Címkék", + "oCount": "O Count" + }, + "tandoor": { + "users": "Felhasználók", + "recipes": "Receptek", + "keywords": "Keywords" } } diff --git a/public/locales/id/common.json b/public/locales/id/common.json index c5f35e1f..794c6567 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -14,20 +14,20 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", - "months": "mo", - "days": "d", - "hours": "h", + "months": "bulan", + "days": "h", + "hours": "j", "minutes": "m", - "seconds": "s" + "seconds": "d" }, "widget": { - "missing_type": "Missing Widget Type: {{type}}", + "missing_type": "Widget Tidak Ditemukan: {{type}}", "api_error": "API Error", "information": "Informasi", "status": "Status", "url": "URL", - "raw_error": "Raw Error", - "response_data": "Response Data" + "raw_error": "Error Baku", + "response_data": "Data Respons" }, "weather": { "current": "Lokasi Saat Ini", @@ -44,348 +44,354 @@ "total": "Total", "free": "Luang", "used": "Digunakan", - "load": "Load", + "load": "Beban", "temp": "TEMP", "max": "Maks", - "uptime": "UP" + "uptime": "Waktu Aktif" }, "unifi": { - "users": "Users", - "uptime": "Uptime", - "days": "Days", + "users": "Pengguna", + "uptime": "Waktu Aktif", + "days": "Hari-hari", "wan": "WAN", "lan": "LAN", "wlan": "WLAN", - "devices": "Devices", - "lan_devices": "LAN Devices", - "wlan_devices": "WLAN Devices", - "lan_users": "LAN Users", - "wlan_users": "WLAN Users", - "up": "UP", - "down": "DOWN", + "devices": "Perangkat", + "lan_devices": "Perangkat LAN", + "wlan_devices": "Perangkat WLAN", + "lan_users": "Pengguna LAN", + "wlan_users": "Pengguna WLAN", + "up": "Waktu Aktif", + "down": "Mati", "wait": "Harap tunggu", - "empty_data": "Subsystem status unknown" + "empty_data": "Status subsistem tdk diketahui" }, "docker": { "rx": "RX", "tx": "TX", "mem": "MEM", "cpu": "CPU", - "running": "Running", + "running": "Berjalan", "offline": "Offline", "error": "Error", - "unknown": "Unknown", - "healthy": "Healthy", - "starting": "Starting", - "unhealthy": "Unhealthy", - "not_found": "Not Found", - "exited": "Exited", - "partial": "Partial" + "unknown": "Tidak Diketahui", + "healthy": "Lancar", + "starting": "Memulai", + "unhealthy": "Tidak Lancar", + "not_found": "Tidak Ditemukan", + "exited": "Terkeluar", + "partial": "Sebagian" }, "ping": { "error": "Error", "ping": "Ping", - "down": "Down", - "up": "Up", - "not_available": "Not Available" + "down": "Mati", + "up": "Hidup", + "not_available": "Tidak Tersedia" }, "siteMonitor": { - "http_status": "HTTP status", + "http_status": "HTTP Status", "error": "Error", - "response": "Response", - "down": "Down", - "up": "Up", - "not_available": "Not Available" + "response": "Respons", + "down": "Mati", + "up": "Hidup", + "not_available": "Tidak Tersedia" }, "emby": { - "playing": "Playing", - "transcoding": "Transcoding", + "playing": "Sedang Diputar", + "transcoding": "Mentranskode", "bitrate": "Bitrate", - "no_active": "No Active Streams", - "movies": "Movies", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "no_active": "Tidak ada Strim Aktif", + "movies": "Film", + "series": "Seri", + "episodes": "Episode", + "songs": "Lagu" + }, + "esphome": { + "offline": "Offline", + "online": "Online", + "total": "Total", + "unknown": "Tidak Diketahui" }, "evcc": { - "pv_power": "Production", - "battery_soc": "Battery", + "pv_power": "Produksi", + "battery_soc": "Baterai", "grid_power": "Grid", - "home_power": "Consumption", + "home_power": "Konsumsi", "charge_power": "Charger", - "watt_hour": "Wh" + "watt_hour": "Watt/jam" }, "flood": { - "download": "Download", - "upload": "Upload", + "download": "Unduh", + "upload": "Unggah", "leech": "Leech", "seed": "Seed" }, "freshrss": { - "subscriptions": "Subscriptions", - "unread": "Unread" + "subscriptions": "Subskripsi", + "unread": "Belum Dibaca" }, "fritzbox": { "connectionStatus": "Status", - "connectionStatusUnconfigured": "Unconfigured", - "connectionStatusConnecting": "Connecting", - "connectionStatusAuthenticating": "Authenticating", - "connectionStatusPendingDisconnect": "Pending Disconnect", - "connectionStatusDisconnecting": "Disconnecting", - "connectionStatusDisconnected": "Disconnected", - "connectionStatusConnected": "Connected", - "uptime": "Uptime", - "maxDown": "Max. Down", - "maxUp": "Max. Up", - "down": "Down", - "up": "Up", - "received": "Received", - "sent": "Sent", - "externalIPAddress": "Ext. IP" + "connectionStatusUnconfigured": "Belum dikonfigur", + "connectionStatusConnecting": "Menyambung", + "connectionStatusAuthenticating": "Menotentikasi", + "connectionStatusPendingDisconnect": "Menunggu Terputus", + "connectionStatusDisconnecting": "Sedan Memutus", + "connectionStatusDisconnected": "Terputus", + "connectionStatusConnected": "Tersambung", + "uptime": "Waktu Aktif", + "maxDown": "Maks Unduh", + "maxUp": "Maks Unggah", + "down": "Mati", + "up": "Hidup", + "received": "Diterima", + "sent": "Terkirim", + "externalIPAddress": "IP Eksternal" }, "caddy": { - "upstreams": "Upstreams", - "requests": "Current requests", - "requests_failed": "Failed requests" + "upstreams": "Strim Luar", + "requests": "Request saat ini", + "requests_failed": "Request gagal" }, "changedetectionio": { - "totalObserved": "Total Observed", - "diffsDetected": "Diffs Detected" + "totalObserved": "Total yang Diamati", + "diffsDetected": "Perbedaan yang Terdeteksi" }, "channelsdvrserver": { - "shows": "Shows", - "recordings": "Recordings", - "scheduled": "Scheduled", - "passes": "Passes" + "shows": "Acara", + "recordings": "Rekaman", + "scheduled": "Terjadwal", + "passes": "Tiket" }, "tautulli": { - "playing": "Playing", - "transcoding": "Transcoding", + "playing": "Sedang Diputar", + "transcoding": "Mentranskode", "bitrate": "Bitrate", - "no_active": "No Active Streams", - "plex_connection_error": "Check Plex Connection" + "no_active": "Tidak ada Strim Aktif", + "plex_connection_error": "Cek Koneksi ke Plex" }, "omada": { - "connectedAp": "Connected APs", - "activeUser": "Active devices", - "alerts": "Alerts", - "connectedGateway": "Connected gateways", - "connectedSwitches": "Connected switches" + "connectedAp": "AP Tersambung", + "activeUser": "Perangakat yang Aktif", + "alerts": "Peringatan", + "connectedGateway": "Gateway Tersambung", + "connectedSwitches": "Switch Tersambung" }, "nzbget": { - "rate": "Rate", - "remaining": "Remaining", - "downloaded": "Downloaded" + "rate": "Laju Bandwidth", + "remaining": "Sisa", + "downloaded": "Terunduh" }, "plex": { - "streams": "Active Streams", + "streams": "Stream Berjalan", "albums": "Albums", - "movies": "Movies", - "tv": "TV Shows" + "movies": "Film", + "tv": "Acara TV" }, "sabnzbd": { - "rate": "Rate", - "queue": "Queue", - "timeleft": "Time Left" + "rate": "Laju Bandwidth", + "queue": "Antrian", + "timeleft": "Sisa Waktu" }, "rutorrent": { - "active": "Active", - "upload": "Upload", - "download": "Download" + "active": "Aktif", + "upload": "Unggah", + "download": "Unduh" }, "transmission": { - "download": "Download", - "upload": "Upload", + "download": "Unduh", + "upload": "Unggah", "leech": "Leech", "seed": "Seed" }, "qbittorrent": { - "download": "Download", - "upload": "Upload", + "download": "Unduh", + "upload": "Unggah", "leech": "Leech", "seed": "Seed" }, "qnap": { - "cpuUsage": "CPU Usage", - "memUsage": "MEM Usage", - "systemTempC": "System Temp", - "poolUsage": "Pool Usage", - "volumeUsage": "Volume Usage", - "invalid": "Invalid" + "cpuUsage": "Penggunaan CPU", + "memUsage": "Penggunaan MEM", + "systemTempC": "Suhu Sistem", + "poolUsage": "Pengunaan Pool", + "volumeUsage": "Penggunaan Volume", + "invalid": "Tidak valid" }, "deluge": { - "download": "Download", - "upload": "Upload", + "download": "Unduh", + "upload": "Unggah", "leech": "Leech", "seed": "Seed" }, "downloadstation": { - "download": "Download", - "upload": "Upload", + "download": "Unduh", + "upload": "Unggah", "leech": "Leech", "seed": "Seed" }, "sonarr": { - "wanted": "Wanted", - "queued": "Queued", - "series": "Series", - "queue": "Queue", - "unknown": "Unknown" + "wanted": "Dicari", + "queued": "Terantrikan", + "series": "Seri", + "queue": "Antrian", + "unknown": "Tidak Diketahui" }, "radarr": { - "wanted": "Wanted", - "missing": "Missing", - "queued": "Queued", - "movies": "Movies", - "queue": "Queue", - "unknown": "Unknown" + "wanted": "Dicari", + "missing": "Tidak Ditemukan", + "queued": "Terantrikan", + "movies": "Film", + "queue": "Antrian", + "unknown": "Tidak Diketahui" }, "lidarr": { - "wanted": "Wanted", - "queued": "Queued", - "artists": "Artists" + "wanted": "Dicari", + "queued": "Terantrikan", + "artists": "Artis" }, "readarr": { - "wanted": "Wanted", - "queued": "Queued", - "books": "Books" + "wanted": "Dicari", + "queued": "Terantrikan", + "books": "Buku" }, "bazarr": { - "missingEpisodes": "Missing Episodes", - "missingMovies": "Missing Movies" + "missingEpisodes": "Episode Tidak Ditemukan", + "missingMovies": "Film Tidak Ditemukan" }, "ombi": { "pending": "Pending", - "approved": "Approved", - "available": "Available" + "approved": "Tersetujui", + "available": "Tersedia" }, "jellyseerr": { "pending": "Pending", - "approved": "Approved", - "available": "Available" + "approved": "Tersetujui", + "available": "Tersedia" }, "overseerr": { "pending": "Pending", - "processing": "Processing", - "approved": "Approved", - "available": "Available" + "processing": "Memproses", + "approved": "Tersetujui", + "available": "Tersedia" }, "pialert": { "total": "Total", - "connected": "Connected", - "new_devices": "New Devices", - "down_alerts": "Down Alerts" + "connected": "Tersambung", + "new_devices": "Perangkat Baru", + "down_alerts": "Alert Mati" }, "pihole": { - "queries": "Queries", - "blocked": "Blocked", - "blocked_percent": "Blocked %", - "gravity": "Gravity" + "queries": "Kueri", + "blocked": "Terblokir", + "blocked_percent": "% Terblokir", + "gravity": "Gravitasi" }, "adguard": { - "queries": "Queries", - "blocked": "Blocked", - "filtered": "Filtered", - "latency": "Latency" + "queries": "Kueri", + "blocked": "Terblokir", + "filtered": "Terfilter", + "latency": "Latensi" }, "speedtest": { - "upload": "Upload", - "download": "Download", + "upload": "Unggah", + "download": "Unduh", "ping": "Ping" }, "portainer": { - "running": "Running", - "stopped": "Stopped", + "running": "Berjalan", + "stopped": "Terhenti", "total": "Total" }, "tailscale": { - "address": "Address", - "expires": "Expires", - "never": "Never", - "last_seen": "Last Seen", - "now": "Now", - "years": "{{number}}y", - "weeks": "{{number}}w", - "days": "{{number}}d", - "hours": "{{number}}h", + "address": "Alamat", + "expires": "Kadaluarsa", + "never": "Tidak Pernah", + "last_seen": "Terakhir terlihat", + "now": "Sekarang", + "years": "{{number}}thn", + "weeks": "{{number}}mgg", + "days": "{{number}}h", + "hours": "{{number}}j", "minutes": "{{number}}m", - "seconds": "{{number}}s", - "ago": "{{value}} Ago" + "seconds": "{{number}}d", + "ago": "{{value}} Yang Lalu" }, "tdarr": { - "queue": "Queue", - "processed": "Processed", - "errored": "Errored", - "saved": "Saved" + "queue": "Antrian", + "processed": "Terproses", + "errored": "Error", + "saved": "Tersimpan" }, "traefik": { - "routers": "Routers", - "services": "Services", + "routers": "Router", + "services": "Layanan", "middleware": "Middleware" }, "navidrome": { - "nothing_streaming": "No Active Streams", - "please_wait": "Please Wait" + "nothing_streaming": "Tidak ada Strim Aktif", + "please_wait": "Mohon menunggu" }, "npm": { - "enabled": "Enabled", - "disabled": "Disabled", + "enabled": "Aktif", + "disabled": "Nonaktif", "total": "Total" }, "coinmarketcap": { - "configure": "Configure one or more crypto currencies to track", - "1hour": "1 Hour", - "1day": "1 Day", - "7days": "7 Days", - "30days": "30 Days" + "configure": "Konfigurasikan satu atau beberapa mata uang kripto untuk dilacak", + "1hour": "1 Jam", + "1day": "1 Hari", + "7days": "7 Hari", + "30days": "30 Hari" }, "gotify": { - "apps": "Applications", - "clients": "Clients", - "messages": "Messages" + "apps": "Aplikasi", + "clients": "Klien", + "messages": "Pesan" }, "prowlarr": { - "enableIndexers": "Indexers", - "numberOfGrabs": "Grabs", - "numberOfQueries": "Queries", - "numberOfFailGrabs": "Fail Grabs", - "numberOfFailQueries": "Fail Queries" + "enableIndexers": "Pengindeks", + "numberOfGrabs": "Jumlah Ambilan", + "numberOfQueries": "Kueri", + "numberOfFailGrabs": "Ambilan Gagal", + "numberOfFailQueries": "Jumlah Kueri Gagal" }, "jackett": { - "configured": "Configured", - "errored": "Errored" + "configured": "Konfigurasi", + "errored": "Error" }, "strelaysrv": { - "numActiveSessions": "Sessions", - "numConnections": "Connections", - "dataRelayed": "Relayed", - "transferRate": "Rate" + "numActiveSessions": "Sesi", + "numConnections": "Jumlah Koneksi", + "dataRelayed": "Data Diteruskan", + "transferRate": "Laju Bandwidth" }, "mastodon": { - "user_count": "Users", - "status_count": "Posts", - "domain_count": "Domains" + "user_count": "Pengguna", + "status_count": "Jumlah Posting", + "domain_count": "Jumlah Domain" }, "medusa": { - "wanted": "Wanted", - "queued": "Queued", - "series": "Series" + "wanted": "Dicari", + "queued": "Terantrikan", + "series": "Seri" }, "minecraft": { - "players": "Players", - "version": "Version", + "players": "Jumlah Pemain", + "version": "Versi", "status": "Status", "up": "Online", "down": "Offline" }, "miniflux": { - "read": "Read", - "unread": "Unread" + "read": "Baca", + "unread": "Belum Dibaca" }, "authentik": { - "users": "Users", - "loginsLast24H": "Logins (24h)", - "failedLoginsLast24H": "Failed Logins (24h)" + "users": "Pengguna", + "loginsLast24H": "Login (24j)", + "failedLoginsLast24H": "Login Gagal (24j)" }, "proxmox": { "mem": "MEM", @@ -395,413 +401,467 @@ }, "glances": { "cpu": "CPU", - "load": "Load", + "load": "Beban", "wait": "Harap tunggu", "temp": "TEMP", - "_temp": "Temp", - "warn": "Warn", - "uptime": "UP", + "_temp": "Suhu", + "warn": "Peringatan", + "uptime": "Waktu Aktif", "total": "Total", "free": "Luang", "used": "Digunakan", - "days": "d", - "hours": "h", - "crit": "Crit", - "read": "Read", - "write": "Write", + "days": "h", + "hours": "j", + "crit": "Penting", + "read": "Baca", + "write": "Tulis", "gpu": "GPU", "mem": "Mem", "swap": "Swap" }, "quicklaunch": { - "bookmark": "Bookmark", - "service": "Service", - "search": "Search", - "custom": "Custom", - "visit": "Visit", - "url": "URL" + "bookmark": "Penanda", + "service": "Layanan", + "search": "Cari", + "custom": "Kustom", + "visit": "Kunjungi", + "url": "URL", + "searchsuggestion": "Saran" }, "wmo": { - "0-day": "Sunny", - "0-night": "Clear", - "1-day": "Mainly Sunny", - "1-night": "Mainly Clear", - "2-day": "Partly Cloudy", - "2-night": "Partly Cloudy", - "3-day": "Cloudy", - "3-night": "Cloudy", - "45-day": "Foggy", - "45-night": "Foggy", - "48-day": "Foggy", - "48-night": "Foggy", - "51-day": "Light Drizzle", - "51-night": "Light Drizzle", - "53-day": "Drizzle", - "53-night": "Drizzle", - "55-day": "Heavy Drizzle", - "55-night": "Heavy Drizzle", - "56-day": "Light Freezing Drizzle", - "56-night": "Light Freezing Drizzle", - "57-day": "Freezing Drizzle", - "57-night": "Freezing Drizzle", - "61-day": "Light Rain", - "61-night": "Light Rain", - "63-day": "Rain", - "63-night": "Rain", - "65-day": "Heavy Rain", - "65-night": "Heavy Rain", - "66-day": "Freezing Rain", - "66-night": "Freezing Rain", - "67-day": "Freezing Rain", - "67-night": "Freezing Rain", - "71-day": "Light Snow", - "71-night": "Light Snow", - "73-day": "Snow", - "73-night": "Snow", - "75-day": "Heavy Snow", - "75-night": "Heavy Snow", - "77-day": "Snow Grains", - "77-night": "Snow Grains", - "80-day": "Light Showers", - "80-night": "Light Showers", - "81-day": "Showers", - "81-night": "Showers", - "82-day": "Heavy Showers", - "82-night": "Heavy Showers", - "85-day": "Snow Showers", - "85-night": "Snow Showers", - "86-day": "Snow Showers", - "86-night": "Snow Showers", - "95-day": "Thunderstorm", - "95-night": "Thunderstorm", - "96-day": "Thunderstorm With Hail", - "96-night": "Thunderstorm With Hail", - "99-day": "Thunderstorm With Hail", - "99-night": "Thunderstorm With Hail" + "0-day": "Cerah dan Terang", + "0-night": "Cerah", + "1-day": "Cerah", + "1-night": "Cerah", + "2-day": "Sedikit Berawan", + "2-night": "Sedikit Berawan", + "3-day": "Berawan", + "3-night": "Berawan", + "45-day": "Berkabut", + "45-night": "Berkabut", + "48-day": "Berkabut", + "48-night": "Berkabut", + "51-day": "Gerimis Ringan", + "51-night": "Gerimis Ringan", + "53-day": "Gerimis", + "53-night": "Gerimis", + "55-day": "Gerimis Lebat", + "55-night": "Gerimis Lebat", + "56-day": "Gerimis Membeku Ringan", + "56-night": "Gerimis Membeku Ringan", + "57-day": "Gerimis Membeku", + "57-night": "Gerimis Membeku", + "61-day": "Hujan Ringan", + "61-night": "Hujan Ringan", + "63-day": "Hujan", + "63-night": "Hujan", + "65-day": "Hujan Deras", + "65-night": "Hujan Deras", + "66-day": "Hujan Dingin", + "66-night": "Hujan Dingin", + "67-day": "Hujan Dingin", + "67-night": "Hujan Dingin", + "71-day": "Hujan Salju Ringan", + "71-night": "Hujan Salju Ringan", + "73-day": "Hujan Salju", + "73-night": "Hujan Salju", + "75-day": "Hujan Salju Lebat", + "75-night": "Hujan Salju Lebat", + "77-day": "Hujan Salju Butiran", + "77-night": "Hujan Salju Butiran", + "80-day": "Hujan Ringan", + "80-night": "Hujan Ringan", + "81-day": "Hujan", + "81-night": "Hujan", + "82-day": "Hujan Lebat", + "82-night": "Hujan Lebat", + "85-day": "Hujan Salju", + "85-night": "Hujan Salju", + "86-day": "Hujan Salju", + "86-night": "Hujan Salju", + "95-day": "Badai Petir", + "95-night": "Badai Petir", + "96-day": "Badai Petir Hujan Es", + "96-night": "Badai Petir Hujan Es", + "99-day": "Badai Petir Hujan Es", + "99-night": "Badai Petir Hujan Es" }, "homebridge": { - "available_update": "System", - "updates": "Updates", - "update_available": "Update Available", - "up_to_date": "Up to Date", - "child_bridges": "Child Bridges", + "available_update": "Sistem", + "updates": "Pembaruan", + "update_available": "Pembaruan Tersedia", + "up_to_date": "Terbaru", + "child_bridges": "Bridge Turunan", "child_bridges_status": "{{ok}}/{{total}}", - "up": "Up", + "up": "Hidup", "pending": "Pending", - "down": "Down" + "down": "Mati" }, "healthchecks": { - "new": "New", - "up": "Up", - "grace": "In Grace Period", - "down": "Down", - "paused": "Paused", + "new": "Baru", + "up": "Hidup", + "grace": "Dalam Masa Tenggang", + "down": "Mati", + "paused": "Pause", "status": "Status", - "last_ping": "Last Ping", - "never": "No pings yet" + "last_ping": "Ping Terakhir", + "never": "Tidak pernah di ping" }, "watchtower": { - "containers_scanned": "Scanned", - "containers_updated": "Updated", - "containers_failed": "Failed" + "containers_scanned": "Terpindai", + "containers_updated": "Terbarui", + "containers_failed": "Gagal" }, "autobrr": { - "approvedPushes": "Approved", - "rejectedPushes": "Rejected", - "filters": "Filters", - "indexers": "Indexers" + "approvedPushes": "Tersetujui", + "rejectedPushes": "Tertolak", + "filters": "Filter", + "indexers": "Pengindeks" }, "tubearchivist": { - "downloads": "Queue", - "videos": "Videos", - "channels": "Channels", - "playlists": "Playlists" + "downloads": "Antrian", + "videos": "Video", + "channels": "Channel", + "playlists": "Daftar Putar" }, "truenas": { - "load": "System Load", - "uptime": "Uptime", - "alerts": "Alerts" + "load": "Beban Sistem", + "uptime": "Waktu Aktif", + "alerts": "Peringatan" }, "pyload": { - "speed": "Speed", - "active": "Active", - "queue": "Queue", + "speed": "Kecepatan", + "active": "Aktif", + "queue": "Antrian", "total": "Total" }, "gluetun": { - "public_ip": "Public IP", + "public_ip": "IP Publik", "region": "Region", - "country": "Country" + "country": "Negara" }, "hdhomerun": { - "channels": "Channels", - "hd": "HD" + "channels": "Channel", + "hd": "HD", + "tunerCount": "Tuner", + "channelNumber": "Channel", + "channelNetwork": "Jaringan", + "signalStrength": "Kekuatan Signal", + "signalQuality": "Kualitas", + "symbolQuality": "Kualitas", + "networkRate": "Bitrate", + "clientIP": "Klien" }, "scrutiny": { - "passed": "Passed", - "failed": "Failed", - "unknown": "Unknown" + "passed": "Sukses", + "failed": "Gagal", + "unknown": "Tidak Diketahui" }, "paperlessngx": { - "inbox": "Inbox", + "inbox": "Kotak Masuk", "total": "Total" }, "peanut": { - "battery_charge": "Battery Charge", - "ups_load": "UPS Load", - "ups_status": "UPS Status", + "battery_charge": "Sisa Baterai", + "ups_load": "Beban UPS", + "ups_status": "Status UPS", "online": "Online", - "on_battery": "On Battery", - "low_battery": "Low Battery" + "on_battery": "Memakai Baterai", + "low_battery": "Baterai Lemah" }, "nextdns": { - "wait": "Please Wait", - "no_devices": "No Device Data Received" + "wait": "Mohon menunggu", + "no_devices": "Tidak ada Data Perangkat Diterima" }, "mikrotik": { - "cpuLoad": "CPU Load", - "memoryUsed": "Memory Used", - "uptime": "Uptime", + "cpuLoad": "Beban CPU", + "memoryUsed": "Memori Terpakai", + "uptime": "Waktu Aktif", "numberOfLeases": "Leases" }, "xteve": { - "streams_all": "All Streams", - "streams_active": "Active Streams", - "streams_xepg": "XEPG Channels" + "streams_all": "Semua Strim", + "streams_active": "Stream Berjalan", + "streams_xepg": "Channel XEPG" }, "opendtu": { - "yieldDay": "Today", - "absolutePower": "Power", - "relativePower": "Power %", - "limit": "Limit" + "yieldDay": "Hari ini", + "absolutePower": "Daya", + "relativePower": "% Daya", + "limit": "Batas" }, "opnsense": { - "cpu": "CPU Load", - "memory": "Active Memory", - "wanUpload": "WAN Upload", - "wanDownload": "WAN Download" + "cpu": "Beban CPU", + "memory": "Memori Aktif", + "wanUpload": "WAN Unggan", + "wanDownload": "WAN Unduh" }, "moonraker": { - "printer_state": "Printer State", - "print_status": "Print Status", - "print_progress": "Progress", - "layers": "Layers" + "printer_state": "Status Printer", + "print_status": "Status Cetakan", + "print_progress": "Progres", + "layers": "Layer" }, "octoprint": { "printer_state": "Status", - "temp_tool": "Tool temp", - "temp_bed": "Bed temp", - "job_completion": "Completion" + "temp_tool": "Suhu Alat", + "temp_bed": "Suhu Fondasi", + "job_completion": "Tugas Selesai" }, "cloudflared": { - "origin_ip": "Origin IP", + "origin_ip": "Sumber IP", "status": "Status" }, "pfsense": { - "load": "Load Avg", - "memory": "Mem Usage", - "wanStatus": "WAN Status", - "up": "Up", - "down": "Down", - "temp": "Temp", - "disk": "Disk Usage", - "wanIP": "WAN IP" + "load": "Beban Rata-rata", + "memory": "Penggunaan Memory", + "wanStatus": "Status WAN", + "up": "Hidup", + "down": "Mati", + "temp": "Suhu", + "disk": "Penggunaan Disk", + "wanIP": "IP WAN" }, "proxmoxbackupserver": { "datastore_usage": "Datastore", - "failed_tasks_24h": "Failed Tasks 24h", + "failed_tasks_24h": "Tugas Gagal (24j)", "cpu_usage": "CPU", "memory_usage": "Memory" }, "immich": { - "users": "Users", - "photos": "Photos", - "videos": "Videos", - "storage": "Storage" + "users": "Pengguna", + "photos": "Foto", + "videos": "Video", + "storage": "Penyimpanan" }, "uptimekuma": { - "up": "Sites Up", - "down": "Sites Down", - "uptime": "Uptime", - "incident": "Incident", + "up": "Situs Hidup", + "down": "Situs Mati", + "uptime": "Waktu Aktif", + "incident": "Insiden", "m": "m" }, "atsumeru": { - "series": "Series", - "archives": "Archives", - "chapters": "Chapters", - "categories": "Categories" + "series": "Seri", + "archives": "Arsip", + "chapters": "Bab", + "categories": "Kategori" }, "komga": { - "libraries": "Libraries", - "series": "Series", - "books": "Books" + "libraries": "Perpustakaan", + "series": "Seri", + "books": "Buku" }, "diskstation": { - "days": "Days", - "uptime": "Uptime", - "volumeAvailable": "Available" + "days": "Hari-hari", + "uptime": "Waktu Aktif", + "volumeAvailable": "Tersedia" }, "mylar": { - "series": "Series", - "issues": "Issues", - "wanted": "Wanted" + "series": "Seri", + "issues": "Isu", + "wanted": "Dicari" }, "photoprism": { "albums": "Albums", - "photos": "Photos", - "videos": "Videos", - "people": "People" + "photos": "Foto", + "videos": "Video", + "people": "Orang" }, "fileflows": { - "queue": "Queue", - "processing": "Processing", - "processed": "Processed", - "time": "Time" + "queue": "Antrian", + "processing": "Memproses", + "processed": "Terproses", + "time": "Waktu" }, "grafana": { - "dashboards": "Dashboards", - "datasources": "Data Sources", - "totalalerts": "Total Alerts", - "alertstriggered": "Alerts Triggered" + "dashboards": "Dasbor", + "datasources": "Sumber Data", + "totalalerts": "Jumlah Peringatan", + "alertstriggered": "Peringatan Terpicu" }, "nextcloud": { - "cpuload": "Cpu Load", - "memoryusage": "Memory Usage", - "freespace": "Free Space", - "activeusers": "Active Users", - "numfiles": "Files", - "numshares": "Shared Items" + "cpuload": "Beban CPU", + "memoryusage": "Beban Memory", + "freespace": "Space Tersedia", + "activeusers": "Pengguna Aktif", + "numfiles": "File", + "numshares": "Item yang Dibagikan" }, "kopia": { "status": "Status", - "size": "Size", - "lastrun": "Last Run", - "nextrun": "Next Run", - "failed": "Failed" + "size": "Ukuran", + "lastrun": "Terakhir Dijalankan", + "nextrun": "Akan Dijalankan Dalam", + "failed": "Gagal" }, "unmanic": { - "active_workers": "Active Workers", - "total_workers": "Total Workers", - "records_total": "Queue Length" + "active_workers": "Pengguna Aktif", + "total_workers": "Pengguna Total", + "records_total": "Panjang Antrian" }, "pterodactyl": { - "servers": "Servers", - "nodes": "Nodes" + "servers": "Server", + "nodes": "Node" }, "prometheus": { - "targets_up": "Targets Up", - "targets_down": "Targets Down", - "targets_total": "Total Targets" + "targets_up": "Target Aktif", + "targets_down": "Target Nonaktif", + "targets_total": "Target Total" + }, + "gatus": { + "up": "Situs Hidup", + "down": "Situs Mati", + "uptime": "Waktu Aktif" }, "ghostfolio": { - "gross_percent_today": "Today", - "gross_percent_1y": "One year", - "gross_percent_max": "All time" + "gross_percent_today": "Hari ini", + "gross_percent_1y": "Satu Tahun", + "gross_percent_max": "Sepanjang Masa" }, "audiobookshelf": { - "podcasts": "Podcasts", - "books": "Books", - "podcastsDuration": "Duration", - "booksDuration": "Duration" + "podcasts": "Podcast", + "books": "Buku", + "podcastsDuration": "Durasi", + "booksDuration": "Durasi" }, "homeassistant": { - "people_home": "People Home", - "lights_on": "Lights On", - "switches_on": "Switches On" + "people_home": "Orang Di Rumah", + "lights_on": "Lampu Nyala", + "switches_on": "Sakelar Nyala" }, "whatsupdocker": { - "monitoring": "Monitoring", - "updates": "Updates" + "monitoring": "Pengawasan", + "updates": "Pembaruan" }, "calibreweb": { - "books": "Books", - "authors": "Authors", - "categories": "Categories", - "series": "Series" + "books": "Buku", + "authors": "Penulis", + "categories": "Kategori", + "series": "Seri" }, "jdownloader": { - "downloadCount": "Queue", - "downloadBytesRemaining": "Remaining", - "downloadTotalBytes": "Size", - "downloadSpeed": "Speed" + "downloadCount": "Antrian", + "downloadBytesRemaining": "Sisa", + "downloadTotalBytes": "Ukuran", + "downloadSpeed": "Kecepatan" }, "kavita": { - "seriesCount": "Series", - "totalFiles": "Files" + "seriesCount": "Seri", + "totalFiles": "File" }, "azuredevops": { - "result": "Result", + "result": "Hasil", "status": "Status", "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress", - "totalPrs": "Total PRs", - "myPrs": "My PRs", - "approved": "Approved" + "succeeded": "Berhasil", + "notStarted": "Belum Dimulai", + "failed": "Gagal", + "canceled": "Dibatalkan", + "inProgress": "Sedang Berlangsung", + "totalPrs": "PR Total", + "myPrs": "PR Saya", + "approved": "Tersetujui" }, "gamedig": { "status": "Status", "online": "Online", "offline": "Offline", - "name": "Name", - "map": "Map", - "currentPlayers": "Current players", - "players": "Players", - "maxPlayers": "Max players", - "bots": "Bots", + "name": "Nama", + "map": "Peta", + "currentPlayers": "Jumlah pemain", + "players": "Jumlah Pemain", + "maxPlayers": "Maksimum pemain", + "bots": "Bot", "ping": "Ping" }, "urbackup": { "ok": "Ok", - "errored": "Errors", - "noRecent": "Out of Date", - "totalUsed": "Used Storage" + "errored": "Error", + "noRecent": "Tertinggal Versi", + "totalUsed": "Storage Terpakai" }, "mealie": { - "recipes": "Recipes", - "users": "Users", - "categories": "Categories", - "tags": "Tags" + "recipes": "Resep", + "users": "Pengguna", + "categories": "Kategori", + "tags": "Tag" }, "openmediavault": { - "downloading": "Downloading", + "downloading": "Mengunduh", "total": "Total", - "running": "Running", - "stopped": "Stopped", - "passed": "Passed", - "failed": "Failed" + "running": "Berjalan", + "stopped": "Terhenti", + "passed": "Sukses", + "failed": "Gagal" + }, + "openwrt": { + "uptime": "Waktu Aktif", + "cpuLoad": "Beban rata2 CPU (5m)", + "up": "Hidup", + "down": "Mati", + "bytesTx": "Tersalur", + "bytesRx": "Diterima" }, "uptimerobot": { "status": "Status", - "uptime": "Uptime", - "lastDown": "Last Downtime", - "downDuration": "Downtime Duration", - "sitesUp": "Sites Up", - "sitesDown": "Sites Down", - "paused": "Paused", - "notyetchecked": "Not Yet Checked", - "up": "Up", - "seemsdown": "Seems Down", - "down": "Down", - "unknown": "Unknown" + "uptime": "Waktu Aktif", + "lastDown": "Terakhir Terhenti", + "downDuration": "Jumlah Waktu Terhenti", + "sitesUp": "Situs Hidup", + "sitesDown": "Situs Mati", + "paused": "Pause", + "notyetchecked": "Belum Di Cek", + "up": "Hidup", + "seemsdown": "Sepertinya Mati", + "down": "Mati", + "unknown": "Tidak Diketahui" }, "calendar": { - "inCinemas": "In cinemas", - "physicalRelease": "Physical release", - "digitalRelease": "Digital release", - "noEventsToday": "No events for today!", - "noEventsFound": "No events found" + "inCinemas": "Tersedia Di Bioskop", + "physicalRelease": "Rilis Fisik", + "digitalRelease": "Rilis Digital", + "noEventsToday": "Tidak ada acara untuk hari ini!", + "noEventsFound": "Tidak ada acara yang ditemukan" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "Platform", + "totalRoms": "ROM Total" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "Peringatan", + "criticals": "Kritis" + }, + "plantit": { + "events": "Acara", + "plants": "Tanaman", + "photos": "Foto", + "species": "Spesies" + }, + "gitea": { + "notifications": "Notifikasi", + "issues": "Isu", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Film", + "tags": "Tag", + "oCount": "O Count" + }, + "tandoor": { + "users": "Pengguna", + "recipes": "Resep", + "keywords": "Keywords" } } diff --git a/public/locales/it/common.json b/public/locales/it/common.json index e61fff8b..99f3e7ed 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -107,6 +107,12 @@ "episodes": "Episodi", "songs": "Canzoni" }, + "esphome": { + "offline": "Non in linea", + "online": "Online", + "total": "Totale", + "unknown": "Sconosciuto" + }, "evcc": { "pv_power": "Produzione", "battery_soc": "Batteria", @@ -127,21 +133,21 @@ }, "fritzbox": { "connectionStatus": "Stato", - "connectionStatusUnconfigured": "Unconfigured", - "connectionStatusConnecting": "Connecting", - "connectionStatusAuthenticating": "Authenticating", - "connectionStatusPendingDisconnect": "Pending Disconnect", - "connectionStatusDisconnecting": "Disconnecting", - "connectionStatusDisconnected": "Disconnected", + "connectionStatusUnconfigured": "Non configurato", + "connectionStatusConnecting": "Connessione in corso", + "connectionStatusAuthenticating": "In fase di autenticazione", + "connectionStatusPendingDisconnect": "In attesa di disconnessione", + "connectionStatusDisconnecting": "Disconnessione in corso", + "connectionStatusDisconnected": "Disconnesso", "connectionStatusConnected": "Connesso", "uptime": "Tempo di attività", "maxDown": "Max. Down", "maxUp": "Max. Up", "down": "Down", "up": "Up", - "received": "Received", - "sent": "Sent", - "externalIPAddress": "Ext. IP" + "received": "Ricevuti", + "sent": "Inviati", + "externalIPAddress": "IP Esterno" }, "caddy": { "upstreams": "Upstream", @@ -419,7 +425,8 @@ "search": "Cerca", "custom": "Personalizzato", "visit": "Visita", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Soleggiato", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Canali", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Bitrate", + "clientIP": "Client" }, "scrutiny": { "passed": "Passati", @@ -694,6 +709,11 @@ "targets_down": "Target Non Attivi", "targets_total": "Targets Totali" }, + "gatus": { + "up": "Siti On", + "down": "Siti Down", + "uptime": "Tempo di attività" + }, "ghostfolio": { "gross_percent_today": "Oggi", "gross_percent_1y": "Un anno", @@ -775,6 +795,14 @@ "passed": "Passati", "failed": "Fallito" }, + "openwrt": { + "uptime": "Tempo di attività", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Ricevuti" + }, "uptimerobot": { "status": "Stato", "uptime": "Tempo di attività", @@ -805,9 +833,35 @@ "criticals": "Criticals" }, "plantit": { - "events": "Eventi", - "plants": "Piante", - "species": "Specie", - "images": "Immagini" + "events": "Events", + "plants": "Plants", + "photos": "Foto", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Problemi", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Film", + "tags": "Tag", + "oCount": "O Count" + }, + "tandoor": { + "users": "Utenti", + "recipes": "Ricette", + "keywords": "Keywords" } } diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index 9725e59b..e8520815 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -15,10 +15,10 @@ "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", "months": "mo", - "days": "d", - "hours": "h", - "minutes": "m", - "seconds": "s" + "days": "日", + "hours": "時間", + "minutes": "分", + "seconds": "秒" }, "widget": { "missing_type": "見つからないウィジェットタイプ: {{type}}", @@ -64,22 +64,22 @@ "up": "上へ", "down": "下へ", "wait": "お待ちください", - "empty_data": "サブシステム状態・不明" + "empty_data": "サブシステムの状態は不明" }, "docker": { - "rx": "RX", - "tx": "TX", + "rx": "受信済み", + "tx": "送信済み", "mem": "MEM", "cpu": "CPU", "running": "起動中", "offline": "オフライン", "error": "エラー", "unknown": "不明", - "healthy": "健全", + "healthy": "正常", "starting": "起動中", "unhealthy": "非健全", "not_found": "不明", - "exited": "終了", + "exited": "停止しました", "partial": "部分的" }, "ping": { @@ -90,7 +90,7 @@ "not_available": "利用できません。" }, "siteMonitor": { - "http_status": "HTTP status", + "http_status": "HTTP ステータス", "error": "エラー", "response": "Response", "down": "下へ", @@ -107,6 +107,12 @@ "episodes": "エピソード", "songs": "曲" }, + "esphome": { + "offline": "オフライン", + "online": "オンライン", + "total": "合計", + "unknown": "不明" + }, "evcc": { "pv_power": "発電量", "battery_soc": "バッテリー", @@ -139,8 +145,8 @@ "maxUp": "Max. Up", "down": "下へ", "up": "上へ", - "received": "Received", - "sent": "Sent", + "received": "受信済み", + "sent": "送信済み", "externalIPAddress": "Ext. IP" }, "caddy": { @@ -404,8 +410,8 @@ "total": "合計", "free": "空き", "used": "使用", - "days": "d", - "hours": "h", + "days": "日", + "hours": "時間", "crit": "クリティカル", "read": "既読", "write": "書き込み", @@ -419,7 +425,8 @@ "search": "検索", "custom": "カスタム", "visit": "訪問", - "url": "URL" + "url": "URL", + "searchsuggestion": "提案" }, "wmo": { "0-day": "晴れ", @@ -523,7 +530,7 @@ "alerts": "アラート" }, "pyload": { - "speed": "スピード", + "speed": "速度", "active": "アクティブ", "queue": "キュー", "total": "合計" @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "チャンネル", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "チャンネル", + "channelNetwork": "ネットワーク", + "signalStrength": "強さ", + "signalQuality": "クオリティ", + "symbolQuality": "クオリティ", + "networkRate": "ビットレート", + "clientIP": "クライアント IP" }, "scrutiny": { "passed": "合格", @@ -548,11 +563,11 @@ }, "peanut": { "battery_charge": "Battery Charge", - "ups_load": "UPS Load", - "ups_status": "UPS Status", + "ups_load": "UPS 負荷", + "ups_status": "UPS 状態", "online": "オンライン", - "on_battery": "On Battery", - "low_battery": "Low Battery" + "on_battery": "バッテリー稼働中", + "low_battery": "バッテリー残量低下" }, "nextdns": { "wait": "お待ちください", @@ -560,7 +575,7 @@ }, "mikrotik": { "cpuLoad": "CPU負荷", - "memoryUsed": "使用済みメモリ", + "memoryUsed": "メモリ使用量", "uptime": "稼働時間", "numberOfLeases": "リース" }, @@ -623,8 +638,8 @@ "up": "サイトUp", "down": "サイトDown", "uptime": "稼働時間", - "incident": "インシデント", - "m": "m" + "incident": "事件", + "m": "分" }, "atsumeru": { "series": "シリーズ", @@ -694,6 +709,11 @@ "targets_down": "ターゲット Down", "targets_total": "ターゲット合計" }, + "gatus": { + "up": "サイトUp", + "down": "サイトDown", + "uptime": "稼働時間" + }, "ghostfolio": { "gross_percent_today": "今日", "gross_percent_1y": "1年", @@ -724,7 +744,7 @@ "downloadCount": "キュー", "downloadBytesRemaining": "残り", "downloadTotalBytes": "サイズ", - "downloadSpeed": "スピード" + "downloadSpeed": "速度" }, "kavita": { "seriesCount": "シリーズ", @@ -775,11 +795,19 @@ "passed": "合格", "failed": "失敗" }, + "openwrt": { + "uptime": "稼働時間", + "cpuLoad": "CPU 平均負荷(5 分)", + "up": "上へ", + "down": "下へ", + "bytesTx": "送信済み", + "bytesRx": "受信済み" + }, "uptimerobot": { "status": "状態", "uptime": "稼働時間", "lastDown": "最後のダウンタイム", - "downDuration": "ダウンタイム感覚", + "downDuration": "ダウンタイム時間", "sitesUp": "サイトUp", "sitesDown": "サイトDown", "paused": "一時停止中", @@ -793,15 +821,47 @@ "inCinemas": "映画館内", "physicalRelease": "物理的なリリース", "digitalRelease": "デジタル・リリース", - "noEventsToday": "No events for today!", - "noEventsFound": "No events found" + "noEventsToday": "本日の予定なし", + "noEventsFound": "予定が見つかりません" }, "romm": { "platforms": "Platforms", "totalRoms": "Total ROMs" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "警告", + "criticals": "重大" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "写真", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "課題", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "映画", + "tags": "タグ", + "oCount": "O Count" + }, + "tandoor": { + "users": "ユーザ", + "recipes": "レシピ", + "keywords": "Keywords" } } diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index 13961129..d80382c9 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -107,6 +107,12 @@ "episodes": "에피소드", "songs": "음악" }, + "esphome": { + "offline": "중지", + "online": "Online", + "total": "총합", + "unknown": "알 수 없음" + }, "evcc": { "pv_power": "Production", "battery_soc": "Battery", @@ -419,7 +425,8 @@ "search": "Search", "custom": "Custom", "visit": "Visit", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Sunny", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Channels", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "비트레이트", + "clientIP": "Client" }, "scrutiny": { "passed": "Passed", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Uptime" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Passed", "failed": "Failed" }, + "openwrt": { + "uptime": "Uptime", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "상태", "uptime": "Uptime", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "영화", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "사용자", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json index 1c35a7f2..f41ed97d 100644 --- a/public/locales/lv/common.json +++ b/public/locales/lv/common.json @@ -107,6 +107,12 @@ "episodes": "Episodes", "songs": "Songs" }, + "esphome": { + "offline": "Bezsaistē", + "online": "Online", + "total": "Kopā", + "unknown": "Nezināms" + }, "evcc": { "pv_power": "Production", "battery_soc": "Battery", @@ -419,7 +425,8 @@ "search": "Search", "custom": "Custom", "visit": "Visit", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Saulains", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Channels", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Bitrate", + "clientIP": "Client" }, "scrutiny": { "passed": "Passed", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Uptime" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Passed", "failed": "Failed" }, + "openwrt": { + "uptime": "Uptime", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "Statuss", "uptime": "Uptime", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Movies", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Lietotāji", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json index c62138cb..f67cfaf6 100644 --- a/public/locales/ms/common.json +++ b/public/locales/ms/common.json @@ -14,9 +14,9 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", - "months": "mo", - "days": "d", - "hours": "h", + "months": "bln", + "days": "h", + "hours": "j", "minutes": "m", "seconds": "s" }, @@ -45,9 +45,9 @@ "free": "Bebas", "used": "Telah diguna", "load": "Beban", - "temp": "TEMP", - "max": "Max", - "uptime": "UP" + "temp": "SUHU", + "max": "Tertinggi", + "uptime": "HIDUP" }, "unifi": { "users": "Pengguna", @@ -61,102 +61,108 @@ "wlan_devices": "Peranti WLAN", "lan_users": "Pengguna LAN", "wlan_users": "Pengguna WLAN", - "up": "UP", + "up": "HIDUP", "down": "MATI", "wait": "Sila tunggu", - "empty_data": "Subsystem status unknown" + "empty_data": "Status subsistem tak diketahui" }, "docker": { "rx": "RX", "tx": "TX", "mem": "MEM", "cpu": "CPU", - "running": "Running", + "running": "Sedang jalan", "offline": "Luar talian", "error": "Ralat", "unknown": "Tidak Diketahui", - "healthy": "Healthy", - "starting": "Starting", - "unhealthy": "Unhealthy", - "not_found": "Not Found", - "exited": "Exited", - "partial": "Partial" + "healthy": "Sihat", + "starting": "Bermula", + "unhealthy": "Kurang sihat", + "not_found": "Tidak dijumpai", + "exited": "Dimatikan", + "partial": "Sebahagian" }, "ping": { "error": "Ralat", "ping": "Ping", - "down": "Down", - "up": "Up", - "not_available": "Not Available" + "down": "Mati", + "up": "Hidup", + "not_available": "Tidak dijumpai" }, "siteMonitor": { - "http_status": "HTTP status", + "http_status": "Status HTTP", "error": "Ralat", - "response": "Response", - "down": "Down", - "up": "Up", - "not_available": "Not Available" + "response": "Tindak balas", + "down": "Mati", + "up": "Hidup", + "not_available": "Tidak dijumpai" }, "emby": { "playing": "Sedang dimainkan", "transcoding": "Transkoding", "bitrate": "Kadar bit", "no_active": "Tiada Strim Aktif", - "movies": "Movies", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "movies": "Filem", + "series": "Siri", + "episodes": "Episod", + "songs": "Lagu" + }, + "esphome": { + "offline": "Luar talian", + "online": "Dalam Talian", + "total": "Jumlah", + "unknown": "Tidak Diketahui" }, "evcc": { - "pv_power": "Production", - "battery_soc": "Battery", + "pv_power": "Produksi", + "battery_soc": "Bateri", "grid_power": "Grid", - "home_power": "Consumption", - "charge_power": "Charger", - "watt_hour": "Wh" + "home_power": "Penggunaan", + "charge_power": "Pengecas", + "watt_hour": "Wj" }, "flood": { - "download": "Download", - "upload": "Upload", + "download": "Muat turun", + "upload": "Muat naik", "leech": "Leech", "seed": "Seed" }, "freshrss": { - "subscriptions": "Subscriptions", - "unread": "Unread" + "subscriptions": "Langganan", + "unread": "Belum dibaca" }, "fritzbox": { "connectionStatus": "Status", - "connectionStatusUnconfigured": "Unconfigured", - "connectionStatusConnecting": "Connecting", - "connectionStatusAuthenticating": "Authenticating", - "connectionStatusPendingDisconnect": "Pending Disconnect", - "connectionStatusDisconnecting": "Disconnecting", - "connectionStatusDisconnected": "Disconnected", + "connectionStatusUnconfigured": "Belum disuai", + "connectionStatusConnecting": "Menyambung", + "connectionStatusAuthenticating": "Pengesahan", + "connectionStatusPendingDisconnect": "Tunggu untuk Putus", + "connectionStatusDisconnecting": "Putuskan", + "connectionStatusDisconnected": "Sambungan Terputus", "connectionStatusConnected": "Connected", "uptime": "Masa Hidup", - "maxDown": "Max. Down", - "maxUp": "Max. Up", - "down": "Down", - "up": "Up", - "received": "Received", - "sent": "Sent", - "externalIPAddress": "Ext. IP" + "maxDown": "Mati Maksima", + "maxUp": "Hidup Maksima", + "down": "Mati", + "up": "Hidup", + "received": "Diterima", + "sent": "Telah dihantar", + "externalIPAddress": "IP Luaran" }, "caddy": { "upstreams": "Upstreams", - "requests": "Current requests", - "requests_failed": "Failed requests" + "requests": "Permintaan semasa", + "requests_failed": "Permintaan gagal" }, "changedetectionio": { "totalObserved": "Jumlah Diperhatikan", "diffsDetected": "Perbezaan Dikesan" }, "channelsdvrserver": { - "shows": "Shows", - "recordings": "Recordings", - "scheduled": "Scheduled", - "passes": "Passes" + "shows": "Papar", + "recordings": "Rakaman", + "scheduled": "Dijadualkan", + "passes": "Lulus" }, "tautulli": { "playing": "Sedang dimainkan", @@ -180,7 +186,7 @@ "plex": { "streams": "Strim Aktif", "albums": "Albums", - "movies": "Movies", + "movies": "Filem", "tv": "Rancangan TV" }, "sabnzbd": { @@ -190,18 +196,18 @@ }, "rutorrent": { "active": "Aktif", - "upload": "Upload", - "download": "Download" + "upload": "Muat naik", + "download": "Muat turun" }, "transmission": { - "download": "Download", - "upload": "Upload", + "download": "Muat turun", + "upload": "Muat naik", "leech": "Leech", "seed": "Seed" }, "qbittorrent": { - "download": "Download", - "upload": "Upload", + "download": "Muat turun", + "upload": "Muat naik", "leech": "Leech", "seed": "Seed" }, @@ -214,21 +220,21 @@ "invalid": "Invalid" }, "deluge": { - "download": "Download", - "upload": "Upload", + "download": "Muat turun", + "upload": "Muat naik", "leech": "Leech", "seed": "Seed" }, "downloadstation": { - "download": "Download", - "upload": "Upload", + "download": "Muat turun", + "upload": "Muat naik", "leech": "Leech", "seed": "Seed" }, "sonarr": { "wanted": "Mahu", "queued": "Dibaris Gilir", - "series": "Series", + "series": "Siri", "queue": "Barisan", "unknown": "Tidak Diketahui" }, @@ -236,7 +242,7 @@ "wanted": "Mahu", "missing": "Hilang", "queued": "Dibaris Gilir", - "movies": "Movies", + "movies": "Filem", "queue": "Barisan", "unknown": "Tidak Diketahui" }, @@ -289,12 +295,12 @@ "latency": "Kependaman" }, "speedtest": { - "upload": "Upload", - "download": "Download", + "upload": "Muat naik", + "download": "Muat turun", "ping": "Ping" }, "portainer": { - "running": "Running", + "running": "Sedang jalan", "stopped": "Terhenti", "total": "Jumlah" }, @@ -310,13 +316,13 @@ "hours": "{{number}}h", "minutes": "{{number}}m", "seconds": "{{number}}s", - "ago": "{{value}} Ago" + "ago": "{{value}} Lepas" }, "tdarr": { "queue": "Barisan", - "processed": "Processed", - "errored": "Errored", - "saved": "Saved" + "processed": "Sudah diprosess", + "errored": "Ralat", + "saved": "Simpan" }, "traefik": { "routers": "Router", @@ -353,7 +359,7 @@ }, "jackett": { "configured": "Telah Dikonfigurasi", - "errored": "Errored" + "errored": "Ralat" }, "strelaysrv": { "numActiveSessions": "Sesi", @@ -369,18 +375,18 @@ "medusa": { "wanted": "Mahu", "queued": "Dibaris Gilir", - "series": "Series" + "series": "Siri" }, "minecraft": { - "players": "Players", - "version": "Version", + "players": "Senarai pemain", + "version": "Versi", "status": "Status", - "up": "Online", + "up": "Dalam Talian", "down": "Luar talian" }, "miniflux": { - "read": "Read", - "unread": "Unread" + "read": "Baca", + "unread": "Belum dibaca" }, "authentik": { "users": "Pengguna", @@ -390,36 +396,37 @@ "proxmox": { "mem": "MEM", "cpu": "CPU", - "lxc": "LXC", + "lxc": "LCX", "vms": "Mesin Maya" }, "glances": { "cpu": "CPU", "load": "Beban", "wait": "Sila tunggu", - "temp": "TEMP", - "_temp": "Temp", - "warn": "Warn", - "uptime": "UP", + "temp": "SUHU", + "_temp": "Suhu", + "warn": "Amaran", + "uptime": "HIDUP", "total": "Jumlah", "free": "Bebas", "used": "Telah diguna", - "days": "d", - "hours": "h", - "crit": "Crit", - "read": "Read", - "write": "Write", + "days": "h", + "hours": "j", + "crit": "Krit", + "read": "Baca", + "write": "Tulis", "gpu": "GPU", "mem": "Mem", - "swap": "Swap" + "swap": "Penukaran" }, "quicklaunch": { "bookmark": "Tandabuku", "service": "Servis", - "search": "Search", - "custom": "Custom", - "visit": "Visit", - "url": "URL" + "search": "Carian", + "custom": "Khusus", + "visit": "Lawat", + "url": "URL", + "searchsuggestion": "Cadangan" }, "wmo": { "0-day": "Terik", @@ -486,19 +493,19 @@ "up_to_date": "Terkemaskini", "child_bridges": "Jambatan Anak", "child_bridges_status": "{{ok}}/{{total}}", - "up": "Up", + "up": "Hidup", "pending": "Tertunda", - "down": "Down" + "down": "Mati" }, "healthchecks": { - "new": "New", - "up": "Up", - "grace": "In Grace Period", - "down": "Down", - "paused": "Paused", + "new": "Baharu", + "up": "Hidup", + "grace": "Tempoh Aman", + "down": "Mati", + "paused": "Tangguh", "status": "Status", - "last_ping": "Last Ping", - "never": "No pings yet" + "last_ping": "Ping terakhir", + "never": "Tiada ping" }, "watchtower": { "containers_scanned": "Terimbas", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Saluran", - "hd": "HD" + "hd": "HD", + "tunerCount": "Penala", + "channelNumber": "Saluran", + "channelNetwork": "Rangkaian", + "signalStrength": "Kekuatan", + "signalQuality": "Kualiti", + "symbolQuality": "Kualiti", + "networkRate": "Kadar bit", + "clientIP": "Klien" }, "scrutiny": { "passed": "Lulus", @@ -547,36 +562,36 @@ "total": "Jumlah" }, "peanut": { - "battery_charge": "Battery Charge", - "ups_load": "UPS Load", - "ups_status": "UPS Status", - "online": "Online", - "on_battery": "On Battery", - "low_battery": "Low Battery" + "battery_charge": "Bateri dicas", + "ups_load": "Beban UPS", + "ups_status": "Status UPS", + "online": "Dalam Talian", + "on_battery": "Guna bateri", + "low_battery": "Bateri lemah" }, "nextdns": { "wait": "Sila tunggu", - "no_devices": "No Device Data Received" + "no_devices": "Tiada Data Diterima Peranti" }, "mikrotik": { - "cpuLoad": "CPU Load", - "memoryUsed": "Memory Used", + "cpuLoad": "Beban CPU", + "memoryUsed": "Penggunaan memori", "uptime": "Masa Hidup", - "numberOfLeases": "Leases" + "numberOfLeases": "Sewaan" }, "xteve": { - "streams_all": "All Streams", + "streams_all": "Semua Strim", "streams_active": "Strim Aktif", - "streams_xepg": "XEPG Channels" + "streams_xepg": "Saluran XEPG" }, "opendtu": { - "yieldDay": "Today", - "absolutePower": "Power", - "relativePower": "Power %", - "limit": "Limit" + "yieldDay": "Hari ini", + "absolutePower": "Kuasa", + "relativePower": "Kuasa %", + "limit": "Had/Batas" }, "opnsense": { - "cpu": "CPU Load", + "cpu": "Beban CPU", "memory": "Active Memory", "wanUpload": "WAN Upload", "wanDownload": "WAN Download" @@ -601,9 +616,9 @@ "load": "Load Avg", "memory": "Mem Usage", "wanStatus": "WAN Status", - "up": "Up", - "down": "Down", - "temp": "Temp", + "up": "Hidup", + "down": "Mati", + "temp": "Suhu", "disk": "Disk Usage", "wanIP": "WAN IP" }, @@ -627,14 +642,14 @@ "m": "m" }, "atsumeru": { - "series": "Series", + "series": "Siri", "archives": "Archives", "chapters": "Chapters", "categories": "Categories" }, "komga": { "libraries": "Libraries", - "series": "Series", + "series": "Siri", "books": "Buku" }, "diskstation": { @@ -643,7 +658,7 @@ "volumeAvailable": "Sudah Ada" }, "mylar": { - "series": "Series", + "series": "Siri", "issues": "Issues", "wanted": "Mahu" }, @@ -656,7 +671,7 @@ "fileflows": { "queue": "Barisan", "processing": "Processing", - "processed": "Processed", + "processed": "Sudah diprosess", "time": "Time" }, "grafana": { @@ -691,34 +706,39 @@ }, "prometheus": { "targets_up": "Targets Up", - "targets_down": "Targets Down", - "targets_total": "Total Targets" + "targets_down": "Sasaran Mati", + "targets_total": "Jumlah Sasaran" + }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Masa Hidup" }, "ghostfolio": { - "gross_percent_today": "Today", - "gross_percent_1y": "One year", - "gross_percent_max": "All time" + "gross_percent_today": "Hari ini", + "gross_percent_1y": "Satu tahun", + "gross_percent_max": "Sepanjang masa" }, "audiobookshelf": { - "podcasts": "Podcasts", + "podcasts": "Podkas", "books": "Buku", - "podcastsDuration": "Duration", - "booksDuration": "Duration" + "podcastsDuration": "Tempoh", + "booksDuration": "Tempoh" }, "homeassistant": { - "people_home": "People Home", - "lights_on": "Lights On", - "switches_on": "Switches On" + "people_home": "Orang Dirumah", + "lights_on": "Hidupkan Lampu", + "switches_on": "Hidupkan Suis" }, "whatsupdocker": { - "monitoring": "Monitoring", + "monitoring": "Pemantauan", "updates": "Kemaskini" }, "calibreweb": { "books": "Buku", - "authors": "Authors", + "authors": "Pengarang/Penulis", "categories": "Categories", - "series": "Series" + "series": "Siri" }, "jdownloader": { "downloadCount": "Barisan", @@ -727,81 +747,121 @@ "downloadSpeed": "Kelajuan" }, "kavita": { - "seriesCount": "Series", + "seriesCount": "Siri", "totalFiles": "Files" }, "azuredevops": { - "result": "Result", + "result": "Keputusan", "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", + "buildId": "ID Binaan", + "succeeded": "Berjaya", + "notStarted": "Belum Bermula", "failed": "Gagal", - "canceled": "Canceled", - "inProgress": "In Progress", - "totalPrs": "Total PRs", - "myPrs": "My PRs", + "canceled": "Dibatalkan", + "inProgress": "Sedang Diproses", + "totalPrs": "Jumlah PR", + "myPrs": "PR Sendiri", "approved": "Lulus" }, "gamedig": { "status": "Status", - "online": "Online", + "online": "Dalam Talian", "offline": "Luar talian", - "name": "Name", - "map": "Map", - "currentPlayers": "Current players", - "players": "Players", - "maxPlayers": "Max players", - "bots": "Bots", + "name": "Nama", + "map": "Peta", + "currentPlayers": "Pemain Semasa", + "players": "Senarai pemain", + "maxPlayers": "Bilangan peserta maksimum", + "bots": "Bot", "ping": "Ping" }, "urbackup": { "ok": "Ok", - "errored": "Errors", - "noRecent": "Out of Date", - "totalUsed": "Used Storage" + "errored": "Ralat", + "noRecent": "Luput tarikh", + "totalUsed": "Storan digunakan" }, "mealie": { - "recipes": "Recipes", + "recipes": "Resipi", "users": "Pengguna", "categories": "Categories", - "tags": "Tags" + "tags": "Tanda nama" }, "openmediavault": { - "downloading": "Downloading", + "downloading": "Sedang muat turun", "total": "Jumlah", - "running": "Running", + "running": "Sedang jalan", "stopped": "Terhenti", "passed": "Lulus", "failed": "Gagal" }, + "openwrt": { + "uptime": "Masa Hidup", + "cpuLoad": "Purata Beban CPU (5m)", + "up": "Hidup", + "down": "Mati", + "bytesTx": "Terpancar", + "bytesRx": "Diterima" + }, "uptimerobot": { "status": "Status", "uptime": "Masa Hidup", - "lastDown": "Last Downtime", - "downDuration": "Downtime Duration", + "lastDown": "Masa Mati Terakhir", + "downDuration": "Jangkamasa Kematian", "sitesUp": "Sites Up", "sitesDown": "Sites Down", - "paused": "Paused", - "notyetchecked": "Not Yet Checked", - "up": "Up", - "seemsdown": "Seems Down", - "down": "Down", + "paused": "Tangguh", + "notyetchecked": "Belum Disemak", + "up": "Hidup", + "seemsdown": "Seperti Mati", + "down": "Mati", "unknown": "Tidak Diketahui" }, "calendar": { - "inCinemas": "In cinemas", - "physicalRelease": "Physical release", - "digitalRelease": "Digital release", - "noEventsToday": "No events for today!", - "noEventsFound": "No events found" + "inCinemas": "Di pawagam", + "physicalRelease": "Edaran fizikal", + "digitalRelease": "Edaran digital", + "noEventsToday": "Tiada agenda untuk hari ini!", + "noEventsFound": "Tiada agenda dijumpai" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "Platform", + "totalRoms": "Jumlah ROM" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "Amaran", + "criticals": "Kritikal" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Filem", + "tags": "Tanda nama", + "oCount": "O Count" + }, + "tandoor": { + "users": "Pengguna", + "recipes": "Resipi", + "keywords": "Keywords" } } diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index c2fac214..cdf95505 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -107,6 +107,12 @@ "episodes": "Afleveringen", "songs": "Nummers" }, + "esphome": { + "offline": "Onbereikbaar", + "online": "Bereikbaar", + "total": "Totaal", + "unknown": "Onbekend" + }, "evcc": { "pv_power": "Productie", "battery_soc": "Batterij", @@ -419,7 +425,8 @@ "search": "Zoek", "custom": "Aangepast", "visit": "Bezoek", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestie" }, "wmo": { "0-day": "Zonnig", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Kanalen", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Kanaal", + "channelNetwork": "Netwerk", + "signalStrength": "Sterkte", + "signalQuality": "Kwaliteit", + "symbolQuality": "Kwaliteit", + "networkRate": "Bitrate", + "clientIP": "Client" }, "scrutiny": { "passed": "Geslaagd", @@ -694,6 +709,11 @@ "targets_down": "Doelen onbereikbaar", "targets_total": "Totaal aantal doelen" }, + "gatus": { + "up": "Sites Bereikbaar", + "down": "Sites Onbereikbaar", + "uptime": "Online" + }, "ghostfolio": { "gross_percent_today": "Vandaag", "gross_percent_1y": "Een jaar", @@ -775,6 +795,14 @@ "passed": "Geslaagd", "failed": "Gefaald" }, + "openwrt": { + "uptime": "Online", + "cpuLoad": "CPU Load Gem. (5m)", + "up": "Online", + "down": "Offline", + "bytesTx": "Verzonden", + "bytesRx": "Ontvangen" + }, "uptimerobot": { "status": "Status", "uptime": "Online", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Waarschuwingen", "criticals": "Kritiek" + }, + "plantit": { + "events": "Gebeurtenissen", + "plants": "Planten", + "photos": "Foto's", + "species": "Soorten" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Problemen", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scènes", + "scenesPlayed": "Afgespeelde scènes", + "playCount": "Totaal aantal keer gespeeld", + "playDuration": "Tijd Bekeken", + "sceneSize": "Grootte Scènes", + "sceneDuration": "Duur scènes", + "images": "Afbeeldingen", + "imageSize": "Afbeeldingsgrootte", + "galleries": "Galerijen", + "performers": "Uitvoerenden", + "studios": "Studio's", + "movies": "Films", + "tags": "Label", + "oCount": "O Aantal" + }, + "tandoor": { + "users": "Gebruikers", + "recipes": "Recepten", + "keywords": "Keywords" } } diff --git a/public/locales/no/common.json b/public/locales/no/common.json index ca628d3b..65ed254a 100644 --- a/public/locales/no/common.json +++ b/public/locales/no/common.json @@ -107,6 +107,12 @@ "episodes": "Episodes", "songs": "Songs" }, + "esphome": { + "offline": "Offline", + "online": "Online", + "total": "Total", + "unknown": "Unknown" + }, "evcc": { "pv_power": "Production", "battery_soc": "Battery", @@ -419,7 +425,8 @@ "search": "Search", "custom": "Custom", "visit": "Visit", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Sunny", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Channels", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Bitrate", + "clientIP": "Client" }, "scrutiny": { "passed": "Passed", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Uptime" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Passed", "failed": "Failed" }, + "openwrt": { + "uptime": "Uptime", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "Status", "uptime": "Uptime", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Movies", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Users", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index f6e6dca4..6b6ac5b7 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -14,9 +14,9 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", - "months": "mo", + "months": "mc", "days": "d", - "hours": "h", + "hours": "g", "minutes": "m", "seconds": "s" }, @@ -107,6 +107,12 @@ "episodes": "Odcinki", "songs": "Piosenki" }, + "esphome": { + "offline": "Nieosiągalny", + "online": "Dostępny", + "total": "Całkowite", + "unknown": "Nieznany" + }, "evcc": { "pv_power": "Produkcja", "battery_soc": "Bateria", @@ -405,7 +411,7 @@ "free": "Wolne", "used": "Użyte", "days": "d", - "hours": "h", + "hours": "g", "crit": "Crit", "read": "Przeczytane", "write": "Zapis", @@ -419,7 +425,8 @@ "search": "Wyszukaj", "custom": "Niestandardowe", "visit": "Odwiedź", - "url": "Adres URL" + "url": "Adres URL", + "searchsuggestion": "Sugestia" }, "wmo": { "0-day": "Słoneczny", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Kanały", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Kanał", + "channelNetwork": "Sieć", + "signalStrength": "Siła", + "signalQuality": "Jakość", + "symbolQuality": "Jakość", + "networkRate": "Bitrate", + "clientIP": "Klient" }, "scrutiny": { "passed": "Powodzenie", @@ -548,11 +563,11 @@ }, "peanut": { "battery_charge": "Battery Charge", - "ups_load": "UPS Load", - "ups_status": "UPS Status", + "ups_load": "Obciążenie UPS", + "ups_status": "Status UPS", "online": "Dostępny", - "on_battery": "On Battery", - "low_battery": "Low Battery" + "on_battery": "Na baterii", + "low_battery": "Niski poziom baterii" }, "nextdns": { "wait": "Proszę czekać", @@ -662,7 +677,7 @@ "grafana": { "dashboards": "Panel główny", "datasources": "Źródła danych", - "totalalerts": "Total Alerts", + "totalalerts": "Wszystkie alerty", "alertstriggered": "Alerts Triggered" }, "nextcloud": { @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Działające", + "down": "Niedziałające", + "uptime": "Czas działania" + }, "ghostfolio": { "gross_percent_today": "Dzisiaj", "gross_percent_1y": "Rok", @@ -759,7 +779,7 @@ "ok": "Ok", "errored": "Błędy", "noRecent": "Nieaktualne", - "totalUsed": "Used Storage" + "totalUsed": "Użyta pamięć" }, "mealie": { "recipes": "Recipes", @@ -775,6 +795,14 @@ "passed": "Powodzenie", "failed": "Niepowodzenie" }, + "openwrt": { + "uptime": "Czas działania", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Dostępny", + "down": "Niedostępny", + "bytesTx": "Transmitted", + "bytesRx": "Odebrane" + }, "uptimerobot": { "status": "Stan", "uptime": "Czas działania", @@ -790,18 +818,50 @@ "unknown": "Nieznany" }, "calendar": { - "inCinemas": "In cinemas", - "physicalRelease": "Physical release", + "inCinemas": "W kinach", + "physicalRelease": "Wydanie fizyczne", "digitalRelease": "Digital release", "noEventsToday": "No events for today!", "noEventsFound": "No events found" }, "romm": { - "platforms": "Platforms", + "platforms": "Platformy", "totalRoms": "Total ROMs" }, "netdata": { - "warnings": "Warnings", + "warnings": "Ostrzeżenia", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Zdjęcia", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Zgłoszenia", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Filmy", + "tags": "Tagi", + "oCount": "O Count" + }, + "tandoor": { + "users": "Użytkownicy", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index b471ccc2..b726a719 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -107,6 +107,12 @@ "episodes": "Episódios", "songs": "Canções" }, + "esphome": { + "offline": "Desligado", + "online": "Online", + "total": "Total", + "unknown": "Desconhecido" + }, "evcc": { "pv_power": "Produção", "battery_soc": "Bateria", @@ -419,7 +425,8 @@ "search": "Busca", "custom": "Personalizado", "visit": "Visitar", - "url": "Endereço URL" + "url": "Endereço URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Solarengo", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Canais", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Taxa de bits", + "clientIP": "Client" }, "scrutiny": { "passed": "Aprovado", @@ -694,6 +709,11 @@ "targets_down": "Alvo inativo", "targets_total": "Total de Alvos" }, + "gatus": { + "up": "Sites no Ar", + "down": "Sites Fora do Ar", + "uptime": "Ligado" + }, "ghostfolio": { "gross_percent_today": "Hoje", "gross_percent_1y": "Um ano", @@ -775,6 +795,14 @@ "passed": "Aprovado", "failed": "Falhou" }, + "openwrt": { + "uptime": "Ligado", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Recebido" + }, "uptimerobot": { "status": "Estado", "uptime": "Ligado", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Fotos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Problemas", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Filmes", + "tags": "Etiquetas", + "oCount": "O Count" + }, + "tandoor": { + "users": "Utilizadores", + "recipes": "Receitas", + "keywords": "Keywords" } } diff --git a/public/locales/pt_BR/common.json b/public/locales/pt_BR/common.json index 3fda97f8..76f24bdf 100644 --- a/public/locales/pt_BR/common.json +++ b/public/locales/pt_BR/common.json @@ -107,6 +107,12 @@ "episodes": "Episódios", "songs": "Canções" }, + "esphome": { + "offline": "Desligado", + "online": "Online", + "total": "Total", + "unknown": "Desconhecido" + }, "evcc": { "pv_power": "Produção", "battery_soc": "Bateria", @@ -419,7 +425,8 @@ "search": "Busca", "custom": "Personalizado", "visit": "Visitar", - "url": "Endereço URL" + "url": "Endereço URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Solarengo", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Canais", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Taxa de bits", + "clientIP": "Client" }, "scrutiny": { "passed": "Aprovado", @@ -694,6 +709,11 @@ "targets_down": "Alvo inativo", "targets_total": "Total de Alvos" }, + "gatus": { + "up": "Sites no Ar", + "down": "Sites Fora do Ar", + "uptime": "Ligado" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "Um ano", @@ -775,6 +795,14 @@ "passed": "Aprovado", "failed": "Falhou" }, + "openwrt": { + "uptime": "Ligado", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "Estado", "uptime": "Ligado", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Fotos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Problemas", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Filmes", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Utilizadores", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index 348989ae..8d4376fd 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -107,6 +107,12 @@ "episodes": "Episoade", "songs": "Melodii" }, + "esphome": { + "offline": "Offline", + "online": "Online", + "total": "Total", + "unknown": "Necunoscut" + }, "evcc": { "pv_power": "Producție", "battery_soc": "Baterie", @@ -419,7 +425,8 @@ "search": "Caută", "custom": "Personalizat", "visit": "Vizită", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Însorit", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Channels", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Rata de biți", + "clientIP": "Client" }, "scrutiny": { "passed": "Passed", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Uptime" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Passed", "failed": "Failed" }, + "openwrt": { + "uptime": "Uptime", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Sus", + "down": "Jos", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "Stare", "uptime": "Uptime", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Filme", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Utilizatori", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index f52d6007..a3f9c0fd 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -14,11 +14,11 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", - "months": "mo", - "days": "d", - "hours": "h", - "minutes": "m", - "seconds": "s" + "months": "мес", + "days": "дней", + "hours": "час", + "minutes": "мин", + "seconds": "сек" }, "widget": { "missing_type": "Отсутствует тип виджета: {{type}}", @@ -107,6 +107,12 @@ "episodes": "Эпизоды", "songs": "Песни" }, + "esphome": { + "offline": "Не в сети", + "online": "В сети", + "total": "Всего", + "unknown": "Неизвестен" + }, "evcc": { "pv_power": "Прод", "battery_soc": "Питание", @@ -130,7 +136,7 @@ "connectionStatusUnconfigured": "Не настроено", "connectionStatusConnecting": "Подключение", "connectionStatusAuthenticating": "Авторизация", - "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusPendingDisconnect": "Ожидает отключения", "connectionStatusDisconnecting": "Отключение", "connectionStatusDisconnected": "Отключено", "connectionStatusConnected": "Подключено", @@ -404,8 +410,8 @@ "total": "Всего", "free": "Свободно", "used": "Использовано", - "days": "d", - "hours": "h", + "days": "дней", + "hours": "час", "crit": "Крит", "read": "Прочитано", "write": "Запись", @@ -419,7 +425,8 @@ "search": "Поиск", "custom": "Пользовательский", "visit": "Посетите", - "url": "Ссылка" + "url": "Ссылка", + "searchsuggestion": "Предложение" }, "wmo": { "0-day": "Солнечно", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Каналы", - "hd": "HD" + "hd": "HD", + "tunerCount": "Тюнеры", + "channelNumber": "Канал", + "channelNetwork": "Сеть", + "signalStrength": "Сила", + "signalQuality": "Качество", + "symbolQuality": "Качество", + "networkRate": "Битрейт", + "clientIP": "Клиент" }, "scrutiny": { "passed": "Успешно", @@ -547,12 +562,12 @@ "total": "Всего" }, "peanut": { - "battery_charge": "Battery Charge", - "ups_load": "UPS Load", - "ups_status": "UPS Status", + "battery_charge": "Заряд батареи", + "ups_load": "Нагрузка на UPS", + "ups_status": "Статус UPS", "online": "В сети", - "on_battery": "On Battery", - "low_battery": "Low Battery" + "on_battery": "От батареи", + "low_battery": "Низкий заряд" }, "nextdns": { "wait": "Пожалуйста, подождите", @@ -624,7 +639,7 @@ "down": "Неактивные сайты", "uptime": "Время работы", "incident": "Происшествия", - "m": "m" + "m": "мин" }, "atsumeru": { "series": "Серии", @@ -694,6 +709,11 @@ "targets_down": "Неактивные цели", "targets_total": "Всего целей" }, + "gatus": { + "up": "Активные сайты", + "down": "Неактивные сайты", + "uptime": "Время работы" + }, "ghostfolio": { "gross_percent_today": "Сегодня", "gross_percent_1y": "Один год", @@ -775,6 +795,14 @@ "passed": "Успешно", "failed": "Провалено" }, + "openwrt": { + "uptime": "Время работы", + "cpuLoad": "Средняя нагрузка ЦП (5м)", + "up": "Онлайн", + "down": "Офлайн", + "bytesTx": "Передано", + "bytesRx": "Получено" + }, "uptimerobot": { "status": "Статус", "uptime": "Время работы", @@ -797,11 +825,43 @@ "noEventsFound": "Событий не найдено" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "Платформы", + "totalRoms": "Всего ПЗУ" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "Предупреждения", + "criticals": "Криты" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Фото", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Вопросы", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Фильмы", + "tags": "Теги", + "oCount": "O Count" + }, + "tandoor": { + "users": "Пользователи", + "recipes": "Рецепты", + "keywords": "Keywords" } } diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index 015187d2..a1e50792 100644 --- a/public/locales/sk/common.json +++ b/public/locales/sk/common.json @@ -11,7 +11,7 @@ "percent": "{{value, percent}}", "number": "{{value, number}}", "ms": "{{value, number}}", - "date": "{value, date}", + "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", "months": "mes", @@ -107,6 +107,12 @@ "episodes": "Epizódy", "songs": "Skladby" }, + "esphome": { + "offline": "Nedostupný", + "online": "Online", + "total": "Celkovo", + "unknown": "Neznáme" + }, "evcc": { "pv_power": "Produkcia", "battery_soc": "Batéria", @@ -135,8 +141,8 @@ "connectionStatusDisconnected": "Odpojené", "connectionStatusConnected": "Pripojené", "uptime": "Prevádzka", - "maxDown": "Max. Down", - "maxUp": "Max. Up", + "maxDown": "Max. sťahovanie", + "maxUp": "Max. nahrávanie", "down": "Sťahovanie", "up": "Nahrávanie", "received": "Prijaté", @@ -419,7 +425,8 @@ "search": "Hľadať", "custom": "Vlastné", "visit": "Navštíviť", - "url": "Odkaz" + "url": "Odkaz", + "searchsuggestion": "Návrh" }, "wmo": { "0-day": "Slnečno", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Kanály", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tunery", + "channelNumber": "Kanál", + "channelNetwork": "Sieť", + "signalStrength": "Sila", + "signalQuality": "Kvalita", + "symbolQuality": "Kvalita", + "networkRate": "Prenosová rýchlosť", + "clientIP": "Klient" }, "scrutiny": { "passed": "Úspešný", @@ -694,6 +709,11 @@ "targets_down": "Nedostupné ciele", "targets_total": "Cieľov spolu" }, + "gatus": { + "up": "Weby dostupné", + "down": "Weby nedostupné", + "uptime": "Prevádzka" + }, "ghostfolio": { "gross_percent_today": "Dnes", "gross_percent_1y": "Jeden rok", @@ -775,6 +795,14 @@ "passed": "Úspešný", "failed": "Zlyhané" }, + "openwrt": { + "uptime": "Prevádzka", + "cpuLoad": "Záťaž CPU priem. (5m)", + "up": "Nahrávanie", + "down": "Sťahovanie", + "bytesTx": "Prenesených", + "bytesRx": "Prijaté" + }, "uptimerobot": { "status": "Stav", "uptime": "Prevádzka", @@ -797,11 +825,43 @@ "noEventsFound": "Žiadne udalosti" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "Platformy", + "totalRoms": "Celkovo ROM" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "Upozornenia", + "criticals": "Kritické" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Fotografie", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Problémy", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Filmy", + "tags": "Štítky", + "oCount": "O Count" + }, + "tandoor": { + "users": "Používatelia", + "recipes": "Recepty", + "keywords": "Keywords" } } diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index ed79137d..fd2e5912 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -107,6 +107,12 @@ "episodes": "Epizode", "songs": "Pesmi" }, + "esphome": { + "offline": "Ni povezan", + "online": "Na spletu", + "total": "Skupaj", + "unknown": "Neznano" + }, "evcc": { "pv_power": "Proizvodnja", "battery_soc": "Baterija", @@ -419,7 +425,8 @@ "search": "Iskanje", "custom": "Po meri", "visit": "Obišči", - "url": "URL" + "url": "URL", + "searchsuggestion": "Predlog" }, "wmo": { "0-day": "Sončno", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Kanali", - "hd": "HD" + "hd": "HD", + "tunerCount": "Sprejemniki", + "channelNumber": "Kanal", + "channelNetwork": "Omrežje", + "signalStrength": "Moč", + "signalQuality": "Kakovost", + "symbolQuality": "Kakovost", + "networkRate": "Pasovna širina", + "clientIP": "Odjemalec" }, "scrutiny": { "passed": "Opravljeno", @@ -694,6 +709,11 @@ "targets_down": "Tarče dol", "targets_total": "Skupaj tarč" }, + "gatus": { + "up": "Deluje", + "down": "Ne deluje", + "uptime": "Čas delovanja" + }, "ghostfolio": { "gross_percent_today": "Danes", "gross_percent_1y": "Eno leto", @@ -775,6 +795,14 @@ "passed": "Opravljeno", "failed": "Neuspešno" }, + "openwrt": { + "uptime": "Čas delovanja", + "cpuLoad": "CPU obremenitev povp. (5m)", + "up": "Povezan", + "down": "Nepovezan", + "bytesTx": "Prenešeno", + "bytesRx": "Prejeto" + }, "uptimerobot": { "status": "Stanje", "uptime": "Čas delovanja", @@ -797,11 +825,43 @@ "noEventsFound": "Ni dogodkov" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "Platforme", + "totalRoms": "Skupaj ROM-ov" }, "netdata": { "warnings": "Opozorila", "criticals": "Kritično" + }, + "plantit": { + "events": "Dogodki", + "plants": "Rastline", + "photos": "Slike", + "species": "Vrste" + }, + "gitea": { + "notifications": "Obvestila", + "issues": "Težave", + "pulls": "Zahteve za prenos" + }, + "stash": { + "scenes": "Scene", + "scenesPlayed": "Predvajane scene", + "playCount": "Skupaj predvajano", + "playDuration": "Čas gledanja", + "sceneSize": "Velikost scene", + "sceneDuration": "Dolžina scene", + "images": "Slike", + "imageSize": "Velikosti slik", + "galleries": "Galerije", + "performers": "Izvajalci", + "studios": "Studiji", + "movies": "Filmi", + "tags": "Značke", + "oCount": "O štetje" + }, + "tandoor": { + "users": "Uporabniki", + "recipes": "Recepti", + "keywords": "Ključne besede" } } diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json index ca628d3b..65ed254a 100644 --- a/public/locales/sr/common.json +++ b/public/locales/sr/common.json @@ -107,6 +107,12 @@ "episodes": "Episodes", "songs": "Songs" }, + "esphome": { + "offline": "Offline", + "online": "Online", + "total": "Total", + "unknown": "Unknown" + }, "evcc": { "pv_power": "Production", "battery_soc": "Battery", @@ -419,7 +425,8 @@ "search": "Search", "custom": "Custom", "visit": "Visit", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Sunny", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Channels", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Bitrate", + "clientIP": "Client" }, "scrutiny": { "passed": "Passed", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Uptime" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Passed", "failed": "Failed" }, + "openwrt": { + "uptime": "Uptime", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "Status", "uptime": "Uptime", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Movies", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Users", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index af27210e..e39ba771 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -14,7 +14,7 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", - "months": "mo", + "months": "mån", "days": "d", "hours": "h", "minutes": "m", @@ -56,7 +56,7 @@ "wan": "WAN", "lan": "LAN", "wlan": "WLAN", - "devices": "Devices", + "devices": "Enheter", "lan_devices": "LAN Devices", "wlan_devices": "WLAN Devices", "lan_users": "LAN-användare", @@ -107,6 +107,12 @@ "episodes": "Episodes", "songs": "Songs" }, + "esphome": { + "offline": "Offline", + "online": "Online", + "total": "Total", + "unknown": "Unknown" + }, "evcc": { "pv_power": "Production", "battery_soc": "Battery", @@ -419,7 +425,8 @@ "search": "Search", "custom": "Custom", "visit": "Visit", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Sunny", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Channels", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Bitrate", + "clientIP": "Client" }, "scrutiny": { "passed": "Passed", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Uptime" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Passed", "failed": "Failed" }, + "openwrt": { + "uptime": "Uptime", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "Status", "uptime": "Uptime", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Movies", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Användare", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/te/common.json b/public/locales/te/common.json index 81b6af79..8c794cee 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -107,6 +107,12 @@ "episodes": "Episodes", "songs": "Songs" }, + "esphome": { + "offline": "ఆఫ్‌లైన్", + "online": "Online", + "total": "మొత్తం", + "unknown": "Unknown" + }, "evcc": { "pv_power": "Production", "battery_soc": "Battery", @@ -419,7 +425,8 @@ "search": "Search", "custom": "Custom", "visit": "Visit", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "సన్నీ", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Channels", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "బిట్రేట్", + "clientIP": "Client" }, "scrutiny": { "passed": "Passed", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Uptime" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Passed", "failed": "విఫలమయ్యారు" }, + "openwrt": { + "uptime": "Uptime", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "హోదా", "uptime": "Uptime", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Movies", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "వినియోగదారులు", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/th/common.json b/public/locales/th/common.json index 86b7021a..612194a1 100644 --- a/public/locales/th/common.json +++ b/public/locales/th/common.json @@ -107,6 +107,12 @@ "episodes": "Episodes", "songs": "Songs" }, + "esphome": { + "offline": "ออฟไลน์", + "online": "Online", + "total": "ทั้งหมด", + "unknown": "ไม่ทราบ" + }, "evcc": { "pv_power": "Production", "battery_soc": "Battery", @@ -419,7 +425,8 @@ "search": "Search", "custom": "Custom", "visit": "Visit", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Sunny", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Channels", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "อัตราบิต", + "clientIP": "Client" }, "scrutiny": { "passed": "Passed", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "เว็บไซต์ ล่ม", + "uptime": "Uptime" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Passed", "failed": "Failed" }, + "openwrt": { + "uptime": "Uptime", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "สถานะ", "uptime": "Uptime", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Movies", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "ผู้ใช้", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index 7ac4a63a..6d8a212c 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -107,6 +107,12 @@ "episodes": "Bölümler", "songs": "Şarkılar" }, + "esphome": { + "offline": "Çevrimdışı", + "online": "Çevrimiçi", + "total": "Toplam", + "unknown": "Bilinmiyor" + }, "evcc": { "pv_power": "Üretim", "battery_soc": "Batarya", @@ -419,7 +425,8 @@ "search": "Ara", "custom": "Özel", "visit": "Ziyaret", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Güneşli", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Kanallar", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Bit Oranı", + "clientIP": "Client" }, "scrutiny": { "passed": "Geçti", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Çalışma Süresi" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Geçti", "failed": "Başarısız" }, + "openwrt": { + "uptime": "Çalışma Süresi", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Yükleme", + "down": "İndirme", + "bytesTx": "Transmitted", + "bytesRx": "Alınan" + }, "uptimerobot": { "status": "Durum", "uptime": "Çalışma Süresi", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Fotoğraflar", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Sorunlar", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Filmler", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Kullanıcılar", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index 5cee41a6..0e62bc3f 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -107,6 +107,12 @@ "episodes": "Епізоди", "songs": "Пісні" }, + "esphome": { + "offline": "Офлайн", + "online": "Онлайн", + "total": "Усього", + "unknown": "Невідомий" + }, "evcc": { "pv_power": "Виробництво", "battery_soc": "Батарея", @@ -419,7 +425,8 @@ "search": "Пошук", "custom": "Користувацький", "visit": "Відвідайте", - "url": "URL-адреса" + "url": "URL-адреса", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Сонячно", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Канали", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Бітрейт", + "clientIP": "Client" }, "scrutiny": { "passed": "Пройшов", @@ -694,6 +709,11 @@ "targets_down": "Цілі вниз", "targets_total": "Всього цілей" }, + "gatus": { + "up": "Активні сайти", + "down": "Неактивні сайти", + "uptime": "Час роботи" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "Один рік", @@ -775,6 +795,14 @@ "passed": "Пройшов", "failed": "Невдача" }, + "openwrt": { + "uptime": "Час роботи", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "Стан", "uptime": "Час роботи", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Фотографії", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Питання", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Фільми", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Користувачі", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index 45b7cdef..11df7eb5 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -107,6 +107,12 @@ "episodes": "Episodes", "songs": "Songs" }, + "esphome": { + "offline": "Ngoại tuyến", + "online": "Online", + "total": "Tổng", + "unknown": "Unknown" + }, "evcc": { "pv_power": "Production", "battery_soc": "Battery", @@ -419,7 +425,8 @@ "search": "Search", "custom": "Custom", "visit": "Visit", - "url": "URL" + "url": "URL", + "searchsuggestion": "Suggestion" }, "wmo": { "0-day": "Sunny", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "Channels", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", + "networkRate": "Bitrate", + "clientIP": "Client" }, "scrutiny": { "passed": "Passed", @@ -694,6 +709,11 @@ "targets_down": "Targets Down", "targets_total": "Total Targets" }, + "gatus": { + "up": "Sites Up", + "down": "Sites Down", + "uptime": "Uptime" + }, "ghostfolio": { "gross_percent_today": "Today", "gross_percent_1y": "One year", @@ -775,6 +795,14 @@ "passed": "Passed", "failed": "Failed" }, + "openwrt": { + "uptime": "Uptime", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", + "bytesRx": "Received" + }, "uptimerobot": { "status": "Trạng thái", "uptime": "Uptime", @@ -803,5 +831,37 @@ "netdata": { "warnings": "Warnings", "criticals": "Criticals" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "Photos", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "Movies", + "tags": "Tags", + "oCount": "O Count" + }, + "tandoor": { + "users": "Users", + "recipes": "Recipes", + "keywords": "Keywords" } } diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index baec31f0..2a4f6b0b 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -107,6 +107,12 @@ "episodes": "集", "songs": "曲目" }, + "esphome": { + "offline": "離線", + "online": "在線", + "total": "全部", + "unknown": "未知" + }, "evcc": { "pv_power": "正式環境", "battery_soc": "電池", @@ -419,7 +425,8 @@ "search": "搜尋", "custom": "自訂", "visit": "造訪", - "url": "網址" + "url": "網址", + "searchsuggestion": "建議" }, "wmo": { "0-day": "晴天", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "頻道", - "hd": "高畫質" + "hd": "高畫質", + "tunerCount": "調諧器", + "channelNumber": "頻道", + "channelNetwork": "網絡", + "signalStrength": "強度", + "signalQuality": "品質", + "symbolQuality": "品質", + "networkRate": "比特率", + "clientIP": "用戶端" }, "scrutiny": { "passed": "通過", @@ -548,8 +563,8 @@ }, "peanut": { "battery_charge": "充電", - "ups_load": "UPS Load", - "ups_status": "UPS Status", + "ups_load": "後備電負載", + "ups_status": "後備電狀況", "online": "在線", "on_battery": "電池供電", "low_battery": "低電量" @@ -694,6 +709,11 @@ "targets_down": "目標離線", "targets_total": "目標總數" }, + "gatus": { + "up": "在線網站", + "down": "離線網站", + "uptime": "運行時間" + }, "ghostfolio": { "gross_percent_today": "今日", "gross_percent_1y": "一年", @@ -775,6 +795,14 @@ "passed": "通過", "failed": "失敗" }, + "openwrt": { + "uptime": "運行時間", + "cpuLoad": "處理器平均負載(5分鐘)", + "up": "在線", + "down": "離線", + "bytesTx": "已傳送", + "bytesRx": "已接收" + }, "uptimerobot": { "status": "狀況", "uptime": "運行時間", @@ -797,11 +825,43 @@ "noEventsFound": "未找到事件" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "平台", + "totalRoms": "總唯讀記憶體" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "警告", + "criticals": "嚴重" + }, + "plantit": { + "events": "事件", + "plants": "植物", + "photos": "照片", + "species": "物種" + }, + "gitea": { + "notifications": "信息", + "issues": "出版", + "pulls": "提取請求" + }, + "stash": { + "scenes": "場景", + "scenesPlayed": "已播放場景", + "playCount": "合共播放", + "playDuration": "觀看時數", + "sceneSize": "場景大小", + "sceneDuration": "場景為期", + "images": "圖片", + "imageSize": "圖像大小", + "galleries": "畫廊", + "performers": "表演者", + "studios": "工作室", + "movies": "電影", + "tags": "標籤", + "oCount": "O Count" + }, + "tandoor": { + "users": "使用者", + "recipes": "食譜", + "keywords": "Keywords" } } diff --git a/public/locales/zh-Hans/common.json b/public/locales/zh-Hans/common.json index 68e17e85..9919d649 100644 --- a/public/locales/zh-Hans/common.json +++ b/public/locales/zh-Hans/common.json @@ -14,11 +14,11 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", - "months": "mo", - "days": "d", - "hours": "h", - "minutes": "m", - "seconds": "s" + "months": "月", + "days": "日", + "hours": "时", + "minutes": "分", + "seconds": "秒" }, "widget": { "missing_type": "缺失的组件类型: {{type}}", @@ -90,7 +90,7 @@ "not_available": "不可用" }, "siteMonitor": { - "http_status": "HTTP status", + "http_status": "HTTP 状态", "error": "错误", "response": "响应", "down": "离线", @@ -107,6 +107,12 @@ "episodes": "集", "songs": "曲目" }, + "esphome": { + "offline": "离线", + "online": "在线", + "total": "总计", + "unknown": "未知" + }, "evcc": { "pv_power": "发电量", "battery_soc": "电量", @@ -127,20 +133,20 @@ }, "fritzbox": { "connectionStatus": "状态", - "connectionStatusUnconfigured": "Unconfigured", - "connectionStatusConnecting": "Connecting", - "connectionStatusAuthenticating": "Authenticating", - "connectionStatusPendingDisconnect": "Pending Disconnect", - "connectionStatusDisconnecting": "Disconnecting", - "connectionStatusDisconnected": "Disconnected", + "connectionStatusUnconfigured": "未配置", + "connectionStatusConnecting": "连接中", + "connectionStatusAuthenticating": "认证中", + "connectionStatusPendingDisconnect": "等待断开连接", + "connectionStatusDisconnecting": "正在断开连接", + "connectionStatusDisconnected": "未连接", "connectionStatusConnected": "已连接", "uptime": "运行时间", - "maxDown": "Max. Down", - "maxUp": "Max. Up", + "maxDown": "", + "maxUp": "", "down": "离线", "up": "在线", - "received": "Received", - "sent": "Sent", + "received": "已接收", + "sent": "已发送", "externalIPAddress": "Ext. IP" }, "caddy": { @@ -404,8 +410,8 @@ "total": "总计", "free": "空闲", "used": "已使用", - "days": "d", - "hours": "h", + "days": "日", + "hours": "时", "crit": "严重", "read": "已读", "write": "写入", @@ -419,7 +425,8 @@ "search": "搜索", "custom": "自定义", "visit": "访问", - "url": "URL" + "url": "URL", + "searchsuggestion": "建议" }, "wmo": { "0-day": "晴天", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "频道", - "hd": "HD" + "hd": "HD", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "网络", + "signalStrength": "强度", + "signalQuality": "质量", + "symbolQuality": "质量", + "networkRate": "码率", + "clientIP": "客户端" }, "scrutiny": { "passed": "通过", @@ -547,12 +562,12 @@ "total": "总计" }, "peanut": { - "battery_charge": "Battery Charge", - "ups_load": "UPS Load", - "ups_status": "UPS Status", + "battery_charge": "充电中", + "ups_load": "UPS 负载", + "ups_status": "UPS 状态", "online": "在线", - "on_battery": "On Battery", - "low_battery": "Low Battery" + "on_battery": "电池供电", + "low_battery": "电量低" }, "nextdns": { "wait": "请稍候", @@ -624,7 +639,7 @@ "down": "离线网站", "uptime": "运行时间", "incident": "事件", - "m": "m" + "m": "分" }, "atsumeru": { "series": "剧集", @@ -694,6 +709,11 @@ "targets_down": "离线目标", "targets_total": "目标总数" }, + "gatus": { + "up": "在线网站", + "down": "离线网站", + "uptime": "运行时间" + }, "ghostfolio": { "gross_percent_today": "今日", "gross_percent_1y": "1年", @@ -775,6 +795,14 @@ "passed": "通过", "failed": "失败" }, + "openwrt": { + "uptime": "运行时间", + "cpuLoad": "CPU 负载平均值(5m)", + "up": "在线", + "down": "离线", + "bytesTx": "已传输", + "bytesRx": "已接收" + }, "uptimerobot": { "status": "状态", "uptime": "运行时间", @@ -797,11 +825,43 @@ "noEventsFound": "未找到事件" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "平台", + "totalRoms": "总ROM" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "警告", + "criticals": "严重" + }, + "plantit": { + "events": "Events", + "plants": "Plants", + "photos": "照片", + "species": "Species" + }, + "gitea": { + "notifications": "Notifications", + "issues": "出版", + "pulls": "Pull Requests" + }, + "stash": { + "scenes": "Scenes", + "scenesPlayed": "Scenes Played", + "playCount": "Total Plays", + "playDuration": "Time Watched", + "sceneSize": "Scenes Size", + "sceneDuration": "Scenes Duration", + "images": "Images", + "imageSize": "Images Size", + "galleries": "Galleries", + "performers": "Performers", + "studios": "Studios", + "movies": "电影", + "tags": "标签", + "oCount": "O Count" + }, + "tandoor": { + "users": "用户数", + "recipes": "食谱", + "keywords": "Keywords" } } diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index 08ebe7d5..a97ac9ee 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -32,8 +32,8 @@ "weather": { "current": "目前位置", "allow": "點擊以允許", - "updating": "更新中", - "wait": "請稍後" + "updating": "正在更新", + "wait": "請稍候" }, "search": { "placeholder": "搜尋…" @@ -63,7 +63,7 @@ "wlan_users": "無線使用者", "up": "運作時間", "down": "離線", - "wait": "請稍後", + "wait": "請稍候", "empty_data": "子系統狀態未知" }, "docker": { @@ -107,6 +107,12 @@ "episodes": "集", "songs": "曲目" }, + "esphome": { + "offline": "離線", + "online": "在線", + "total": "全部", + "unknown": "未知" + }, "evcc": { "pv_power": "正式環境", "battery_soc": "電池", @@ -396,7 +402,7 @@ "glances": { "cpu": "CPU", "load": "負載", - "wait": "請稍後", + "wait": "請稍候", "temp": "溫度", "_temp": "溫度", "warn": "警告", @@ -419,7 +425,8 @@ "search": "搜尋", "custom": "自訂", "visit": "造訪", - "url": "網址" + "url": "網址", + "searchsuggestion": "建議" }, "wmo": { "0-day": "晴天", @@ -535,7 +542,15 @@ }, "hdhomerun": { "channels": "頻道", - "hd": "高畫質" + "hd": "高畫質", + "tunerCount": "調諧器", + "channelNumber": "頻道", + "channelNetwork": "網絡", + "signalStrength": "強度", + "signalQuality": "品質", + "symbolQuality": "品質", + "networkRate": "位元率", + "clientIP": "用戶端" }, "scrutiny": { "passed": "通過", @@ -548,8 +563,8 @@ }, "peanut": { "battery_charge": "充電", - "ups_load": "UPS Load", - "ups_status": "UPS Status", + "ups_load": "後備電負載", + "ups_status": "後備電狀況", "online": "在線", "on_battery": "電池供電", "low_battery": "低電量" @@ -694,6 +709,11 @@ "targets_down": "目標離線", "targets_total": "目標總數" }, + "gatus": { + "up": "在線網站", + "down": "離線網站", + "uptime": "運行時間" + }, "ghostfolio": { "gross_percent_today": "今日", "gross_percent_1y": "一年", @@ -707,8 +727,8 @@ }, "homeassistant": { "people_home": "在家人數", - "lights_on": "燈亮著", - "switches_on": "開關開著" + "lights_on": "燈光開啟", + "switches_on": "開關開啟" }, "whatsupdocker": { "monitoring": "監測中", @@ -775,6 +795,14 @@ "passed": "通過", "failed": "失敗" }, + "openwrt": { + "uptime": "運行時間", + "cpuLoad": "處理器平均負載(5分鐘)", + "up": "在線", + "down": "離線", + "bytesTx": "已傳送", + "bytesRx": "已接收" + }, "uptimerobot": { "status": "狀態", "uptime": "運行時間", @@ -797,11 +825,43 @@ "noEventsFound": "未找到事件" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "平台", + "totalRoms": "總唯讀記憶體" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "警告", + "criticals": "嚴重" + }, + "plantit": { + "events": "事件", + "plants": "植物", + "photos": "照片", + "species": "物種" + }, + "gitea": { + "notifications": "信息", + "issues": "出版", + "pulls": "提取請求" + }, + "stash": { + "scenes": "場景", + "scenesPlayed": "已播放場景", + "playCount": "合共播放", + "playDuration": "觀看時數", + "sceneSize": "場景大小", + "sceneDuration": "場景為期", + "images": "圖片", + "imageSize": "圖像大小", + "galleries": "畫廊", + "performers": "表演者", + "studios": "工作室", + "movies": "電影", + "tags": "標籤", + "oCount": "O Count" + }, + "tandoor": { + "users": "使用者", + "recipes": "食譜", + "keywords": "Keywords" } } From 54db9ac55176f13ca62122173219b5d815829453 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 10 Mar 2024 22:27:38 -0700 Subject: [PATCH 033/100] Fix: field parsing fails with docker labels (#3101) --- src/utils/config/service-helpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index 77c9a673..de129f57 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -453,7 +453,7 @@ export function cleanServiceGroups(groups) { let fieldsList = fields; if (typeof fields === "string") { try { - JSON.parse(fields); + fieldsList = JSON.parse(fields); } catch (e) { logger.error("Invalid fields list detected in config for service '%s'", service.name); fieldsList = null; From 247f73f0db7510e9e85d1215dd7b3e45b8a04a00 Mon Sep 17 00:00:00 2001 From: RoboMagus <68224306+RoboMagus@users.noreply.github.com> Date: Mon, 11 Mar 2024 15:06:27 +0100 Subject: [PATCH 034/100] Fix: Add alternative 'offline' status to EspHome widget (#3107) --- docs/widgets/services/esphome.md | 5 ++++- public/locales/en/common.json | 1 + src/widgets/esphome/component.jsx | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/widgets/services/esphome.md b/docs/widgets/services/esphome.md index 6038cb61..e14431fd 100644 --- a/docs/widgets/services/esphome.md +++ b/docs/widgets/services/esphome.md @@ -7,7 +7,10 @@ Learn more about [ESPHome](https://esphome.io/). Show the number of ESPHome devices based on their state. -Allowed fields: `["total", "online", "offline", "unknown"]`. +Allowed fields: `["total", "online", "offline", "offline_alt", "unknown"]` (maximum of 4). + +By default ESPHome will only mark devices as `offline` if their address cannot be pinged. If it has an invalid config or its name cannot be resolved (by DNS) its status will be marked as `unknown`. +To group both `offline` and `unknown` devices together, users should use the `offline_alt` field instead. This sums all devices that are _not_ online together. ```yaml widget: diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 9f4c4b13..c7339c0b 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Offline", + "offline_alt": "Offline", "online": "Online", "total": "Total", "unknown": "Unknown" diff --git a/src/widgets/esphome/component.jsx b/src/widgets/esphome/component.jsx index c44352fa..ea2e5db3 100644 --- a/src/widgets/esphome/component.jsx +++ b/src/widgets/esphome/component.jsx @@ -19,6 +19,7 @@ export default function Component({ service }) { + @@ -27,6 +28,7 @@ export default function Component({ service }) { const total = Object.keys(resultData).length; const online = Object.entries(resultData).filter(([, v]) => v === true).length; + const notOnline = Object.entries(resultData).filter(([, v]) => v !== true).length; const offline = Object.entries(resultData).filter(([, v]) => v === false).length; const unknown = Object.entries(resultData).filter(([, v]) => v === null).length; @@ -34,6 +36,7 @@ export default function Component({ service }) { + From fa1d343f2a1a9f809c9c8f1cdeb01ea47498d9ad Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 14 Mar 2024 21:00:02 -0700 Subject: [PATCH 035/100] Documentation: add optional auth to whatsupdocker documentation Co-Authored-By: zmweske <31971632+zmweske@users.noreply.github.com> --- docs/widgets/services/whatsupdocker.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/widgets/services/whatsupdocker.md b/docs/widgets/services/whatsupdocker.md index 25c2fabf..74eb2c97 100644 --- a/docs/widgets/services/whatsupdocker.md +++ b/docs/widgets/services/whatsupdocker.md @@ -1,11 +1,9 @@ --- -title: Whats Up Docker -description: WhatsUpDocker Widget Configuration +title: What's Up Docker +description: What's Up Docker Widget Configuration --- -Learn more about [Whats Up Docker](https://github.com/fmartinou/whats-up-docker). - -Currently requires unauthenticated whatsupdocker instance. +Learn more about [What's Up Docker](https://github.com/fmartinou/whats-up-docker). Allowed fields: `["monitoring", "updates"]`. @@ -13,4 +11,6 @@ Allowed fields: `["monitoring", "updates"]`. widget: type: whatsupdocker url: http://whatsupdocker:port + username: username # optional + password: password # optional ``` From 358633638f9834b00774dcccab872ce350451c58 Mon Sep 17 00:00:00 2001 From: Rob Gonnella Date: Fri, 15 Mar 2024 00:00:38 -0400 Subject: [PATCH 036/100] Documentation: Adds sticky cookie note for k8s multiple replica setups (#3120) --- docs/installation/k8s.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/docs/installation/k8s.md b/docs/installation/k8s.md index 685472ea..6805139b 100644 --- a/docs/installation/k8s.md +++ b/docs/installation/k8s.md @@ -361,3 +361,33 @@ spec: port: number: 3000 ``` + +### Multiple Replicas + +If you plan to deploy homepage with a replica count greater than 1, you may +want to consider enabling sticky sessions on the homepage route. This will +prevent unnecessary re-renders on page loads and window / tab focusing. The +procedure for enabling sticky sessions depends on your Ingress controller. Below +is an example using Traefik as the Ingress controller. + +``` +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: homepage.example.com +spec: + entryPoints: + - websecure + routes: + - kind: Rule + match: Host(`homepage.example.com`) + services: + - kind: Service + name: homepage + port: 3000 + sticky: + cookie: + httpOnly: true + secure: true + sameSite: none +``` From 7e0fbed06ba5115a2de802977bb8ba168d2f2ee6 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 15 Mar 2024 07:23:19 -0700 Subject: [PATCH 037/100] Remove commented out code --- src/components/widgets/openmeteo/openmeteo.jsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/widgets/openmeteo/openmeteo.jsx b/src/components/widgets/openmeteo/openmeteo.jsx index 4c47fc4a..4d3e7e89 100644 --- a/src/components/widgets/openmeteo/openmeteo.jsx +++ b/src/components/widgets/openmeteo/openmeteo.jsx @@ -84,8 +84,6 @@ export default function OpenMeteo({ options }) { } }; - // if (!requesting && !location) requestLocation(); - if (!location) { return ( Date: Sun, 17 Mar 2024 08:06:49 -0700 Subject: [PATCH 038/100] Update settings.md --- docs/configs/settings.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/configs/settings.md b/docs/configs/settings.md index a4480571..76a5e540 100644 --- a/docs/configs/settings.md +++ b/docs/configs/settings.md @@ -211,13 +211,13 @@ layout: ### Five Columns -You can add a fifth column (when `style: columns` which is default) by adding: +You can add a fifth column to services (when `style: columns` which is default) by adding: ```yaml fiveColumns: true ``` -By default homepage will max out at 4 columns for column style +By default homepage will max out at 4 columns for services with `columns` style ### Collapsible sections From edc38c93e2e7d6d8eb569bfe156fc2a2bb9fd770 Mon Sep 17 00:00:00 2001 From: Lukas H Date: Mon, 18 Mar 2024 18:56:04 -0400 Subject: [PATCH 039/100] Documentation: fix minor typo (#3136) --- docs/configs/settings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configs/settings.md b/docs/configs/settings.md index 76a5e540..753d71d8 100644 --- a/docs/configs/settings.md +++ b/docs/configs/settings.md @@ -85,7 +85,7 @@ Or you may pass the path to a local image relative to the `/app/public` director ## Theme -You can configure a fixed them (and disable the theme switcher) by passing the `theme` option, like so: +You can configure a fixed theme (and disable the theme switcher) by passing the `theme` option, like so: ```yaml theme: dark # or light From 556450c8ded512ed169222abcd3890f5a5b2f3a4 Mon Sep 17 00:00:00 2001 From: she11sh0cked <22623152+she11sh0cked@users.noreply.github.com> Date: Wed, 20 Mar 2024 15:26:11 +0100 Subject: [PATCH 040/100] Fix: log error when getting services from Docker server fails (#3147) --- src/utils/config/service-helpers.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index de129f57..c4ca2a65 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -117,6 +117,8 @@ export async function servicesFromDocker() { return { server: serverName, services: discovered.filter((filteredService) => filteredService) }; } catch (e) { + logger.error("Error getting services from Docker server '%s': %s", serverName, e); + // a server failed, but others may succeed return { server: serverName, services: [] }; } From 7627f9c5a75edd03716df4ee85bead6ba845acca Mon Sep 17 00:00:00 2001 From: zmweske <31971632+zmweske@users.noreply.github.com> Date: Wed, 20 Mar 2024 15:21:56 -0500 Subject: [PATCH 041/100] Documentation: add info re pfSense API token auth (#3145) --- docs/widgets/services/pfsense.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/widgets/services/pfsense.md b/docs/widgets/services/pfsense.md index 1d9e8461..8f32a718 100644 --- a/docs/widgets/services/pfsense.md +++ b/docs/widgets/services/pfsense.md @@ -9,9 +9,9 @@ This widget requires the installation of the [pfsense-api](https://github.com/ja Once pfSense API is installed, you can set the API to be read-only in System > API > Settings. -Currently the only supported authentication mode is 'Local Database'. +There are two currently supported authentication modes: 'Local Database' and 'API Token'. For 'Local Database', use `username` and `password` with the credentials of an admin user. For 'API Token', utilize the `headers` parameter with `client_token` and `client_id` obtained from pfSense as shown below. Do not use both headers and username / password. -WAN interface to monitor can be defined by updating the `wan` param. +The interface to monitor is defined by updating the `wan` parameter. It should be referenced as it is shown under Interfaces > Assignments in pfSense. Load is returned instead of cpu utilization. This is a limitation in the pfSense API due to the complexity of this calculation. This may become available in future versions. @@ -21,7 +21,10 @@ Allowed fields: `["load", "memory", "temp", "wanStatus", "wanIP", "disk"]` (maxi widget: type: pfsense url: http://pfsense.host.or.ip:port - username: user - password: pass + username: user # optional, or API token + password: pass # optional, or API token + headers: # optional, or username/password + Authorization: client_id client_token wan: igb0 + fields: ["load", "memory", "temp", "wanStatus"] # optional ``` From f06214a295a7b4584d566bd0cb5c0c1de6979ab0 Mon Sep 17 00:00:00 2001 From: Joseph M Date: Thu, 21 Mar 2024 14:59:31 -0400 Subject: [PATCH 042/100] Documentation: note that "issue" permissions are also required for Gitea widget (#3157) --- docs/widgets/services/gitea.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/widgets/services/gitea.md b/docs/widgets/services/gitea.md index bf75aa69..da695a9a 100644 --- a/docs/widgets/services/gitea.md +++ b/docs/widgets/services/gitea.md @@ -5,7 +5,7 @@ description: Gitea Widget Configuration Learn more about [Gitea](https://gitea.com). -API token requires `notifications` and `repository` permissions. See the [gitea documentation](https://docs.gitea.com/development/api-usage#generating-and-listing-api-tokens) for details on generating tokens. +API token requires `notifications`, `repository` and `issue` permissions. See the [gitea documentation](https://docs.gitea.com/development/api-usage#generating-and-listing-api-tokens) for details on generating tokens. Allowed fields: ["notifications", "issues", "pulls"] From 885b2624a8764fea0136ae35098089e42eb3f373 Mon Sep 17 00:00:00 2001 From: Dawud <7688823+technowhizz@users.noreply.github.com> Date: Sat, 23 Mar 2024 08:34:07 +0000 Subject: [PATCH 043/100] Enhancement: support Jackett widget with admin password (#3097) (#3165) --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/jackett.md | 4 +- src/utils/proxy/http.js | 2 +- src/widgets/jackett/proxy.js | 68 ++++++++++++++++++++++++++++++++ src/widgets/jackett/widget.js | 5 ++- 4 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 src/widgets/jackett/proxy.js diff --git a/docs/widgets/services/jackett.md b/docs/widgets/services/jackett.md index 22e089a4..e102743b 100644 --- a/docs/widgets/services/jackett.md +++ b/docs/widgets/services/jackett.md @@ -5,7 +5,7 @@ description: Jackett Widget Configuration Learn more about [Jackett](https://github.com/Jackett/Jackett). -Jackett must not have any authentication for the widget to work. +If Jackett has an admin password set, you must set the `password` field for the widget to work. Allowed fields: `["configured", "errored"]`. @@ -13,5 +13,5 @@ Allowed fields: `["configured", "errored"]`. widget: type: jackett url: http://jackett.host.or.ip - key: jackettapikey + password: jackettadminpassword # optional ``` diff --git a/src/utils/proxy/http.js b/src/utils/proxy/http.js index ff34ce0d..8a9ce380 100644 --- a/src/utils/proxy/http.js +++ b/src/utils/proxy/http.js @@ -103,7 +103,7 @@ export async function httpProxy(url, params = {}) { try { const [status, contentType, data, responseHeaders] = await request; - return [status, contentType, data, responseHeaders]; + return [status, contentType, data, responseHeaders, params]; } catch (err) { logger.error( "Error calling %s//%s%s%s...", diff --git a/src/widgets/jackett/proxy.js b/src/widgets/jackett/proxy.js new file mode 100644 index 00000000..5292695f --- /dev/null +++ b/src/widgets/jackett/proxy.js @@ -0,0 +1,68 @@ +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 widgets from "widgets/widgets"; + +const logger = createLogger("jackettProxyHandler"); + +async function fetchJackettCookie(widget, loginURL) { + const url = new URL(formatApiCall(loginURL, widget)); + const loginData = `password=${encodeURIComponent(widget.password)}`; + const [status, , , , params] = await httpProxy(url, { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + }, + body: loginData, + }); + + if (!(status === 200) || !params?.headers?.Cookie) { + logger.error("Failed to fetch Jackett cookie, status: %d", status); + return null; + } + return params.headers.Cookie; +} + +export default async function jackettProxyHandler(req, res) { + const { group, service, endpoint } = req.query; + + if (!group || !service) { + logger.error("Invalid or missing service '%s' or group '%s'", service, group); + return res.status(400).json({ error: "Invalid proxy service type" }); + } + + const widget = await getServiceWidget(group, service); + if (!widget || !widgets[widget.type].api) { + logger.error("Invalid or missing widget for service '%s' in group '%s'", service, group); + return res.status(400).json({ error: "Invalid widget configuration" }); + } + + if (widget.password) { + const jackettCookie = await fetchJackettCookie(widget, widgets[widget.type].loginURL); + if (!jackettCookie) { + return res.status(500).json({ error: "Failed to authenticate with Jackett" }); + } + // Add the cookie to the widget for use in subsequent requests + widget.headers = { ...widget.headers, Cookie: jackettCookie }; + } + + const url = new URL(formatApiCall(widgets[widget.type].api, { endpoint, ...widget })); + + try { + const [status, , data] = await httpProxy(url, { + method: "GET", + headers: widget.headers, + }); + + if (status !== 200) { + logger.error("Error calling Jackett API: %d. Data: %s", status, data); + return res.status(status).json({ error: "Failed to call Jackett API", data }); + } + + return res.status(status).send(data); + } catch (error) { + logger.error("Exception calling Jackett API: %s", error.message); + return res.status(500).json({ error: "Server error", message: error.message }); + } +} diff --git a/src/widgets/jackett/widget.js b/src/widgets/jackett/widget.js index 9d2a9b5c..0af816e5 100644 --- a/src/widgets/jackett/widget.js +++ b/src/widgets/jackett/widget.js @@ -1,8 +1,9 @@ -import genericProxyHandler from "utils/proxy/handlers/generic"; +import jackettProxyHandler from "./proxy"; const widget = { api: "{url}/api/v2.0/{endpoint}?apikey={key}&configured=true", - proxyHandler: genericProxyHandler, + proxyHandler: jackettProxyHandler, + loginURL: "{url}/UI/Dashboard", mappings: { indexers: { From e4b4eba44565d57d5da55d18dc114998a8584fbb Mon Sep 17 00:00:00 2001 From: SunnyCloudy Date: Sat, 23 Mar 2024 10:51:10 +0200 Subject: [PATCH 044/100] Fix: Glances widget display (#3164) Co-Authored-By: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/glances.md | 2 ++ src/widgets/glances/metrics/cpu.jsx | 17 +++++------------ src/widgets/glances/metrics/info.jsx | 7 +++++-- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/docs/widgets/services/glances.md b/docs/widgets/services/glances.md index 134dcb5f..17689293 100644 --- a/docs/widgets/services/glances.md +++ b/docs/widgets/services/glances.md @@ -19,6 +19,8 @@ widget: password: pass # optional if auth enabled in Glances metric: cpu diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk + refreshInterval: 5000 # optional - in milliseconds, defaults to 1000 or more, depending on the metric + pointsLimit: 15 # optional, defaults to 15 ``` _Please note, this widget does not need an `href`, `icon` or `description` on its parent service. To achieve the same effect as the examples above, see as an example:_ diff --git a/src/widgets/glances/metrics/cpu.jsx b/src/widgets/glances/metrics/cpu.jsx index c36aba9d..1f2824d3 100644 --- a/src/widgets/glances/metrics/cpu.jsx +++ b/src/widgets/glances/metrics/cpu.jsx @@ -24,7 +24,7 @@ export default function Component({ service }) { refreshInterval: Math.max(defaultInterval, refreshInterval), }); - const { data: systemData, error: systemError } = useWidgetAPI(service.widget, "system"); + const { data: quicklookData, error: quicklookError } = useWidgetAPI(service.widget, "quicklook"); useEffect(() => { if (data) { @@ -71,22 +71,15 @@ export default function Component({ service }) { /> )} - {!chart && systemData && !systemError && ( + {!chart && quicklookData && !quicklookError && ( -
    - {systemData.linux_distro && `${systemData.linux_distro} - `} - {systemData.os_version && systemData.os_version} -
    +
    {quicklookData.cpu_name && quicklookData.cpu_name}
    )} - {systemData && !systemError && ( + {quicklookData && !quicklookError && ( - {systemData.linux_distro && chart &&
    {systemData.linux_distro}
    } - - {systemData.os_version && chart &&
    {systemData.os_version}
    } - - {systemData.hostname &&
    {systemData.hostname}
    } + {quicklookData.cpu_name && chart &&
    {quicklookData.cpu_name}
    }
    )} diff --git a/src/widgets/glances/metrics/info.jsx b/src/widgets/glances/metrics/info.jsx index e7555bce..8e19614d 100644 --- a/src/widgets/glances/metrics/info.jsx +++ b/src/widgets/glances/metrics/info.jsx @@ -122,7 +122,10 @@ export default function Component({ service }) { )} {!chart && quicklookData?.swap === 0 && ( -
    {quicklookData.cpu_name}
    +
    + {systemData && systemData.linux_distro && `${systemData.linux_distro} - `} + {systemData && systemData.os_version} +
    )}
    {!chart && }
    @@ -137,7 +140,7 @@ export default function Component({ service }) { )} {!chart && ( - + )} From 01a2495e47d56b07e21742e79378e8325fb04e88 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 23 Mar 2024 23:22:27 -0700 Subject: [PATCH 045/100] Fix: correctly handle direct tab navigation with encoded chars (#3172) --- src/components/tab.jsx | 20 ++++++++++++-------- src/pages/index.jsx | 8 ++++---- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/components/tab.jsx b/src/components/tab.jsx index 699b1912..e0c2f46e 100644 --- a/src/components/tab.jsx +++ b/src/components/tab.jsx @@ -3,13 +3,19 @@ import classNames from "classnames"; import { TabContext } from "utils/contexts/tab"; -export function slugify(tabName) { - return tabName !== undefined ? encodeURIComponent(tabName.toString().replace(/\s+/g, "-").toLowerCase()) : ""; +function slugify(tabName) { + return tabName.toString().replace(/\s+/g, "-").toLowerCase(); +} + +export function slugifyAndEncode(tabName) { + return tabName !== undefined ? encodeURIComponent(slugify(tabName)) : ""; } export default function Tab({ tab }) { const { activeTab, setActiveTab } = useContext(TabContext); + const matchesTab = decodeURI(activeTab) === slugify(tab); + return (
  • { - setActiveTab(slugify(tab)); - window.location.hash = `#${slugify(tab)}`; + setActiveTab(slugifyAndEncode(tab)); + window.location.hash = `#${slugifyAndEncode(tab)}`; }} > {tab} diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 10b2f6d5..5e1bd6e2 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -10,7 +10,7 @@ import { BiError } from "react-icons/bi"; import { serverSideTranslations } from "next-i18next/serverSideTranslations"; import { useRouter } from "next/router"; -import Tab, { slugify } from "components/tab"; +import Tab, { slugifyAndEncode } from "components/tab"; import ServicesGroup from "components/services/group"; import BookmarksGroup from "components/bookmarks/group"; import Widget from "components/widgets/widget"; @@ -258,13 +258,13 @@ function Home({ initialSettings }) { useEffect(() => { if (!activeTab) { - const initialTab = decodeURI(asPath.substring(asPath.indexOf("#") + 1)); - setActiveTab(initialTab === "/" ? slugify(tabs["0"]) : initialTab); + const initialTab = asPath.substring(asPath.indexOf("#") + 1); + setActiveTab(initialTab === "/" ? slugifyAndEncode(tabs["0"]) : initialTab); } }); const servicesAndBookmarksGroups = useMemo(() => { - const tabGroupFilter = (g) => g && [activeTab, ""].includes(slugify(settings.layout?.[g.name]?.tab)); + const tabGroupFilter = (g) => g && [activeTab, ""].includes(slugifyAndEncode(settings.layout?.[g.name]?.tab)); const undefinedGroupFilter = (g) => settings.layout?.[g.name] === undefined; const layoutGroups = Object.keys(settings.layout ?? {}) From 0af975b3d9e5e626380f430cdf0209e488b47ce4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 24 Mar 2024 00:09:15 -0700 Subject: [PATCH 046/100] New Crowdin translations by GitHub Action (#3096) Co-authored-by: Crowdin Bot --- public/locales/af/common.json | 9 ++ public/locales/ar/common.json | 9 ++ public/locales/bg/common.json | 9 ++ public/locales/ca/common.json | 9 ++ public/locales/cs/common.json | 9 ++ public/locales/da/common.json | 9 ++ public/locales/de/common.json | 9 ++ public/locales/el/common.json | 9 ++ public/locales/eo/common.json | 9 ++ public/locales/es/common.json | 15 +- public/locales/eu/common.json | 9 ++ public/locales/fi/common.json | 9 ++ public/locales/fr/common.json | 9 ++ public/locales/he/common.json | 9 ++ public/locales/hi/common.json | 19 ++- public/locales/hr/common.json | 9 ++ public/locales/hu/common.json | 87 +++++----- public/locales/id/common.json | 9 ++ public/locales/it/common.json | 9 ++ public/locales/ja/common.json | 75 +++++---- public/locales/ko/common.json | 9 ++ public/locales/lv/common.json | 9 ++ public/locales/ms/common.json | 9 ++ public/locales/nl/common.json | 9 ++ public/locales/no/common.json | 9 ++ public/locales/pl/common.json | 9 ++ public/locales/pt/common.json | 9 ++ public/locales/pt_BR/common.json | 9 ++ public/locales/ro/common.json | 9 ++ public/locales/ru/common.json | 47 +++--- public/locales/sk/common.json | 41 +++-- public/locales/sl/common.json | 9 ++ public/locales/sr/common.json | 9 ++ public/locales/sv/common.json | 9 ++ public/locales/te/common.json | 9 ++ public/locales/th/common.json | 9 ++ public/locales/tr/common.json | 249 +++++++++++++++-------------- public/locales/uk/common.json | 9 ++ public/locales/vi/common.json | 9 ++ public/locales/yue/common.json | 11 +- public/locales/zh-Hans/common.json | 55 ++++--- public/locales/zh-Hant/common.json | 23 ++- 42 files changed, 644 insertions(+), 266 deletions(-) diff --git a/public/locales/af/common.json b/public/locales/af/common.json index 9145dec2..654130bb 100644 --- a/public/locales/af/common.json +++ b/public/locales/af/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Vanlyn", + "offline_alt": "Vanlyn", "online": "Aanlyn", "total": "Totaal", "unknown": "Onbekend" @@ -863,5 +864,13 @@ "users": "Gebruikers", "recipes": "Resepte", "keywords": "Sleutelwoorde" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "Met Waarborg", + "locations": "Plekke", + "labels": "Etikette", + "users": "Gebruikers", + "totalValue": "Totale Waarde" } } diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index 93da6cc1..28497fd4 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "غير متصل", + "offline_alt": "غير متصل", "online": "مُتّصل", "total": "المجموع", "unknown": "مجهول" @@ -863,5 +864,13 @@ "users": "المستخدمون", "recipes": "وصفات", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "المستخدمون", + "totalValue": "Total Value" } } diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index 04aef92f..3fc1676b 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Изключен", + "offline_alt": "Изключен", "online": "Online", "total": "Общо", "unknown": "Неизв." @@ -863,5 +864,13 @@ "users": "Потребители", "recipes": "Рецепти", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Потребители", + "totalValue": "Total Value" } } diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index 87c9afe3..4c7796ff 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Fora de línia", + "offline_alt": "Fora de línia", "online": "Online", "total": "Total", "unknown": "Desconegut" @@ -863,5 +864,13 @@ "users": "Usuaris", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Usuaris", + "totalValue": "Total Value" } } diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index de7999ae..81043207 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Offline", + "offline_alt": "Offline", "online": "Online", "total": "Celkem", "unknown": "Neznámý" @@ -863,5 +864,13 @@ "users": "Uživatelé", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Uživatelé", + "totalValue": "Total Value" } } diff --git a/public/locales/da/common.json b/public/locales/da/common.json index 310d2e67..390cb1f6 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Offline", + "offline_alt": "Offline", "online": "Online", "total": "Total", "unknown": "Ukendt" @@ -863,5 +864,13 @@ "users": "Brugere", "recipes": "Opskrifter", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Brugere", + "totalValue": "Total Value" } } diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 7238a685..529c5ea5 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Offline", + "offline_alt": "Offline", "online": "Online", "total": "Gesamt", "unknown": "Unbekannt" @@ -863,5 +864,13 @@ "users": "Benutzer", "recipes": "Rezepte", "keywords": "Schlagwörter" + }, + "homebox": { + "items": "Objekte", + "totalWithWarranty": "Mit Garantie", + "locations": "Orte", + "labels": "Labels", + "users": "Benutzer", + "totalValue": "Gesamtwert" } } diff --git a/public/locales/el/common.json b/public/locales/el/common.json index 7f990025..d006f1cc 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Εκτός σύνδεσης", + "offline_alt": "Εκτός σύνδεσης", "online": "Συνδεδεμένοι", "total": "Σύνολο", "unknown": "Άγνωστο" @@ -863,5 +864,13 @@ "users": "Χρήστες", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Χρήστες", + "totalValue": "Total Value" } } diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json index 0eae83da..3b1fa0f5 100644 --- a/public/locales/eo/common.json +++ b/public/locales/eo/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Malkonekta", + "offline_alt": "Malkonekta", "online": "Online", "total": "Totalo", "unknown": "Nekonata" @@ -863,5 +864,13 @@ "users": "Uzantoj", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Uzantoj", + "totalValue": "Total Value" } } diff --git a/public/locales/es/common.json b/public/locales/es/common.json index aac49d63..c65cff84 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Desconectado", + "offline_alt": "Desconectado", "online": "En línea", "total": "Total", "unknown": "Desconocido" @@ -544,7 +545,7 @@ "channels": "Canales", "hd": "Alta definición", "tunerCount": "Tuners", - "channelNumber": "Channel", + "channelNumber": "Canal", "channelNetwork": "Network", "signalStrength": "Strength", "signalQuality": "Quality", @@ -850,9 +851,9 @@ "playDuration": "Time Watched", "sceneSize": "Scenes Size", "sceneDuration": "Scenes Duration", - "images": "Images", + "images": "Imágenes", "imageSize": "Images Size", - "galleries": "Galleries", + "galleries": "Galerías", "performers": "Performers", "studios": "Studios", "movies": "Películas", @@ -863,5 +864,13 @@ "users": "Usuarios", "recipes": "Recetas", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "Con Garantía", + "locations": "Ubicaciones", + "labels": "Labels", + "users": "Usuarios", + "totalValue": "Total Value" } } diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json index 4d7109e8..0748eab0 100644 --- a/public/locales/eu/common.json +++ b/public/locales/eu/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Offline", + "offline_alt": "Offline", "online": "Online", "total": "Guztira", "unknown": "Ezezaguna" @@ -863,5 +864,13 @@ "users": "Users", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Users", + "totalValue": "Total Value" } } diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index eccbbfd0..ec4c11b7 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Offline", + "offline_alt": "Offline", "online": "Online", "total": "Yhteensä", "unknown": "Unknown" @@ -863,5 +864,13 @@ "users": "Users", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Users", + "totalValue": "Total Value" } } diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 5602b7b9..d2cd1a5c 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Hors ligne", + "offline_alt": "Hors ligne", "online": "En ligne", "total": "Total", "unknown": "Inconnu" @@ -863,5 +864,13 @@ "users": "Utilisateurs", "recipes": "Recettes", "keywords": "Mots-clés" + }, + "homebox": { + "items": "Objets", + "totalWithWarranty": "Avec garantie", + "locations": "Emplacements", + "labels": "Étiquettes", + "users": "Utilisateurs", + "totalValue": "Total Value" } } diff --git a/public/locales/he/common.json b/public/locales/he/common.json index 6897b709..d18f9856 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "כבוי", + "offline_alt": "כבוי", "online": "Online", "total": "סה\"כ", "unknown": "Unknown" @@ -863,5 +864,13 @@ "users": "Users", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Users", + "totalValue": "Total Value" } } diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index 65ed254a..f05d60e0 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -11,14 +11,14 @@ "percent": "{{value, percent}}", "number": "{{value, number}}", "ms": "{{value, number}}", - "date": "{{value, date}}", + "date": "{value, date}", "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", - "months": "mo", + "months": "माह", "days": "d", - "hours": "h", + "hours": "घं.", "minutes": "m", - "seconds": "s" + "seconds": "पल" }, "widget": { "missing_type": "Missing Widget Type: {{type}}", @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Offline", + "offline_alt": "Offline", "online": "Online", "total": "Total", "unknown": "Unknown" @@ -411,7 +412,7 @@ "free": "Free", "used": "Used", "days": "d", - "hours": "h", + "hours": "घं.", "crit": "Crit", "read": "Read", "write": "Write", @@ -863,5 +864,13 @@ "users": "Users", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Users", + "totalValue": "Total Value" } } diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index 84a2126c..03cc8919 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Offline", + "offline_alt": "Offline", "online": "Online", "total": "Ukupno", "unknown": "Nepoznato" @@ -863,5 +864,13 @@ "users": "Korisnici", "recipes": "Recepti", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Korisnici", + "totalValue": "Total Value" } } diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index ae844fd6..d1ac7035 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Nem elérhető", + "offline_alt": "Nem elérhető", "online": "Csatlakozva", "total": "Összes", "unknown": "Ismeretlen" @@ -124,8 +125,8 @@ "flood": { "download": "Letöltés", "upload": "Feltöltés", - "leech": "Letöltés", - "seed": "Feltöltés" + "leech": "Leech", + "seed": "Seed" }, "freshrss": { "subscriptions": "Előfizetések", @@ -202,14 +203,14 @@ "transmission": { "download": "Letöltés", "upload": "Feltöltés", - "leech": "Letöltés", - "seed": "Feltöltés" + "leech": "Leech", + "seed": "Seed" }, "qbittorrent": { "download": "Letöltés", "upload": "Feltöltés", - "leech": "Letöltés", - "seed": "Feltöltés" + "leech": "Leech", + "seed": "Seed" }, "qnap": { "cpuUsage": "Processzor Használat", @@ -222,14 +223,14 @@ "deluge": { "download": "Letöltés", "upload": "Feltöltés", - "leech": "Letöltés", - "seed": "Feltöltés" + "leech": "Leech", + "seed": "Seed" }, "downloadstation": { "download": "Letöltés", "upload": "Feltöltés", - "leech": "Letöltés", - "seed": "Feltöltés" + "leech": "Leech", + "seed": "Seed" }, "sonarr": { "wanted": "Keresett", @@ -396,7 +397,7 @@ "proxmox": { "mem": "RAM", "cpu": "Processzor", - "lxc": "LXC", + "lxc": "LXC-k", "vms": "VM-ek" }, "glances": { @@ -525,7 +526,7 @@ "playlists": "Lejátszási listák" }, "truenas": { - "load": "Rendszerterheltség", + "load": "Rendszerterhelés", "uptime": "Üzemidő", "alerts": "Riasztások" }, @@ -543,14 +544,14 @@ "hdhomerun": { "channels": "Csatornák", "hd": "HD", - "tunerCount": "Tuners", - "channelNumber": "Channel", - "channelNetwork": "Network", - "signalStrength": "Strength", - "signalQuality": "Quality", - "symbolQuality": "Quality", + "tunerCount": "Tuner-ek", + "channelNumber": "Csatorna", + "channelNetwork": "Hálózat", + "signalStrength": "Erősség", + "signalQuality": "Minőség", + "symbolQuality": "Minőség", "networkRate": "Bitráta", - "clientIP": "Client" + "clientIP": "Kliens" }, "scrutiny": { "passed": "Megfelelt", @@ -797,10 +798,10 @@ }, "openwrt": { "uptime": "Üzemidő", - "cpuLoad": "CPU Load Avg (5m)", + "cpuLoad": "Átlag CPU terhelés (5p)", "up": "Fel", "down": "Le", - "bytesTx": "Transmitted", + "bytesTx": "Továbbított", "bytesRx": "Fogadott" }, "uptimerobot": { @@ -833,35 +834,43 @@ "criticals": "Kritikusok" }, "plantit": { - "events": "Events", - "plants": "Plants", + "events": "Események", + "plants": "Növények", "photos": "Fényképek", - "species": "Species" + "species": "Fajok" }, "gitea": { - "notifications": "Notifications", + "notifications": "Üzenetek", "issues": "Problémák", - "pulls": "Pull Requests" + "pulls": "Pull request-ek" }, "stash": { - "scenes": "Scenes", - "scenesPlayed": "Scenes Played", - "playCount": "Total Plays", - "playDuration": "Time Watched", - "sceneSize": "Scenes Size", - "sceneDuration": "Scenes Duration", - "images": "Images", - "imageSize": "Images Size", - "galleries": "Galleries", - "performers": "Performers", - "studios": "Studios", + "scenes": "Jelenetek", + "scenesPlayed": "Lejátszott jelenetek", + "playCount": "Összes leátszás", + "playDuration": "Nézett idő", + "sceneSize": "Jelenetek mérete", + "sceneDuration": "Jelenetek hossza", + "images": "Képek", + "imageSize": "Képek mérete", + "galleries": "Galériák", + "performers": "Előadók", + "studios": "Stúdiók", "movies": "Film", "tags": "Címkék", - "oCount": "O Count" + "oCount": "O szám" }, "tandoor": { "users": "Felhasználók", "recipes": "Receptek", - "keywords": "Keywords" + "keywords": "Kulcsszavak" + }, + "homebox": { + "items": "Tárgyak", + "totalWithWarranty": "Garanciával", + "locations": "Helyek", + "labels": "Címkék", + "users": "Felhasználók", + "totalValue": "Teljes érték" } } diff --git a/public/locales/id/common.json b/public/locales/id/common.json index 794c6567..38d44f4b 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Offline", + "offline_alt": "Offline", "online": "Online", "total": "Total", "unknown": "Tidak Diketahui" @@ -863,5 +864,13 @@ "users": "Pengguna", "recipes": "Resep", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Pengguna", + "totalValue": "Total Value" } } diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 99f3e7ed..421807f2 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Non in linea", + "offline_alt": "Non in linea", "online": "Online", "total": "Totale", "unknown": "Sconosciuto" @@ -863,5 +864,13 @@ "users": "Utenti", "recipes": "Ricette", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Utenti", + "totalValue": "Total Value" } } diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index e8520815..a4507bf4 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -14,7 +14,7 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", - "months": "mo", + "months": "月", "days": "日", "hours": "時間", "minutes": "分", @@ -92,7 +92,7 @@ "siteMonitor": { "http_status": "HTTP ステータス", "error": "エラー", - "response": "Response", + "response": "応答", "down": "下へ", "up": "上へ", "not_available": "利用できません。" @@ -109,6 +109,7 @@ }, "esphome": { "offline": "オフライン", + "offline_alt": "オフライン", "online": "オンライン", "total": "合計", "unknown": "不明" @@ -133,21 +134,21 @@ }, "fritzbox": { "connectionStatus": "状態", - "connectionStatusUnconfigured": "Unconfigured", - "connectionStatusConnecting": "Connecting", - "connectionStatusAuthenticating": "Authenticating", - "connectionStatusPendingDisconnect": "Pending Disconnect", - "connectionStatusDisconnecting": "Disconnecting", - "connectionStatusDisconnected": "Disconnected", + "connectionStatusUnconfigured": "未設定", + "connectionStatusConnecting": "接続中", + "connectionStatusAuthenticating": "認証中", + "connectionStatusPendingDisconnect": "接続を切断する", + "connectionStatusDisconnecting": "接続を切断中", + "connectionStatusDisconnected": "切断されました", "connectionStatusConnected": "接続済み", "uptime": "稼働時間", - "maxDown": "Max. Down", - "maxUp": "Max. Up", + "maxDown": "最大ダウン", + "maxUp": "最大アップ", "down": "下へ", "up": "上へ", "received": "受信済み", "sent": "送信済み", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "退出ID" }, "caddy": { "upstreams": "アップストリーム", @@ -543,7 +544,7 @@ "hdhomerun": { "channels": "チャンネル", "hd": "HD", - "tunerCount": "Tuners", + "tunerCount": "チューナー", "channelNumber": "チャンネル", "channelNetwork": "ネットワーク", "signalStrength": "強さ", @@ -562,7 +563,7 @@ "total": "合計" }, "peanut": { - "battery_charge": "Battery Charge", + "battery_charge": "バッテリー充電", "ups_load": "UPS 負荷", "ups_status": "UPS 状態", "online": "オンライン", @@ -825,43 +826,51 @@ "noEventsFound": "予定が見つかりません" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "プラットフォーム", + "totalRoms": "ROMの合計" }, "netdata": { "warnings": "警告", "criticals": "重大" }, "plantit": { - "events": "Events", - "plants": "Plants", + "events": "イベント", + "plants": "植物", "photos": "写真", - "species": "Species" + "species": "種" }, "gitea": { - "notifications": "Notifications", + "notifications": "通知", "issues": "課題", - "pulls": "Pull Requests" + "pulls": "プルリクエスト" }, "stash": { - "scenes": "Scenes", - "scenesPlayed": "Scenes Played", - "playCount": "Total Plays", - "playDuration": "Time Watched", - "sceneSize": "Scenes Size", - "sceneDuration": "Scenes Duration", - "images": "Images", - "imageSize": "Images Size", - "galleries": "Galleries", - "performers": "Performers", - "studios": "Studios", + "scenes": "シーン", + "scenesPlayed": "再生されたシーン", + "playCount": "合計再生数", + "playDuration": "視聴時間", + "sceneSize": "シーンサイズ", + "sceneDuration": "シーンの長さ", + "images": "画像", + "imageSize": "画像サイズ", + "galleries": "ギャラリー", + "performers": "出演者", + "studios": "スタジオ", "movies": "映画", "tags": "タグ", - "oCount": "O Count" + "oCount": "O カウント" }, "tandoor": { "users": "ユーザ", "recipes": "レシピ", - "keywords": "Keywords" + "keywords": "キーワード" + }, + "homebox": { + "items": "アイテム", + "totalWithWarranty": "保証付き", + "locations": "場所", + "labels": "ラベル", + "users": "ユーザ", + "totalValue": "合計値" } } diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index d80382c9..da8aa492 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "중지", + "offline_alt": "중지", "online": "Online", "total": "총합", "unknown": "알 수 없음" @@ -863,5 +864,13 @@ "users": "사용자", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "사용자", + "totalValue": "Total Value" } } diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json index f41ed97d..8211b753 100644 --- a/public/locales/lv/common.json +++ b/public/locales/lv/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Bezsaistē", + "offline_alt": "Bezsaistē", "online": "Online", "total": "Kopā", "unknown": "Nezināms" @@ -863,5 +864,13 @@ "users": "Lietotāji", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Lietotāji", + "totalValue": "Total Value" } } diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json index f67cfaf6..46f08be8 100644 --- a/public/locales/ms/common.json +++ b/public/locales/ms/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Luar talian", + "offline_alt": "Luar talian", "online": "Dalam Talian", "total": "Jumlah", "unknown": "Tidak Diketahui" @@ -863,5 +864,13 @@ "users": "Pengguna", "recipes": "Resipi", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Pengguna", + "totalValue": "Total Value" } } diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index cdf95505..f1cd7aac 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Onbereikbaar", + "offline_alt": "Onbereikbaar", "online": "Bereikbaar", "total": "Totaal", "unknown": "Onbekend" @@ -863,5 +864,13 @@ "users": "Gebruikers", "recipes": "Recepten", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "Met garantie", + "locations": "Locaties", + "labels": "Labels", + "users": "Gebruikers", + "totalValue": "Totale waarde" } } diff --git a/public/locales/no/common.json b/public/locales/no/common.json index 65ed254a..86d6b20b 100644 --- a/public/locales/no/common.json +++ b/public/locales/no/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Offline", + "offline_alt": "Offline", "online": "Online", "total": "Total", "unknown": "Unknown" @@ -863,5 +864,13 @@ "users": "Users", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Users", + "totalValue": "Total Value" } } diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index 6b6ac5b7..80b2d9ce 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Nieosiągalny", + "offline_alt": "Nieosiągalny", "online": "Dostępny", "total": "Całkowite", "unknown": "Nieznany" @@ -863,5 +864,13 @@ "users": "Użytkownicy", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Użytkownicy", + "totalValue": "Total Value" } } diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index b726a719..aafdd8e0 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Desligado", + "offline_alt": "Desligado", "online": "Online", "total": "Total", "unknown": "Desconhecido" @@ -863,5 +864,13 @@ "users": "Utilizadores", "recipes": "Receitas", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Utilizadores", + "totalValue": "Total Value" } } diff --git a/public/locales/pt_BR/common.json b/public/locales/pt_BR/common.json index 76f24bdf..9cef642f 100644 --- a/public/locales/pt_BR/common.json +++ b/public/locales/pt_BR/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Desligado", + "offline_alt": "Desligado", "online": "Online", "total": "Total", "unknown": "Desconhecido" @@ -863,5 +864,13 @@ "users": "Utilizadores", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Utilizadores", + "totalValue": "Total Value" } } diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index 8d4376fd..987b1197 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Offline", + "offline_alt": "Offline", "online": "Online", "total": "Total", "unknown": "Necunoscut" @@ -863,5 +864,13 @@ "users": "Utilizatori", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Utilizatori", + "totalValue": "Total Value" } } diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index a3f9c0fd..81472ced 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Не в сети", + "offline_alt": "Не в сети", "online": "В сети", "total": "Всего", "unknown": "Неизвестен" @@ -830,38 +831,46 @@ }, "netdata": { "warnings": "Предупреждения", - "criticals": "Криты" + "criticals": "Критические" }, "plantit": { - "events": "Events", - "plants": "Plants", + "events": "События", + "plants": "Растения", "photos": "Фото", - "species": "Species" + "species": "Виды" }, "gitea": { - "notifications": "Notifications", + "notifications": "Уведомления", "issues": "Вопросы", - "pulls": "Pull Requests" + "pulls": "Запросы на слияние (Pull Request)" }, "stash": { - "scenes": "Scenes", - "scenesPlayed": "Scenes Played", - "playCount": "Total Plays", - "playDuration": "Time Watched", - "sceneSize": "Scenes Size", - "sceneDuration": "Scenes Duration", - "images": "Images", - "imageSize": "Images Size", - "galleries": "Galleries", - "performers": "Performers", - "studios": "Studios", + "scenes": "Сцены", + "scenesPlayed": "Проигранных сцен", + "playCount": "Всего проиграно", + "playDuration": "Просмотрено времени", + "sceneSize": "Размер сцены", + "sceneDuration": "Длительность сцен", + "images": "Изображения", + "imageSize": "Размер изображений", + "galleries": "Галереи", + "performers": "Исполнители", + "studios": "Студии", "movies": "Фильмы", "tags": "Теги", - "oCount": "O Count" + "oCount": "0" }, "tandoor": { "users": "Пользователи", "recipes": "Рецепты", - "keywords": "Keywords" + "keywords": "Ключевые слова" + }, + "homebox": { + "items": "Элементы", + "totalWithWarranty": "С гарантией", + "locations": "Местоположения", + "labels": "Ярлыки", + "users": "Пользователи", + "totalValue": "Общая стоимость" } } diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index a1e50792..794bf9c6 100644 --- a/public/locales/sk/common.json +++ b/public/locales/sk/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Nedostupný", + "offline_alt": "Nedostupný", "online": "Online", "total": "Celkovo", "unknown": "Neznáme" @@ -833,28 +834,28 @@ "criticals": "Kritické" }, "plantit": { - "events": "Events", - "plants": "Plants", + "events": "Udalosti", + "plants": "Rastliny", "photos": "Fotografie", - "species": "Species" + "species": "Druhy" }, "gitea": { - "notifications": "Notifications", + "notifications": "Oznámenia", "issues": "Problémy", - "pulls": "Pull Requests" + "pulls": "Pull requesty" }, "stash": { - "scenes": "Scenes", + "scenes": "Scény", "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", + "playCount": "Celkovo prehraní", + "playDuration": "Pozeraný čas", + "sceneSize": "Veľkosť obrazovky", + "sceneDuration": "Dĺžka scény", + "images": "Obrázky", + "imageSize": "Veľkosť obrázkov", + "galleries": "Galérie", + "performers": "Herci", + "studios": "Štúdiá", "movies": "Filmy", "tags": "Štítky", "oCount": "O Count" @@ -862,6 +863,14 @@ "tandoor": { "users": "Používatelia", "recipes": "Recepty", - "keywords": "Keywords" + "keywords": "Kľúčové slová" + }, + "homebox": { + "items": "Položky", + "totalWithWarranty": "So zárukou", + "locations": "Umiestnenia", + "labels": "Labels", + "users": "Používatelia", + "totalValue": "Total Value" } } diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index fd2e5912..d48cd753 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Ni povezan", + "offline_alt": "Ni povezan", "online": "Na spletu", "total": "Skupaj", "unknown": "Neznano" @@ -863,5 +864,13 @@ "users": "Uporabniki", "recipes": "Recepti", "keywords": "Ključne besede" + }, + "homebox": { + "items": "Predmeti", + "totalWithWarranty": "Z garancijo", + "locations": "Lokacije", + "labels": "Oznake", + "users": "Uporabniki", + "totalValue": "Skupna vrednost" } } diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json index 65ed254a..86d6b20b 100644 --- a/public/locales/sr/common.json +++ b/public/locales/sr/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Offline", + "offline_alt": "Offline", "online": "Online", "total": "Total", "unknown": "Unknown" @@ -863,5 +864,13 @@ "users": "Users", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Users", + "totalValue": "Total Value" } } diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index e39ba771..9311ed8d 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Offline", + "offline_alt": "Offline", "online": "Online", "total": "Total", "unknown": "Unknown" @@ -863,5 +864,13 @@ "users": "Användare", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Användare", + "totalValue": "Total Value" } } diff --git a/public/locales/te/common.json b/public/locales/te/common.json index 8c794cee..90ff4f22 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "ఆఫ్‌లైన్", + "offline_alt": "ఆఫ్‌లైన్", "online": "Online", "total": "మొత్తం", "unknown": "Unknown" @@ -863,5 +864,13 @@ "users": "వినియోగదారులు", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "వినియోగదారులు", + "totalValue": "Total Value" } } diff --git a/public/locales/th/common.json b/public/locales/th/common.json index 612194a1..29b5b8c1 100644 --- a/public/locales/th/common.json +++ b/public/locales/th/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "ออฟไลน์", + "offline_alt": "ออฟไลน์", "online": "Online", "total": "ทั้งหมด", "unknown": "ไม่ทราบ" @@ -863,5 +864,13 @@ "users": "ผู้ใช้", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "ผู้ใช้", + "totalValue": "Total Value" } } diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index 6d8a212c..98960ac1 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Çevrimdışı", + "offline_alt": "Çevrimdışı", "online": "Çevrimiçi", "total": "Toplam", "unknown": "Bilinmiyor" @@ -136,18 +137,18 @@ "connectionStatusUnconfigured": "Yapılandırılmamış", "connectionStatusConnecting": "Bağlanıyor", "connectionStatusAuthenticating": "Kimlik doğrulanıyor", - "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusPendingDisconnect": "Bağlantının Kesilmesi Bekleniyor", "connectionStatusDisconnecting": "Bağlantı kesiliyor...", "connectionStatusDisconnected": "Bağlantı kesildi", "connectionStatusConnected": "Bağlandı", "uptime": "Çalışma Süresi", - "maxDown": "Max. Down", - "maxUp": "Max. Up", + "maxDown": "Max. Indirme", + "maxUp": "Max. Gönderme", "down": "İndirme", "up": "Yükleme", "received": "Alınan", "sent": "Gönderilen", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Harici IP" }, "caddy": { "upstreams": "Akış", @@ -169,7 +170,7 @@ "transcoding": "Dönüştürülüyor", "bitrate": "Bit Oranı", "no_active": "Aktif akış yok", - "plex_connection_error": "Check Plex Connection" + "plex_connection_error": "Plex Bağlantısı Kontrol Ediliyor" }, "omada": { "connectedAp": "Bağlı AP'ler", @@ -426,7 +427,7 @@ "custom": "Özel", "visit": "Ziyaret", "url": "URL", - "searchsuggestion": "Suggestion" + "searchsuggestion": "Öneri" }, "wmo": { "0-day": "Güneşli", @@ -498,14 +499,14 @@ "down": "İndirme" }, "healthchecks": { - "new": "New", + "new": "Yeni", "up": "Yükleme", - "grace": "In Grace Period", + "grace": "Tolerans Döneminde", "down": "İndirme", - "paused": "Paused", + "paused": "Durduruldu", "status": "Durum", "last_ping": "Son Ping", - "never": "No pings yet" + "never": "Henüz ping yok" }, "watchtower": { "containers_scanned": "Tarandı", @@ -543,14 +544,14 @@ "hdhomerun": { "channels": "Kanallar", "hd": "HD", - "tunerCount": "Tuners", - "channelNumber": "Channel", - "channelNetwork": "Network", - "signalStrength": "Strength", - "signalQuality": "Quality", - "symbolQuality": "Quality", + "tunerCount": "Ayarlayıcılar", + "channelNumber": "Kanal", + "channelNetwork": "Ağ", + "signalStrength": "Sağlamlık", + "signalQuality": "Kalite", + "symbolQuality": "Kalite", "networkRate": "Bit Oranı", - "clientIP": "Client" + "clientIP": "Alıcı" }, "scrutiny": { "passed": "Geçti", @@ -563,11 +564,11 @@ }, "peanut": { "battery_charge": "Pil Yüzdesi", - "ups_load": "UPS Load", - "ups_status": "UPS Status", + "ups_load": "UPS Yükü", + "ups_status": "UPS Durumu", "online": "Çevrimiçi", "on_battery": "Pilde", - "low_battery": "Low Battery" + "low_battery": "Düşük Pil" }, "nextdns": { "wait": "Lütfen Bekleyin", @@ -577,7 +578,7 @@ "cpuLoad": "CPU Yükü", "memoryUsed": "Bellek Kullanımı", "uptime": "Çalışma Süresi", - "numberOfLeases": "Leases" + "numberOfLeases": "Kiralama" }, "xteve": { "streams_all": "Tüm Akışlar", @@ -585,9 +586,9 @@ "streams_xepg": "XEPG Kanalları" }, "opendtu": { - "yieldDay": "Today", - "absolutePower": "Power", - "relativePower": "Power %", + "yieldDay": "Bugün", + "absolutePower": "Güç", + "relativePower": "Güç %", "limit": "Limit" }, "opnsense": { @@ -606,25 +607,25 @@ "printer_state": "Durum", "temp_tool": "Araç sıcaklığı", "temp_bed": "Yatak sıcaklığı", - "job_completion": "Completion" + "job_completion": "Tamamlanma" }, "cloudflared": { - "origin_ip": "Origin IP", + "origin_ip": "Gerçek IP", "status": "Durum" }, "pfsense": { - "load": "Load Avg", - "memory": "Mem Usage", - "wanStatus": "WAN Status", + "load": "Ort. Yükleme", + "memory": "Bellek Kullanımı", + "wanStatus": "WAN Durumu", "up": "Yükleme", "down": "İndirme", "temp": "Sıcaklık", - "disk": "Disk Usage", + "disk": "Disk Kullanımı", "wanIP": "WAN IP" }, "proxmoxbackupserver": { - "datastore_usage": "Datastore", - "failed_tasks_24h": "Failed Tasks 24h", + "datastore_usage": "Veri deposu", + "failed_tasks_24h": "Başarısız Görevler 24h", "cpu_usage": "CPU", "memory_usage": "Bellek" }, @@ -638,14 +639,14 @@ "up": "Sites Up", "down": "Sites Down", "uptime": "Çalışma Süresi", - "incident": "Incident", + "incident": "Olay", "m": "dk" }, "atsumeru": { "series": "Diziler", - "archives": "Archives", - "chapters": "Chapters", - "categories": "Categories" + "archives": "Arşivler", + "chapters": "Bölümler", + "categories": "Kategoriler" }, "komga": { "libraries": "Kütüphane", @@ -672,42 +673,42 @@ "queue": "Kuyruk", "processing": "İşleniyor", "processed": "İşlendi", - "time": "Time" + "time": "Zaman" }, "grafana": { - "dashboards": "Dashboards", - "datasources": "Data Sources", - "totalalerts": "Total Alerts", - "alertstriggered": "Alerts Triggered" + "dashboards": "Kontrol Paneli", + "datasources": "Veri Kaynakları", + "totalalerts": "Toplam Uyarılar", + "alertstriggered": "Uyarılar Tetiklendi" }, "nextcloud": { - "cpuload": "Cpu Load", - "memoryusage": "Memory Usage", - "freespace": "Free Space", - "activeusers": "Active Users", - "numfiles": "Files", - "numshares": "Shared Items" + "cpuload": "Cpu Yükü", + "memoryusage": "Bellek Kullanımı", + "freespace": "Boş Alan", + "activeusers": "Aktif Kullanıcılar", + "numfiles": "Dosyalar", + "numshares": "Paylaşılan Öğeler" }, "kopia": { "status": "Durum", - "size": "Size", - "lastrun": "Last Run", - "nextrun": "Next Run", + "size": "Boyut", + "lastrun": "Son Çalışma", + "nextrun": "Sonraki Çalışma", "failed": "Başarısız" }, "unmanic": { - "active_workers": "Active Workers", - "total_workers": "Total Workers", - "records_total": "Queue Length" + "active_workers": "Aktif Kullanıcılar", + "total_workers": "Toplam Kullanıcılar", + "records_total": "Sıra Uzunluğu" }, "pterodactyl": { - "servers": "Servers", - "nodes": "Nodes" + "servers": "Sunucular", + "nodes": "Düğümler" }, "prometheus": { "targets_up": "Targets Up", "targets_down": "Targets Down", - "targets_total": "Total Targets" + "targets_total": "Toplam Hedef" }, "gatus": { "up": "Sites Up", @@ -715,50 +716,50 @@ "uptime": "Çalışma Süresi" }, "ghostfolio": { - "gross_percent_today": "Today", - "gross_percent_1y": "One year", - "gross_percent_max": "All time" + "gross_percent_today": "Bugün", + "gross_percent_1y": "Bir yıl", + "gross_percent_max": "Tüm zaman" }, "audiobookshelf": { - "podcasts": "Podcasts", + "podcasts": "Podcast", "books": "Kitaplar", - "podcastsDuration": "Duration", - "booksDuration": "Duration" + "podcastsDuration": "Süre", + "booksDuration": "Süre" }, "homeassistant": { "people_home": "People Home", - "lights_on": "Lights On", - "switches_on": "Switches On" + "lights_on": "Işıklar Açık", + "switches_on": "Aç" }, "whatsupdocker": { - "monitoring": "Monitoring", + "monitoring": "İzleme", "updates": "Güncellemeler" }, "calibreweb": { "books": "Kitaplar", - "authors": "Authors", - "categories": "Categories", + "authors": "Yazarlar", + "categories": "Kategoriler", "series": "Diziler" }, "jdownloader": { "downloadCount": "Kuyruk", "downloadBytesRemaining": "Kalan", - "downloadTotalBytes": "Size", + "downloadTotalBytes": "Boyut", "downloadSpeed": "Hız" }, "kavita": { "seriesCount": "Diziler", - "totalFiles": "Files" + "totalFiles": "Dosyalar" }, "azuredevops": { - "result": "Result", + "result": "Sonuç", "status": "Durum", "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", + "succeeded": "Başarılı", + "notStarted": "Henüz Başlamadı", "failed": "Başarısız", - "canceled": "Canceled", - "inProgress": "In Progress", + "canceled": "İptal edildi", + "inProgress": "Sürüyor", "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Onaylı" @@ -767,28 +768,28 @@ "status": "Durum", "online": "Çevrimiçi", "offline": "Çevrimdışı", - "name": "Name", - "map": "Map", - "currentPlayers": "Current players", + "name": "İsim", + "map": "Harita", + "currentPlayers": "Mevcut oyuncular", "players": "Oyuncular", - "maxPlayers": "Max players", - "bots": "Bots", + "maxPlayers": "Maks. oyuncu", + "bots": "Botlar", "ping": "Gecikme" }, "urbackup": { - "ok": "Ok", - "errored": "Errors", - "noRecent": "Out of Date", - "totalUsed": "Used Storage" + "ok": "Tamam", + "errored": "Hatalar", + "noRecent": "Tarihi geçmiş", + "totalUsed": "Kullanılan depolama alanı" }, "mealie": { - "recipes": "Recipes", + "recipes": "Tarifler", "users": "Kullanıcılar", - "categories": "Categories", - "tags": "Tags" + "categories": "Kategoriler", + "tags": "Etiketler" }, "openmediavault": { - "downloading": "Downloading", + "downloading": "İndiriliyor", "total": "Toplam", "running": "Çalışan", "stopped": "Durduruldu", @@ -797,71 +798,79 @@ }, "openwrt": { "uptime": "Çalışma Süresi", - "cpuLoad": "CPU Load Avg (5m)", + "cpuLoad": "CPU Yükü Ortalaması (5dk)", "up": "Yükleme", "down": "İndirme", - "bytesTx": "Transmitted", + "bytesTx": "İletilen", "bytesRx": "Alınan" }, "uptimerobot": { "status": "Durum", "uptime": "Çalışma Süresi", - "lastDown": "Last Downtime", - "downDuration": "Downtime Duration", + "lastDown": "Son Kesinti", + "downDuration": "Kesinti Süresi", "sitesUp": "Sites Up", "sitesDown": "Sites Down", - "paused": "Paused", - "notyetchecked": "Not Yet Checked", + "paused": "Durduruldu", + "notyetchecked": "Henüz Kontrol Edilmedi", "up": "Yükleme", - "seemsdown": "Seems Down", + "seemsdown": "Kapalı görünüyor", "down": "İndirme", "unknown": "Bilinmiyor" }, "calendar": { - "inCinemas": "In cinemas", - "physicalRelease": "Physical release", - "digitalRelease": "Digital release", - "noEventsToday": "No events for today!", - "noEventsFound": "No events found" + "inCinemas": "Sinemalarda", + "physicalRelease": "Fiziksel Yayınlanan", + "digitalRelease": "Dijital Yayınlanan", + "noEventsToday": "Bugün için etkinlik yok!", + "noEventsFound": "Etkinlik bulunamadı" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "Platformlar", + "totalRoms": "Toplam ROM'lar" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "Uyarılar", + "criticals": "Kritik" }, "plantit": { - "events": "Events", + "events": "Etkinlikler", "plants": "Plants", "photos": "Fotoğraflar", - "species": "Species" + "species": "Türler" }, "gitea": { - "notifications": "Notifications", + "notifications": "Bildirimler", "issues": "Sorunlar", - "pulls": "Pull Requests" + "pulls": "Değişiklik İstekleri" }, "stash": { - "scenes": "Scenes", - "scenesPlayed": "Scenes Played", - "playCount": "Total Plays", - "playDuration": "Time Watched", - "sceneSize": "Scenes Size", - "sceneDuration": "Scenes Duration", - "images": "Images", - "imageSize": "Images Size", - "galleries": "Galleries", + "scenes": "Sahneler", + "scenesPlayed": "Oynanan Sahneler", + "playCount": "Toplam Oynatma", + "playDuration": "İzlenen Süre", + "sceneSize": "Sahne Boyutu", + "sceneDuration": "Sahne Süresi", + "images": "Görseller", + "imageSize": "Görsel Boyutu", + "galleries": "Galeriler", "performers": "Performers", - "studios": "Studios", + "studios": "Stüdyolar", "movies": "Filmler", - "tags": "Tags", + "tags": "Etiketler", "oCount": "O Count" }, "tandoor": { "users": "Kullanıcılar", - "recipes": "Recipes", - "keywords": "Keywords" + "recipes": "Tarifler", + "keywords": "Anahtar Sözcükler" + }, + "homebox": { + "items": "Ögeler", + "totalWithWarranty": "Garantili", + "locations": "Konum", + "labels": "Etiketler", + "users": "Kullanıcılar", + "totalValue": "Toplam Değer" } } diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index 0e62bc3f..1a69825c 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Офлайн", + "offline_alt": "Офлайн", "online": "Онлайн", "total": "Усього", "unknown": "Невідомий" @@ -863,5 +864,13 @@ "users": "Користувачі", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Користувачі", + "totalValue": "Total Value" } } diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index 11df7eb5..23827ddc 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "Ngoại tuyến", + "offline_alt": "Ngoại tuyến", "online": "Online", "total": "Tổng", "unknown": "Unknown" @@ -863,5 +864,13 @@ "users": "Users", "recipes": "Recipes", "keywords": "Keywords" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "Users", + "totalValue": "Total Value" } } diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index 2a4f6b0b..3b32c081 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "離線", + "offline_alt": "離線", "online": "在線", "total": "全部", "unknown": "未知" @@ -862,6 +863,14 @@ "tandoor": { "users": "使用者", "recipes": "食譜", - "keywords": "Keywords" + "keywords": "關鍵字" + }, + "homebox": { + "items": "項目", + "totalWithWarranty": "With Warranty", + "locations": "位置", + "labels": "標籤", + "users": "使用者", + "totalValue": "總共" } } diff --git a/public/locales/zh-Hans/common.json b/public/locales/zh-Hans/common.json index 9919d649..3957ccc8 100644 --- a/public/locales/zh-Hans/common.json +++ b/public/locales/zh-Hans/common.json @@ -109,6 +109,7 @@ }, "esphome": { "offline": "离线", + "offline_alt": "离线", "online": "在线", "total": "总计", "unknown": "未知" @@ -141,13 +142,13 @@ "connectionStatusDisconnected": "未连接", "connectionStatusConnected": "已连接", "uptime": "运行时间", - "maxDown": "", + "maxDown": "最大下载速度", "maxUp": "", "down": "离线", "up": "在线", - "received": "已接收", + "received": "最大上传数", "sent": "已发送", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "外部IP" }, "caddy": { "upstreams": "上行", @@ -543,8 +544,8 @@ "hdhomerun": { "channels": "频道", "hd": "HD", - "tunerCount": "Tuners", - "channelNumber": "Channel", + "tunerCount": "电台数", + "channelNumber": "频道数", "channelNetwork": "网络", "signalStrength": "强度", "signalQuality": "质量", @@ -801,7 +802,7 @@ "up": "在线", "down": "离线", "bytesTx": "已传输", - "bytesRx": "已接收" + "bytesRx": "最大上传数" }, "uptimerobot": { "status": "状态", @@ -833,28 +834,28 @@ "criticals": "严重" }, "plantit": { - "events": "Events", - "plants": "Plants", + "events": "事件", + "plants": "植物", "photos": "照片", - "species": "Species" + "species": "物种" }, "gitea": { - "notifications": "Notifications", + "notifications": "通知", "issues": "出版", - "pulls": "Pull Requests" + "pulls": "PR" }, "stash": { - "scenes": "Scenes", - "scenesPlayed": "Scenes Played", - "playCount": "Total Plays", - "playDuration": "Time Watched", - "sceneSize": "Scenes Size", - "sceneDuration": "Scenes Duration", - "images": "Images", - "imageSize": "Images Size", - "galleries": "Galleries", - "performers": "Performers", - "studios": "Studios", + "scenes": "场景", + "scenesPlayed": "已播放场景", + "playCount": "播放总数", + "playDuration": "播放时间", + "sceneSize": "场景大小", + "sceneDuration": "场景时长", + "images": "图片", + "imageSize": "图像大小", + "galleries": "图库", + "performers": "演员", + "studios": "工作室", "movies": "电影", "tags": "标签", "oCount": "O Count" @@ -862,6 +863,14 @@ "tandoor": { "users": "用户数", "recipes": "食谱", - "keywords": "Keywords" + "keywords": "关键词" + }, + "homebox": { + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", + "users": "用户数", + "totalValue": "Total Value" } } diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index a97ac9ee..2ee4e831 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -50,7 +50,7 @@ "uptime": "運作時間" }, "unifi": { - "users": "使用者", + "users": "用戶", "uptime": "運行時間", "days": "天", "wan": "WAN", @@ -109,6 +109,7 @@ }, "esphome": { "offline": "離線", + "offline_alt": "離線", "online": "在線", "total": "全部", "unknown": "未知" @@ -368,7 +369,7 @@ "transferRate": "速率" }, "mastodon": { - "user_count": "使用者", + "user_count": "用戶", "status_count": "文章", "domain_count": "網域" }, @@ -389,7 +390,7 @@ "unread": "未讀" }, "authentik": { - "users": "使用者", + "users": "用戶", "loginsLast24H": "登入 (過去 24 小時)", "failedLoginsLast24H": "登入失敗 (過去 24 小時)" }, @@ -629,7 +630,7 @@ "memory_usage": "記憶體" }, "immich": { - "users": "使用者", + "users": "用戶", "photos": "照片", "videos": "影片", "storage": "儲存空間" @@ -783,7 +784,7 @@ }, "mealie": { "recipes": "食譜", - "users": "使用者", + "users": "用戶", "categories": "類別", "tags": "標籤" }, @@ -860,8 +861,16 @@ "oCount": "O Count" }, "tandoor": { - "users": "使用者", + "users": "用戶", "recipes": "食譜", - "keywords": "Keywords" + "keywords": "關鍵字" + }, + "homebox": { + "items": "項目", + "totalWithWarranty": "With Warranty", + "locations": "位置", + "labels": "標籤", + "users": "用戶", + "totalValue": "總共" } } From 4fe4ae9622f1ff5364775eaae1274cf82e848d88 Mon Sep 17 00:00:00 2001 From: ThorTheStorm Date: Thu, 28 Mar 2024 15:51:07 +0100 Subject: [PATCH 047/100] Documentation: Update authentik api key info (#3195) --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/authentik.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/widgets/services/authentik.md b/docs/widgets/services/authentik.md index 3b84009f..a92b84ec 100644 --- a/docs/widgets/services/authentik.md +++ b/docs/widgets/services/authentik.md @@ -7,14 +7,15 @@ Learn more about [Authentik](https://github.com/goauthentik/authentik). This widget reads the number of active users in the system, as well as logins for the last 24 hours. -You will need to generate an API token for an existing user. To do so follow these steps: +You will need to generate an API token for an existing user under `Admin Portal` > `Directory` > `Tokens & App passwords`. +Make sure to set Intent to "API Token". -1. Navigate to the Authentik Admin Portal -2. Expand Directory, the click Tokens & App passwords -3. Click the Create button -4. Fill out the dialog making sure to set Intent to API Token -5. Click the Create button on the dialog -6. Click the copy button on the far right of the newly created API Token +The account you made the API token for also needs the following **Assigned global permissions** in Authentik: + +- authentik Core + - User +- authentik Events + - Event Allowed fields: `["users", "loginsLast24H", "failedLoginsLast24H"]`. From def9b270066a8ecf47497b487f706a84d90f95a8 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 28 Mar 2024 11:16:00 -0500 Subject: [PATCH 048/100] Enhancement: support for glances v4 (#3196) --- docs/widgets/info/glances.md | 1 + docs/widgets/services/glances.md | 1 + src/pages/api/widgets/glances.js | 5 +++-- src/utils/config/service-helpers.js | 2 ++ src/widgets/glances/metrics/cpu.jsx | 5 +++-- src/widgets/glances/metrics/disk.jsx | 3 ++- src/widgets/glances/metrics/fs.jsx | 3 ++- src/widgets/glances/metrics/gpu.jsx | 3 ++- src/widgets/glances/metrics/info.jsx | 4 +++- src/widgets/glances/metrics/memory.jsx | 3 ++- src/widgets/glances/metrics/net.jsx | 14 +++++++++----- src/widgets/glances/metrics/process.jsx | 7 +++++-- src/widgets/glances/metrics/sensor.jsx | 3 ++- src/widgets/glances/widget.js | 2 +- 14 files changed, 38 insertions(+), 18 deletions(-) diff --git a/docs/widgets/info/glances.md b/docs/widgets/info/glances.md index b7fd7efd..52c5cf28 100644 --- a/docs/widgets/info/glances.md +++ b/docs/widgets/info/glances.md @@ -12,6 +12,7 @@ The Glances widget allows you to monitor the resources (CPU, memory, storage, te url: http://host.or.ip:port username: user # optional if auth enabled in Glances password: pass # optional if auth enabled in Glances + version: 4 # required only if running glances v4 or higher, defaults to 3 cpu: true # optional, enabled by default, disable by setting to false mem: true # optional, enabled by default, disable by setting to false cputemp: true # disabled by default diff --git a/docs/widgets/services/glances.md b/docs/widgets/services/glances.md index 17689293..562cf57a 100644 --- a/docs/widgets/services/glances.md +++ b/docs/widgets/services/glances.md @@ -17,6 +17,7 @@ widget: url: http://glances.host.or.ip:port username: user # optional if auth enabled in Glances password: pass # optional if auth enabled in Glances + version: 4 # required only if running glances v4 or higher, defaults to 3 metric: cpu diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk refreshInterval: 5000 # optional - in milliseconds, defaults to 1000 or more, depending on the metric diff --git a/src/pages/api/widgets/glances.js b/src/pages/api/widgets/glances.js index 0d87a9ae..199c133e 100644 --- a/src/pages/api/widgets/glances.js +++ b/src/pages/api/widgets/glances.js @@ -13,7 +13,7 @@ async function retrieveFromGlancesAPI(privateWidgetOptions, endpoint) { throw new Error(errorMessage); } - const apiUrl = `${url}/api/3/${endpoint}`; + const apiUrl = `${url}/api/${privateWidgetOptions.version}/${endpoint}`; const headers = { "Accept-Encoding": "application/json", }; @@ -42,9 +42,10 @@ async function retrieveFromGlancesAPI(privateWidgetOptions, endpoint) { } export default async function handler(req, res) { - const { index, cputemp: includeCpuTemp, uptime: includeUptime, disk: includeDisks } = req.query; + const { index, cputemp: includeCpuTemp, uptime: includeUptime, disk: includeDisks, version } = req.query; const privateWidgetOptions = await getPrivateWidgetOptions("glances", index); + privateWidgetOptions.version = version ?? 3; try { const cpuData = await retrieveFromGlancesAPI(privateWidgetOptions, "cpu"); diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index c4ca2a65..bee7db4e 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -394,6 +394,7 @@ export function cleanServiceGroups(groups) { enableNowPlaying, // glances + version, chart, metric, pointsLimit, @@ -528,6 +529,7 @@ export function cleanServiceGroups(groups) { if (snapshotPath) cleanedService.widget.snapshotPath = snapshotPath; } if (type === "glances") { + if (version) cleanedService.widget.version = version; if (metric) cleanedService.widget.metric = metric; if (chart !== undefined) { cleanedService.widget.chart = chart; diff --git a/src/widgets/glances/metrics/cpu.jsx b/src/widgets/glances/metrics/cpu.jsx index 1f2824d3..bd12dc29 100644 --- a/src/widgets/glances/metrics/cpu.jsx +++ b/src/widgets/glances/metrics/cpu.jsx @@ -16,15 +16,16 @@ const defaultInterval = 1000; export default function Component({ service }) { const { t } = useTranslation(); const { widget } = service; - const { chart, refreshInterval = defaultInterval, pointsLimit = defaultPointsLimit } = widget; + const { chart, refreshInterval = defaultInterval, pointsLimit = defaultPointsLimit, version = 3 } = widget; const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); const { data, error } = useWidgetAPI(service.widget, "cpu", { refreshInterval: Math.max(defaultInterval, refreshInterval), + version, }); - const { data: quicklookData, error: quicklookError } = useWidgetAPI(service.widget, "quicklook"); + const { data: quicklookData, error: quicklookError } = useWidgetAPI(service.widget, "quicklook", { version }); useEffect(() => { if (data) { diff --git a/src/widgets/glances/metrics/disk.jsx b/src/widgets/glances/metrics/disk.jsx index d5cac477..662822ef 100644 --- a/src/widgets/glances/metrics/disk.jsx +++ b/src/widgets/glances/metrics/disk.jsx @@ -16,7 +16,7 @@ const defaultInterval = 1000; export default function Component({ service }) { const { t } = useTranslation(); const { widget } = service; - const { chart, refreshInterval = defaultInterval, pointsLimit = defaultPointsLimit } = widget; + const { chart, refreshInterval = defaultInterval, pointsLimit = defaultPointsLimit, version = 3 } = widget; const [, diskName] = widget.metric.split(":"); const [dataPoints, setDataPoints] = useState( @@ -26,6 +26,7 @@ export default function Component({ service }) { const { data, error } = useWidgetAPI(service.widget, "diskio", { refreshInterval: Math.max(defaultInterval, refreshInterval), + version, }); const calculateRates = (d) => diff --git a/src/widgets/glances/metrics/fs.jsx b/src/widgets/glances/metrics/fs.jsx index 16d8d153..1a26c2ab 100644 --- a/src/widgets/glances/metrics/fs.jsx +++ b/src/widgets/glances/metrics/fs.jsx @@ -11,12 +11,13 @@ const defaultInterval = 1000; export default function Component({ service }) { const { t } = useTranslation(); const { widget } = service; - const { chart, refreshInterval = defaultInterval } = widget; + const { chart, refreshInterval = defaultInterval, version = 3 } = widget; const [, fsName] = widget.metric.split("fs:"); const diskUnits = widget.diskUnits === "bbytes" ? "common.bbytes" : "common.bytes"; const { data, error } = useWidgetAPI(widget, "fs", { refreshInterval: Math.max(defaultInterval, refreshInterval), + version, }); if (error) { diff --git a/src/widgets/glances/metrics/gpu.jsx b/src/widgets/glances/metrics/gpu.jsx index c33c6396..cc8504fa 100644 --- a/src/widgets/glances/metrics/gpu.jsx +++ b/src/widgets/glances/metrics/gpu.jsx @@ -16,13 +16,14 @@ const defaultInterval = 1000; export default function Component({ service }) { const { t } = useTranslation(); const { widget } = service; - const { chart, refreshInterval = defaultInterval, pointsLimit = defaultPointsLimit } = widget; + const { chart, refreshInterval = defaultInterval, pointsLimit = defaultPointsLimit, version = 3 } = widget; const [, gpuName] = widget.metric.split(":"); const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ a: 0, b: 0 }, 0, pointsLimit)); const { data, error } = useWidgetAPI(widget, "gpu", { refreshInterval: Math.max(defaultInterval, refreshInterval), + version, }); useEffect(() => { diff --git a/src/widgets/glances/metrics/info.jsx b/src/widgets/glances/metrics/info.jsx index 8e19614d..a90cbdb5 100644 --- a/src/widgets/glances/metrics/info.jsx +++ b/src/widgets/glances/metrics/info.jsx @@ -74,14 +74,16 @@ const defaultSystemInterval = 30000; // This data (OS, hostname, distribution) i export default function Component({ service }) { const { widget } = service; - const { chart, refreshInterval = defaultInterval } = widget; + const { chart, refreshInterval = defaultInterval, version = 3 } = widget; const { data: quicklookData, errorL: quicklookError } = useWidgetAPI(service.widget, "quicklook", { refreshInterval, + version, }); const { data: systemData, errorL: systemError } = useWidgetAPI(service.widget, "system", { refreshInterval: defaultSystemInterval, + version, }); if (quicklookError) { diff --git a/src/widgets/glances/metrics/memory.jsx b/src/widgets/glances/metrics/memory.jsx index d6cc5e6c..87ec0f78 100644 --- a/src/widgets/glances/metrics/memory.jsx +++ b/src/widgets/glances/metrics/memory.jsx @@ -17,12 +17,13 @@ export default function Component({ service }) { const { t } = useTranslation(); const { widget } = service; const { chart } = widget; - const { refreshInterval = defaultInterval(chart), pointsLimit = defaultPointsLimit } = widget; + const { refreshInterval = defaultInterval(chart), pointsLimit = defaultPointsLimit, version = 3 } = widget; const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); const { data, error } = useWidgetAPI(service.widget, "mem", { refreshInterval: Math.max(defaultInterval(chart), refreshInterval), + version, }); useEffect(() => { diff --git a/src/widgets/glances/metrics/net.jsx b/src/widgets/glances/metrics/net.jsx index 3bd92c22..a51c8388 100644 --- a/src/widgets/glances/metrics/net.jsx +++ b/src/widgets/glances/metrics/net.jsx @@ -17,7 +17,10 @@ export default function Component({ service }) { const { t } = useTranslation(); const { widget } = service; const { chart, metric } = widget; - const { refreshInterval = defaultInterval(chart), pointsLimit = defaultPointsLimit } = widget; + const { refreshInterval = defaultInterval(chart), pointsLimit = defaultPointsLimit, version = 3 } = widget; + + const rxKey = version === 3 ? "rx" : "bytes_recv"; + const txKey = version === 3 ? "tx" : "bytes_sent"; const [, interfaceName] = metric.split(":"); @@ -25,6 +28,7 @@ export default function Component({ service }) { const { data, error } = useWidgetAPI(widget, "network", { refreshInterval: Math.max(defaultInterval(chart), refreshInterval), + version, }); useEffect(() => { @@ -36,8 +40,8 @@ export default function Component({ service }) { const newDataPoints = [ ...prevDataPoints, { - a: (interfaceData.rx * 8) / interfaceData.time_since_update, - b: (interfaceData.tx * 8) / interfaceData.time_since_update, + a: (interfaceData[rxKey] * 8) / interfaceData.time_since_update, + b: (interfaceData[txKey] * 8) / interfaceData.time_since_update, }, ]; if (newDataPoints.length > pointsLimit) { @@ -97,7 +101,7 @@ export default function Component({ service }) {
    {t("common.bitrate", { - value: (interfaceData.rx * 8) / interfaceData.time_since_update, + value: (interfaceData[rxKey] * 8) / interfaceData.time_since_update, maximumFractionDigits: 0, })}{" "} {t("docker.rx")} @@ -115,7 +119,7 @@ export default function Component({ service }) {
    {t("common.bitrate", { - value: (interfaceData.tx * 8) / interfaceData.time_since_update, + value: (interfaceData[txKey] * 8) / interfaceData.time_since_update, maximumFractionDigits: 0, })}{" "} {t("docker.tx")} diff --git a/src/widgets/glances/metrics/process.jsx b/src/widgets/glances/metrics/process.jsx index 0b2e8e4b..24b447cb 100644 --- a/src/widgets/glances/metrics/process.jsx +++ b/src/widgets/glances/metrics/process.jsx @@ -22,10 +22,13 @@ const defaultInterval = 1000; export default function Component({ service }) { const { t } = useTranslation(); const { widget } = service; - const { chart, refreshInterval = defaultInterval } = widget; + const { chart, refreshInterval = defaultInterval, version = 3 } = widget; + + const memoryInfoKey = version === 3 ? 0 : "data"; const { data, error } = useWidgetAPI(service.widget, "processlist", { refreshInterval: Math.max(defaultInterval, refreshInterval), + version, }); if (error) { @@ -66,7 +69,7 @@ export default function Component({ service }) {
    {item.cpu_percent.toFixed(1)}%
    {t("common.bytes", { - value: item.memory_info[0], + value: item.memory_info[memoryInfoKey], maximumFractionDigits: 0, })}
    diff --git a/src/widgets/glances/metrics/sensor.jsx b/src/widgets/glances/metrics/sensor.jsx index 60ea07c8..9dc28bb1 100644 --- a/src/widgets/glances/metrics/sensor.jsx +++ b/src/widgets/glances/metrics/sensor.jsx @@ -16,13 +16,14 @@ const defaultInterval = 1000; export default function Component({ service }) { const { t } = useTranslation(); const { widget } = service; - const { chart, refreshInterval = defaultInterval, pointsLimit = defaultPointsLimit } = widget; + const { chart, refreshInterval = defaultInterval, pointsLimit = defaultPointsLimit, version = 3 } = widget; const [, sensorName] = widget.metric.split(":"); const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); const { data, error } = useWidgetAPI(service.widget, "sensors", { refreshInterval: Math.max(defaultInterval, refreshInterval), + version, }); useEffect(() => { diff --git a/src/widgets/glances/widget.js b/src/widgets/glances/widget.js index 3da1c6d1..a824e4c1 100644 --- a/src/widgets/glances/widget.js +++ b/src/widgets/glances/widget.js @@ -1,7 +1,7 @@ import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; const widget = { - api: "{url}/api/3/{endpoint}", + api: "{url}/api/{version}/{endpoint}", proxyHandler: credentialedProxyHandler, }; From d4c0e482d3e233bea9de23b17b1060e80bf84c7b Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 28 Mar 2024 15:39:40 -0500 Subject: [PATCH 049/100] Feature: crowdsec widget (#3197) --- docs/widgets/services/crowdsec.md | 19 +++++++ mkdocs.yml | 1 + public/locales/en/common.json | 4 ++ src/widgets/components.js | 1 + src/widgets/crowdsec/component.jsx | 34 +++++++++++ src/widgets/crowdsec/proxy.js | 90 ++++++++++++++++++++++++++++++ src/widgets/crowdsec/widget.js | 18 ++++++ src/widgets/widgets.js | 2 + 8 files changed, 169 insertions(+) create mode 100644 docs/widgets/services/crowdsec.md create mode 100644 src/widgets/crowdsec/component.jsx create mode 100644 src/widgets/crowdsec/proxy.js create mode 100644 src/widgets/crowdsec/widget.js diff --git a/docs/widgets/services/crowdsec.md b/docs/widgets/services/crowdsec.md new file mode 100644 index 00000000..608367df --- /dev/null +++ b/docs/widgets/services/crowdsec.md @@ -0,0 +1,19 @@ +--- +title: Crowdsec +description: Crowdsec Widget Configuration +--- + +Learn more about [Crowdsec](https://crowdsec.net). + +See the [crowdsec docs](https://docs.crowdsec.net/docs/local_api/intro/#machines) for information about registering a machine, +in most instances you can use the default credentials (`/etc/crowdsec/local_api_credentials.yaml`). + +Allowed fields: ["alerts", "bans"] + +```yaml +widget: + type: crowdsec + url: http://crowdsechostorip:port + username: localhost # machine_id in crowdsec + passowrd: password +``` diff --git a/mkdocs.yml b/mkdocs.yml index a0994fad..e58cb1e4 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -44,6 +44,7 @@ nav: - widgets/services/channelsdvrserver.md - widgets/services/cloudflared.md - widgets/services/coin-market-cap.md + - widgets/services/crowdsec.md - widgets/services/customapi.md - widgets/services/deluge.md - widgets/services/diskstation.md diff --git a/public/locales/en/common.json b/public/locales/en/common.json index c7339c0b..98daae9e 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Users", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alerts", + "bans": "Bans" } } diff --git a/src/widgets/components.js b/src/widgets/components.js index f3d567bb..8c85bd77 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -15,6 +15,7 @@ const components = { channelsdvrserver: dynamic(() => import("./channelsdvrserver/component")), cloudflared: dynamic(() => import("./cloudflared/component")), coinmarketcap: dynamic(() => import("./coinmarketcap/component")), + crowdsec: dynamic(() => import("./crowdsec/component")), iframe: dynamic(() => import("./iframe/component")), customapi: dynamic(() => import("./customapi/component")), deluge: dynamic(() => import("./deluge/component")), diff --git a/src/widgets/crowdsec/component.jsx b/src/widgets/crowdsec/component.jsx new file mode 100644 index 00000000..9565ee73 --- /dev/null +++ b/src/widgets/crowdsec/component.jsx @@ -0,0 +1,34 @@ +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 default function Component({ service }) { + const { t } = useTranslation(); + + const { widget } = service; + + const { data: alerts, error: alertsError } = useWidgetAPI(widget, "alerts"); + const { data: bans, error: bansError } = useWidgetAPI(widget, "bans"); + + if (alertsError || bansError) { + return ; + } + + if (!alerts || !bans) { + return ( + + + + + ); + } + + return ( + + + + + ); +} diff --git a/src/widgets/crowdsec/proxy.js b/src/widgets/crowdsec/proxy.js new file mode 100644 index 00000000..a367e716 --- /dev/null +++ b/src/widgets/crowdsec/proxy.js @@ -0,0 +1,90 @@ +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 widgets from "widgets/widgets"; + +const proxyName = "crowdsecProxyHandler"; +const logger = createLogger(proxyName); +const sessionTokenCacheKey = `${proxyName}__sessionToken`; + +async function login(widget, service) { + const url = formatApiCall(widgets[widget.type].loginURL, widget); + const [status, , data] = await httpProxy(url, { + method: "POST", + headers: { + "Content-Type": "application/json", + "User-Agent": "Mozilla/5.0", // Crowdsec requires a user-agent + }, + body: JSON.stringify({ + machine_id: widget.username, + password: widget.password, + scenarios: [], + }), + }); + + const dataParsed = JSON.parse(data); + + if (!(status === 200) || !dataParsed.token) { + logger.error("Failed to login to Crowdsec API, status: %d", status); + cache.del(`${sessionTokenCacheKey}.${service}`); + } + cache.put(`${sessionTokenCacheKey}.${service}`, dataParsed.token, new Date(dataParsed.expire) - new Date()); +} + +export default async function crowdsecProxyHandler(req, res) { + const { group, service, endpoint } = req.query; + + if (!group || !service) { + logger.error("Invalid or missing service '%s' or group '%s'", service, group); + return res.status(400).json({ error: "Invalid proxy service type" }); + } + + const widget = await getServiceWidget(group, service); + if (!widget || !widgets[widget.type].api) { + logger.error("Invalid or missing widget for service '%s' in group '%s'", service, group); + return res.status(400).json({ error: "Invalid widget configuration" }); + } + + if (!cache.get(`${sessionTokenCacheKey}.${service}`)) { + await login(widget, service); + } + + const token = cache.get(`${sessionTokenCacheKey}.${service}`); + if (!token) { + return res.status(500).json({ error: "Failed to authenticate with Crowdsec" }); + } + + const url = new URL(formatApiCall(widgets[widget.type].api, { endpoint, ...widget })); + + try { + const params = { + method: "GET", + headers: { + "User-Agent": "Mozilla/5.0", // Crowdsec requires a user-agent + "Content-Type": "application/json", + Authorization: `Bearer ${token}`, + }, + }; + + logger.debug("Calling Crowdsec API endpoint: %s", endpoint); + + if (endpoint.indexOf("decisions") === 0) { + delete params.headers.Authorization; + } + + const [status, , data] = await httpProxy(url, params); + + if (status !== 200) { + logger.error("Error calling Crowdsec API: %d. Data: %s", status, data); + return res.status(status).json({ error: "Crowdsec API Error", data }); + } + + return res.status(status).send(data); + } catch (error) { + logger.error("Exception calling Crowdsec API: %s", error.message); + return res.status(500).json({ error: "Crowdsec API Error", message: error.message }); + } +} diff --git a/src/widgets/crowdsec/widget.js b/src/widgets/crowdsec/widget.js new file mode 100644 index 00000000..d29fa1f1 --- /dev/null +++ b/src/widgets/crowdsec/widget.js @@ -0,0 +1,18 @@ +import crowdsecProxyHandler from "./proxy"; + +const widget = { + api: "{url}/v1/{endpoint}", + loginURL: "{url}/v1/watchers/login", + proxyHandler: crowdsecProxyHandler, + + mappings: { + alerts: { + endpoint: "alerts", + }, + bans: { + endpoint: "alerts?decision_type=ban&origin=crowdsec&has_active_decision=1", + }, + }, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index a9cae230..6e02d932 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -12,6 +12,7 @@ import changedetectionio from "./changedetectionio/widget"; import channelsdvrserver from "./channelsdvrserver/widget"; import cloudflared from "./cloudflared/widget"; import coinmarketcap from "./coinmarketcap/widget"; +import crowdsec from "./crowdsec/widget"; import customapi from "./customapi/widget"; import deluge from "./deluge/widget"; import diskstation from "./diskstation/widget"; @@ -125,6 +126,7 @@ const widgets = { channelsdvrserver, cloudflared, coinmarketcap, + crowdsec, customapi, deluge, diskstation, From 97d193faf12a18142d5e2f117f67db5df7f5eb65 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 28 Mar 2024 13:41:29 -0700 Subject: [PATCH 050/100] Fix crowdsec widget with no bans / alerts --- src/widgets/crowdsec/component.jsx | 6 +++--- src/widgets/crowdsec/proxy.js | 4 ---- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/widgets/crowdsec/component.jsx b/src/widgets/crowdsec/component.jsx index 9565ee73..2e98cee9 100644 --- a/src/widgets/crowdsec/component.jsx +++ b/src/widgets/crowdsec/component.jsx @@ -16,7 +16,7 @@ export default function Component({ service }) { return ; } - if (!alerts || !bans) { + if (!alerts && !bans) { return ( @@ -27,8 +27,8 @@ export default function Component({ service }) { return ( - - + + ); } diff --git a/src/widgets/crowdsec/proxy.js b/src/widgets/crowdsec/proxy.js index a367e716..e78fbc5e 100644 --- a/src/widgets/crowdsec/proxy.js +++ b/src/widgets/crowdsec/proxy.js @@ -71,10 +71,6 @@ export default async function crowdsecProxyHandler(req, res) { logger.debug("Calling Crowdsec API endpoint: %s", endpoint); - if (endpoint.indexOf("decisions") === 0) { - delete params.headers.Authorization; - } - const [status, , data] = await httpProxy(url, params); if (status !== 200) { From b0d57866a0ed0e2507d12ca480c17e0bb8cc0199 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 29 Mar 2024 06:32:25 -0700 Subject: [PATCH 051/100] Fix glances service widgets handling of default version --- src/widgets/glances/metrics/cpu.jsx | 5 ++--- src/widgets/glances/metrics/disk.jsx | 3 +-- src/widgets/glances/metrics/fs.jsx | 3 +-- src/widgets/glances/metrics/gpu.jsx | 3 +-- src/widgets/glances/metrics/info.jsx | 6 ++---- src/widgets/glances/metrics/memory.jsx | 3 +-- src/widgets/glances/metrics/net.jsx | 5 ++--- src/widgets/glances/metrics/process.jsx | 3 +-- src/widgets/glances/metrics/sensor.jsx | 3 +-- src/widgets/glances/widget.js | 2 +- 10 files changed, 13 insertions(+), 23 deletions(-) diff --git a/src/widgets/glances/metrics/cpu.jsx b/src/widgets/glances/metrics/cpu.jsx index bd12dc29..553517ba 100644 --- a/src/widgets/glances/metrics/cpu.jsx +++ b/src/widgets/glances/metrics/cpu.jsx @@ -20,12 +20,11 @@ export default function Component({ service }) { const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); - const { data, error } = useWidgetAPI(service.widget, "cpu", { + const { data, error } = useWidgetAPI(service.widget, `${version}/cpu`, { refreshInterval: Math.max(defaultInterval, refreshInterval), - version, }); - const { data: quicklookData, error: quicklookError } = useWidgetAPI(service.widget, "quicklook", { version }); + const { data: quicklookData, error: quicklookError } = useWidgetAPI(service.widget, `${version}/quicklook`); useEffect(() => { if (data) { diff --git a/src/widgets/glances/metrics/disk.jsx b/src/widgets/glances/metrics/disk.jsx index 662822ef..04a5071f 100644 --- a/src/widgets/glances/metrics/disk.jsx +++ b/src/widgets/glances/metrics/disk.jsx @@ -24,9 +24,8 @@ export default function Component({ service }) { ); const [ratePoints, setRatePoints] = useState(new Array(pointsLimit).fill({ a: 0, b: 0 }, 0, pointsLimit)); - const { data, error } = useWidgetAPI(service.widget, "diskio", { + const { data, error } = useWidgetAPI(service.widget, `${version}/diskio`, { refreshInterval: Math.max(defaultInterval, refreshInterval), - version, }); const calculateRates = (d) => diff --git a/src/widgets/glances/metrics/fs.jsx b/src/widgets/glances/metrics/fs.jsx index 1a26c2ab..3ec7eb6c 100644 --- a/src/widgets/glances/metrics/fs.jsx +++ b/src/widgets/glances/metrics/fs.jsx @@ -15,9 +15,8 @@ export default function Component({ service }) { const [, fsName] = widget.metric.split("fs:"); const diskUnits = widget.diskUnits === "bbytes" ? "common.bbytes" : "common.bytes"; - const { data, error } = useWidgetAPI(widget, "fs", { + const { data, error } = useWidgetAPI(widget, `${version}/fs`, { refreshInterval: Math.max(defaultInterval, refreshInterval), - version, }); if (error) { diff --git a/src/widgets/glances/metrics/gpu.jsx b/src/widgets/glances/metrics/gpu.jsx index cc8504fa..174ae2e0 100644 --- a/src/widgets/glances/metrics/gpu.jsx +++ b/src/widgets/glances/metrics/gpu.jsx @@ -21,9 +21,8 @@ export default function Component({ service }) { const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ a: 0, b: 0 }, 0, pointsLimit)); - const { data, error } = useWidgetAPI(widget, "gpu", { + const { data, error } = useWidgetAPI(widget, `${version}/gpu`, { refreshInterval: Math.max(defaultInterval, refreshInterval), - version, }); useEffect(() => { diff --git a/src/widgets/glances/metrics/info.jsx b/src/widgets/glances/metrics/info.jsx index a90cbdb5..1ee47b98 100644 --- a/src/widgets/glances/metrics/info.jsx +++ b/src/widgets/glances/metrics/info.jsx @@ -76,14 +76,12 @@ export default function Component({ service }) { const { widget } = service; const { chart, refreshInterval = defaultInterval, version = 3 } = widget; - const { data: quicklookData, errorL: quicklookError } = useWidgetAPI(service.widget, "quicklook", { + const { data: quicklookData, errorL: quicklookError } = useWidgetAPI(service.widget, `${version}/quicklook`, { refreshInterval, - version, }); - const { data: systemData, errorL: systemError } = useWidgetAPI(service.widget, "system", { + const { data: systemData, errorL: systemError } = useWidgetAPI(service.widget, `${version}/system`, { refreshInterval: defaultSystemInterval, - version, }); if (quicklookError) { diff --git a/src/widgets/glances/metrics/memory.jsx b/src/widgets/glances/metrics/memory.jsx index 87ec0f78..49046a5f 100644 --- a/src/widgets/glances/metrics/memory.jsx +++ b/src/widgets/glances/metrics/memory.jsx @@ -21,9 +21,8 @@ export default function Component({ service }) { const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); - const { data, error } = useWidgetAPI(service.widget, "mem", { + const { data, error } = useWidgetAPI(service.widget, `${version}/mem`, { refreshInterval: Math.max(defaultInterval(chart), refreshInterval), - version, }); useEffect(() => { diff --git a/src/widgets/glances/metrics/net.jsx b/src/widgets/glances/metrics/net.jsx index a51c8388..c1ec937e 100644 --- a/src/widgets/glances/metrics/net.jsx +++ b/src/widgets/glances/metrics/net.jsx @@ -26,9 +26,8 @@ export default function Component({ service }) { const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); - const { data, error } = useWidgetAPI(widget, "network", { + const { data, error } = useWidgetAPI(widget, `${version}/network`, { refreshInterval: Math.max(defaultInterval(chart), refreshInterval), - version, }); useEffect(() => { @@ -51,7 +50,7 @@ export default function Component({ service }) { }); } } - }, [data, interfaceName, pointsLimit]); + }, [data, interfaceName, pointsLimit, rxKey, txKey]); if (error) { return ( diff --git a/src/widgets/glances/metrics/process.jsx b/src/widgets/glances/metrics/process.jsx index 24b447cb..b242535e 100644 --- a/src/widgets/glances/metrics/process.jsx +++ b/src/widgets/glances/metrics/process.jsx @@ -26,9 +26,8 @@ export default function Component({ service }) { const memoryInfoKey = version === 3 ? 0 : "data"; - const { data, error } = useWidgetAPI(service.widget, "processlist", { + const { data, error } = useWidgetAPI(service.widget, `${version}/processlist`, { refreshInterval: Math.max(defaultInterval, refreshInterval), - version, }); if (error) { diff --git a/src/widgets/glances/metrics/sensor.jsx b/src/widgets/glances/metrics/sensor.jsx index 9dc28bb1..e0f679c1 100644 --- a/src/widgets/glances/metrics/sensor.jsx +++ b/src/widgets/glances/metrics/sensor.jsx @@ -21,9 +21,8 @@ export default function Component({ service }) { const [dataPoints, setDataPoints] = useState(new Array(pointsLimit).fill({ value: 0 }, 0, pointsLimit)); - const { data, error } = useWidgetAPI(service.widget, "sensors", { + const { data, error } = useWidgetAPI(service.widget, `${version}/sensors`, { refreshInterval: Math.max(defaultInterval, refreshInterval), - version, }); useEffect(() => { diff --git a/src/widgets/glances/widget.js b/src/widgets/glances/widget.js index a824e4c1..3357cf28 100644 --- a/src/widgets/glances/widget.js +++ b/src/widgets/glances/widget.js @@ -1,7 +1,7 @@ import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; const widget = { - api: "{url}/api/{version}/{endpoint}", + api: "{url}/api/{endpoint}", proxyHandler: credentialedProxyHandler, }; From 29ac7bfea7af2e19af38c88f9c583be1806abbb0 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 31 Mar 2024 20:34:46 -0700 Subject: [PATCH 052/100] Feature: Support pi-hole v6 (#3207) --- docs/widgets/services/pihole.md | 1 + src/utils/config/service-helpers.js | 8 ++- src/widgets/pihole/component.jsx | 2 +- src/widgets/pihole/proxy.js | 95 +++++++++++++++++++++++++++++ src/widgets/pihole/widget.js | 14 ++--- 5 files changed, 107 insertions(+), 13 deletions(-) create mode 100644 src/widgets/pihole/proxy.js diff --git a/docs/widgets/services/pihole.md b/docs/widgets/services/pihole.md index 8079d1b1..90d5926c 100644 --- a/docs/widgets/services/pihole.md +++ b/docs/widgets/services/pihole.md @@ -15,6 +15,7 @@ Note: by default the "blocked" and "blocked_percent" fields are merged e.g. "1,2 widget: type: pihole url: http://pi.hole.or.ip + version: 6 # required if running v6 or higher, defaults to 5 key: yourpiholeapikey # optional ``` diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index bee7db4e..bea28278 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -393,8 +393,10 @@ export function cleanServiceGroups(groups) { enableBlocks, enableNowPlaying, - // glances + // glances, pihole version, + + // glances chart, metric, pointsLimit, @@ -528,8 +530,10 @@ export function cleanServiceGroups(groups) { if (snapshotHost) cleanedService.widget.snapshotHost = snapshotHost; if (snapshotPath) cleanedService.widget.snapshotPath = snapshotPath; } - if (type === "glances") { + if (["glances", "pihole"].includes(type)) { if (version) cleanedService.widget.version = version; + } + if (type === "glances") { if (metric) cleanedService.widget.metric = metric; if (chart !== undefined) { cleanedService.widget.chart = chart; diff --git a/src/widgets/pihole/component.jsx b/src/widgets/pihole/component.jsx index a36071a1..4d95b4ac 100644 --- a/src/widgets/pihole/component.jsx +++ b/src/widgets/pihole/component.jsx @@ -9,7 +9,7 @@ export default function Component({ service }) { const { widget } = service; - const { data: piholeData, error: piholeError } = useWidgetAPI(widget, "summaryRaw"); + const { data: piholeData, error: piholeError } = useWidgetAPI(widget); if (piholeError) { return ; diff --git a/src/widgets/pihole/proxy.js b/src/widgets/pihole/proxy.js new file mode 100644 index 00000000..724d4943 --- /dev/null +++ b/src/widgets/pihole/proxy.js @@ -0,0 +1,95 @@ +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 widgets from "widgets/widgets"; + +const proxyName = "piholeProxyHandler"; +const logger = createLogger(proxyName); +const sessionSIDCacheKey = `${proxyName}__sessionSID`; + +async function login(widget, service) { + const url = formatApiCall(widgets[widget.type].api, { ...widget, endpoint: "auth" }); + const [status, , data] = await httpProxy(url, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + password: widget.key, + }), + }); + + const dataParsed = JSON.parse(data); + + if (status !== 200 || !dataParsed.session) { + logger.error("Failed to login to Pi-Hole API, status: %d", status); + cache.del(`${sessionSIDCacheKey}.${service}`); + } else { + cache.put(`${sessionSIDCacheKey}.${service}`, dataParsed.session.sid, dataParsed.session.validity); + } +} + +export default async function piholeProxyHandler(req, res) { + const { group, service } = req.query; + let endpoint = "stats/summary"; + + if (!group || !service) { + logger.error("Invalid or missing service '%s' or group '%s'", service, group); + return res.status(400).json({ error: "Invalid proxy service type" }); + } + + const widget = await getServiceWidget(group, service); + if (!widget) { + logger.error("Invalid or missing widget for service '%s' in group '%s'", service, group); + return res.status(400).json({ error: "Invalid widget configuration" }); + } + + let status; + let data; + if (!widget.version || widget.version < 6) { + // pihole v5 + endpoint = "summaryRaw"; + [status, , data] = await httpProxy(formatApiCall(widgets[widget.type].apiv5, { ...widget, endpoint })); + return res.status(status).send(data); + } + + // pihole v6 + if (!cache.get(`${sessionSIDCacheKey}.${service}`)) { + await login(widget, service); + } + + const sid = cache.get(`${sessionSIDCacheKey}.${service}`); + if (!sid) { + return res.status(500).json({ error: "Failed to authenticate with Pi-hole" }); + } + + try { + logger.debug("Calling Pi-hole API endpoint: %s", endpoint); + + [status, , data] = await httpProxy(formatApiCall(widgets[widget.type].api, { ...widget, endpoint }), { + headers: { + "Content-Type": "application/json", + "X-FTL-SID": sid, + }, + }); + + if (status !== 200) { + logger.error("Error calling Pi-Hole API: %d. Data: %s", status, data); + return res.status(status).json({ error: "Pi-Hole API Error", data }); + } + + const dataParsed = JSON.parse(data); + return res.status(status).json({ + domains_being_blocked: dataParsed.gravity.domains_being_blocked, + ads_blocked_today: dataParsed.queries.blocked, + ads_percentage_today: dataParsed.queries.percent_blocked, + dns_queries_today: dataParsed.queries.total, + }); + } catch (error) { + logger.error("Exception calling Pi-Hole API: %s", error.message); + return res.status(500).json({ error: "Pi-Hole API Error", message: error.message }); + } +} diff --git a/src/widgets/pihole/widget.js b/src/widgets/pihole/widget.js index 10b30b1a..54c84832 100644 --- a/src/widgets/pihole/widget.js +++ b/src/widgets/pihole/widget.js @@ -1,15 +1,9 @@ -import genericProxyHandler from "utils/proxy/handlers/generic"; +import piholeProxyHandler from "./proxy"; const widget = { - api: "{url}/admin/api.php?{endpoint}&auth={key}", - proxyHandler: genericProxyHandler, - - mappings: { - summaryRaw: { - endpoint: "summaryRaw", - validate: ["dns_queries_today", "ads_blocked_today", "ads_percentage_today", "domains_being_blocked"], - }, - }, + api: "{url}/api/{endpoint}", + apiv5: "{url}/admin/api.php?{endpoint}&auth={key}", + proxyHandler: piholeProxyHandler, }; export default widget; From 212e517ebbccfb5b3636d808dd95de447ea5f725 Mon Sep 17 00:00:00 2001 From: Jalin Wang Date: Mon, 1 Apr 2024 22:23:52 +0800 Subject: [PATCH 053/100] Chore: fix ypos in the PR template (#3209) --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- .github/PULL_REQUEST_TEMPLATE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 1cad352a..bf4fa386 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,12 +1,12 @@ ## Proposed change Closes # (issue) From dd819ad6777874af3d33c419cc87cb7b214383f7 Mon Sep 17 00:00:00 2001 From: Jalin Wang Date: Mon, 1 Apr 2024 22:25:14 +0800 Subject: [PATCH 054/100] Documentation: correct link for Docker automatic service discovery (#3208) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5bc61685..d137ba5e 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ With features like quick search, bookmarks, weather support, a wide range of int ## Docker Integration -Homepage has built-in support for Docker, and can automatically discover and add services to the homepage based on labels. See the [Docker](https://gethomepage.dev/latest/installation/docker/) page for more information. +Homepage has built-in support for Docker, and can automatically discover and add services to the homepage based on labels. See the [Docker Service Discovery](https://gethomepage.dev/latest/configs/docker/#automatic-service-discovery) page for more information. ## Service Widgets From 29447c55ffe99bfe9b941354cc3763caad254e15 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 1 Apr 2024 07:49:58 -0700 Subject: [PATCH 055/100] Fix: remove invalid form attribute (#3210) --- src/components/widgets/widget/container_form.jsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/components/widgets/widget/container_form.jsx b/src/components/widgets/widget/container_form.jsx index 3b2c02e2..68cbd64b 100644 --- a/src/components/widgets/widget/container_form.jsx +++ b/src/components/widgets/widget/container_form.jsx @@ -2,11 +2,7 @@ import { getAllClasses, getInnerBlock, getBottomBlock } from "./container"; export default function ContainerForm({ children = [], options, additionalClassNames = "", callback }) { return ( -
    + {getInnerBlock(children)} {getBottomBlock(children)}
    From 6f07acab15c39bad4b7492faddfbf7e31fa1d5fd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Apr 2024 10:17:34 -0700 Subject: [PATCH 056/100] Chore(deps): Bump follow-redirects from 1.15.5 to 1.15.6 (#3211) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.5 to 1.15.6. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.5...v1.15.6) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 49e57222..77de4d84 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "classnames": "^2.5.1", "compare-versions": "^6.1.0", "dockerode": "^4.0.2", - "follow-redirects": "^1.15.5", + "follow-redirects": "^1.15.6", "gamedig": "^4.3.1", "i18next": "^21.10.0", "js-yaml": "^4.1.0", @@ -3040,9 +3040,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", diff --git a/package.json b/package.json index 35d388a5..1b9ef162 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "classnames": "^2.5.1", "compare-versions": "^6.1.0", "dockerode": "^4.0.2", - "follow-redirects": "^1.15.5", + "follow-redirects": "^1.15.6", "gamedig": "^4.3.1", "i18next": "^21.10.0", "js-yaml": "^4.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 08a5004a..837bfe0b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ dependencies: specifier: ^4.0.2 version: 4.0.2 follow-redirects: - specifier: ^1.15.5 - version: 1.15.5 + specifier: ^1.15.6 + version: 1.15.6 gamedig: specifier: ^4.3.1 version: 4.3.1 @@ -2045,8 +2045,8 @@ packages: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} dev: false - /follow-redirects@1.15.5: - resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + /follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} peerDependencies: debug: '*' From 0d7b77260f8a050292b345cd782df314a412e71c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Apr 2024 10:18:28 -0700 Subject: [PATCH 057/100] Chore(deps-dev): Bump postcss from 8.4.35 to 8.4.38 (#3212) Bumps [postcss](https://github.com/postcss/postcss) from 8.4.35 to 8.4.38. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.35...8.4.38) --- updated-dependencies: - dependency-name: postcss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 16 ++++++++-------- package.json | 2 +- pnpm-lock.yaml | 48 ++++++++++++++++++++++++++--------------------- 3 files changed, 36 insertions(+), 30 deletions(-) diff --git a/package-lock.json b/package-lock.json index 77de4d84..d86fea34 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,7 +52,7 @@ "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", - "postcss": "^8.4.35", + "postcss": "^8.4.38", "prettier": "^3.2.5", "tailwind-scrollbar": "^3.0.5", "tailwindcss": "^3.4.1", @@ -5229,9 +5229,9 @@ } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -5250,7 +5250,7 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -6051,9 +6051,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } diff --git a/package.json b/package.json index 1b9ef162..40328c3a 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", - "postcss": "^8.4.35", + "postcss": "^8.4.38", "prettier": "^3.2.5", "tailwind-scrollbar": "^3.0.5", "tailwindcss": "^3.4.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 837bfe0b..bd16107c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -110,7 +110,7 @@ devDependencies: version: 0.5.7(tailwindcss@3.4.1) autoprefixer: specifier: ^10.4.17 - version: 10.4.17(postcss@8.4.35) + version: 10.4.17(postcss@8.4.38) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -139,8 +139,8 @@ devDependencies: specifier: ^4.6.0 version: 4.6.0(eslint@8.57.0) postcss: - specifier: ^8.4.35 - version: 8.4.35 + specifier: ^8.4.38 + version: 8.4.38 prettier: specifier: ^3.2.5 version: 3.2.5 @@ -849,7 +849,7 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false - /autoprefixer@10.4.17(postcss@8.4.35): + /autoprefixer@10.4.17(postcss@8.4.38): resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} engines: {node: ^10 || ^12 || >=14} hasBin: true @@ -861,7 +861,7 @@ packages: fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true @@ -3362,29 +3362,29 @@ packages: engines: {node: '>= 6'} dev: true - /postcss-import@15.1.0(postcss@8.4.35): + /postcss-import@15.1.0(postcss@8.4.38): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 dev: true - /postcss-js@4.0.1(postcss@8.4.35): + /postcss-js@4.0.1(postcss@8.4.38): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-load-config@4.0.2(postcss@8.4.35): + /postcss-load-config@4.0.2(postcss@8.4.38): resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} peerDependencies: @@ -3397,17 +3397,17 @@ packages: optional: true dependencies: lilconfig: 3.0.0 - postcss: 8.4.35 + postcss: 8.4.38 yaml: 2.3.4 dev: true - /postcss-nested@6.0.1(postcss@8.4.35): + /postcss-nested@6.0.1(postcss@8.4.38): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-selector-parser: 6.0.15 dev: true @@ -3432,13 +3432,13 @@ packages: source-map-js: 1.0.2 dev: false - /postcss@8.4.35: - resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true /prelude-ls@1.2.1: @@ -3928,6 +3928,12 @@ packages: /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + dev: false + + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + dev: true /split-ca@1.0.1: resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} @@ -4168,11 +4174,11 @@ packages: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.35 - postcss-import: 15.1.0(postcss@8.4.35) - postcss-js: 4.0.1(postcss@8.4.35) - postcss-load-config: 4.0.2(postcss@8.4.35) - postcss-nested: 6.0.1(postcss@8.4.35) + postcss: 8.4.38 + postcss-import: 15.1.0(postcss@8.4.38) + postcss-js: 4.0.1(postcss@8.4.38) + postcss-load-config: 4.0.2(postcss@8.4.38) + postcss-nested: 6.0.1(postcss@8.4.38) postcss-selector-parser: 6.0.15 resolve: 1.22.8 sucrase: 3.35.0 From 2ebcb311e89c0b412ffa3a5629f46ce83c696c46 Mon Sep 17 00:00:00 2001 From: Luca Herrero Date: Mon, 1 Apr 2024 23:17:56 +0200 Subject: [PATCH 058/100] Fix: homebridge widget with numeric username or password (#3220) --- src/widgets/homebridge/proxy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/homebridge/proxy.js b/src/widgets/homebridge/proxy.js index 2803415a..17dc8635 100644 --- a/src/widgets/homebridge/proxy.js +++ b/src/widgets/homebridge/proxy.js @@ -14,7 +14,7 @@ async function login(widget, service) { const endpoint = "auth/login"; const api = widgets?.[widget.type]?.api; const loginUrl = new URL(formatApiCall(api, { endpoint, ...widget })); - const loginBody = { username: widget.username, password: widget.password }; + const loginBody = { username: widget.username.toString(), password: widget.password.toString() }; const headers = { "Content-Type": "application/json" }; // eslint-disable-next-line no-unused-vars const [status, contentType, data, responseHeaders] = await httpProxy(loginUrl, { From cdfb5a11f771f82f320a9ea1b7be69e375d2ed2f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Apr 2024 14:18:07 -0700 Subject: [PATCH 059/100] Chore(deps): Bump recharts from 2.12.2 to 2.12.3 (#3215) Bumps [recharts](https://github.com/recharts/recharts) from 2.12.2 to 2.12.3. - [Release notes](https://github.com/recharts/recharts/releases) - [Changelog](https://github.com/recharts/recharts/blob/3.x/CHANGELOG.md) - [Commits](https://github.com/recharts/recharts/compare/v2.12.2...v2.12.3) --- updated-dependencies: - dependency-name: recharts dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index d86fea34..08bccb1c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "react-dom": "^18.2.0", "react-i18next": "^11.18.6", "react-icons": "^4.12.0", - "recharts": "^2.12.2", + "recharts": "^2.12.3", "rrule": "^2.8.1", "swr": "^1.3.0", "systeminformation": "^5.22.0", @@ -5604,9 +5604,9 @@ } }, "node_modules/recharts": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.2.tgz", - "integrity": "sha512-9bpxjXSF5g81YsKkTSlaX7mM4b6oYI1mIYck6YkUcWuL3tomADccI51/6thY4LmvhYuRTwpfrOvE80Zc3oBRfQ==", + "version": "2.12.3", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.3.tgz", + "integrity": "sha512-vE/F7wTlokf5mtCqVDJlVKelCjliLSJ+DJxj79XlMREm7gpV7ljwbrwE3CfeaoDlOaLX+6iwHaVRn9587YkwIg==", "dependencies": { "clsx": "^2.0.0", "eventemitter3": "^4.0.1", diff --git a/package.json b/package.json index 40328c3a..08f619f9 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "react-dom": "^18.2.0", "react-i18next": "^11.18.6", "react-icons": "^4.12.0", - "recharts": "^2.12.2", + "recharts": "^2.12.3", "rrule": "^2.8.1", "swr": "^1.3.0", "systeminformation": "^5.22.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd16107c..65bc25d3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -75,8 +75,8 @@ dependencies: specifier: ^4.12.0 version: 4.12.0(react@18.2.0) recharts: - specifier: ^2.12.2 - version: 2.12.2(react-dom@18.2.0)(react@18.2.0) + specifier: ^2.12.3 + version: 2.12.3(react-dom@18.2.0)(react@18.2.0) rrule: specifier: ^2.8.1 version: 2.8.1 @@ -3642,8 +3642,8 @@ packages: decimal.js-light: 2.5.1 dev: false - /recharts@2.12.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-9bpxjXSF5g81YsKkTSlaX7mM4b6oYI1mIYck6YkUcWuL3tomADccI51/6thY4LmvhYuRTwpfrOvE80Zc3oBRfQ==} + /recharts@2.12.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-vE/F7wTlokf5mtCqVDJlVKelCjliLSJ+DJxj79XlMREm7gpV7ljwbrwE3CfeaoDlOaLX+6iwHaVRn9587YkwIg==} engines: {node: '>=14'} peerDependencies: react: ^16.0.0 || ^17.0.0 || ^18.0.0 From 43bbb69d53ac2aab22cce28f747cebf9acd94c77 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Apr 2024 14:18:29 -0700 Subject: [PATCH 060/100] Chore(deps-dev): Bump eslint-plugin-react from 7.33.2 to 7.34.1 (#3213) Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.33.2 to 7.34.1. - [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases) - [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/v7.34.1/CHANGELOG.md) - [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.33.2...v7.34.1) --- updated-dependencies: - dependency-name: eslint-plugin-react dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 618 ++++++++++++++++++++++++++++++---------------- package.json | 2 +- pnpm-lock.yaml | 469 +++++++++++++++++++++++++++++++++-- 3 files changed, 843 insertions(+), 246 deletions(-) diff --git a/package-lock.json b/package-lock.json index 08bccb1c..2a8a6a37 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,7 +50,7 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react": "^7.34.1", "eslint-plugin-react-hooks": "^4.6.0", "postcss": "^8.4.38", "prettier": "^3.2.5", @@ -990,13 +990,16 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1030,6 +1033,26 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.findlastindex": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", @@ -1085,31 +1108,44 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.tosorted": { + "node_modules/array.prototype.toreversed": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", - "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -1159,15 +1195,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1211,10 +1238,13 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -1474,14 +1504,19 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1950,6 +1985,57 @@ "node": ">=0.10" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -2011,17 +2097,20 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -2241,50 +2330,57 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -2293,37 +2389,73 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", + "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", + "internal-slot": "^1.0.7", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -2699,27 +2831,29 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "version": "7.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", + "es-iterator-helpers": "^1.0.17", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", + "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "string.prototype.matchall": "^4.0.10" }, "engines": { "node": ">=4" @@ -3256,16 +3390,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3282,13 +3420,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -3468,21 +3607,21 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "engines": { "node": ">= 0.4" @@ -3504,12 +3643,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -3519,9 +3658,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -3728,12 +3867,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", + "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" }, @@ -3758,14 +3897,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3854,6 +3995,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -3936,9 +4092,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -4006,12 +4162,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4059,12 +4218,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -5228,6 +5387,15 @@ "node": ">= 6" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.4.38", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", @@ -5670,14 +5838,15 @@ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -5844,13 +6013,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -5881,13 +6050,13 @@ ] }, "node_modules/safe-regex-test": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", - "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, "engines": { @@ -5945,16 +6114,17 @@ } }, "node_modules/set-function-length": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", - "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "dependencies": { - "define-data-property": "^1.1.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -6263,14 +6433,15 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6280,28 +6451,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6844,29 +7018,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -6876,16 +7051,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -6895,14 +7071,20 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7168,16 +7350,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" diff --git a/package.json b/package.json index 08f619f9..466a4cff 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react": "^7.34.1", "eslint-plugin-react-hooks": "^4.6.0", "postcss": "^8.4.38", "prettier": "^3.2.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 65bc25d3..d87dbdf4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -116,7 +116,7 @@ devDependencies: version: 8.57.0 eslint-config-airbnb: specifier: ^19.0.4 - version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@8.57.0) eslint-config-next: specifier: ^12.3.4 version: 12.3.4(eslint@8.57.0)(typescript@4.9.5) @@ -133,8 +133,8 @@ devDependencies: specifier: ^4.2.1 version: 4.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) eslint-plugin-react: - specifier: ^7.33.2 - version: 7.33.2(eslint@8.57.0) + specifier: ^7.34.1 + version: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: specifier: ^4.6.0 version: 4.6.0(eslint@8.57.0) @@ -744,6 +744,14 @@ packages: is-array-buffer: 3.0.2 dev: true + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + dev: true + /array-includes@3.1.7: resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} engines: {node: '>= 0.4'} @@ -760,6 +768,18 @@ packages: engines: {node: '>=8'} dev: true + /array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + dev: true + /array.prototype.findlastindex@1.2.3: resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} engines: {node: '>= 0.4'} @@ -791,14 +811,23 @@ packages: es-shim-unscopables: 1.0.2 dev: true - /array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + /array.prototype.toreversed@1.1.2: + resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 + dev: true + + /array.prototype.tosorted@1.1.3: + resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 dev: true /arraybuffer.prototype.slice@1.0.2: @@ -814,6 +843,20 @@ packages: is-shared-array-buffer: 1.0.2 dev: true + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + dev: true + /asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} dependencies: @@ -870,6 +913,13 @@ packages: engines: {node: '>= 0.4'} dev: true + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 + dev: true + /aws-sign2@0.7.0: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} dev: false @@ -1012,6 +1062,17 @@ packages: set-function-length: 1.2.0 dev: true + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + dev: true + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1305,6 +1366,33 @@ packages: assert-plus: 1.0.0 dev: false + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -1356,6 +1444,15 @@ packages: has-property-descriptors: 1.0.1 dev: true + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: true + /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -1549,6 +1646,70 @@ packages: which-typed-array: 1.1.13 dev: true + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + dev: true + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + /es-iterator-helpers@1.0.15: resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} dependencies: @@ -1568,6 +1729,33 @@ packages: safe-array-concat: 1.1.0 dev: true + /es-iterator-helpers@1.0.18: + resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + globalthis: 1.0.3 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + iterator.prototype: 1.1.2 + safe-array-concat: 1.1.2 + dev: true + + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + dev: true + /es-set-tostringtag@2.0.2: resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} @@ -1577,6 +1765,15 @@ packages: hasown: 2.0.0 dev: true + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: true + /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: @@ -1617,7 +1814,7 @@ packages: semver: 6.3.1 dev: true - /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint@8.57.0): + /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@8.57.0): resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==} engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1631,7 +1828,7 @@ packages: eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-react: 7.33.2(eslint@8.57.0) + eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) object.assign: 4.1.5 object.entries: 1.1.7 @@ -1654,7 +1851,7 @@ packages: eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-react: 7.33.2(eslint@8.57.0) + eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) typescript: 4.9.5 transitivePeerDependencies: @@ -1815,17 +2012,19 @@ packages: eslint: 8.57.0 dev: true - /eslint-plugin-react@7.33.2(eslint@8.57.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + /eslint-plugin-react@7.34.1(eslint@8.57.0): + resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: array-includes: 3.1.7 + array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 + array.prototype.toreversed: 1.1.2 + array.prototype.tosorted: 1.1.3 doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 + es-iterator-helpers: 1.0.18 eslint: 8.57.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 @@ -2120,9 +2319,9 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 functions-have-names: 1.2.3 dev: true @@ -2166,6 +2365,17 @@ packages: hasown: 2.0.0 dev: true + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: true + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -2179,6 +2389,15 @@ packages: get-intrinsic: 1.2.2 dev: true + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + dev: true + /getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} dependencies: @@ -2261,7 +2480,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 dev: true /got@12.6.1: @@ -2314,11 +2533,22 @@ packages: get-intrinsic: 1.2.2 dev: true + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.0 + dev: true + /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} dev: true + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: true + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} @@ -2331,12 +2561,26 @@ packages: has-symbols: 1.0.3 dev: true + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + /hasown@2.0.0: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + /hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: @@ -2463,6 +2707,15 @@ packages: side-channel: 1.0.4 dev: true + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + hasown: 2.0.0 + side-channel: 1.0.4 + dev: true + /internmap@2.0.3: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} @@ -2481,6 +2734,14 @@ packages: is-typed-array: 1.1.12 dev: true + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true + /is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} dev: false @@ -2509,7 +2770,7 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-tostringtag: 1.0.0 dev: true @@ -2523,6 +2784,13 @@ packages: dependencies: hasown: 2.0.0 + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 + dev: true + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} @@ -2538,7 +2806,7 @@ packages: /is-finalizationregistry@1.0.2: resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 dev: true /is-fullwidth-code-point@3.0.0: @@ -2569,6 +2837,11 @@ packages: engines: {node: '>= 0.4'} dev: true + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + dev: true + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} @@ -2590,7 +2863,7 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-tostringtag: 1.0.0 dev: true @@ -2604,6 +2877,13 @@ packages: call-bind: 1.0.5 dev: true + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + dev: true + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -2630,6 +2910,13 @@ packages: which-typed-array: 1.1.13 dev: true + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.15 + dev: true + /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} dev: false @@ -2641,14 +2928,14 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 dev: true /is-weakset@2.0.2: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 dev: true /isarray@0.0.1: @@ -2682,7 +2969,7 @@ packages: resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} dependencies: define-properties: 1.2.1 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 reflect.getprototypeof: 1.0.4 set-function-name: 2.0.1 @@ -3362,6 +3649,11 @@ packages: engines: {node: '>= 6'} dev: true + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + /postcss-import@15.1.0(postcss@8.4.38): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} @@ -3672,10 +3964,10 @@ packages: resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + get-intrinsic: 1.2.4 globalthis: 1.0.3 which-builtin-type: 1.1.3 dev: true @@ -3692,6 +3984,16 @@ packages: set-function-name: 2.0.1 dev: true + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.1 + dev: true + /request@2.88.2: resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} engines: {node: '>= 6'} @@ -3793,6 +4095,16 @@ packages: isarray: 2.0.5 dev: true + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: false @@ -3810,6 +4122,15 @@ packages: is-regex: 1.1.4 dev: true + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + dev: true + /safe-stable-stringify@2.4.3: resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} engines: {node: '>=10'} @@ -3864,6 +4185,18 @@ packages: has-property-descriptors: 1.0.1 dev: true + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + dev: true + /set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} @@ -4029,6 +4362,16 @@ packages: es-abstract: 1.22.3 dev: true + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true + /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: @@ -4037,6 +4380,14 @@ packages: es-abstract: 1.22.3 dev: true + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: @@ -4045,6 +4396,15 @@ packages: es-abstract: 1.22.3 dev: true + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + /string_decoder@0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} dev: false @@ -4356,6 +4716,15 @@ packages: is-typed-array: 1.1.12 dev: true + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + dev: true + /typed-array-byte-length@1.0.0: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} @@ -4366,6 +4735,17 @@ packages: is-typed-array: 1.1.12 dev: true + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + /typed-array-byte-offset@1.0.0: resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} engines: {node: '>= 0.4'} @@ -4377,6 +4757,18 @@ packages: is-typed-array: 1.1.12 dev: true + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: @@ -4385,6 +4777,18 @@ packages: is-typed-array: 1.1.12 dev: true + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + dev: true + /typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} @@ -4394,7 +4798,7 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -4559,6 +4963,17 @@ packages: has-tostringtag: 1.0.0 dev: true + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + dev: true + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} From 268d8efa0ebbfae1253ec3bdf5bbbcc22ed51046 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Apr 2024 14:18:39 -0700 Subject: [PATCH 061/100] Chore(deps-dev): Bump tailwindcss from 3.4.1 to 3.4.3 (#3214) Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 3.4.1 to 3.4.3. - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/v3.4.3/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.4.1...v3.4.3) --- updated-dependencies: - dependency-name: tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 10 +++++----- package.json | 2 +- pnpm-lock.yaml | 20 ++++++++++---------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2a8a6a37..46db054c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,7 +55,7 @@ "postcss": "^8.4.38", "prettier": "^3.2.5", "tailwind-scrollbar": "^3.0.5", - "tailwindcss": "^3.4.1", + "tailwindcss": "^3.4.3", "typescript": "^4.9.5" }, "optionalDependencies": { @@ -6700,9 +6700,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", - "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", + "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", "dev": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", @@ -6713,7 +6713,7 @@ "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.19.1", + "jiti": "^1.21.0", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", diff --git a/package.json b/package.json index 466a4cff..53d0e3bb 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "postcss": "^8.4.38", "prettier": "^3.2.5", "tailwind-scrollbar": "^3.0.5", - "tailwindcss": "^3.4.1", + "tailwindcss": "^3.4.3", "typescript": "^4.9.5" }, "optionalDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d87dbdf4..52ffe17f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -107,7 +107,7 @@ optionalDependencies: devDependencies: '@tailwindcss/forms': specifier: ^0.5.7 - version: 0.5.7(tailwindcss@3.4.1) + version: 0.5.7(tailwindcss@3.4.3) autoprefixer: specifier: ^10.4.17 version: 10.4.17(postcss@8.4.38) @@ -146,10 +146,10 @@ devDependencies: version: 3.2.5 tailwind-scrollbar: specifier: ^3.0.5 - version: 3.0.5(tailwindcss@3.4.1) + version: 3.0.5(tailwindcss@3.4.3) tailwindcss: - specifier: ^3.4.1 - version: 3.4.1 + specifier: ^3.4.3 + version: 3.4.3 typescript: specifier: ^4.9.5 version: 4.9.5 @@ -502,13 +502,13 @@ packages: defer-to-connect: 2.0.1 dev: false - /@tailwindcss/forms@0.5.7(tailwindcss@3.4.1): + /@tailwindcss/forms@0.5.7(tailwindcss@3.4.3): resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==} peerDependencies: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.1 + tailwindcss: 3.4.3 dev: true /@tanstack/react-virtual@3.0.2(react-dom@18.2.0)(react@18.2.0): @@ -4506,17 +4506,17 @@ packages: hasBin: true dev: false - /tailwind-scrollbar@3.0.5(tailwindcss@3.4.1): + /tailwind-scrollbar@3.0.5(tailwindcss@3.4.3): resolution: {integrity: sha512-0ZwxTivevqq9BY9fRP9zDjHl7Tu+J5giBGbln+0O1R/7nHtBUKnjQcA1aTIhK7Oyjp6Uc/Dj6/dn8Dq58k5Uww==} engines: {node: '>=12.13.0'} peerDependencies: tailwindcss: 3.x dependencies: - tailwindcss: 3.4.1 + tailwindcss: 3.4.3 dev: true - /tailwindcss@3.4.1: - resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} + /tailwindcss@3.4.3: + resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} engines: {node: '>=14.0.0'} hasBin: true dependencies: From 4e69ea6088839c19a7242a4d05d97ab207927ced Mon Sep 17 00:00:00 2001 From: rgon10 <3789272+rgon10@users.noreply.github.com> Date: Mon, 1 Apr 2024 17:32:39 -0400 Subject: [PATCH 062/100] Fix: TrueNAS Core support for pool stats (#3206) --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/truenas.md | 3 +++ src/utils/config/service-helpers.js | 2 ++ src/widgets/truenas/component.jsx | 10 +++++++++- src/widgets/truenas/pool.jsx | 14 ++++++++++++-- src/widgets/truenas/widget.js | 1 + 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/docs/widgets/services/truenas.md b/docs/widgets/services/truenas.md index 24350490..97bba3be 100644 --- a/docs/widgets/services/truenas.md +++ b/docs/widgets/services/truenas.md @@ -11,6 +11,8 @@ To create an API Key, follow [the official TrueNAS documentation](https://www.tr A detailed pool listing is disabled by default, but can be enabled with the `enablePools` option. +To use the `enablePools` option with TrueNAS Core, the `nasType` parameter is required. + ```yaml widget: type: truenas @@ -19,4 +21,5 @@ widget: password: pass # not required if using api key key: yourtruenasapikey # not required if using username / password enablePools: true # optional, defaults to false + nasType: scale # defaults to scale, must be set to 'core' if using enablePools with TrueNAS Core ``` diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index bea28278..d6552253 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -450,6 +450,7 @@ export function cleanServiceGroups(groups) { // truenas enablePools, + nasType, // unifi site, @@ -522,6 +523,7 @@ export function cleanServiceGroups(groups) { } if (type === "truenas") { if (enablePools !== undefined) cleanedService.widget.enablePools = JSON.parse(enablePools); + if (nasType !== undefined) cleanedService.widget.nasType = nasType; } if (["diskstation", "qnap"].includes(type)) { if (volume) cleanedService.widget.volume = volume; diff --git a/src/widgets/truenas/component.jsx b/src/widgets/truenas/component.jsx index 872d8c64..10d45bf6 100644 --- a/src/widgets/truenas/component.jsx +++ b/src/widgets/truenas/component.jsx @@ -40,7 +40,15 @@ export default function Component({ service }) {
    {enablePools && poolsData.map((pool) => ( - + ))} ); diff --git a/src/widgets/truenas/pool.jsx b/src/widgets/truenas/pool.jsx index 8e9d0465..b92ecb68 100644 --- a/src/widgets/truenas/pool.jsx +++ b/src/widgets/truenas/pool.jsx @@ -1,8 +1,18 @@ import classNames from "classnames"; import prettyBytes from "pretty-bytes"; -export default function Pool({ name, free, allocated, healthy }) { - const total = free + allocated; +export default function Pool({ name, free, allocated, healthy, data, nasType }) { + let total = 0; + if (nasType === "scale") { + total = free + allocated; + } else { + allocated = 0; // eslint-disable-line no-param-reassign + for (let i = 0; i < data.length; i += 1) { + total += data[i].stats.size; + allocated += data[i].stats.allocated; // eslint-disable-line no-param-reassign + } + } + const usedPercent = Math.round((allocated / total) * 100); const statusColor = healthy ? "bg-green-500" : "bg-yellow-500"; diff --git a/src/widgets/truenas/widget.js b/src/widgets/truenas/widget.js index 7435b6e1..5f8a38df 100644 --- a/src/widgets/truenas/widget.js +++ b/src/widgets/truenas/widget.js @@ -25,6 +25,7 @@ const widget = { healthy: entry.healthy, allocated: entry.allocated, free: entry.free, + data: entry.topology.data, })), }, }, From 60db01cc57b99c6d5d35b478e9a70fd4d883d0d9 Mon Sep 17 00:00:00 2001 From: XavierDupuis Date: Tue, 2 Apr 2024 18:42:34 -0400 Subject: [PATCH 063/100] Documentation: fix allowed fields uniformity (#3224) --- docs/widgets/services/azuredevops.md | 4 ++-- docs/widgets/services/crowdsec.md | 2 +- docs/widgets/services/gitea.md | 2 +- docs/widgets/services/peanut.md | 2 +- docs/widgets/services/prometheus.md | 2 +- docs/widgets/services/pterodactyl.md | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/widgets/services/azuredevops.md b/docs/widgets/services/azuredevops.md index 218007fe..78846115 100644 --- a/docs/widgets/services/azuredevops.md +++ b/docs/widgets/services/azuredevops.md @@ -7,10 +7,10 @@ Learn more about [Azure DevOps](https://azure.microsoft.com/en-us/products/devop This widget has 2 functions: -1. Pipelines: checks if the relevant pipeline is running or not, and if not, reports the last status.\ +1. Pipelines: checks if the relevant pipeline is running or not, and if not, reports the last status.
    Allowed fields: `["result", "status"]`. -2. Pull Requests: returns the amount of open PRs, the amount of the PRs you have open, and how many PRs that you open are marked as 'Approved' by at least 1 person and not yet completed.\ +2. Pull Requests: returns the amount of open PRs, the amount of the PRs you have open, and how many PRs that you open are marked as 'Approved' by at least 1 person and not yet completed.
    Allowed fields: `["totalPrs", "myPrs", "approved"]`. You will need to generate a personal access token for an existing user, see the [azure documentation](https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=Windows#create-a-pat) diff --git a/docs/widgets/services/crowdsec.md b/docs/widgets/services/crowdsec.md index 608367df..76b8efaa 100644 --- a/docs/widgets/services/crowdsec.md +++ b/docs/widgets/services/crowdsec.md @@ -8,7 +8,7 @@ Learn more about [Crowdsec](https://crowdsec.net). See the [crowdsec docs](https://docs.crowdsec.net/docs/local_api/intro/#machines) for information about registering a machine, in most instances you can use the default credentials (`/etc/crowdsec/local_api_credentials.yaml`). -Allowed fields: ["alerts", "bans"] +Allowed fields: `["alerts", "bans"]`. ```yaml widget: diff --git a/docs/widgets/services/gitea.md b/docs/widgets/services/gitea.md index da695a9a..140c4ee7 100644 --- a/docs/widgets/services/gitea.md +++ b/docs/widgets/services/gitea.md @@ -7,7 +7,7 @@ Learn more about [Gitea](https://gitea.com). API token requires `notifications`, `repository` and `issue` permissions. See the [gitea documentation](https://docs.gitea.com/development/api-usage#generating-and-listing-api-tokens) for details on generating tokens. -Allowed fields: ["notifications", "issues", "pulls"] +Allowed fields: `["notifications", "issues", "pulls"]`. ```yaml widget: diff --git a/docs/widgets/services/peanut.md b/docs/widgets/services/peanut.md index 63d75bbf..eca349b9 100644 --- a/docs/widgets/services/peanut.md +++ b/docs/widgets/services/peanut.md @@ -9,7 +9,7 @@ This widget adds support for [Network UPS Tools](https://networkupstools.org/) v The default ups name is `ups`. To configure more than one ups, you must create multiple peanut services. -Allowed fields: `["battery_charge", "ups_load", "ups_status"]` +Allowed fields: `["battery_charge", "ups_load", "ups_status"]`. !!! note diff --git a/docs/widgets/services/prometheus.md b/docs/widgets/services/prometheus.md index 02560c91..beb04b5e 100644 --- a/docs/widgets/services/prometheus.md +++ b/docs/widgets/services/prometheus.md @@ -5,7 +5,7 @@ description: Prometheus Widget Configuration Learn more about [Prometheus](https://github.com/prometheus/prometheus). -Allowed fields: `["targets_up", "targets_down", "targets_total"]` +Allowed fields: `["targets_up", "targets_down", "targets_total"]`. ```yaml widget: diff --git a/docs/widgets/services/pterodactyl.md b/docs/widgets/services/pterodactyl.md index 76e0f6ce..abf5899b 100644 --- a/docs/widgets/services/pterodactyl.md +++ b/docs/widgets/services/pterodactyl.md @@ -5,7 +5,7 @@ description: Pterodactyl Widget Configuration Learn more about [Pterodactyl](https://github.com/pterodactyl). -Allowed fields: `["nodes", "servers"]` +Allowed fields: `["nodes", "servers"]`. ```yaml widget: From 9904c2db2fd8fbc42be89d171564d02f6101f646 Mon Sep 17 00:00:00 2001 From: mrmorganmurphy <22598031+mrmorganmurphy@users.noreply.github.com> Date: Wed, 3 Apr 2024 10:03:12 -0700 Subject: [PATCH 064/100] Documentation: update diskstation instructions (#3230) --- docs/widgets/services/diskstation.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/widgets/services/diskstation.md b/docs/widgets/services/diskstation.md index 36010bfa..55e28355 100644 --- a/docs/widgets/services/diskstation.md +++ b/docs/widgets/services/diskstation.md @@ -11,22 +11,27 @@ An optional 'volume' parameter can be supplied to specify which volume's free sp Allowed fields: `["uptime", "volumeAvailable", "resources.cpu", "resources.mem"]`. -To access these system metrics you need to connect to the DiskStation with an account that is a member of the default `Administrators` group. That is because these metrics are requested from the API's `SYNO.Core.System` part that is only available to admin users. In order to keep the security impact as small as possible we can set the account in DSM up to limit the user's permissions inside the Synology system. In DSM 7.x, for instance, follow these steps: +To access these system metrics you need to connect to the DiskStation (`DSM`) with an account that is a member of the default `Administrators` group. That is because these metrics are requested from the API's `SYNO.Core.System` part that is only available to admin users. In order to keep the security impact as small as possible we can set the account in DSM up to limit the user's permissions inside the Synology system. In DSM 7.x, for instance, follow these steps: 1. Create a new user, i.e. `remote_stats`. 2. Set up a strong password for the new user 3. Under the `User Groups` tab of the user config dialogue check the box for `Administrators`. 4. On the `Permissions` tab check the top box for `No Access`, effectively prohibiting the user from accessing anything in the shared folders. 5. Under `Applications` check the box next to `Deny` in the header to explicitly prohibit login to all applications. -6. Now _only_ allow login to the `Download Station` application, either by +6. Now _only_ allow login to the `DSM` application, either by - unchecking `Deny` in the respective row, or (if inheriting permission doesn't work because of other group settings) - checking `Allow` for this app, or - checking `By IP` for this app to limit the source of login attempts to one or more IP addresses/subnets. -7. When the `Preview` column shows `Allow` in the `Download Station` row, click `Save`. +7. When the `Preview` column shows `Allow` in the `DSM` row, click `Save`. Now configure the widget with the correct login information and test it. -If you encounter issues during testing, make sure to uncheck the option for automatic blocking due to invalid logins under `Control Panel > Security > Protection`. If desired, this setting can be reactivated once the login is established working. +If you encounter issues during testing: + +1. Make sure to uncheck the option for automatic blocking due to invalid logins under `Control Panel > Security > Protection`. + - If desired, this setting can be reactivated once the login is established working. +2. Login to your Synology DSM with the newly created account and accept terms and conditions. +3. Reattempt ```yaml widget: From d49a06efd983c36b37af941ec1574048d0fee10f Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 6 Apr 2024 17:35:12 -0700 Subject: [PATCH 065/100] Fix: rename pialert to netalertx (#3253) --- docs/widgets/services/netalertx.md | 16 +++++++++ docs/widgets/services/pialert.md | 16 --------- public/locales/en/common.json | 2 +- src/widgets/components.js | 3 +- src/widgets/netalertx/component.jsx | 37 ++++++++++++++++++++ src/widgets/{pialert => netalertx}/widget.js | 0 src/widgets/pialert/component.jsx | 37 -------------------- src/widgets/widgets.js | 5 +-- 8 files changed, 59 insertions(+), 57 deletions(-) create mode 100644 docs/widgets/services/netalertx.md delete mode 100644 docs/widgets/services/pialert.md create mode 100644 src/widgets/netalertx/component.jsx rename src/widgets/{pialert => netalertx}/widget.js (100%) delete mode 100644 src/widgets/pialert/component.jsx diff --git a/docs/widgets/services/netalertx.md b/docs/widgets/services/netalertx.md new file mode 100644 index 00000000..4579d74c --- /dev/null +++ b/docs/widgets/services/netalertx.md @@ -0,0 +1,16 @@ +--- +title: NetAlertX +description: NetAlertX (formerly PiAlert) Widget Configuration +--- + +Learn more about [NetAlertX](https://github.com/jokob-sk/NetAlertX). + +_Note that the project was renamed from PiAlert to NetAlertX._ + +Allowed fields: `["total", "connected", "new_devices", "down_alerts"]`. + +```yaml +widget: + type: netalertx + url: http://ip:port +``` diff --git a/docs/widgets/services/pialert.md b/docs/widgets/services/pialert.md deleted file mode 100644 index ab8fb1e9..00000000 --- a/docs/widgets/services/pialert.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: PiAlert -description: PiAlert Widget Configuration ---- - -Learn more about [PiAlert](https://github.com/jokob-sk/Pi.Alert). - -Note that [pucherot/PiAlert](https://github.com/pucherot/Pi.Alert) has been abandoned and might not work properly. - -Allowed fields: `["total", "connected", "new_devices", "down_alerts"]`. - -```yaml -widget: - type: pialert - url: http://ip:port -``` diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 98daae9e..3ac3ed0d 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -277,7 +277,7 @@ "approved": "Approved", "available": "Available" }, - "pialert": { + "netalertx": { "total": "Total", "connected": "Connected", "new_devices": "New Devices", diff --git a/src/widgets/components.js b/src/widgets/components.js index 8c85bd77..500fe0ce 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -63,6 +63,7 @@ const components = { moonraker: dynamic(() => import("./moonraker/component")), mylar: dynamic(() => import("./mylar/component")), navidrome: dynamic(() => import("./navidrome/component")), + netalertx: dynamic(() => import("./netalertx/component")), netdata: dynamic(() => import("./netdata/component")), nextcloud: dynamic(() => import("./nextcloud/component")), nextdns: dynamic(() => import("./nextdns/component")), @@ -80,7 +81,7 @@ const components = { pfsense: dynamic(() => import("./pfsense/component")), photoprism: dynamic(() => import("./photoprism/component")), proxmoxbackupserver: dynamic(() => import("./proxmoxbackupserver/component")), - pialert: dynamic(() => import("./pialert/component")), + pialert: dynamic(() => import("./netalertx/component")), pihole: dynamic(() => import("./pihole/component")), plantit: dynamic(() => import("./plantit/component")), plex: dynamic(() => import("./plex/component")), diff --git a/src/widgets/netalertx/component.jsx b/src/widgets/netalertx/component.jsx new file mode 100644 index 00000000..5172121e --- /dev/null +++ b/src/widgets/netalertx/component.jsx @@ -0,0 +1,37 @@ +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 default function Component({ service }) { + const { t } = useTranslation(); + + const { widget } = service; + + const { data: netalertxData, error: netalertxError } = useWidgetAPI(widget, "data"); + + if (netalertxError) { + return ; + } + + if (!netalertxData) { + return ( + + + + + + + ); + } + + return ( + + + + + + + ); +} diff --git a/src/widgets/pialert/widget.js b/src/widgets/netalertx/widget.js similarity index 100% rename from src/widgets/pialert/widget.js rename to src/widgets/netalertx/widget.js diff --git a/src/widgets/pialert/component.jsx b/src/widgets/pialert/component.jsx deleted file mode 100644 index 49bef897..00000000 --- a/src/widgets/pialert/component.jsx +++ /dev/null @@ -1,37 +0,0 @@ -import { useTranslation } from "next-i18next"; - -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; -import useWidgetAPI from "utils/proxy/use-widget-api"; - -export default function Component({ service }) { - const { t } = useTranslation(); - - const { widget } = service; - - const { data: pialertData, error: pialertError } = useWidgetAPI(widget, "data"); - - if (pialertError) { - return ; - } - - if (!pialertData) { - return ( - - - - - - - ); - } - - return ( - - - - - - - ); -} diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 6e02d932..7ed98bfb 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -55,6 +55,7 @@ import mjpeg from "./mjpeg/widget"; import moonraker from "./moonraker/widget"; import mylar from "./mylar/widget"; import navidrome from "./navidrome/widget"; +import netalertx from "./netalertx/widget"; import netdata from "./netdata/widget"; import nextcloud from "./nextcloud/widget"; import nextdns from "./nextdns/widget"; @@ -73,7 +74,6 @@ import peanut from "./peanut/widget"; import pfsense from "./pfsense/widget"; import photoprism from "./photoprism/widget"; import proxmoxbackupserver from "./proxmoxbackupserver/widget"; -import pialert from "./pialert/widget"; import pihole from "./pihole/widget"; import plantit from "./plantit/widget"; import plex from "./plex/widget"; @@ -171,6 +171,7 @@ const widgets = { moonraker, mylar, navidrome, + netalertx, netdata, nextcloud, nextdns, @@ -189,7 +190,7 @@ const widgets = { pfsense, photoprism, proxmoxbackupserver, - pialert, + pialert: netalertx, pihole, plantit, plex, From f82a122e26ce843075269ae380dd71b9af516423 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 6 Apr 2024 20:00:16 -0700 Subject: [PATCH 066/100] Fix site monitor with error --- src/components/services/site-monitor.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/services/site-monitor.jsx b/src/components/services/site-monitor.jsx index 4e70c80a..3d5ef79e 100644 --- a/src/components/services/site-monitor.jsx +++ b/src/components/services/site-monitor.jsx @@ -12,7 +12,7 @@ export default function SiteMonitor({ group, service, style }) { let statusTitle = t("siteMonitor.http_status"); let statusText = ""; - if (error) { + if (error || (data && data.error)) { colorClass = "text-rose-500"; statusText = t("siteMonitor.error"); statusTitle += ` ${t("siteMonitor.error")}`; From 4239e8fe97ef064ed5ea2fd89cd65106032f73f7 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 8 Apr 2024 07:58:41 -0700 Subject: [PATCH 067/100] Update contributing / development guidelines --- CONTRIBUTING.md | 6 +++++- docs/more/development.md | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 48f2818d..d3b07697 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,11 +48,15 @@ Please see information in the docs regarding [code formatting with pre-commit ho By contributing, you agree that your contributions will be licensed under its GNU General Public License. +## Use of AI for pull requests + +In general, homepage does not accept "AI-generated" PRs. If you choose to use something like that to aid the development process to generate a significant proportion of the pull request, please make sure this is explicitly stated in the PR itself. + ## References This document was adapted from the open-source contribution guidelines for [Facebook's Draft](https://github.com/facebook/draft-js/blob/main/CONTRIBUTING.md) -# Automatic Respository Maintenance +## Automatic Respository Maintenance The homepage team appreciates all effort and interest from the community in filing bug reports, creating feature requests, sharing ideas and helping other community members. That said, in an effort to keep the repository organized and managebale the project uses automatic handling of certain areas: diff --git a/docs/more/development.md b/docs/more/development.md index 8e3fac13..ec580cff 100644 --- a/docs/more/development.md +++ b/docs/more/development.md @@ -39,6 +39,11 @@ Once installed, hooks will run when you commit. If the formatting isn't quite ri See the [pre-commit documentation](https://pre-commit.com/#install) to get started. +## Preferring self-hosted open-source software + +In general, homepage is meant to be a dashboard for 'self-hosted' services and we believe it is a small way we can help showcase this kind of software. While exceptions are made, mostly when there is no viable +self-hosted / open-source alternative, we ask that any widgets, etc. are developed primarily for a self-hosted tool. + ## New Feature Guidelines - New features should be linked to an existing feature request with at least 10 'up-votes'. The purpose of this requirement is to avoid the addition (and maintenance) of features that might only benefit a small number of users. From ffad2b890ee3bccf9ac40c4b9dc2e941d733d806 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 8 Apr 2024 10:20:52 -0700 Subject: [PATCH 068/100] New Crowdin translations by GitHub Action (#3199) Co-authored-by: Crowdin Bot --- public/locales/af/common.json | 6 +- public/locales/ar/common.json | 14 +- public/locales/bg/common.json | 12 +- public/locales/ca/common.json | 6 +- public/locales/cs/common.json | 12 +- public/locales/da/common.json | 14 +- public/locales/de/common.json | 6 +- public/locales/el/common.json | 6 +- public/locales/eo/common.json | 6 +- public/locales/es/common.json | 48 +- public/locales/eu/common.json | 6 +- public/locales/fi/common.json | 6 +- public/locales/fr/common.json | 14 +- public/locales/he/common.json | 6 +- public/locales/hi/common.json | 6 +- public/locales/hr/common.json | 14 +- public/locales/hu/common.json | 14 +- public/locales/id/common.json | 14 +- public/locales/it/common.json | 14 +- public/locales/ja/common.json | 14 +- public/locales/ko/common.json | 6 +- public/locales/lv/common.json | 6 +- public/locales/ms/common.json | 6 +- public/locales/nl/common.json | 14 +- public/locales/no/common.json | 848 +++++++++++++++-------------- public/locales/pl/common.json | 178 +++--- public/locales/pt/common.json | 14 +- public/locales/pt_BR/common.json | 84 +-- public/locales/ro/common.json | 6 +- public/locales/ru/common.json | 14 +- public/locales/sk/common.json | 14 +- public/locales/sl/common.json | 14 +- public/locales/sr/common.json | 6 +- public/locales/sv/common.json | 6 +- public/locales/te/common.json | 6 +- public/locales/th/common.json | 6 +- public/locales/tr/common.json | 14 +- public/locales/uk/common.json | 14 +- public/locales/vi/common.json | 6 +- public/locales/yue/common.json | 18 +- public/locales/zh-Hans/common.json | 36 +- public/locales/zh-Hant/common.json | 18 +- 42 files changed, 870 insertions(+), 702 deletions(-) diff --git a/public/locales/af/common.json b/public/locales/af/common.json index 654130bb..1aab2d89 100644 --- a/public/locales/af/common.json +++ b/public/locales/af/common.json @@ -277,7 +277,7 @@ "approved": "Goedgekeur", "available": "Beskikbaar" }, - "pialert": { + "netalertx": { "total": "Totaal", "connected": "Gekoppel", "new_devices": "Nuwe Toestelle", @@ -872,5 +872,9 @@ "labels": "Etikette", "users": "Gebruikers", "totalValue": "Totale Waarde" + }, + "crowdsec": { + "alerts": "Waarskuwings", + "bans": "Verbanne" } } diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index 28497fd4..b66a97a8 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "في انتظار قطع الاتصال", "connectionStatusDisconnecting": "جار قطع الاتصال", "connectionStatusDisconnected": "غير متصل", - "connectionStatusConnected": "متصل", + "connectionStatusConnected": "Connected", "uptime": "مدة التشغيل", "maxDown": "أقصى حد للتنزيل", "maxUp": "أقصى حد للتحميل", @@ -277,11 +277,11 @@ "approved": "مصدق", "available": "متاح" }, - "pialert": { + "netalertx": { "total": "المجموع", - "connected": "متصل", - "new_devices": "أجهزة جديدة", - "down_alerts": "تنبيهات تعطل الخوادم" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "الاستعلامات", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "المستخدمون", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "تنبيهات", + "bans": "Bans" } } diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index 3fc1676b..0d232fc1 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Pending Disconnect", "connectionStatusDisconnecting": "Disconnecting", "connectionStatusDisconnected": "Disconnected", - "connectionStatusConnected": "Свързано", + "connectionStatusConnected": "Connected", "uptime": "Uptime", "maxDown": "Max. Down", "maxUp": "Max. Up", @@ -277,10 +277,10 @@ "approved": "Одобрен", "available": "Наличен" }, - "pialert": { + "netalertx": { "total": "Общо", - "connected": "Свързано", - "new_devices": "Нови устройства", + "connected": "Connected", + "new_devices": "New Devices", "down_alerts": "Down Alerts" }, "pihole": { @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Потребители", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Предупреждения", + "bans": "Bans" } } diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index 4c7796ff..382f5237 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -277,7 +277,7 @@ "approved": "Aprovat", "available": "Disponible" }, - "pialert": { + "netalertx": { "total": "Total", "connected": "Connected", "new_devices": "New Devices", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Usuaris", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alerts", + "bans": "Bans" } } diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index 81043207..f1540dd7 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Čeká na odpojení", "connectionStatusDisconnecting": "Odpojování", "connectionStatusDisconnected": "Odpojeno", - "connectionStatusConnected": "Připojeno", + "connectionStatusConnected": "Connected", "uptime": "Doba spuštění", "maxDown": "Max. Down", "maxUp": "Max. Up", @@ -277,10 +277,10 @@ "approved": "Schváleno", "available": "Dostupné" }, - "pialert": { + "netalertx": { "total": "Celkem", - "connected": "Připojeno", - "new_devices": "Nová zařízení", + "connected": "Connected", + "new_devices": "New Devices", "down_alerts": "Down Alerts" }, "pihole": { @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Uživatelé", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Upozornění", + "bans": "Bans" } } diff --git a/public/locales/da/common.json b/public/locales/da/common.json index 390cb1f6..661032bc 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Pending Disconnect", "connectionStatusDisconnecting": "Disconnecting", "connectionStatusDisconnected": "Disconnected", - "connectionStatusConnected": "Forbundet", + "connectionStatusConnected": "Connected", "uptime": "Oppetid", "maxDown": "Max. Down", "maxUp": "Max. Up", @@ -277,11 +277,11 @@ "approved": "Godkendt", "available": "Tilgængelig" }, - "pialert": { + "netalertx": { "total": "Total", - "connected": "Forbundet", - "new_devices": "Nye Enheder", - "down_alerts": "Nedadvarsler" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "Forespørgsler", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Brugere", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Advarsler", + "bans": "Bans" } } diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 529c5ea5..82212c69 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -277,7 +277,7 @@ "approved": "Genehmigt", "available": "Verfügbar" }, - "pialert": { + "netalertx": { "total": "Gesamt", "connected": "Verbunden", "new_devices": "Neue Geräte", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Benutzer", "totalValue": "Gesamtwert" + }, + "crowdsec": { + "alerts": "Warnungen", + "bans": "Bans" } } diff --git a/public/locales/el/common.json b/public/locales/el/common.json index d006f1cc..d4f55f98 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -277,7 +277,7 @@ "approved": "Εγκρίθηκε", "available": "Διαθέσιμο" }, - "pialert": { + "netalertx": { "total": "Σύνολο", "connected": "Connected", "new_devices": "New Devices", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Χρήστες", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Ειδοποιήσεις", + "bans": "Bans" } } diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json index 3b1fa0f5..4fa17c47 100644 --- a/public/locales/eo/common.json +++ b/public/locales/eo/common.json @@ -277,7 +277,7 @@ "approved": "Aprobita", "available": "Havebla" }, - "pialert": { + "netalertx": { "total": "Totalo", "connected": "Connected", "new_devices": "New Devices", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Uzantoj", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alerts", + "bans": "Bans" } } diff --git a/public/locales/es/common.json b/public/locales/es/common.json index c65cff84..10aa7c6c 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -12,7 +12,7 @@ "number": "{{value, number}}", "ms": "{{value, number}}", "date": "{{value, date}}", - "relativeDate": "{{value, relativeDate}}", + "relativeDate": "{{valor, relativaFecha}}", "uptime": "{{value, uptime}}", "months": "me", "days": "d", @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Desconexión pendiente", "connectionStatusDisconnecting": "Desconectando", "connectionStatusDisconnected": "Desconectado", - "connectionStatusConnected": "Conectado", + "connectionStatusConnected": "Connected", "uptime": "Tiempo activo", "maxDown": "Descarga máxima", "maxUp": "Subida máxima", @@ -277,11 +277,11 @@ "approved": "Aprobado", "available": "Disponible" }, - "pialert": { + "netalertx": { "total": "Total", - "connected": "Conectado", - "new_devices": "Nuevos dispositivos", - "down_alerts": "Alertas de caídas" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "Consultas", @@ -427,7 +427,7 @@ "custom": "Personalizado", "visit": "Visitar", "url": "Enlace", - "searchsuggestion": "Suggestion" + "searchsuggestion": "Sugerencia" }, "wmo": { "0-day": "Soleado", @@ -546,12 +546,12 @@ "hd": "Alta definición", "tunerCount": "Tuners", "channelNumber": "Canal", - "channelNetwork": "Network", - "signalStrength": "Strength", - "signalQuality": "Quality", - "symbolQuality": "Quality", + "channelNetwork": "Red", + "signalStrength": "Intensidad", + "signalQuality": "Calidad", + "symbolQuality": "Calidad", "networkRate": "Tasa de bits", - "clientIP": "Client" + "clientIP": "Cliente" }, "scrutiny": { "passed": "Aprobado", @@ -798,10 +798,10 @@ }, "openwrt": { "uptime": "Tiempo activo", - "cpuLoad": "CPU Load Avg (5m)", + "cpuLoad": "Carga promedio del CPU (5m)", "up": "Activo", "down": "Inactivo", - "bytesTx": "Transmitted", + "bytesTx": "Transmitido", "bytesRx": "Recibido" }, "uptimerobot": { @@ -826,21 +826,21 @@ "noEventsFound": "No se encontraron eventos" }, "romm": { - "platforms": "Platforms", + "platforms": "Plataformas", "totalRoms": "Total ROMs" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "Advertencias", + "criticals": "Críticos" }, "plantit": { - "events": "Events", + "events": "Eventos", "plants": "Plants", "photos": "Fotos", "species": "Species" }, "gitea": { - "notifications": "Notifications", + "notifications": "Notificaciones", "issues": "Números", "pulls": "Pull Requests" }, @@ -852,7 +852,7 @@ "sceneSize": "Scenes Size", "sceneDuration": "Scenes Duration", "images": "Imágenes", - "imageSize": "Images Size", + "imageSize": "Tamaño de imagen", "galleries": "Galerías", "performers": "Performers", "studios": "Studios", @@ -869,8 +869,12 @@ "items": "Items", "totalWithWarranty": "Con Garantía", "locations": "Ubicaciones", - "labels": "Labels", + "labels": "Etiquetas", "users": "Usuarios", - "totalValue": "Total Value" + "totalValue": "Valor total" + }, + "crowdsec": { + "alerts": "Alertas", + "bans": "Bans" } } diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json index 0748eab0..6625148c 100644 --- a/public/locales/eu/common.json +++ b/public/locales/eu/common.json @@ -277,7 +277,7 @@ "approved": "Approved", "available": "Available" }, - "pialert": { + "netalertx": { "total": "Guztira", "connected": "Connected", "new_devices": "New Devices", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Users", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alerts", + "bans": "Bans" } } diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index ec4c11b7..b775e970 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -277,7 +277,7 @@ "approved": "Hyväksytty", "available": "Saatavilla" }, - "pialert": { + "netalertx": { "total": "Yhteensä", "connected": "Connected", "new_devices": "New Devices", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Users", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alerts", + "bans": "Bans" } } diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index d2cd1a5c..17975096 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Déconnexion en attente", "connectionStatusDisconnecting": "Déconnexion en cours", "connectionStatusDisconnected": "Déconnecté", - "connectionStatusConnected": "Connecté", + "connectionStatusConnected": "Connected", "uptime": "Démarré depuis", "maxDown": "Max. Bas", "maxUp": "Max. Haut", @@ -277,11 +277,11 @@ "approved": "Validé", "available": "Disponible" }, - "pialert": { + "netalertx": { "total": "Total", - "connected": "Connecté", - "new_devices": "Nouvel Appareil", - "down_alerts": "Alertes" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "Requêtes", @@ -872,5 +872,9 @@ "labels": "Étiquettes", "users": "Utilisateurs", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alertes", + "bans": "Bans" } } diff --git a/public/locales/he/common.json b/public/locales/he/common.json index d18f9856..a420823e 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -277,7 +277,7 @@ "approved": "מאושר", "available": "זמין" }, - "pialert": { + "netalertx": { "total": "סה\"כ", "connected": "Connected", "new_devices": "New Devices", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Users", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alerts", + "bans": "Bans" } } diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index f05d60e0..866a1280 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -277,7 +277,7 @@ "approved": "Approved", "available": "Available" }, - "pialert": { + "netalertx": { "total": "Total", "connected": "Connected", "new_devices": "New Devices", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Users", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alerts", + "bans": "Bans" } } diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index 03cc8919..4b323b40 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Odspajanje u tijeku", "connectionStatusDisconnecting": "Odspajanje", "connectionStatusDisconnected": "Odspojeno", - "connectionStatusConnected": "Povezano", + "connectionStatusConnected": "Connected", "uptime": "Vrijeme rada", "maxDown": "Maksimum preuzimanja", "maxUp": "Maksimum prijenosa", @@ -277,11 +277,11 @@ "approved": "Odobreno", "available": "Dostupno" }, - "pialert": { + "netalertx": { "total": "Ukupno", - "connected": "Povezano", - "new_devices": "Novi uređaji", - "down_alerts": "Obavijesti o nedostupnosti" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "Upiti", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Korisnici", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Upozorenja", + "bans": "Bans" } } diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index d1ac7035..735de467 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Szétkapcsolás függőben", "connectionStatusDisconnecting": "Kapcsolat bontása", "connectionStatusDisconnected": "Kapcsolat bontva", - "connectionStatusConnected": "Csatlakoztatott", + "connectionStatusConnected": "Connected", "uptime": "Üzemidő", "maxDown": "Max let.", "maxUp": "Max felt.", @@ -277,11 +277,11 @@ "approved": "Engedélyezett", "available": "Elérhető" }, - "pialert": { + "netalertx": { "total": "Összes", - "connected": "Csatlakoztatott", - "new_devices": "Új Eszközök", - "down_alerts": "Leállási Figyelmeztetések" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "Lekérdezések", @@ -872,5 +872,9 @@ "labels": "Címkék", "users": "Felhasználók", "totalValue": "Teljes érték" + }, + "crowdsec": { + "alerts": "Riasztások", + "bans": "Bans" } } diff --git a/public/locales/id/common.json b/public/locales/id/common.json index 38d44f4b..c1ca4450 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Menunggu Terputus", "connectionStatusDisconnecting": "Sedan Memutus", "connectionStatusDisconnected": "Terputus", - "connectionStatusConnected": "Tersambung", + "connectionStatusConnected": "Connected", "uptime": "Waktu Aktif", "maxDown": "Maks Unduh", "maxUp": "Maks Unggah", @@ -277,11 +277,11 @@ "approved": "Tersetujui", "available": "Tersedia" }, - "pialert": { + "netalertx": { "total": "Total", - "connected": "Tersambung", - "new_devices": "Perangkat Baru", - "down_alerts": "Alert Mati" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "Kueri", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Pengguna", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Peringatan", + "bans": "Bans" } } diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 421807f2..a795bc57 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "In attesa di disconnessione", "connectionStatusDisconnecting": "Disconnessione in corso", "connectionStatusDisconnected": "Disconnesso", - "connectionStatusConnected": "Connesso", + "connectionStatusConnected": "Connected", "uptime": "Tempo di attività", "maxDown": "Max. Down", "maxUp": "Max. Up", @@ -277,11 +277,11 @@ "approved": "Approvati", "available": "Disponibili" }, - "pialert": { + "netalertx": { "total": "Totale", - "connected": "Connesso", - "new_devices": "Nuovi Dispositivi", - "down_alerts": "Avvisi di Disservizio" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "Richieste", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Utenti", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Allarmi", + "bans": "Bans" } } diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index a4507bf4..e2f6a57b 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "接続を切断する", "connectionStatusDisconnecting": "接続を切断中", "connectionStatusDisconnected": "切断されました", - "connectionStatusConnected": "接続済み", + "connectionStatusConnected": "Connected", "uptime": "稼働時間", "maxDown": "最大ダウン", "maxUp": "最大アップ", @@ -277,11 +277,11 @@ "approved": "承認済", "available": "利用可" }, - "pialert": { + "netalertx": { "total": "合計", - "connected": "接続済み", - "new_devices": "新しいデバイス", - "down_alerts": "ダウンアラート" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "クエリ", @@ -872,5 +872,9 @@ "labels": "ラベル", "users": "ユーザ", "totalValue": "合計値" + }, + "crowdsec": { + "alerts": "アラート", + "bans": "Bans" } } diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index da8aa492..5e7a90e1 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -277,7 +277,7 @@ "approved": "승인됨", "available": "이용 가능" }, - "pialert": { + "netalertx": { "total": "총합", "connected": "Connected", "new_devices": "New Devices", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "사용자", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "경고", + "bans": "Bans" } } diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json index 8211b753..1a46c862 100644 --- a/public/locales/lv/common.json +++ b/public/locales/lv/common.json @@ -277,7 +277,7 @@ "approved": "Approved", "available": "Available" }, - "pialert": { + "netalertx": { "total": "Kopā", "connected": "Connected", "new_devices": "New Devices", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Lietotāji", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Paziņojumi", + "bans": "Bans" } } diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json index 46f08be8..f9583148 100644 --- a/public/locales/ms/common.json +++ b/public/locales/ms/common.json @@ -277,7 +277,7 @@ "approved": "Lulus", "available": "Sudah Ada" }, - "pialert": { + "netalertx": { "total": "Jumlah", "connected": "Connected", "new_devices": "New Devices", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Pengguna", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alerts", + "bans": "Bans" } } diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index f1cd7aac..8aff253e 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -277,7 +277,7 @@ "approved": "Goedgekeurd", "available": "Beschikbaar" }, - "pialert": { + "netalertx": { "total": "Totaal", "connected": "Verbonden", "new_devices": "Nieuwe Apparaten", @@ -826,8 +826,8 @@ "noEventsFound": "Geen gebeurtenissen gevonden" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "Platformen", + "totalRoms": "Totale ROM's" }, "netdata": { "warnings": "Waarschuwingen", @@ -840,7 +840,7 @@ "species": "Soorten" }, "gitea": { - "notifications": "Notifications", + "notifications": "Notificaties", "issues": "Problemen", "pulls": "Pull Requests" }, @@ -863,7 +863,7 @@ "tandoor": { "users": "Gebruikers", "recipes": "Recepten", - "keywords": "Keywords" + "keywords": "Trefwoorden" }, "homebox": { "items": "Items", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Gebruikers", "totalValue": "Totale waarde" + }, + "crowdsec": { + "alerts": "Meldingen", + "bans": "Bans" } } diff --git a/public/locales/no/common.json b/public/locales/no/common.json index 86d6b20b..bfc335c9 100644 --- a/public/locales/no/common.json +++ b/public/locales/no/common.json @@ -14,76 +14,76 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", - "months": "mo", + "months": "mnd", "days": "d", - "hours": "h", + "hours": "t", "minutes": "m", "seconds": "s" }, "widget": { - "missing_type": "Missing Widget Type: {{type}}", - "api_error": "API Error", - "information": "Information", + "missing_type": "Manglende Widget Type: {{type}}", + "api_error": "API-feil", + "information": "Informasjon", "status": "Status", - "url": "URL", - "raw_error": "Raw Error", - "response_data": "Response Data" + "url": "Nettadresse", + "raw_error": "Rå feil", + "response_data": "Responsdata" }, "weather": { - "current": "Current Location", - "allow": "Click to allow", - "updating": "Updating", - "wait": "Please wait" + "current": "Gjeldende posisjon", + "allow": "Trykk for å tillate", + "updating": "Oppdaterer", + "wait": "Vennligst vent" }, "search": { - "placeholder": "Search…" + "placeholder": "Søk…" }, "resources": { "cpu": "CPU", "mem": "MEM", - "total": "Total", - "free": "Free", - "used": "Used", - "load": "Load", + "total": "Totalt", + "free": "Ledig", + "used": "Brukt", + "load": "Last", "temp": "TEMP", - "max": "Max", - "uptime": "UP" + "max": "Maks", + "uptime": "OPP" }, "unifi": { - "users": "Users", - "uptime": "Uptime", - "days": "Days", + "users": "Brukere", + "uptime": "Oppetid", + "days": "Dager", "wan": "WAN", "lan": "LAN", "wlan": "WLAN", - "devices": "Devices", - "lan_devices": "LAN Devices", - "wlan_devices": "WLAN Devices", - "lan_users": "LAN Users", - "wlan_users": "WLAN Users", - "up": "UP", - "down": "DOWN", - "wait": "Please wait", - "empty_data": "Subsystem status unknown" + "devices": "Enheter", + "lan_devices": "LAN-enheter", + "wlan_devices": "WLAN-enheter", + "lan_users": "LAN Brukere", + "wlan_users": "WLAN Brukere", + "up": "OPP", + "down": "NEDE", + "wait": "Vennligst vent", + "empty_data": "Ukjent undersystemstatus" }, "docker": { "rx": "RX", "tx": "TX", "mem": "MEM", "cpu": "CPU", - "running": "Running", - "offline": "Offline", - "error": "Error", - "unknown": "Unknown", - "healthy": "Healthy", - "starting": "Starting", - "unhealthy": "Unhealthy", + "running": "Kjører", + "offline": "Frakoblet", + "error": "Feil", + "unknown": "Ukjent", + "healthy": "Friskt", + "starting": "Starter", + "unhealthy": "Usunn", "not_found": "Not Found", "exited": "Exited", "partial": "Partial" }, "ping": { - "error": "Error", + "error": "Feil", "ping": "Ping", "down": "Down", "up": "Up", @@ -91,226 +91,226 @@ }, "siteMonitor": { "http_status": "HTTP status", - "error": "Error", - "response": "Response", + "error": "Feil", + "response": "Svar", "down": "Down", "up": "Up", "not_available": "Not Available" }, "emby": { - "playing": "Playing", - "transcoding": "Transcoding", + "playing": "Spiller", + "transcoding": "Transkoding", "bitrate": "Bitrate", - "no_active": "No Active Streams", - "movies": "Movies", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "no_active": "Ingen aktive strømminger", + "movies": "Film", + "series": "Serie", + "episodes": "Episoder", + "songs": "Sanger" }, "esphome": { - "offline": "Offline", - "offline_alt": "Offline", + "offline": "Frakoblet", + "offline_alt": "Frakoblet", "online": "Online", - "total": "Total", - "unknown": "Unknown" + "total": "Totalt", + "unknown": "Ukjent" }, "evcc": { - "pv_power": "Production", - "battery_soc": "Battery", - "grid_power": "Grid", - "home_power": "Consumption", - "charge_power": "Charger", - "watt_hour": "Wh" + "pv_power": "Produksjon", + "battery_soc": "Batteri", + "grid_power": "Nett", + "home_power": "Forbruk", + "charge_power": "Lader", + "watt_hour": "W/t" }, "flood": { - "download": "Download", - "upload": "Upload", + "download": "Last ned", + "upload": "Opplastning", "leech": "Leech", "seed": "Seed" }, "freshrss": { - "subscriptions": "Subscriptions", - "unread": "Unread" + "subscriptions": "Abonnementer", + "unread": "Ulest" }, "fritzbox": { "connectionStatus": "Status", - "connectionStatusUnconfigured": "Unconfigured", - "connectionStatusConnecting": "Connecting", - "connectionStatusAuthenticating": "Authenticating", - "connectionStatusPendingDisconnect": "Pending Disconnect", - "connectionStatusDisconnecting": "Disconnecting", - "connectionStatusDisconnected": "Disconnected", + "connectionStatusUnconfigured": "Ikke konfigurert", + "connectionStatusConnecting": "Kobler til", + "connectionStatusAuthenticating": "Autentisering", + "connectionStatusPendingDisconnect": "Venter på frakobling", + "connectionStatusDisconnecting": "Kobler fra", + "connectionStatusDisconnected": "Frakoblet", "connectionStatusConnected": "Connected", - "uptime": "Uptime", - "maxDown": "Max. Down", - "maxUp": "Max. Up", + "uptime": "Oppetid", + "maxDown": "Maks. Ned", + "maxUp": "Max. Opp", "down": "Down", "up": "Up", - "received": "Received", - "sent": "Sent", - "externalIPAddress": "Ext. IP" + "received": "Mottatt", + "sent": "Sendt", + "externalIPAddress": "Ekstern IP" }, "caddy": { - "upstreams": "Upstreams", - "requests": "Current requests", - "requests_failed": "Failed requests" + "upstreams": "Oppstrøms", + "requests": "Aktuelle forespørsler", + "requests_failed": "Mislykkede forespørsler" }, "changedetectionio": { - "totalObserved": "Total Observed", - "diffsDetected": "Diffs Detected" + "totalObserved": "Totalt sett", + "diffsDetected": "Diffs oppdaget" }, "channelsdvrserver": { "shows": "Shows", - "recordings": "Recordings", - "scheduled": "Scheduled", - "passes": "Passes" + "recordings": "Opptak", + "scheduled": "Tidsplan", + "passes": "Pasninger" }, "tautulli": { - "playing": "Playing", - "transcoding": "Transcoding", + "playing": "Spiller", + "transcoding": "Transkoding", "bitrate": "Bitrate", - "no_active": "No Active Streams", - "plex_connection_error": "Check Plex Connection" + "no_active": "Ingen aktive strømminger", + "plex_connection_error": "Kontroller Plex tilkoblingen" }, "omada": { - "connectedAp": "Connected APs", - "activeUser": "Active devices", - "alerts": "Alerts", - "connectedGateway": "Connected gateways", - "connectedSwitches": "Connected switches" + "connectedAp": "Tilkoblede AP'er", + "activeUser": "Aktive enheter", + "alerts": "Varsler", + "connectedGateway": "Tilkoblede gateways", + "connectedSwitches": "Tilkoblede switcher" }, "nzbget": { - "rate": "Rate", - "remaining": "Remaining", - "downloaded": "Downloaded" + "rate": "Ranger", + "remaining": "Gjenstående", + "downloaded": "Nedlastede" }, "plex": { - "streams": "Active Streams", - "albums": "Albums", - "movies": "Movies", - "tv": "TV Shows" + "streams": "Aktive strømmninger", + "albums": "Album", + "movies": "Film", + "tv": "TV serier" }, "sabnzbd": { - "rate": "Rate", - "queue": "Queue", - "timeleft": "Time Left" + "rate": "Ranger", + "queue": "Kø", + "timeleft": "Gjenstående tid" }, "rutorrent": { - "active": "Active", - "upload": "Upload", - "download": "Download" + "active": "Aktiv", + "upload": "Opplastning", + "download": "Last ned" }, "transmission": { - "download": "Download", - "upload": "Upload", + "download": "Last ned", + "upload": "Opplastning", "leech": "Leech", "seed": "Seed" }, "qbittorrent": { - "download": "Download", - "upload": "Upload", + "download": "Last ned", + "upload": "Opplastning", "leech": "Leech", "seed": "Seed" }, "qnap": { - "cpuUsage": "CPU Usage", - "memUsage": "MEM Usage", - "systemTempC": "System Temp", - "poolUsage": "Pool Usage", - "volumeUsage": "Volume Usage", - "invalid": "Invalid" + "cpuUsage": "CPU Bruk", + "memUsage": "Minnebruk", + "systemTempC": "System temp", + "poolUsage": "Pool Bruk", + "volumeUsage": "Volumbruk", + "invalid": "Ugyldig" }, "deluge": { - "download": "Download", - "upload": "Upload", + "download": "Last ned", + "upload": "Opplastning", "leech": "Leech", "seed": "Seed" }, "downloadstation": { - "download": "Download", - "upload": "Upload", + "download": "Last ned", + "upload": "Opplastning", "leech": "Leech", "seed": "Seed" }, "sonarr": { - "wanted": "Wanted", - "queued": "Queued", - "series": "Series", - "queue": "Queue", - "unknown": "Unknown" + "wanted": "Ønsket", + "queued": "Ventende", + "series": "Serie", + "queue": "Kø", + "unknown": "Ukjent" }, "radarr": { - "wanted": "Wanted", - "missing": "Missing", - "queued": "Queued", - "movies": "Movies", - "queue": "Queue", - "unknown": "Unknown" + "wanted": "Ønsket", + "missing": "Mangler", + "queued": "Ventende", + "movies": "Film", + "queue": "Kø", + "unknown": "Ukjent" }, "lidarr": { - "wanted": "Wanted", - "queued": "Queued", - "artists": "Artists" + "wanted": "Ønsket", + "queued": "Ventende", + "artists": "Artister" }, "readarr": { - "wanted": "Wanted", - "queued": "Queued", - "books": "Books" + "wanted": "Ønsket", + "queued": "Ventende", + "books": "Bøker" }, "bazarr": { - "missingEpisodes": "Missing Episodes", - "missingMovies": "Missing Movies" + "missingEpisodes": "Manglende episoder", + "missingMovies": "Manglende filmer" }, "ombi": { - "pending": "Pending", - "approved": "Approved", - "available": "Available" + "pending": "Ventende", + "approved": "Godkjent", + "available": "Tilgjengelig" }, "jellyseerr": { - "pending": "Pending", - "approved": "Approved", - "available": "Available" + "pending": "Ventende", + "approved": "Godkjent", + "available": "Tilgjengelig" }, "overseerr": { - "pending": "Pending", - "processing": "Processing", - "approved": "Approved", - "available": "Available" + "pending": "Ventende", + "processing": "Behandler", + "approved": "Godkjent", + "available": "Tilgjengelig" }, - "pialert": { - "total": "Total", + "netalertx": { + "total": "Totalt", "connected": "Connected", "new_devices": "New Devices", "down_alerts": "Down Alerts" }, "pihole": { - "queries": "Queries", - "blocked": "Blocked", - "blocked_percent": "Blocked %", - "gravity": "Gravity" + "queries": "Spørringer", + "blocked": "Blokkert", + "blocked_percent": "Blokkert %", + "gravity": "Gravitasjon" }, "adguard": { - "queries": "Queries", - "blocked": "Blocked", - "filtered": "Filtered", - "latency": "Latency" + "queries": "Spørringer", + "blocked": "Blokkert", + "filtered": "Filtrert", + "latency": "Responstid" }, "speedtest": { - "upload": "Upload", - "download": "Download", + "upload": "Opplastning", + "download": "Last ned", "ping": "Ping" }, "portainer": { - "running": "Running", - "stopped": "Stopped", - "total": "Total" + "running": "Kjører", + "stopped": "Stoppet", + "total": "Totalt" }, "tailscale": { - "address": "Address", - "expires": "Expires", - "never": "Never", - "last_seen": "Last Seen", - "now": "Now", + "address": "Adresse", + "expires": "Utgår", + "never": "Aldri", + "last_seen": "Sist sett", + "now": "Nå", "years": "{{number}}y", "weeks": "{{number}}w", "days": "{{number}}d", @@ -320,7 +320,7 @@ "ago": "{{value}} Ago" }, "tdarr": { - "queue": "Queue", + "queue": "Kø", "processed": "Processed", "errored": "Errored", "saved": "Saved" @@ -331,13 +331,13 @@ "middleware": "Middleware" }, "navidrome": { - "nothing_streaming": "No Active Streams", + "nothing_streaming": "Ingen aktive strømminger", "please_wait": "Please Wait" }, "npm": { "enabled": "Enabled", "disabled": "Disabled", - "total": "Total" + "total": "Totalt" }, "coinmarketcap": { "configure": "Configure one or more crypto currencies to track", @@ -354,7 +354,7 @@ "prowlarr": { "enableIndexers": "Indexers", "numberOfGrabs": "Grabs", - "numberOfQueries": "Queries", + "numberOfQueries": "Spørringer", "numberOfFailGrabs": "Fail Grabs", "numberOfFailQueries": "Fail Queries" }, @@ -366,33 +366,33 @@ "numActiveSessions": "Sessions", "numConnections": "Connections", "dataRelayed": "Relayed", - "transferRate": "Rate" + "transferRate": "Ranger" }, "mastodon": { - "user_count": "Users", + "user_count": "Brukere", "status_count": "Posts", "domain_count": "Domains" }, "medusa": { - "wanted": "Wanted", - "queued": "Queued", - "series": "Series" + "wanted": "Ønsket", + "queued": "Ventende", + "series": "Serie" }, "minecraft": { "players": "Players", - "version": "Version", + "version": "Versjon", "status": "Status", "up": "Online", - "down": "Offline" + "down": "Frakoblet" }, "miniflux": { "read": "Read", - "unread": "Unread" + "unread": "Ulest" }, "authentik": { - "users": "Users", + "users": "Brukere", "loginsLast24H": "Logins (24h)", - "failedLoginsLast24H": "Failed Logins (24h)" + "failedLoginsLast24H": "Mislykket innlogginger (24t)" }, "proxmox": { "mem": "MEM", @@ -402,211 +402,211 @@ }, "glances": { "cpu": "CPU", - "load": "Load", - "wait": "Please wait", + "load": "Last", + "wait": "Vennligst vent", "temp": "TEMP", "_temp": "Temp", - "warn": "Warn", - "uptime": "UP", - "total": "Total", - "free": "Free", - "used": "Used", + "warn": "Advarsel", + "uptime": "OPP", + "total": "Totalt", + "free": "Ledig", + "used": "Brukt", "days": "d", - "hours": "h", + "hours": "t", "crit": "Crit", "read": "Read", - "write": "Write", + "write": "Skriv", "gpu": "GPU", "mem": "Mem", "swap": "Swap" }, "quicklaunch": { - "bookmark": "Bookmark", - "service": "Service", - "search": "Search", - "custom": "Custom", - "visit": "Visit", - "url": "URL", - "searchsuggestion": "Suggestion" + "bookmark": "Bokmerke", + "service": "Tjeneste", + "search": "Søk", + "custom": "Egendefinert", + "visit": "Besøk", + "url": "Nettadresse", + "searchsuggestion": "Forslag" }, "wmo": { - "0-day": "Sunny", - "0-night": "Clear", - "1-day": "Mainly Sunny", - "1-night": "Mainly Clear", - "2-day": "Partly Cloudy", - "2-night": "Partly Cloudy", - "3-day": "Cloudy", - "3-night": "Cloudy", - "45-day": "Foggy", - "45-night": "Foggy", - "48-day": "Foggy", - "48-night": "Foggy", - "51-day": "Light Drizzle", - "51-night": "Light Drizzle", - "53-day": "Drizzle", - "53-night": "Drizzle", - "55-day": "Heavy Drizzle", - "55-night": "Heavy Drizzle", - "56-day": "Light Freezing Drizzle", - "56-night": "Light Freezing Drizzle", - "57-day": "Freezing Drizzle", - "57-night": "Freezing Drizzle", - "61-day": "Light Rain", - "61-night": "Light Rain", - "63-day": "Rain", - "63-night": "Rain", - "65-day": "Heavy Rain", - "65-night": "Heavy Rain", - "66-day": "Freezing Rain", - "66-night": "Freezing Rain", - "67-day": "Freezing Rain", - "67-night": "Freezing Rain", - "71-day": "Light Snow", - "71-night": "Light Snow", - "73-day": "Snow", - "73-night": "Snow", - "75-day": "Heavy Snow", - "75-night": "Heavy Snow", - "77-day": "Snow Grains", - "77-night": "Snow Grains", - "80-day": "Light Showers", - "80-night": "Light Showers", - "81-day": "Showers", - "81-night": "Showers", - "82-day": "Heavy Showers", - "82-night": "Heavy Showers", - "85-day": "Snow Showers", - "85-night": "Snow Showers", - "86-day": "Snow Showers", - "86-night": "Snow Showers", - "95-day": "Thunderstorm", - "95-night": "Thunderstorm", - "96-day": "Thunderstorm With Hail", - "96-night": "Thunderstorm With Hail", - "99-day": "Thunderstorm With Hail", - "99-night": "Thunderstorm With Hail" + "0-day": "Solfylt", + "0-night": "Klart", + "1-day": "Lettskyet", + "1-night": "Lettskyet", + "2-day": "Delvis skyet", + "2-night": "Delvis skyet", + "3-day": "Skyet", + "3-night": "Skyet", + "45-day": "Tåke", + "45-night": "Tåke", + "48-day": "Tåke", + "48-night": "Tåke", + "51-day": "Lett yr", + "51-night": "Lett yr", + "53-day": "Yr", + "53-night": "Yr", + "55-day": "Tungt Regn", + "55-night": "Tungt Regn", + "56-day": "Lett underkjølt regn", + "56-night": "Lett underkjølt regn", + "57-day": "Underkjølt Regn", + "57-night": "Underkjølt Regn", + "61-day": "Lett regn", + "61-night": "Lett regn", + "63-day": "Regn", + "63-night": "Regn", + "65-day": "Kraftig regn", + "65-night": "Kraftig regn", + "66-day": "Underkjølt regn", + "66-night": "Underkjølt regn", + "67-day": "Underkjølt regn", + "67-night": "Underkjølt regn", + "71-day": "Lett snøvær", + "71-night": "Lett snøvær", + "73-day": "Snø", + "73-night": "Snø", + "75-day": "Tett snø", + "75-night": "Tett snø", + "77-day": "Snøkorn", + "77-night": "Snøkorn", + "80-day": "Lette Regnbyger", + "80-night": "Lette Regnbyger", + "81-day": "Regnbyger", + "81-night": "Regnbyger", + "82-day": "Tunge regnbyger", + "82-night": "Tunge regnbyger", + "85-day": "Snøbyger", + "85-night": "Snøbyger", + "86-day": "Snøbyger", + "86-night": "Snøbyger", + "95-day": "Tordenbyger", + "95-night": "Tordenbyger", + "96-day": "Tordenvær med hagl", + "96-night": "Tordenvær med hagl", + "99-day": "Tordenvær med hagl", + "99-night": "Tordenvær med hagl" }, "homebridge": { "available_update": "System", - "updates": "Updates", - "update_available": "Update Available", - "up_to_date": "Up to Date", + "updates": "Oppdateringer", + "update_available": "Oppdatering tilgjengelig", + "up_to_date": "Oppdatert", "child_bridges": "Child Bridges", "child_bridges_status": "{{ok}}/{{total}}", "up": "Up", - "pending": "Pending", + "pending": "Ventende", "down": "Down" }, "healthchecks": { - "new": "New", + "new": "Ny", "up": "Up", - "grace": "In Grace Period", + "grace": "I rammeperiode", "down": "Down", - "paused": "Paused", + "paused": "Pauset", "status": "Status", - "last_ping": "Last Ping", - "never": "No pings yet" + "last_ping": "Siste Ping", + "never": "Ingen ping ennå" }, "watchtower": { - "containers_scanned": "Scanned", - "containers_updated": "Updated", - "containers_failed": "Failed" + "containers_scanned": "Skannet", + "containers_updated": "Oppdatert", + "containers_failed": "Mislyktes" }, "autobrr": { - "approvedPushes": "Approved", - "rejectedPushes": "Rejected", - "filters": "Filters", + "approvedPushes": "Godkjent", + "rejectedPushes": "Avvist", + "filters": "Filtre", "indexers": "Indexers" }, "tubearchivist": { - "downloads": "Queue", - "videos": "Videos", - "channels": "Channels", - "playlists": "Playlists" + "downloads": "Kø", + "videos": "Videoer", + "channels": "Kanal", + "playlists": "Spillelister" }, "truenas": { - "load": "System Load", - "uptime": "Uptime", - "alerts": "Alerts" + "load": "Last på systemet", + "uptime": "Oppetid", + "alerts": "Varsler" }, "pyload": { - "speed": "Speed", - "active": "Active", - "queue": "Queue", - "total": "Total" + "speed": "Hastighet", + "active": "Aktiv", + "queue": "Kø", + "total": "Totalt" }, "gluetun": { - "public_ip": "Public IP", + "public_ip": "Offentlig IP", "region": "Region", - "country": "Country" + "country": "Land" }, "hdhomerun": { - "channels": "Channels", + "channels": "Kanal", "hd": "HD", - "tunerCount": "Tuners", - "channelNumber": "Channel", - "channelNetwork": "Network", - "signalStrength": "Strength", - "signalQuality": "Quality", - "symbolQuality": "Quality", + "tunerCount": "Tunere", + "channelNumber": "Kanal", + "channelNetwork": "Nettverk", + "signalStrength": "Styrke", + "signalQuality": "Kvalitet", + "symbolQuality": "Kvalitet", "networkRate": "Bitrate", - "clientIP": "Client" + "clientIP": "Klient" }, "scrutiny": { - "passed": "Passed", - "failed": "Failed", - "unknown": "Unknown" + "passed": "Bestått", + "failed": "Mislyktes", + "unknown": "Ukjent" }, "paperlessngx": { - "inbox": "Inbox", - "total": "Total" + "inbox": "Innboks", + "total": "Totalt" }, "peanut": { - "battery_charge": "Battery Charge", - "ups_load": "UPS Load", - "ups_status": "UPS Status", + "battery_charge": "Batteriladning", + "ups_load": "UPS last", + "ups_status": "UPS status", "online": "Online", - "on_battery": "On Battery", - "low_battery": "Low Battery" + "on_battery": "På batteri", + "low_battery": "Lavt batterinivå" }, "nextdns": { "wait": "Please Wait", - "no_devices": "No Device Data Received" + "no_devices": "Ingen enhetsdata mottatt" }, "mikrotik": { - "cpuLoad": "CPU Load", - "memoryUsed": "Memory Used", - "uptime": "Uptime", + "cpuLoad": "Prosessorbelastning", + "memoryUsed": "Minne brukt", + "uptime": "Oppetid", "numberOfLeases": "Leases" }, "xteve": { - "streams_all": "All Streams", - "streams_active": "Active Streams", - "streams_xepg": "XEPG Channels" + "streams_all": "Alle strømminger", + "streams_active": "Aktive strømmninger", + "streams_xepg": "XEPG Kanaler" }, "opendtu": { - "yieldDay": "Today", - "absolutePower": "Power", - "relativePower": "Power %", - "limit": "Limit" + "yieldDay": "Idag", + "absolutePower": "Effekt", + "relativePower": "Effekt %", + "limit": "Grense" }, "opnsense": { - "cpu": "CPU Load", - "memory": "Active Memory", - "wanUpload": "WAN Upload", - "wanDownload": "WAN Download" + "cpu": "Prosessorbelastning", + "memory": "Aktiv minne", + "wanUpload": "WAN Opplasting", + "wanDownload": "WAN Nedlasting" }, "moonraker": { - "printer_state": "Printer State", + "printer_state": "Skriver tilstand", "print_status": "Print Status", - "print_progress": "Progress", - "layers": "Layers" + "print_progress": "Progresjon", + "layers": "Lag" }, "octoprint": { "printer_state": "Status", - "temp_tool": "Tool temp", - "temp_bed": "Bed temp", + "temp_tool": "Verktøy temperatur", + "temp_bed": "Seng temperatur", "job_completion": "Completion" }, "cloudflared": { @@ -630,48 +630,48 @@ "memory_usage": "Memory" }, "immich": { - "users": "Users", + "users": "Brukere", "photos": "Photos", - "videos": "Videos", - "storage": "Storage" + "videos": "Videoer", + "storage": "Lagring" }, "uptimekuma": { - "up": "Sites Up", + "up": "Nettsteder opp", "down": "Sites Down", - "uptime": "Uptime", + "uptime": "Oppetid", "incident": "Incident", "m": "m" }, "atsumeru": { - "series": "Series", + "series": "Serie", "archives": "Archives", "chapters": "Chapters", "categories": "Categories" }, "komga": { "libraries": "Libraries", - "series": "Series", - "books": "Books" + "series": "Serie", + "books": "Bøker" }, "diskstation": { - "days": "Days", - "uptime": "Uptime", - "volumeAvailable": "Available" + "days": "Dager", + "uptime": "Oppetid", + "volumeAvailable": "Tilgjengelig" }, "mylar": { - "series": "Series", + "series": "Serie", "issues": "Issues", - "wanted": "Wanted" + "wanted": "Ønsket" }, "photoprism": { - "albums": "Albums", + "albums": "Album", "photos": "Photos", - "videos": "Videos", + "videos": "Videoer", "people": "People" }, "fileflows": { - "queue": "Queue", - "processing": "Processing", + "queue": "Kø", + "processing": "Behandler", "processed": "Processed", "time": "Time" }, @@ -694,7 +694,7 @@ "size": "Size", "lastrun": "Last Run", "nextrun": "Next Run", - "failed": "Failed" + "failed": "Mislyktes" }, "unmanic": { "active_workers": "Active Workers", @@ -711,18 +711,18 @@ "targets_total": "Total Targets" }, "gatus": { - "up": "Sites Up", + "up": "Nettsteder opp", "down": "Sites Down", - "uptime": "Uptime" + "uptime": "Oppetid" }, "ghostfolio": { - "gross_percent_today": "Today", + "gross_percent_today": "Idag", "gross_percent_1y": "One year", "gross_percent_max": "All time" }, "audiobookshelf": { "podcasts": "Podcasts", - "books": "Books", + "books": "Bøker", "podcastsDuration": "Duration", "booksDuration": "Duration" }, @@ -733,144 +733,148 @@ }, "whatsupdocker": { "monitoring": "Monitoring", - "updates": "Updates" + "updates": "Oppdateringer" }, "calibreweb": { - "books": "Books", + "books": "Bøker", "authors": "Authors", "categories": "Categories", - "series": "Series" + "series": "Serie" }, "jdownloader": { - "downloadCount": "Queue", - "downloadBytesRemaining": "Remaining", + "downloadCount": "Kø", + "downloadBytesRemaining": "Gjenstående", "downloadTotalBytes": "Size", - "downloadSpeed": "Speed" + "downloadSpeed": "Hastighet" }, "kavita": { - "seriesCount": "Series", + "seriesCount": "Serie", "totalFiles": "Files" }, "azuredevops": { - "result": "Result", + "result": "Resultat", "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress", - "totalPrs": "Total PRs", - "myPrs": "My PRs", - "approved": "Approved" + "buildId": "Produksjons ID", + "succeeded": "Vellykket", + "notStarted": "Ikke startet", + "failed": "Mislyktes", + "canceled": "Avbrutt", + "inProgress": "Pågående", + "totalPrs": "Totalt PR-er", + "myPrs": "Mine PR'er", + "approved": "Godkjent" }, "gamedig": { "status": "Status", "online": "Online", - "offline": "Offline", - "name": "Name", - "map": "Map", - "currentPlayers": "Current players", + "offline": "Frakoblet", + "name": "Navn", + "map": "Kart", + "currentPlayers": "Aktuelle spillere", "players": "Players", - "maxPlayers": "Max players", + "maxPlayers": "Maks spillere", "bots": "Bots", "ping": "Ping" }, "urbackup": { "ok": "Ok", - "errored": "Errors", - "noRecent": "Out of Date", - "totalUsed": "Used Storage" + "errored": "Feil", + "noRecent": "Utdatert", + "totalUsed": "Brukt lagringsplass" }, "mealie": { - "recipes": "Recipes", - "users": "Users", + "recipes": "Oppskrifter", + "users": "Brukere", "categories": "Categories", - "tags": "Tags" + "tags": "Stikkord" }, "openmediavault": { - "downloading": "Downloading", - "total": "Total", - "running": "Running", - "stopped": "Stopped", - "passed": "Passed", - "failed": "Failed" + "downloading": "Nedlaster", + "total": "Totalt", + "running": "Kjører", + "stopped": "Stoppet", + "passed": "Bestått", + "failed": "Mislyktes" }, "openwrt": { - "uptime": "Uptime", - "cpuLoad": "CPU Load Avg (5m)", + "uptime": "Oppetid", + "cpuLoad": "CPU-belastning snitt (5m)", "up": "Up", "down": "Down", - "bytesTx": "Transmitted", - "bytesRx": "Received" + "bytesTx": "Sendt", + "bytesRx": "Mottatt" }, "uptimerobot": { "status": "Status", - "uptime": "Uptime", - "lastDown": "Last Downtime", - "downDuration": "Downtime Duration", - "sitesUp": "Sites Up", + "uptime": "Oppetid", + "lastDown": "Siste nedetid", + "downDuration": "Varighet på nedetid", + "sitesUp": "Nettsteder opp", "sitesDown": "Sites Down", - "paused": "Paused", - "notyetchecked": "Not Yet Checked", + "paused": "Pauset", + "notyetchecked": "Ikke sjekket enda", "up": "Up", - "seemsdown": "Seems Down", + "seemsdown": "Virker nede", "down": "Down", - "unknown": "Unknown" + "unknown": "Ukjent" }, "calendar": { - "inCinemas": "In cinemas", - "physicalRelease": "Physical release", - "digitalRelease": "Digital release", - "noEventsToday": "No events for today!", - "noEventsFound": "No events found" + "inCinemas": "På Kino", + "physicalRelease": "Fysisk utslipp", + "digitalRelease": "Digital utgivelse", + "noEventsToday": "Ingen hendelser for i dag!", + "noEventsFound": "Ingen hendelser funnet" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "Plattformer", + "totalRoms": "Totale ROM-er" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "Advarsler", + "criticals": "Kritiske" }, "plantit": { - "events": "Events", - "plants": "Plants", + "events": "Begivenheter", + "plants": "Planter", "photos": "Photos", - "species": "Species" + "species": "Arter" }, "gitea": { - "notifications": "Notifications", + "notifications": "Varslinger", "issues": "Issues", "pulls": "Pull Requests" }, "stash": { - "scenes": "Scenes", - "scenesPlayed": "Scenes Played", - "playCount": "Total Plays", - "playDuration": "Time Watched", - "sceneSize": "Scenes Size", - "sceneDuration": "Scenes Duration", - "images": "Images", - "imageSize": "Images Size", - "galleries": "Galleries", - "performers": "Performers", + "scenes": "Scener", + "scenesPlayed": "Scener avspilt", + "playCount": "Totalt Spillt", + "playDuration": "Tid Sett", + "sceneSize": "Scenesstørrelse", + "sceneDuration": "Scener Varighet", + "images": "Bilder", + "imageSize": "Bildestørrelse", + "galleries": "Gallerier", + "performers": "Utøvere", "studios": "Studios", - "movies": "Movies", - "tags": "Tags", - "oCount": "O Count" + "movies": "Film", + "tags": "Stikkord", + "oCount": "O antall" }, "tandoor": { - "users": "Users", - "recipes": "Recipes", - "keywords": "Keywords" + "users": "Brukere", + "recipes": "Oppskrifter", + "keywords": "Nøkkelord" }, "homebox": { - "items": "Items", - "totalWithWarranty": "With Warranty", - "locations": "Locations", - "labels": "Labels", - "users": "Users", - "totalValue": "Total Value" + "items": "Enheter", + "totalWithWarranty": "Med garanti", + "locations": "Posisjon", + "labels": "Etiketter", + "users": "Brukere", + "totalValue": "Totalverdi" + }, + "crowdsec": { + "alerts": "Varsler", + "bans": "Utestengelse" } } diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index 80b2d9ce..5c64296e 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -40,7 +40,7 @@ }, "resources": { "cpu": "Procesor", - "mem": "PAM", + "mem": "RAM", "total": "Całkowite", "free": "Wolne", "used": "Użyte", @@ -53,9 +53,9 @@ "users": "Użytkownicy", "uptime": "Czas działania", "days": "Dni", - "wan": "Sieć WAN", - "lan": "Sieć LAN", - "wlan": "Sieć WLAN", + "wan": "WAN", + "lan": "LAN", + "wlan": "WLAN", "devices": "Urządzenia", "lan_devices": "Urządzenia LAN", "wlan_devices": "Urządzenia WLAN", @@ -64,23 +64,23 @@ "up": "CZAS", "down": "Pobieranie", "wait": "Proszę czekać", - "empty_data": "Nieznany stan" + "empty_data": "Status podsystemu nieznany" }, "docker": { "rx": "Rx", "tx": "Tx", - "mem": "PAM", + "mem": "RAM", "cpu": "Procesor", "running": "Działa", "offline": "Nieosiągalny", "error": "Błąd", "unknown": "Nieznany", "healthy": "Zdrowy", - "starting": "Rozpoczynanie", - "unhealthy": "Niezdrowe", + "starting": "Uruchamianie", + "unhealthy": "Niezdrowy", "not_found": "Nie znaleziono", - "exited": "Zakończone", - "partial": "Częściowe" + "exited": "Zakończony", + "partial": "Częściowy" }, "ping": { "error": "Błąd", @@ -137,18 +137,18 @@ "connectionStatusUnconfigured": "Nieskonfigurowane", "connectionStatusConnecting": "Łączenie", "connectionStatusAuthenticating": "Uwierzytelnianie", - "connectionStatusPendingDisconnect": "Pending Disconnect", + "connectionStatusPendingDisconnect": "Oczekujące rozłączenie", "connectionStatusDisconnecting": "Rozłączanie", "connectionStatusDisconnected": "Rozłączono", - "connectionStatusConnected": "Połączony", + "connectionStatusConnected": "Connected", "uptime": "Czas działania", - "maxDown": "Max. Down", - "maxUp": "Max. Up", + "maxDown": "Maks. Pobieranie", + "maxUp": "Maks. Wysyłanie", "down": "Niedostępny", "up": "Dostępny", "received": "Odebrane", "sent": "Wysłane", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Pub. IP" }, "caddy": { "upstreams": "Upstreams", @@ -156,12 +156,12 @@ "requests_failed": "Nieudane zapytania" }, "changedetectionio": { - "totalObserved": "Obserwowanych ogółem", - "diffsDetected": "Wykryto różnic" + "totalObserved": "Łącznie obserwowanych", + "diffsDetected": "Wykrytych różnic" }, "channelsdvrserver": { "shows": "Seriale", - "recordings": "Nagrywanie", + "recordings": "Nagrania", "scheduled": "W kolejce", "passes": "Przebiegi" }, @@ -277,11 +277,11 @@ "approved": "Zaakceptowane", "available": "Dostępne" }, - "pialert": { + "netalertx": { "total": "Całkowite", - "connected": "Połączony", - "new_devices": "Nowe urządzenia", - "down_alerts": "Powiadomienia o niedostępności" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "Zapytania", @@ -395,7 +395,7 @@ "failedLoginsLast24H": "Nieudane logowania (24h)" }, "proxmox": { - "mem": "PAM", + "mem": "RAM", "cpu": "Procesor", "lxc": "Kontenery LXC", "vms": "Maszyn wirtualnych" @@ -413,7 +413,7 @@ "used": "Użyte", "days": "d", "hours": "g", - "crit": "Crit", + "crit": "Krytyczyny", "read": "Przeczytane", "write": "Zapis", "gpu": "Karta graficzna", @@ -492,7 +492,7 @@ "updates": "Aktualizacje", "update_available": "Dostępna aktualizacja", "up_to_date": "Aktualny", - "child_bridges": "Child Bridges", + "child_bridges": "Mostki podrzędne", "child_bridges_status": "{{ok}}/{{total}}", "up": "Dostępny", "pending": "Oczekiwane", @@ -501,12 +501,12 @@ "healthchecks": { "new": "Nowy", "up": "Dostępny", - "grace": "In Grace Period", + "grace": "W okresie karencji", "down": "Niedostępny", "paused": "Zatrzymane", "status": "Stan", "last_ping": "Ostatni ping", - "never": "No pings yet" + "never": "Brak pingów" }, "watchtower": { "containers_scanned": "Zeskanowane", @@ -544,7 +544,7 @@ "hdhomerun": { "channels": "Kanały", "hd": "HD", - "tunerCount": "Tuners", + "tunerCount": "Tunery", "channelNumber": "Kanał", "channelNetwork": "Sieć", "signalStrength": "Siła", @@ -563,7 +563,7 @@ "total": "Całkowite" }, "peanut": { - "battery_charge": "Battery Charge", + "battery_charge": "Stan baterii", "ups_load": "Obciążenie UPS", "ups_status": "Status UPS", "online": "Dostępny", @@ -576,7 +576,7 @@ }, "mikrotik": { "cpuLoad": "Obciążenie procesora", - "memoryUsed": "Zuyżyta pamięć", + "memoryUsed": "Zużyta pamięć", "uptime": "Czas działania", "numberOfLeases": "Dzierżawy" }, @@ -587,8 +587,8 @@ }, "opendtu": { "yieldDay": "Dzisiaj", - "absolutePower": "Power", - "relativePower": "Power %", + "absolutePower": "Zasilanie", + "relativePower": "Moc %", "limit": "Limit" }, "opnsense": { @@ -605,16 +605,16 @@ }, "octoprint": { "printer_state": "Stan", - "temp_tool": "Tool temp", - "temp_bed": "Bed temp", + "temp_tool": "Temperatura narzędzia", + "temp_bed": "Temp. łóżka", "job_completion": "Ukończono" }, "cloudflared": { - "origin_ip": "Origin IP", + "origin_ip": "IP Źródła", "status": "Stan" }, "pfsense": { - "load": "Load Avg", + "load": "Śr. Obciążenie", "memory": "Użycie pamięci", "wanStatus": "Status WAN", "up": "Dostępny", @@ -624,8 +624,8 @@ "wanIP": "WAN IP" }, "proxmoxbackupserver": { - "datastore_usage": "Datastore", - "failed_tasks_24h": "Failed Tasks 24h", + "datastore_usage": "Magazyn danych", + "failed_tasks_24h": "Nieudane zadania 24h", "cpu_usage": "Procesor", "memory_usage": "Pamięć" }, @@ -679,7 +679,7 @@ "dashboards": "Panel główny", "datasources": "Źródła danych", "totalalerts": "Wszystkie alerty", - "alertstriggered": "Alerts Triggered" + "alertstriggered": "Wywołane alerty" }, "nextcloud": { "cpuload": "Obciążenie CPU", @@ -687,7 +687,7 @@ "freespace": "Wolna przestrzeń", "activeusers": "Aktywni użytkownicy", "numfiles": "Pliki", - "numshares": "Shared Items" + "numshares": "Udostępnione elementy" }, "kopia": { "status": "Stan", @@ -698,7 +698,7 @@ }, "unmanic": { "active_workers": "Aktywni pracownicy", - "total_workers": "Total Workers", + "total_workers": "Wszyscy pracownicy", "records_total": "Długość kolejki" }, "pterodactyl": { @@ -706,9 +706,9 @@ "nodes": "Węzły" }, "prometheus": { - "targets_up": "Targets Up", - "targets_down": "Targets Down", - "targets_total": "Total Targets" + "targets_up": "Cele włączone", + "targets_down": "Cele wyłączone", + "targets_total": "Wszystkich Celi" }, "gatus": { "up": "Działające", @@ -727,9 +727,9 @@ "booksDuration": "Czas trwania" }, "homeassistant": { - "people_home": "People Home", - "lights_on": "Lights On", - "switches_on": "Switches On" + "people_home": "Dom ludzi", + "lights_on": "Światła włączone", + "switches_on": "Przełączniki włączone" }, "whatsupdocker": { "monitoring": "Monitoring", @@ -756,12 +756,12 @@ "status": "Stan", "buildId": "ID kompilacji", "succeeded": "Ukończono", - "notStarted": "Not Started", + "notStarted": "Nierozpoczęte", "failed": "Niepowodzenie", "canceled": "Anulowano", "inProgress": "W trakcie", - "totalPrs": "Total PRs", - "myPrs": "My PRs", + "totalPrs": "Łącznie PRs", + "myPrs": "Moje PRs", "approved": "Zaakceptowane" }, "gamedig": { @@ -770,7 +770,7 @@ "offline": "Nieosiągalny", "name": "Nazwa", "map": "Mapa", - "currentPlayers": "Current players", + "currentPlayers": "Gracze online", "players": "Gracze", "maxPlayers": "Maksymalna ilość graczy", "bots": "Boty", @@ -783,7 +783,7 @@ "totalUsed": "Użyta pamięć" }, "mealie": { - "recipes": "Recipes", + "recipes": "Przepisy", "users": "Użytkownicy", "categories": "Kategorie", "tags": "Tagi" @@ -798,79 +798,83 @@ }, "openwrt": { "uptime": "Czas działania", - "cpuLoad": "CPU Load Avg (5m)", + "cpuLoad": "Śr. obciążenie CPU (5m)", "up": "Dostępny", "down": "Niedostępny", - "bytesTx": "Transmitted", + "bytesTx": "Przesłane", "bytesRx": "Odebrane" }, "uptimerobot": { "status": "Stan", "uptime": "Czas działania", - "lastDown": "Last Downtime", - "downDuration": "Downtime Duration", + "lastDown": "Ostatni downtime", + "downDuration": "Długość downtime'u", "sitesUp": "Działające", "sitesDown": "Niedziałające", "paused": "Zatrzymane", - "notyetchecked": "Not Yet Checked", + "notyetchecked": "Nie sprawdzono", "up": "Dostępny", - "seemsdown": "Seems Down", + "seemsdown": "Możliwe, że wyłączony", "down": "Niedostępny", "unknown": "Nieznany" }, "calendar": { "inCinemas": "W kinach", "physicalRelease": "Wydanie fizyczne", - "digitalRelease": "Digital release", - "noEventsToday": "No events for today!", - "noEventsFound": "No events found" + "digitalRelease": "Wydanie cyfrowe", + "noEventsToday": "Brak wydarzeń na dziś!", + "noEventsFound": "Nie znaleziono wydarzeń" }, "romm": { "platforms": "Platformy", - "totalRoms": "Total ROMs" + "totalRoms": "Łącznie ROM" }, "netdata": { "warnings": "Ostrzeżenia", - "criticals": "Criticals" + "criticals": "Krytyczny" }, "plantit": { - "events": "Events", - "plants": "Plants", + "events": "Wydarzenia", + "plants": "Rośliny", "photos": "Zdjęcia", - "species": "Species" + "species": "Gatunki" }, "gitea": { - "notifications": "Notifications", + "notifications": "Powiadomienia", "issues": "Zgłoszenia", - "pulls": "Pull Requests" + "pulls": "Żądania Pull" }, "stash": { - "scenes": "Scenes", - "scenesPlayed": "Scenes Played", - "playCount": "Total Plays", - "playDuration": "Time Watched", - "sceneSize": "Scenes Size", - "sceneDuration": "Scenes Duration", - "images": "Images", - "imageSize": "Images Size", - "galleries": "Galleries", - "performers": "Performers", - "studios": "Studios", + "scenes": "Sceny", + "scenesPlayed": "Odgrane sceny", + "playCount": "Łącznie odtworzone", + "playDuration": "Łączny czas oglądania", + "sceneSize": "Rozmiar scen", + "sceneDuration": "Czas trwania scen", + "images": "Obrazy", + "imageSize": "Rozmiar obrazów", + "galleries": "Galerie", + "performers": "Artyści", + "studios": "Studia", "movies": "Filmy", "tags": "Tagi", - "oCount": "O Count" + "oCount": "O Licznik" }, "tandoor": { "users": "Użytkownicy", - "recipes": "Recipes", - "keywords": "Keywords" + "recipes": "Przepisy", + "keywords": "Słowa kluczowe" }, "homebox": { - "items": "Items", - "totalWithWarranty": "With Warranty", - "locations": "Locations", - "labels": "Labels", + "items": "Elementy", + "totalWithWarranty": "Z gwarancją", + "locations": "Lokalizacje", + "labels": "Etykiety", "users": "Użytkownicy", - "totalValue": "Total Value" + "totalValue": "Wartość całkowita" + }, + "crowdsec": { + "alerts": "Alarmy", + "bans": "Bany" } } diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index aafdd8e0..74b67f82 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Desconexão pendente", "connectionStatusDisconnecting": "Desconectando", "connectionStatusDisconnected": "Desconectado", - "connectionStatusConnected": "Conectado", + "connectionStatusConnected": "Connected", "uptime": "Ligado", "maxDown": "Máx. de Descarga", "maxUp": "Max. de Envio", @@ -277,11 +277,11 @@ "approved": "Aprovada", "available": "Disponível" }, - "pialert": { + "netalertx": { "total": "Total", - "connected": "Conectado", - "new_devices": "Novos dispositivos", - "down_alerts": "Alertas de Baixo" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "Consultas", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Utilizadores", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alertas", + "bans": "Bans" } } diff --git a/public/locales/pt_BR/common.json b/public/locales/pt_BR/common.json index 9cef642f..0de066b7 100644 --- a/public/locales/pt_BR/common.json +++ b/public/locales/pt_BR/common.json @@ -14,7 +14,7 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", - "months": "mo", + "months": "M", "days": "d", "hours": "h", "minutes": "m", @@ -85,17 +85,17 @@ "ping": { "error": "Erro", "ping": "Tempo de resposta", - "down": "Down", - "up": "Up", - "not_available": "Not Available" + "down": "Inativo", + "up": "Ativo", + "not_available": "Não Disponível" }, "siteMonitor": { - "http_status": "HTTP status", + "http_status": "Estado HTTP", "error": "Erro", - "response": "Response", - "down": "Down", - "up": "Up", - "not_available": "Not Available" + "response": "Resposta", + "down": "Inativo", + "up": "Ativo", + "not_available": "Não Disponível" }, "emby": { "playing": "A reproduzir", @@ -134,21 +134,21 @@ }, "fritzbox": { "connectionStatus": "Estado", - "connectionStatusUnconfigured": "Unconfigured", - "connectionStatusConnecting": "Connecting", - "connectionStatusAuthenticating": "Authenticating", - "connectionStatusPendingDisconnect": "Pending Disconnect", - "connectionStatusDisconnecting": "Disconnecting", - "connectionStatusDisconnected": "Disconnected", + "connectionStatusUnconfigured": "Não configurado", + "connectionStatusConnecting": "Conectando", + "connectionStatusAuthenticating": "Autenticando", + "connectionStatusPendingDisconnect": "Desconexão Pendente", + "connectionStatusDisconnecting": "Desconectando", + "connectionStatusDisconnected": "Desconectado", "connectionStatusConnected": "Connected", "uptime": "Ligado", "maxDown": "Max. Down", "maxUp": "Max. Up", - "down": "Down", - "up": "Up", - "received": "Received", - "sent": "Sent", - "externalIPAddress": "Ext. IP" + "down": "Inativo", + "up": "Ativo", + "received": "Recebido", + "sent": "Enviado", + "externalIPAddress": "IP Externo" }, "caddy": { "upstreams": "Upstreams", @@ -160,9 +160,9 @@ "diffsDetected": "Diferenças Detetadas" }, "channelsdvrserver": { - "shows": "Shows", + "shows": "Programas", "recordings": "Gravações", - "scheduled": "Scheduled", + "scheduled": "Agendado", "passes": "Passes" }, "tautulli": { @@ -170,7 +170,7 @@ "transcoding": "Transcodificação", "bitrate": "Taxa de bits", "no_active": "Sem streams ativas", - "plex_connection_error": "Check Plex Connection" + "plex_connection_error": "Verifique a conexão do Plex" }, "omada": { "connectedAp": "APs Ligados", @@ -186,7 +186,7 @@ }, "plex": { "streams": "Streams Ativas", - "albums": "Albums", + "albums": "Álbuns", "movies": "Filmes", "tv": "Series de TV" }, @@ -213,9 +213,9 @@ "seed": "Semente" }, "qnap": { - "cpuUsage": "CPU Usage", - "memUsage": "MEM Usage", - "systemTempC": "System Temp", + "cpuUsage": "Uso de CPU", + "memUsage": "Uso de Memória", + "systemTempC": "Temp. do Sistema", "poolUsage": "Pool Usage", "volumeUsage": "Volume Usage", "invalid": "Invalid" @@ -277,7 +277,7 @@ "approved": "Aprovada", "available": "Disponível" }, - "pialert": { + "netalertx": { "total": "Total", "connected": "Connected", "new_devices": "New Devices", @@ -494,15 +494,15 @@ "up_to_date": "Atualizado", "child_bridges": "Pontes Filhas", "child_bridges_status": "{{ok}}/{{total}}", - "up": "Up", + "up": "Ativo", "pending": "Pendente", - "down": "Down" + "down": "Inativo" }, "healthchecks": { "new": "Novo", - "up": "Up", + "up": "Ativo", "grace": "Em Período Gratuito", - "down": "Down", + "down": "Inativo", "paused": "Pausado", "status": "Estado", "last_ping": "Ultimo Ping", @@ -617,8 +617,8 @@ "load": "Load Avg", "memory": "Mem Usage", "wanStatus": "WAN Status", - "up": "Up", - "down": "Down", + "up": "Ativo", + "down": "Inativo", "temp": "Temp", "disk": "Disk Usage", "wanIP": "WAN IP" @@ -664,7 +664,7 @@ "wanted": "Desejada" }, "photoprism": { - "albums": "Albums", + "albums": "Álbuns", "photos": "Fotos", "videos": "Vídeos", "people": "Pessoa" @@ -799,10 +799,10 @@ "openwrt": { "uptime": "Ligado", "cpuLoad": "CPU Load Avg (5m)", - "up": "Up", - "down": "Down", + "up": "Ativo", + "down": "Inativo", "bytesTx": "Transmitted", - "bytesRx": "Received" + "bytesRx": "Recebido" }, "uptimerobot": { "status": "Estado", @@ -813,9 +813,9 @@ "sitesDown": "Sites Fora do Ar", "paused": "Pausado", "notyetchecked": "Not Yet Checked", - "up": "Up", + "up": "Ativo", "seemsdown": "Seems Down", - "down": "Down", + "down": "Inativo", "unknown": "Desconhecido" }, "calendar": { @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Utilizadores", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alertas", + "bans": "Bans" } } diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index 987b1197..512904ff 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -277,7 +277,7 @@ "approved": "Aprobate", "available": "Disponibile" }, - "pialert": { + "netalertx": { "total": "Total", "connected": "Connected", "new_devices": "New Devices", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Utilizatori", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alerts", + "bans": "Bans" } } diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index 81472ced..973c131f 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Ожидает отключения", "connectionStatusDisconnecting": "Отключение", "connectionStatusDisconnected": "Отключено", - "connectionStatusConnected": "Подключено", + "connectionStatusConnected": "Connected", "uptime": "Время работы", "maxDown": "Макс. Загрузка", "maxUp": "Макс. Отдача", @@ -277,11 +277,11 @@ "approved": "Одобрено", "available": "Доступно" }, - "pialert": { + "netalertx": { "total": "Всего", - "connected": "Подключено", - "new_devices": "Новые устройства", - "down_alerts": "Оповещение о недоступности" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "Запросы", @@ -872,5 +872,9 @@ "labels": "Ярлыки", "users": "Пользователи", "totalValue": "Общая стоимость" + }, + "crowdsec": { + "alerts": "Предупреждения", + "bans": "Bans" } } diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index 794bf9c6..b792a425 100644 --- a/public/locales/sk/common.json +++ b/public/locales/sk/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Čakám na odpojenie", "connectionStatusDisconnecting": "Odpájanie", "connectionStatusDisconnected": "Odpojené", - "connectionStatusConnected": "Pripojené", + "connectionStatusConnected": "Connected", "uptime": "Prevádzka", "maxDown": "Max. sťahovanie", "maxUp": "Max. nahrávanie", @@ -277,11 +277,11 @@ "approved": "Schválené", "available": "Dostupné" }, - "pialert": { + "netalertx": { "total": "Celkovo", - "connected": "Pripojené", - "new_devices": "Nové zariadenia", - "down_alerts": "Upozornenia o výpadkoch" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "Dopyty", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Používatelia", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Upozornenia", + "bans": "Bans" } } diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index d48cd753..f732fbe1 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Čakanje na prekinitev", "connectionStatusDisconnecting": "Prekinitev", "connectionStatusDisconnected": "Prekinjeno", - "connectionStatusConnected": "Povezanih", + "connectionStatusConnected": "Connected", "uptime": "Čas delovanja", "maxDown": "Maks. dol", "maxUp": "Maks. gor", @@ -277,11 +277,11 @@ "approved": "Odobreno", "available": "Na voljo" }, - "pialert": { + "netalertx": { "total": "Skupaj", - "connected": "Povezanih", - "new_devices": "Nove naprave", - "down_alerts": "Izključeno" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "Poizvedbe", @@ -872,5 +872,9 @@ "labels": "Oznake", "users": "Uporabniki", "totalValue": "Skupna vrednost" + }, + "crowdsec": { + "alerts": "Opozorila", + "bans": "Prepovedi" } } diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json index 86d6b20b..71ca98db 100644 --- a/public/locales/sr/common.json +++ b/public/locales/sr/common.json @@ -277,7 +277,7 @@ "approved": "Approved", "available": "Available" }, - "pialert": { + "netalertx": { "total": "Total", "connected": "Connected", "new_devices": "New Devices", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Users", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alerts", + "bans": "Bans" } } diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index 9311ed8d..9918ab64 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -277,7 +277,7 @@ "approved": "Godkända", "available": "Tillgänglig" }, - "pialert": { + "netalertx": { "total": "Total", "connected": "Connected", "new_devices": "New Devices", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Användare", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alerts", + "bans": "Bans" } } diff --git a/public/locales/te/common.json b/public/locales/te/common.json index 90ff4f22..40bd9f7a 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -277,7 +277,7 @@ "approved": "ఆమోదించబడింది", "available": "అందుబాటులో వున్నవి" }, - "pialert": { + "netalertx": { "total": "మొత్తం", "connected": "Connected", "new_devices": "New Devices", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "వినియోగదారులు", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alerts", + "bans": "Bans" } } diff --git a/public/locales/th/common.json b/public/locales/th/common.json index 29b5b8c1..9bb8ee9b 100644 --- a/public/locales/th/common.json +++ b/public/locales/th/common.json @@ -277,7 +277,7 @@ "approved": "Approved", "available": "Available" }, - "pialert": { + "netalertx": { "total": "ทั้งหมด", "connected": "Connected", "new_devices": "New Devices", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "ผู้ใช้", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alerts", + "bans": "Bans" } } diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index 98960ac1..9d284786 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Bağlantının Kesilmesi Bekleniyor", "connectionStatusDisconnecting": "Bağlantı kesiliyor...", "connectionStatusDisconnected": "Bağlantı kesildi", - "connectionStatusConnected": "Bağlandı", + "connectionStatusConnected": "Connected", "uptime": "Çalışma Süresi", "maxDown": "Max. Indirme", "maxUp": "Max. Gönderme", @@ -277,11 +277,11 @@ "approved": "Onaylı", "available": "Kullanılabilir" }, - "pialert": { + "netalertx": { "total": "Toplam", - "connected": "Bağlandı", - "new_devices": "Yeni Cihazlar", - "down_alerts": "Düşme Uyarıları" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "Sorgular", @@ -872,5 +872,9 @@ "labels": "Etiketler", "users": "Kullanıcılar", "totalValue": "Toplam Değer" + }, + "crowdsec": { + "alerts": "Alarmlar", + "bans": "Bans" } } diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index 1a69825c..55e8c07e 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Pending Disconnect", "connectionStatusDisconnecting": "Disconnecting", "connectionStatusDisconnected": "Disconnected", - "connectionStatusConnected": "Підключено", + "connectionStatusConnected": "Connected", "uptime": "Час роботи", "maxDown": "Max. Down", "maxUp": "Max. Up", @@ -277,11 +277,11 @@ "approved": "Затверджено", "available": "Доступно" }, - "pialert": { + "netalertx": { "total": "Усього", - "connected": "Підключено", - "new_devices": "Нові пристрої", - "down_alerts": "Сповіщення про збій" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "Запити", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Користувачі", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Оповіщення", + "bans": "Bans" } } diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index 23827ddc..5299c54d 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -277,7 +277,7 @@ "approved": "Đã duyệt", "available": "Available" }, - "pialert": { + "netalertx": { "total": "Tổng", "connected": "Connected", "new_devices": "New Devices", @@ -872,5 +872,9 @@ "labels": "Labels", "users": "Users", "totalValue": "Total Value" + }, + "crowdsec": { + "alerts": "Alerts", + "bans": "Bans" } } diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index 3b32c081..d7a9242c 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "待辦的斷開", "connectionStatusDisconnecting": "正在中斷連線", "connectionStatusDisconnected": "連接已中斷", - "connectionStatusConnected": "已連線", + "connectionStatusConnected": "Connected", "uptime": "運行時間", "maxDown": "最大下載速率", "maxUp": "最大上傳速率", @@ -277,11 +277,11 @@ "approved": "批准", "available": "可用" }, - "pialert": { + "netalertx": { "total": "全部", - "connected": "已連線", - "new_devices": "新裝置", - "down_alerts": "離線警告" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "查詢", @@ -858,7 +858,7 @@ "studios": "工作室", "movies": "電影", "tags": "標籤", - "oCount": "O Count" + "oCount": "0 個" }, "tandoor": { "users": "使用者", @@ -867,10 +867,14 @@ }, "homebox": { "items": "項目", - "totalWithWarranty": "With Warranty", + "totalWithWarranty": "有保証", "locations": "位置", "labels": "標籤", "users": "使用者", "totalValue": "總共" + }, + "crowdsec": { + "alerts": "警示", + "bans": "禁止" } } diff --git a/public/locales/zh-Hans/common.json b/public/locales/zh-Hans/common.json index 3957ccc8..5ae9de40 100644 --- a/public/locales/zh-Hans/common.json +++ b/public/locales/zh-Hans/common.json @@ -54,13 +54,13 @@ "uptime": "运行时间", "days": "天", "wan": "WAN", - "lan": "LAN", - "wlan": "WLAN", + "lan": "局域网", + "wlan": "无线局域网", "devices": "设备", - "lan_devices": "LAN设备", + "lan_devices": "有线设备", "wlan_devices": "WLAN 设备", - "lan_users": "LAN 用户", - "wlan_users": "WLAN 用户", + "lan_users": "有线用户", + "wlan_users": "无线用户", "up": "运行时间", "down": "离线", "wait": "请稍候", @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "等待断开连接", "connectionStatusDisconnecting": "正在断开连接", "connectionStatusDisconnected": "未连接", - "connectionStatusConnected": "已连接", + "connectionStatusConnected": "Connected", "uptime": "运行时间", "maxDown": "最大下载速度", "maxUp": "", @@ -277,11 +277,11 @@ "approved": "已批准", "available": "可用" }, - "pialert": { + "netalertx": { "total": "总计", - "connected": "已连接", - "new_devices": "新设备", - "down_alerts": "离线警报" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "查询", @@ -858,7 +858,7 @@ "studios": "工作室", "movies": "电影", "tags": "标签", - "oCount": "O Count" + "oCount": "O 个" }, "tandoor": { "users": "用户数", @@ -866,11 +866,15 @@ "keywords": "关键词" }, "homebox": { - "items": "Items", - "totalWithWarranty": "With Warranty", - "locations": "Locations", - "labels": "Labels", + "items": "条目", + "totalWithWarranty": "有保证", + "locations": "位置", + "labels": "标签", "users": "用户数", - "totalValue": "Total Value" + "totalValue": "总计" + }, + "crowdsec": { + "alerts": "警告", + "bans": "禁用" } } diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index 2ee4e831..38b7ea42 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "待辦的斷開", "connectionStatusDisconnecting": "正在中斷連線", "connectionStatusDisconnected": "連接已中斷", - "connectionStatusConnected": "已連線", + "connectionStatusConnected": "Connected", "uptime": "運行時間", "maxDown": "最大下載速率", "maxUp": "最大上傳速率", @@ -277,11 +277,11 @@ "approved": "已核准", "available": "可觀看" }, - "pialert": { + "netalertx": { "total": "全部", - "connected": "已連線", - "new_devices": "新裝置", - "down_alerts": "離線警告" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "查詢", @@ -858,7 +858,7 @@ "studios": "工作室", "movies": "電影", "tags": "標籤", - "oCount": "O Count" + "oCount": "0 個" }, "tandoor": { "users": "用戶", @@ -867,10 +867,14 @@ }, "homebox": { "items": "項目", - "totalWithWarranty": "With Warranty", + "totalWithWarranty": "有保証", "locations": "位置", "labels": "標籤", "users": "用戶", "totalValue": "總共" + }, + "crowdsec": { + "alerts": "警示", + "bans": "禁止" } } From c18fd02c8ec2af0a5224da310a0e5ea6a54830f8 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 8 Apr 2024 15:19:35 -0700 Subject: [PATCH 069/100] Fix typo in crowdsec docs --- docs/widgets/services/crowdsec.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/widgets/services/crowdsec.md b/docs/widgets/services/crowdsec.md index 76b8efaa..da15a478 100644 --- a/docs/widgets/services/crowdsec.md +++ b/docs/widgets/services/crowdsec.md @@ -15,5 +15,5 @@ widget: type: crowdsec url: http://crowdsechostorip:port username: localhost # machine_id in crowdsec - passowrd: password + password: password ``` From bfd392026dbf8b4296aa6193d2e99e718e456ece Mon Sep 17 00:00:00 2001 From: brikim Date: Fri, 12 Apr 2024 22:33:40 -0500 Subject: [PATCH 070/100] Enhancement: option to show user for Tautulli and Emby/Jellyfin widgets (#3287) --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/emby.md | 1 + docs/widgets/services/plex-tautulli.md | 1 + src/utils/config/service-helpers.js | 11 +++++++++++ src/widgets/emby/component.jsx | 11 +++++++++-- src/widgets/tautulli/component.jsx | 25 +++++++++++++++++-------- 5 files changed, 39 insertions(+), 10 deletions(-) diff --git a/docs/widgets/services/emby.md b/docs/widgets/services/emby.md index f262bfc6..1d70fdf3 100644 --- a/docs/widgets/services/emby.md +++ b/docs/widgets/services/emby.md @@ -16,4 +16,5 @@ widget: key: apikeyapikeyapikeyapikeyapikey enableBlocks: true # optional, defaults to false enableNowPlaying: true # optional, defaults to true + enableUser: true # optional, defaults to false ``` diff --git a/docs/widgets/services/plex-tautulli.md b/docs/widgets/services/plex-tautulli.md index b88f6eeb..cce45fc3 100644 --- a/docs/widgets/services/plex-tautulli.md +++ b/docs/widgets/services/plex-tautulli.md @@ -14,4 +14,5 @@ widget: type: tautulli url: http://tautulli.host.or.ip key: apikeyapikeyapikeyapikeyapikey + enableUser: true # optional, defaults to false ``` diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index d6552253..7fb81088 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -393,6 +393,9 @@ export function cleanServiceGroups(groups) { enableBlocks, enableNowPlaying, + // emby, jellyfin, tautulli + enableUser, + // glances, pihole version, @@ -517,6 +520,14 @@ export function cleanServiceGroups(groups) { if (["emby", "jellyfin"].includes(type)) { if (enableBlocks !== undefined) cleanedService.widget.enableBlocks = JSON.parse(enableBlocks); if (enableNowPlaying !== undefined) cleanedService.widget.enableNowPlaying = JSON.parse(enableNowPlaying); + if (enableUser !== undefined) { + cleanedService.widget.enableUser = !!JSON.parse(enableUser); + } + } + if (["tautulli"].includes(type)) { + if (enableUser !== undefined) { + cleanedService.widget.enableUser = !!JSON.parse(enableUser); + } } if (["sonarr", "radarr"].includes(type)) { if (enableQueue !== undefined) cleanedService.widget.enableQueue = JSON.parse(enableQueue); diff --git a/src/widgets/emby/component.jsx b/src/widgets/emby/component.jsx index 89fd44c3..f11a689d 100644 --- a/src/widgets/emby/component.jsx +++ b/src/widgets/emby/component.jsx @@ -27,10 +27,11 @@ function ticksToString(ticks) { return parts.map((part) => part.toString().padStart(2, "0")).join(":"); } -function SingleSessionEntry({ playCommand, session }) { +function SingleSessionEntry({ playCommand, session, enableUser }) { const { NowPlayingItem: { Name, SeriesName }, PlayState: { PositionTicks, IsPaused, IsMuted }, + UserName, } = session; const RunTimeTicks = @@ -49,6 +50,7 @@ function SingleSessionEntry({ playCommand, session }) {
    {Name} {SeriesName && ` - ${SeriesName}`} + {enableUser && ` (${UserName})`}
    @@ -97,10 +99,11 @@ function SingleSessionEntry({ playCommand, session }) { ); } -function SessionEntry({ playCommand, session }) { +function SessionEntry({ playCommand, session, enableUser }) { const { NowPlayingItem: { Name, SeriesName }, PlayState: { PositionTicks, IsPaused, IsMuted }, + UserName, } = session; const RunTimeTicks = @@ -142,6 +145,7 @@ function SessionEntry({ playCommand, session }) {
    {Name} {SeriesName && ` - ${SeriesName}`} + {enableUser && ` (${UserName})`}
    {IsMuted && }
    @@ -215,6 +219,7 @@ export default function Component({ service }) { const enableBlocks = service.widget?.enableBlocks; const enableNowPlaying = service.widget?.enableNowPlaying ?? true; + const enableUser = !!service.widget?.enableUser; if (!sessionsData || !countData) { return ( @@ -272,6 +277,7 @@ export default function Component({ service }) { handlePlayCommand(currentSession, command)} session={session} + enableUser={enableUser} />
    @@ -288,6 +294,7 @@ export default function Component({ service }) { key={session.Id} playCommand={(currentSession, command) => handlePlayCommand(currentSession, command)} session={session} + enableUser={enableUser} /> ))}
  • diff --git a/src/widgets/tautulli/component.jsx b/src/widgets/tautulli/component.jsx index e1a4df00..d224391b 100644 --- a/src/widgets/tautulli/component.jsx +++ b/src/widgets/tautulli/component.jsx @@ -25,14 +25,18 @@ function millisecondsToString(milliseconds) { return parts.map((part) => part.toString().padStart(2, "0")).join(":"); } -function SingleSessionEntry({ session }) { - const { full_title, duration, view_offset, progress_percent, state, video_decision, audio_decision } = session; +function SingleSessionEntry({ session, enableUser }) { + const { full_title, duration, view_offset, progress_percent, state, video_decision, audio_decision, username } = + session; return ( <>
    -
    {full_title}
    +
    + {full_title} + {enableUser && ` (${username})`} +
    {video_decision === "direct play" && audio_decision === "direct play" && ( @@ -74,8 +78,8 @@ function SingleSessionEntry({ session }) { ); } -function SessionEntry({ session }) { - const { full_title, view_offset, progress_percent, state, video_decision, audio_decision } = session; +function SessionEntry({ session, enableUser }) { + const { full_title, view_offset, progress_percent, state, video_decision, audio_decision, username } = session; return (
    @@ -94,7 +98,10 @@ function SessionEntry({ session }) { )}
    -
    {full_title}
    +
    + {full_title} + {enableUser && ` (${username})`} +
    {video_decision === "direct play" && audio_decision === "direct play" && ( @@ -162,11 +169,13 @@ export default function Component({ service }) { ); } + const enableUser = !!service.widget?.enableUser; + if (playing.length === 1) { const session = playing[0]; return (
    - +
    ); } @@ -174,7 +183,7 @@ export default function Component({ service }) { return (
    {playing.map((session) => ( - + ))}
    ); From 2c68f1e7eee3c017add19d1b9279f91bd6654b9a Mon Sep 17 00:00:00 2001 From: Ben Phelps Date: Mon, 15 Apr 2024 15:59:30 +0300 Subject: [PATCH 071/100] place carbon ads in docs (#3296) * place carbon ads in docs * fix lint * keep 4 space tabs --- docs/overrides/main.html | 9 +++++++++ docs/stylesheets/extra.css | 8 ++++++++ mkdocs.yml | 1 + 3 files changed, 18 insertions(+) create mode 100644 docs/overrides/main.html diff --git a/docs/overrides/main.html b/docs/overrides/main.html new file mode 100644 index 00000000..bf62d43a --- /dev/null +++ b/docs/overrides/main.html @@ -0,0 +1,9 @@ +{% extends "base.html" %} + +{% block content %} + {% include "partials/content.html" %} +
    +
    + +
    +{% endblock %} diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index e6bc9bf0..8ff306a3 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -22,3 +22,11 @@ #glimeRoot * { font-family: var(--md-text-font) !important; } + +#carbon-responsive { + --carbon-padding: 1em; + --carbon-max-char: 20ch; + --carbon-bg-primary: var(--md-default-bg-color) !important; + --carbon-bg-secondary: var(--md-default-fg-color--lightest) !important; + --carbon-text-color: var(--md-typeset-color) !important; +} diff --git a/mkdocs.yml b/mkdocs.yml index e58cb1e4..561e0555 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -166,6 +166,7 @@ nav: theme: name: material + custom_dir: docs/overrides language: en palette: - media: "(prefers-color-scheme)" From 60098d3909408a65a32dd5cc6d4fca63d42b94b5 Mon Sep 17 00:00:00 2001 From: Ben Phelps Date: Mon, 15 Apr 2024 22:20:39 +0300 Subject: [PATCH 072/100] Docs: move Carbon ads to sidebar (#3302) --- docs/overrides/main.html | 50 +++++++++++++++++++++++++++++++++----- docs/stylesheets/extra.css | 4 +++ mkdocs.yml | 4 ++- 3 files changed, 51 insertions(+), 7 deletions(-) diff --git a/docs/overrides/main.html b/docs/overrides/main.html index bf62d43a..e1174193 100644 --- a/docs/overrides/main.html +++ b/docs/overrides/main.html @@ -1,9 +1,47 @@ {% extends "base.html" %} -{% block content %} - {% include "partials/content.html" %} -
    -
    - -
    +{% block site_nav %} + + {% if nav %} + {% if page.meta and page.meta.hide %} + {% set hidden = "hidden" if "navigation" in page.meta.hide %} + {% endif %} + + {% endif %} + + + {% if "toc.integrate" not in features %} + {% if page.meta and page.meta.hide %} + {% set hidden = "hidden" if "toc" in page.meta.hide %} + {% endif %} + + {% endif %} {% endblock %} diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index 8ff306a3..56ed77c8 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -23,6 +23,10 @@ font-family: var(--md-text-font) !important; } +#carbonads { + margin-top: 10px; +} + #carbon-responsive { --carbon-padding: 1em; --carbon-max-char: 20ch; diff --git a/mkdocs.yml b/mkdocs.yml index 561e0555..6c666892 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -90,6 +90,7 @@ nav: - widgets/services/mylar.md - widgets/services/navidrome.md - widgets/services/netdata.md + - widgets/services/netalertx.md - widgets/services/nextcloud.md - widgets/services/nextdns.md - widgets/services/nginx-proxy-manager.md @@ -100,12 +101,12 @@ nav: - widgets/services/opendtu.md - widgets/services/openmediavault.md - widgets/services/opnsense.md + - widgets/services/openwrt.md - widgets/services/overseerr.md - widgets/services/paperlessngx.md - widgets/services/peanut.md - widgets/services/pfsense.md - widgets/services/photoprism.md - - widgets/services/pialert.md - widgets/services/pihole.md - widgets/services/plantit.md - widgets/services/plex-tautulli.md @@ -130,6 +131,7 @@ nav: - widgets/services/stash.md - widgets/services/syncthing-relay-server.md - widgets/services/tailscale.md + - widgets/services/tandoor.md - widgets/services/tdarr.md - widgets/services/traefik.md - widgets/services/transmission.md From 034f6d29d683ef023968ca70eaf8bf6f4ee530d0 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 15 Apr 2024 12:53:15 -0700 Subject: [PATCH 073/100] Docs: show carbon ads on more pages too --- docs/overrides/main.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/overrides/main.html b/docs/overrides/main.html index e1174193..0a5f2bc5 100644 --- a/docs/overrides/main.html +++ b/docs/overrides/main.html @@ -15,7 +15,7 @@
    {% include "partials/nav.html" %} - {% if 'widgets/' not in page.url %} + {% if 'widgets/' not in page.url and 'more/' not in page.url %} {% endif %}
    @@ -34,10 +34,10 @@ data-md-type="toc" {{ hidden }} > -
    +
    {% include "partials/toc.html" %} - {% if 'widgets/' in page.url %} + {% if 'widgets/' in page.url or 'more/' in page.url %} {% endif %}
    From 303a62369f1b48d3380b4ef11b3727cd9264898c Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 16 Apr 2024 15:50:32 -0700 Subject: [PATCH 074/100] Fix: pihole `ads_percentage_today` sometimes returned as string (#3313) --- src/widgets/pihole/component.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/widgets/pihole/component.jsx b/src/widgets/pihole/component.jsx index 4d95b4ac..7aa706e4 100644 --- a/src/widgets/pihole/component.jsx +++ b/src/widgets/pihole/component.jsx @@ -32,7 +32,7 @@ export default function Component({ service }) { let blockedValue = `${t("common.number", { value: parseInt(piholeData.ads_blocked_today, 10) })}`; if (!widget.fields.includes("blocked_percent")) { - blockedValue += ` (${t("common.percent", { value: parseFloat(piholeData.ads_percentage_today.toPrecision(3)) })})`; + blockedValue += ` (${t("common.percent", { value: parseFloat(piholeData.ads_percentage_today).toPrecision(3) })})`; } return ( @@ -41,7 +41,7 @@ export default function Component({ service }) { Date: Wed, 17 Apr 2024 01:42:55 -0700 Subject: [PATCH 075/100] New Crowdin translations by GitHub Action (#3270) Co-authored-by: Crowdin Bot --- public/locales/ca/common.json | 562 +++++++++++++++++----------------- public/locales/de/common.json | 2 +- public/locales/it/common.json | 48 +-- public/locales/sl/common.json | 8 +- public/locales/sv/common.json | 4 +- 5 files changed, 312 insertions(+), 312 deletions(-) diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index 382f5237..a431f9a4 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -14,7 +14,7 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", - "months": "mo", + "months": "mes", "days": "d", "hours": "h", "minutes": "m", @@ -46,8 +46,8 @@ "used": "Utilitzat", "load": "Càrrega", "temp": "TEMP", - "max": "Max", - "uptime": "UP" + "max": "Màx.", + "uptime": "ACTIU" }, "unifi": { "users": "Usuaris", @@ -61,65 +61,65 @@ "wlan_devices": "Dispositius WLAN", "lan_users": "Usuaris LAN", "wlan_users": "Usuaris WLAN", - "up": "UP", + "up": "ACTIU", "down": "INACTIU", "wait": "Si us plau, espereu", - "empty_data": "Subsystem status unknown" + "empty_data": "Estat del subsistema desconegut" }, "docker": { "rx": "Rebut", "tx": "Transmès", "mem": "MEM", "cpu": "CPU", - "running": "Running", + "running": "En execució", "offline": "Fora de línia", "error": "Error", "unknown": "Desconegut", - "healthy": "Healthy", - "starting": "Starting", - "unhealthy": "Unhealthy", - "not_found": "Not Found", - "exited": "Exited", - "partial": "Partial" + "healthy": "Saludable", + "starting": "Iniciant", + "unhealthy": "No saludable", + "not_found": "No trobat", + "exited": "Tancat", + "partial": "Parcial" }, "ping": { "error": "Error", - "ping": "Ping", - "down": "Down", - "up": "Up", - "not_available": "Not Available" + "ping": "Latència", + "down": "Inactiu", + "up": "Actiu", + "not_available": "No Disponible" }, "siteMonitor": { - "http_status": "HTTP status", + "http_status": "Estat HTTP", "error": "Error", - "response": "Response", - "down": "Down", - "up": "Up", - "not_available": "Not Available" + "response": "Resposta", + "down": "Inactiu", + "up": "Actiu", + "not_available": "No Disponible" }, "emby": { "playing": "Reproduint", "transcoding": "Transcodificant", "bitrate": "Taxa de bits", "no_active": "Sense reproduccions actives", - "movies": "Movies", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "movies": "Pel·lícules", + "series": "Sèries", + "episodes": "Episodis", + "songs": "Cançons" }, "esphome": { "offline": "Fora de línia", "offline_alt": "Fora de línia", - "online": "Online", + "online": "En línia", "total": "Total", "unknown": "Desconegut" }, "evcc": { - "pv_power": "Production", - "battery_soc": "Battery", - "grid_power": "Grid", - "home_power": "Consumption", - "charge_power": "Charger", + "pv_power": "Producció", + "battery_soc": "Bateria", + "grid_power": "Xarxa", + "home_power": "Consum", + "charge_power": "Carregador", "watt_hour": "Wh" }, "flood": { @@ -129,55 +129,55 @@ "seed": "Llavor" }, "freshrss": { - "subscriptions": "Subscriptions", - "unread": "Unread" + "subscriptions": "Subcripcions", + "unread": "Sense llegir" }, "fritzbox": { "connectionStatus": "Estat", - "connectionStatusUnconfigured": "Unconfigured", - "connectionStatusConnecting": "Connecting", - "connectionStatusAuthenticating": "Authenticating", - "connectionStatusPendingDisconnect": "Pending Disconnect", - "connectionStatusDisconnecting": "Disconnecting", - "connectionStatusDisconnected": "Disconnected", - "connectionStatusConnected": "Connected", + "connectionStatusUnconfigured": "Sense configurar", + "connectionStatusConnecting": "Connectant", + "connectionStatusAuthenticating": "Autenticant", + "connectionStatusPendingDisconnect": "Desconnexió pendent", + "connectionStatusDisconnecting": "Desconnectant", + "connectionStatusDisconnected": "Desconnectat", + "connectionStatusConnected": "Connectat", "uptime": "Temps actiu", - "maxDown": "Max. Down", - "maxUp": "Max. Up", - "down": "Down", - "up": "Up", - "received": "Received", - "sent": "Sent", - "externalIPAddress": "Ext. IP" + "maxDown": "Màx. Descàrrega", + "maxUp": "Màx. Càrrega", + "down": "Inactiu", + "up": "Actiu", + "received": "Rebuts", + "sent": "Enviats", + "externalIPAddress": "IP ext." }, "caddy": { "upstreams": "Upstreams", - "requests": "Current requests", - "requests_failed": "Failed requests" + "requests": "Peticions actuals", + "requests_failed": "Peticions fallides" }, "changedetectionio": { "totalObserved": "Total d'observats", "diffsDetected": "Diferències detectades" }, "channelsdvrserver": { - "shows": "Shows", - "recordings": "Recordings", - "scheduled": "Scheduled", - "passes": "Passes" + "shows": "Sèries", + "recordings": "Gravacions", + "scheduled": "Programat", + "passes": "Aprovat" }, "tautulli": { "playing": "Reproduint", "transcoding": "Transcodificant", "bitrate": "Taxa de bits", "no_active": "Sense reproduccions actives", - "plex_connection_error": "Check Plex Connection" + "plex_connection_error": "Comprova la connexió de Plex" }, "omada": { - "connectedAp": "Connected APs", - "activeUser": "Active devices", - "alerts": "Alerts", - "connectedGateway": "Connected gateways", - "connectedSwitches": "Connected switches" + "connectedAp": "AP connectats", + "activeUser": "Dispositius actius", + "alerts": "Alertes", + "connectedGateway": "Pasarel·les connectades", + "connectedSwitches": "Conmutadors connectats" }, "nzbget": { "rate": "Taxa", @@ -187,7 +187,7 @@ "plex": { "streams": "Transmissions actives", "albums": "Àlbums", - "movies": "Movies", + "movies": "Pel·lícules", "tv": "Sèries" }, "sabnzbd": { @@ -213,12 +213,12 @@ "seed": "Llavor" }, "qnap": { - "cpuUsage": "CPU Usage", - "memUsage": "MEM Usage", - "systemTempC": "System Temp", - "poolUsage": "Pool Usage", - "volumeUsage": "Volume Usage", - "invalid": "Invalid" + "cpuUsage": "Ús de CPU", + "memUsage": "Ús de Memòria", + "systemTempC": "Temp. Sistema", + "poolUsage": "Ús de les Reserves", + "volumeUsage": "Ús dels Volums", + "invalid": "No vàlid" }, "deluge": { "download": "Descarregar", @@ -235,7 +235,7 @@ "sonarr": { "wanted": "Volgut", "queued": "En cua", - "series": "Series", + "series": "Sèries", "queue": "Cua", "unknown": "Desconegut" }, @@ -243,14 +243,14 @@ "wanted": "Volgut", "missing": "Faltant", "queued": "En cua", - "movies": "Movies", + "movies": "Pel·lícules", "queue": "Cua", "unknown": "Desconegut" }, "lidarr": { "wanted": "Volgut", "queued": "En cua", - "artists": "Artists" + "artists": "Artistes" }, "readarr": { "wanted": "Volgut", @@ -279,15 +279,15 @@ }, "netalertx": { "total": "Total", - "connected": "Connected", - "new_devices": "New Devices", - "down_alerts": "Down Alerts" + "connected": "Connectat", + "new_devices": "Nous dispositius", + "down_alerts": "Alertes de caigudes" }, "pihole": { "queries": "Consultes", "blocked": "Bloquejat", - "blocked_percent": "Blocked %", - "gravity": "Gravity" + "blocked_percent": "Bloquejat %", + "gravity": "Gravetat" }, "adguard": { "queries": "Consultes", @@ -298,37 +298,37 @@ "speedtest": { "upload": "Pujada", "download": "Descarregar", - "ping": "Ping" + "ping": "Latència" }, "portainer": { - "running": "Running", + "running": "En execució", "stopped": "Aturat", "total": "Total" }, "tailscale": { - "address": "Address", - "expires": "Expires", - "never": "Never", - "last_seen": "Last Seen", - "now": "Now", - "years": "{{number}}y", - "weeks": "{{number}}w", + "address": "Adreça", + "expires": "Caduca", + "never": "Mai", + "last_seen": "Vist per darrer cop", + "now": "Ara", + "years": "{{number}}a", + "weeks": "{{number}}set", "days": "{{number}}d", "hours": "{{number}}h", "minutes": "{{number}}m", "seconds": "{{number}}s", - "ago": "{{value}} Ago" + "ago": "Fa {{value}}" }, "tdarr": { "queue": "Cua", - "processed": "Processed", - "errored": "Errored", - "saved": "Saved" + "processed": "Processat", + "errored": "Error", + "saved": "Desat" }, "traefik": { "routers": "Encaminadors", "services": "Serveis", - "middleware": "Middleware" + "middleware": "Intermediari" }, "navidrome": { "nothing_streaming": "Sense reproduccions actives", @@ -360,7 +360,7 @@ }, "jackett": { "configured": "Configurat", - "errored": "Errored" + "errored": "Error" }, "strelaysrv": { "numActiveSessions": "Sessions", @@ -376,18 +376,18 @@ "medusa": { "wanted": "Volgut", "queued": "En cua", - "series": "Series" + "series": "Sèries" }, "minecraft": { - "players": "Players", - "version": "Version", + "players": "Jugadors", + "version": "Versió", "status": "Estat", - "up": "Online", + "up": "En línia", "down": "Fora de línia" }, "miniflux": { - "read": "Read", - "unread": "Unread" + "read": "Llegir", + "unread": "Sense llegir" }, "authentik": { "users": "Usuaris", @@ -406,28 +406,28 @@ "wait": "Si us plau, espereu", "temp": "TEMP", "_temp": "Temp", - "warn": "Warn", - "uptime": "UP", + "warn": "Avís", + "uptime": "ACTIU", "total": "Total", "free": "Lliure", "used": "Utilitzat", "days": "d", "hours": "h", - "crit": "Crit", - "read": "Read", - "write": "Write", + "crit": "Crític", + "read": "Llegir", + "write": "Escriure", "gpu": "GPU", "mem": "Mem", - "swap": "Swap" + "swap": "Intercanvi" }, "quicklaunch": { "bookmark": "Marcador", "service": "Servei", - "search": "Search", - "custom": "Custom", - "visit": "Visit", + "search": "Cercar", + "custom": "Personalitzat", + "visit": "Visitar", "url": "URL", - "searchsuggestion": "Suggestion" + "searchsuggestion": "Suggeriment" }, "wmo": { "0-day": "Assolellat", @@ -492,21 +492,21 @@ "updates": "Actualitzacions", "update_available": "Actualització disponible", "up_to_date": "Actualitzat", - "child_bridges": "Child Bridges", + "child_bridges": "Ponts fills", "child_bridges_status": "{{ok}}/{{total}}", - "up": "Up", + "up": "Actiu", "pending": "Pendent", - "down": "Down" + "down": "Inactiu" }, "healthchecks": { - "new": "New", - "up": "Up", - "grace": "In Grace Period", - "down": "Down", - "paused": "Paused", + "new": "Nou", + "up": "Actiu", + "grace": "En Període de gràcia", + "down": "Inactiu", + "paused": "En pausa", "status": "Estat", - "last_ping": "Last Ping", - "never": "No pings yet" + "last_ping": "Últim ping", + "never": "Sense pings" }, "watchtower": { "containers_scanned": "Escanejat", @@ -528,7 +528,7 @@ "truenas": { "load": "Càrrega del sistema", "uptime": "Temps actiu", - "alerts": "Alerts" + "alerts": "Alertes" }, "pyload": { "speed": "Velocitat", @@ -544,12 +544,12 @@ "hdhomerun": { "channels": "Canals", "hd": "HD", - "tunerCount": "Tuners", - "channelNumber": "Channel", - "channelNetwork": "Network", - "signalStrength": "Strength", - "signalQuality": "Quality", - "symbolQuality": "Quality", + "tunerCount": "Sintonitzadors", + "channelNumber": "Canal", + "channelNetwork": "Xarxa", + "signalStrength": "Intensitat", + "signalQuality": "Qualitat", + "symbolQuality": "Qualitat", "networkRate": "Taxa de bits", "clientIP": "Client" }, @@ -563,94 +563,94 @@ "total": "Total" }, "peanut": { - "battery_charge": "Battery Charge", - "ups_load": "UPS Load", - "ups_status": "UPS Status", - "online": "Online", - "on_battery": "On Battery", - "low_battery": "Low Battery" + "battery_charge": "Càrrega de la bateria", + "ups_load": "Càrrega del SAI", + "ups_status": "Estat del SAI", + "online": "En línia", + "on_battery": "En Bateria", + "low_battery": "Bateria Baixa" }, "nextdns": { "wait": "Espereu si us plau", - "no_devices": "No Device Data Received" + "no_devices": "No s'han rebut dades del Dispositiu" }, "mikrotik": { - "cpuLoad": "CPU Load", - "memoryUsed": "Memory Used", + "cpuLoad": "Càrrega de CPU", + "memoryUsed": "Memoria en ús", "uptime": "Temps actiu", - "numberOfLeases": "Leases" + "numberOfLeases": "IPs assignades" }, "xteve": { - "streams_all": "All Streams", + "streams_all": "Tots els fluxos", "streams_active": "Transmissions actives", - "streams_xepg": "XEPG Channels" + "streams_xepg": "Canals XEPG" }, "opendtu": { - "yieldDay": "Today", - "absolutePower": "Power", - "relativePower": "Power %", - "limit": "Limit" + "yieldDay": "Avui", + "absolutePower": "Potència", + "relativePower": "Potència %", + "limit": "Límit" }, "opnsense": { - "cpu": "CPU Load", - "memory": "Active Memory", - "wanUpload": "WAN Upload", - "wanDownload": "WAN Download" + "cpu": "Càrrega de CPU", + "memory": "Memòria activa", + "wanUpload": "Pujada WAN", + "wanDownload": "Baixada WAN" }, "moonraker": { - "printer_state": "Printer State", - "print_status": "Print Status", + "printer_state": "Estat de l'impressora", + "print_status": "Estat de l'impressió", "print_progress": "Progress", - "layers": "Layers" + "layers": "Capes" }, "octoprint": { "printer_state": "Estat", - "temp_tool": "Tool temp", - "temp_bed": "Bed temp", - "job_completion": "Completion" + "temp_tool": "Temperatura capçal", + "temp_bed": "Temperatura llit", + "job_completion": "Finalització" }, "cloudflared": { - "origin_ip": "Origin IP", + "origin_ip": "IP Origen", "status": "Estat" }, "pfsense": { - "load": "Load Avg", - "memory": "Mem Usage", - "wanStatus": "WAN Status", - "up": "Up", - "down": "Down", + "load": "Promig Càrrega", + "memory": "Ús Memòria", + "wanStatus": "Estat WAN", + "up": "Actiu", + "down": "Inactiu", "temp": "Temp", - "disk": "Disk Usage", + "disk": "Ús Disc", "wanIP": "WAN IP" }, "proxmoxbackupserver": { "datastore_usage": "Datastore", - "failed_tasks_24h": "Failed Tasks 24h", + "failed_tasks_24h": "Tasques fallides (24h)", "cpu_usage": "CPU", - "memory_usage": "Memory" + "memory_usage": "Memòria" }, "immich": { "users": "Usuaris", - "photos": "Photos", + "photos": "Fotos", "videos": "Vídeos", - "storage": "Storage" + "storage": "Emmagatzematge" }, "uptimekuma": { - "up": "Sites Up", - "down": "Sites Down", + "up": "Actius", + "down": "Caiguts", "uptime": "Temps actiu", - "incident": "Incident", + "incident": "Incidència", "m": "m" }, "atsumeru": { - "series": "Series", - "archives": "Archives", - "chapters": "Chapters", + "series": "Sèries", + "archives": "Arxius", + "chapters": "Capítols", "categories": "Categories" }, "komga": { - "libraries": "Libraries", - "series": "Series", + "libraries": "Biblioteques", + "series": "Sèries", "books": "Llibres" }, "diskstation": { @@ -659,77 +659,77 @@ "volumeAvailable": "Disponible" }, "mylar": { - "series": "Series", - "issues": "Issues", + "series": "Sèries", + "issues": "Problemes", "wanted": "Volgut" }, "photoprism": { "albums": "Àlbums", - "photos": "Photos", + "photos": "Fotos", "videos": "Vídeos", - "people": "People" + "people": "Gent" }, "fileflows": { "queue": "Cua", "processing": "Processant", - "processed": "Processed", - "time": "Time" + "processed": "Processat", + "time": "Temps" }, "grafana": { - "dashboards": "Dashboards", - "datasources": "Data Sources", - "totalalerts": "Total Alerts", - "alertstriggered": "Alerts Triggered" + "dashboards": "Taulells", + "datasources": "Origen de dades", + "totalalerts": "Alertes Totals", + "alertstriggered": "Alertes disparades" }, "nextcloud": { - "cpuload": "Cpu Load", - "memoryusage": "Memory Usage", - "freespace": "Free Space", - "activeusers": "Active Users", - "numfiles": "Files", - "numshares": "Shared Items" + "cpuload": "Càrrega de CPU", + "memoryusage": "Ús Memòria", + "freespace": "Espai lliure", + "activeusers": "Usuaris actius", + "numfiles": "Fitxers", + "numshares": "Elements compartits" }, "kopia": { "status": "Estat", - "size": "Size", - "lastrun": "Last Run", - "nextrun": "Next Run", + "size": "Mida", + "lastrun": "Darrera execució", + "nextrun": "Següent execució", "failed": "Error" }, "unmanic": { - "active_workers": "Active Workers", - "total_workers": "Total Workers", - "records_total": "Queue Length" + "active_workers": "Treballadors actius", + "total_workers": "Treballadors Totals", + "records_total": "Llargada de la Cua" }, "pterodactyl": { - "servers": "Servers", + "servers": "Servidors", "nodes": "Nodes" }, "prometheus": { - "targets_up": "Targets Up", - "targets_down": "Targets Down", - "targets_total": "Total Targets" + "targets_up": "Objectius actius", + "targets_down": "Objectius caiguts", + "targets_total": "Objectius Totals" }, "gatus": { - "up": "Sites Up", - "down": "Sites Down", + "up": "Actius", + "down": "Caiguts", "uptime": "Temps actiu" }, "ghostfolio": { - "gross_percent_today": "Today", - "gross_percent_1y": "One year", - "gross_percent_max": "All time" + "gross_percent_today": "Avui", + "gross_percent_1y": "Un any", + "gross_percent_max": "Tot" }, "audiobookshelf": { "podcasts": "Podcasts", "books": "Llibres", - "podcastsDuration": "Duration", - "booksDuration": "Duration" + "podcastsDuration": "Durada", + "booksDuration": "Durada" }, "homeassistant": { - "people_home": "People Home", - "lights_on": "Lights On", - "switches_on": "Switches On" + "people_home": "Gent a casa", + "lights_on": "Llums enceses", + "switches_on": "Endolls activats" }, "whatsupdocker": { "monitoring": "Supervisió", @@ -737,144 +737,144 @@ }, "calibreweb": { "books": "Llibres", - "authors": "Authors", + "authors": "Autors", "categories": "Categories", - "series": "Series" + "series": "Sèries" }, "jdownloader": { "downloadCount": "Cua", "downloadBytesRemaining": "Restant", - "downloadTotalBytes": "Size", + "downloadTotalBytes": "Mida", "downloadSpeed": "Velocitat" }, "kavita": { - "seriesCount": "Series", - "totalFiles": "Files" + "seriesCount": "Sèries", + "totalFiles": "Fitxers" }, "azuredevops": { - "result": "Result", + "result": "Resultat", "status": "Estat", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", + "buildId": "Id de compilació", + "succeeded": "Amb èxit", + "notStarted": "No Iniciat", "failed": "Error", - "canceled": "Canceled", - "inProgress": "In Progress", - "totalPrs": "Total PRs", - "myPrs": "My PRs", + "canceled": "Cancel·lat", + "inProgress": "En curs", + "totalPrs": "RP Totals", + "myPrs": "Els meus RP", "approved": "Aprovat" }, "gamedig": { "status": "Estat", - "online": "Online", + "online": "En línia", "offline": "Fora de línia", - "name": "Name", - "map": "Map", - "currentPlayers": "Current players", - "players": "Players", - "maxPlayers": "Max players", + "name": "Nom", + "map": "Mapa", + "currentPlayers": "Jugadors actuals", + "players": "Jugadors", + "maxPlayers": "Màxim de jugadors", "bots": "Bots", - "ping": "Ping" + "ping": "Latència" }, "urbackup": { "ok": "Ok", "errored": "Errors", - "noRecent": "Out of Date", - "totalUsed": "Used Storage" + "noRecent": "Obsolet", + "totalUsed": "Emmagatzematge utilitzat" }, "mealie": { - "recipes": "Recipes", + "recipes": "Receptes", "users": "Usuaris", "categories": "Categories", - "tags": "Tags" + "tags": "Etiquetes" }, "openmediavault": { - "downloading": "Downloading", + "downloading": "Descarregant", "total": "Total", - "running": "Running", + "running": "En execució", "stopped": "Aturat", "passed": "Aprobat", "failed": "Error" }, "openwrt": { "uptime": "Temps actiu", - "cpuLoad": "CPU Load Avg (5m)", - "up": "Up", - "down": "Down", - "bytesTx": "Transmitted", - "bytesRx": "Received" + "cpuLoad": "Càrrega promig de CPU (5m)", + "up": "Actiu", + "down": "Inactiu", + "bytesTx": "Enviat", + "bytesRx": "Rebuts" }, "uptimerobot": { "status": "Estat", "uptime": "Temps actiu", - "lastDown": "Last Downtime", - "downDuration": "Downtime Duration", - "sitesUp": "Sites Up", - "sitesDown": "Sites Down", - "paused": "Paused", - "notyetchecked": "Not Yet Checked", - "up": "Up", - "seemsdown": "Seems Down", - "down": "Down", + "lastDown": "Darrera Inactivitat", + "downDuration": "Duració d'Inactivitat", + "sitesUp": "Actius", + "sitesDown": "Caiguts", + "paused": "En pausa", + "notyetchecked": "Sense verificar", + "up": "Actiu", + "seemsdown": "Sembla caigut", + "down": "Inactiu", "unknown": "Desconegut" }, "calendar": { - "inCinemas": "In cinemas", - "physicalRelease": "Physical release", - "digitalRelease": "Digital release", - "noEventsToday": "No events for today!", - "noEventsFound": "No events found" + "inCinemas": "En cines", + "physicalRelease": "Estrena física", + "digitalRelease": "Estrena digital", + "noEventsToday": "Cap esdeveniment per avui!", + "noEventsFound": "No s'han trobat esdeveniments" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "Plataformes", + "totalRoms": "ROMs totals" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "Avisos", + "criticals": "Crítics" }, "plantit": { - "events": "Events", - "plants": "Plants", - "photos": "Photos", - "species": "Species" + "events": "Esdeveniments", + "plants": "Plantes", + "photos": "Fotos", + "species": "Espècies" }, "gitea": { - "notifications": "Notifications", - "issues": "Issues", - "pulls": "Pull Requests" + "notifications": "Notificacions", + "issues": "Problemes", + "pulls": "Sol·licitud de Canvis" }, "stash": { - "scenes": "Scenes", - "scenesPlayed": "Scenes Played", - "playCount": "Total Plays", - "playDuration": "Time Watched", - "sceneSize": "Scenes Size", - "sceneDuration": "Scenes Duration", - "images": "Images", - "imageSize": "Images Size", - "galleries": "Galleries", - "performers": "Performers", - "studios": "Studios", - "movies": "Movies", - "tags": "Tags", + "scenes": "Escenes", + "scenesPlayed": "Escenes reproduïdes", + "playCount": "Total reproduccions", + "playDuration": "Temps visionat", + "sceneSize": "Tamany Escena", + "sceneDuration": "Duració Escenes", + "images": "Imatges", + "imageSize": "Mida Imatges", + "galleries": "Biblioteques", + "performers": "Intèrprets", + "studios": "Estudis", + "movies": "Pel·lícules", + "tags": "Etiquetes", "oCount": "O Count" }, "tandoor": { "users": "Usuaris", - "recipes": "Recipes", - "keywords": "Keywords" + "recipes": "Receptes", + "keywords": "Paraules claus" }, "homebox": { - "items": "Items", - "totalWithWarranty": "With Warranty", - "locations": "Locations", - "labels": "Labels", + "items": "Elements", + "totalWithWarranty": "Amb Garantia", + "locations": "Ubicacions", + "labels": "Etiquetes", "users": "Usuaris", - "totalValue": "Total Value" + "totalValue": "Valor total" }, "crowdsec": { - "alerts": "Alerts", - "bans": "Bans" + "alerts": "Alertes", + "bans": "Prohibicions" } } diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 82212c69..78f28c0a 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -875,6 +875,6 @@ }, "crowdsec": { "alerts": "Warnungen", - "bans": "Bans" + "bans": "Banns" } } diff --git a/public/locales/it/common.json b/public/locales/it/common.json index a795bc57..8f583e66 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -15,8 +15,8 @@ "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", "months": "mo", - "days": "d", - "hours": "h", + "days": "g", + "hours": "o", "minutes": "m", "seconds": "s" }, @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "In attesa di disconnessione", "connectionStatusDisconnecting": "Disconnessione in corso", "connectionStatusDisconnected": "Disconnesso", - "connectionStatusConnected": "Connected", + "connectionStatusConnected": "Connesso", "uptime": "Tempo di attività", "maxDown": "Max. Down", "maxUp": "Max. Up", @@ -279,9 +279,9 @@ }, "netalertx": { "total": "Totale", - "connected": "Connected", - "new_devices": "New Devices", - "down_alerts": "Down Alerts" + "connected": "Connesso", + "new_devices": "Nuovi Dispositivi", + "down_alerts": "Avvisi di Disservizio" }, "pihole": { "queries": "Richieste", @@ -411,8 +411,8 @@ "total": "Totale", "free": "Libero", "used": "In utilizzo", - "days": "d", - "hours": "h", + "days": "g", + "hours": "o", "crit": "Critico", "read": "Letti", "write": "Scrittura", @@ -427,7 +427,7 @@ "custom": "Personalizzato", "visit": "Visita", "url": "URL", - "searchsuggestion": "Suggestion" + "searchsuggestion": "Suggerimenti" }, "wmo": { "0-day": "Soleggiato", @@ -546,8 +546,8 @@ "hd": "HD", "tunerCount": "Tuners", "channelNumber": "Channel", - "channelNetwork": "Network", - "signalStrength": "Strength", + "channelNetwork": "Rete", + "signalStrength": "Intensità", "signalQuality": "Quality", "symbolQuality": "Quality", "networkRate": "Bitrate", @@ -830,32 +830,32 @@ "totalRoms": "Total ROMs" }, "netdata": { - "warnings": "Warnings", + "warnings": "Avvisi", "criticals": "Criticals" }, "plantit": { "events": "Events", "plants": "Plants", "photos": "Foto", - "species": "Species" + "species": "Specie" }, "gitea": { - "notifications": "Notifications", + "notifications": "Notifiche", "issues": "Problemi", - "pulls": "Pull Requests" + "pulls": "Richieste di Pull" }, "stash": { - "scenes": "Scenes", - "scenesPlayed": "Scenes Played", - "playCount": "Total Plays", - "playDuration": "Time Watched", - "sceneSize": "Scenes Size", - "sceneDuration": "Scenes Duration", - "images": "Images", + "scenes": "Scene", + "scenesPlayed": "Scene Riprodotte", + "playCount": "Totale Riproduzioni", + "playDuration": "Tempo Guardato", + "sceneSize": "Dimensione Delle Scene", + "sceneDuration": "Durata Delle Scene", + "images": "Immagini", "imageSize": "Images Size", "galleries": "Galleries", - "performers": "Performers", - "studios": "Studios", + "performers": "Esecutori", + "studios": "Studi", "movies": "Film", "tags": "Tag", "oCount": "O Count" diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index f732fbe1..83691aab 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Čakanje na prekinitev", "connectionStatusDisconnecting": "Prekinitev", "connectionStatusDisconnected": "Prekinjeno", - "connectionStatusConnected": "Connected", + "connectionStatusConnected": "Povezan", "uptime": "Čas delovanja", "maxDown": "Maks. dol", "maxUp": "Maks. gor", @@ -279,9 +279,9 @@ }, "netalertx": { "total": "Skupaj", - "connected": "Connected", - "new_devices": "New Devices", - "down_alerts": "Down Alerts" + "connected": "Povezan", + "new_devices": "Nova naprave", + "down_alerts": "Alarmi nedelovanja" }, "pihole": { "queries": "Poizvedbe", diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index 9918ab64..7fc24490 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -104,7 +104,7 @@ "no_active": "Inga aktiva strömmar", "movies": "Movies", "series": "Series", - "episodes": "Episodes", + "episodes": "Avsnitt", "songs": "Songs" }, "esphome": { @@ -423,7 +423,7 @@ "quicklaunch": { "bookmark": "Bookmark", "service": "Service", - "search": "Search", + "search": "Sök", "custom": "Custom", "visit": "Visit", "url": "URL", From 068e664f1662f99033eae37cf4d34fb2e71e02c1 Mon Sep 17 00:00:00 2001 From: lavavex <27239435+lavavex@users.noreply.github.com> Date: Wed, 17 Apr 2024 19:00:37 -0500 Subject: [PATCH 076/100] Documentation: correct Medusa link (#3320) --- docs/widgets/services/medusa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/widgets/services/medusa.md b/docs/widgets/services/medusa.md index e500d95f..82ec2b53 100644 --- a/docs/widgets/services/medusa.md +++ b/docs/widgets/services/medusa.md @@ -3,7 +3,7 @@ title: Medusa description: Medusa Widget Configuration --- -Learn more about [Medusa](https://github.com/medusajs/medusa). +Learn more about [Medusa](https://github.com/pymedusa/Medusa). Allowed fields: `["wanted", "queued", "series"]`. From c95837f54eb90ba753821c90aaf6f3008f4c6410 Mon Sep 17 00:00:00 2001 From: David Hirsch Date: Sat, 20 Apr 2024 01:32:14 +0200 Subject: [PATCH 077/100] Enhancement: configurable CPU temp scale (#3332) --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/info/resources.md | 2 ++ src/components/widgets/resources/cputemp.jsx | 11 ++++++++--- src/components/widgets/resources/resources.jsx | 6 ++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/docs/widgets/info/resources.md b/docs/widgets/info/resources.md index b4f85d69..8281cec0 100644 --- a/docs/widgets/info/resources.md +++ b/docs/widgets/info/resources.md @@ -19,6 +19,8 @@ _Note: unfortunately, the package used for getting CPU temp ([systeminformation] memory: true disk: /disk/mount/path cputemp: true + tempmin: 0 # optional, minimum cpu temp + tempmax: 100 # optional, maximum cpu temp uptime: true units: imperial # only used by cpu temp refresh: 3000 # optional, in ms diff --git a/src/components/widgets/resources/cputemp.jsx b/src/components/widgets/resources/cputemp.jsx index 96f98096..ef994c65 100644 --- a/src/components/widgets/resources/cputemp.jsx +++ b/src/components/widgets/resources/cputemp.jsx @@ -9,7 +9,7 @@ function convertToFahrenheit(t) { return (t * 9) / 5 + 32; } -export default function CpuTemp({ expanded, units, refresh = 1500 }) { +export default function CpuTemp({ expanded, units, refresh = 1500, tempmin = 0, tempmax = -1 }) { const { t } = useTranslation(); const { data, error } = useSWR(`/api/widgets/resources?type=cputemp`, { @@ -39,7 +39,12 @@ export default function CpuTemp({ expanded, units, refresh = 1500 }) { } const unit = units === "imperial" ? "fahrenheit" : "celsius"; mainTemp = unit === "celsius" ? mainTemp : convertToFahrenheit(mainTemp); - const maxTemp = unit === "celsius" ? data.cputemp.max : convertToFahrenheit(data.cputemp.max); + + const minTemp = tempmin < mainTemp ? tempmin : mainTemp; + let maxTemp = tempmax; + if (maxTemp < minTemp) { + maxTemp = unit === "celsius" ? data.cputemp.max : convertToFahrenheit(data.cputemp.max); + } return ( ); diff --git a/src/components/widgets/resources/resources.jsx b/src/components/widgets/resources/resources.jsx index e2f2bfb8..634e0ff5 100644 --- a/src/components/widgets/resources/resources.jsx +++ b/src/components/widgets/resources/resources.jsx @@ -8,7 +8,7 @@ import CpuTemp from "./cputemp"; import Uptime from "./uptime"; export default function Resources({ options }) { - const { expanded, units, diskUnits } = options; + const { expanded, units, diskUnits, tempmin, tempmax } = options; let { refresh } = options; if (!refresh) refresh = 1500; refresh = Math.max(refresh, 1000); @@ -23,7 +23,9 @@ export default function Resources({ options }) { )) : options.disk && } - {options.cputemp && } + {options.cputemp && ( + + )} {options.uptime && }
    {options.label && ( From 79e3eb9c90428100f5539c8eaa7f81bbd80b290d Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 21 Apr 2024 07:12:49 -0700 Subject: [PATCH 078/100] Documentation: fix docker stats link --- docs/configs/docker.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configs/docker.md b/docs/configs/docker.md index 4d3026db..bcd0dd61 100644 --- a/docs/configs/docker.md +++ b/docs/configs/docker.md @@ -235,4 +235,4 @@ You can show the docker stats by clicking the status indicator but this can also showStats: true ``` -Also see the settings for [show docker stats](docker.md#show-docker-stats). +Also see the settings for [show docker stats](settings.md#show-docker-stats). From 595049f7fcf792be9a6aba3e0062b4b4cd9c0565 Mon Sep 17 00:00:00 2001 From: Nuno Alexandre <38176824+NuAlex@users.noreply.github.com> Date: Mon, 22 Apr 2024 12:33:35 -0700 Subject: [PATCH 079/100] Documentation: clarify uptime kuma slug (#3345) --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/uptime-kuma.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/widgets/services/uptime-kuma.md b/docs/widgets/services/uptime-kuma.md index 56aa5a57..399a0eee 100644 --- a/docs/widgets/services/uptime-kuma.md +++ b/docs/widgets/services/uptime-kuma.md @@ -5,7 +5,7 @@ description: Uptime Kuma Widget Configuration Learn more about [Uptime Kuma](https://github.com/louislam/uptime-kuma). -As Uptime Kuma does not yet have a full API the widget uses data from a single "status page". As such you will need a status page setup with a group of monitored sites, which is where you get the slug (without the `/status/` portion). +As Uptime Kuma does not yet have a full API the widget uses data from a single "status page". As such you will need a status page setup with a group of monitored sites, which is where you get the slug (the url without the `/status/` portion). E.g. if your status page is URL http://uptimekuma.host/status/statuspageslug, insert `slug: statuspageslug`. Allowed fields: `["up", "down", "uptime", "incident"]`. From f4fc30cd9fe851083910a4076db24523d4a00ff3 Mon Sep 17 00:00:00 2001 From: Liam Dyer Date: Mon, 22 Apr 2024 16:59:23 -0400 Subject: [PATCH 080/100] Documentation: update Authentik suggested permissions (#3349) --- docs/widgets/services/authentik.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/widgets/services/authentik.md b/docs/widgets/services/authentik.md index a92b84ec..8968f4bf 100644 --- a/docs/widgets/services/authentik.md +++ b/docs/widgets/services/authentik.md @@ -12,10 +12,8 @@ Make sure to set Intent to "API Token". The account you made the API token for also needs the following **Assigned global permissions** in Authentik: -- authentik Core - - User -- authentik Events - - Event +- authentik Core -> Can view User (Model: User) +- authentik Events -> Can view Event (Model: Event) Allowed fields: `["users", "loginsLast24H", "failedLoginsLast24H"]`. From 312e97d18b42cad6d764380aea3c9679601edd88 Mon Sep 17 00:00:00 2001 From: Ameer Abdallah Date: Mon, 22 Apr 2024 17:49:19 -0700 Subject: [PATCH 081/100] Enhancement: additional tautulli jellyfin emby configuration options (#3350) --- docs/widgets/services/emby.md | 2 + docs/widgets/services/jellyfin.md | 3 + docs/widgets/services/plex-tautulli.md | 2 + src/utils/config/service-helpers.js | 15 ++-- src/widgets/emby/component.jsx | 96 ++++++++++++++++---------- src/widgets/tautulli/component.jsx | 70 +++++++++++++------ 6 files changed, 121 insertions(+), 67 deletions(-) diff --git a/docs/widgets/services/emby.md b/docs/widgets/services/emby.md index 1d70fdf3..e658d73b 100644 --- a/docs/widgets/services/emby.md +++ b/docs/widgets/services/emby.md @@ -17,4 +17,6 @@ widget: enableBlocks: true # optional, defaults to false enableNowPlaying: true # optional, defaults to true enableUser: true # optional, defaults to false + showEpisodeNumber: true # optional, defaults to false + expandOneStreamToTwoRows: false # optional, defaults to true ``` diff --git a/docs/widgets/services/jellyfin.md b/docs/widgets/services/jellyfin.md index 0428c622..b6724a15 100644 --- a/docs/widgets/services/jellyfin.md +++ b/docs/widgets/services/jellyfin.md @@ -16,4 +16,7 @@ widget: key: apikeyapikeyapikeyapikeyapikey enableBlocks: true # optional, defaults to false enableNowPlaying: true # optional, defaults to true + enableUser: true # optional, defaults to false + showEpisodeNumber: true # optional, defaults to false + expandOneStreamToTwoRows: false # optional, defaults to true ``` diff --git a/docs/widgets/services/plex-tautulli.md b/docs/widgets/services/plex-tautulli.md index cce45fc3..9cacdf05 100644 --- a/docs/widgets/services/plex-tautulli.md +++ b/docs/widgets/services/plex-tautulli.md @@ -15,4 +15,6 @@ widget: url: http://tautulli.host.or.ip key: apikeyapikeyapikeyapikeyapikey enableUser: true # optional, defaults to false + showEpisodeNumber: true # optional, defaults to false + expandOneStreamToTwoRows: false # optional, defaults to true ``` diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index 7fb81088..fc4d57eb 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -395,6 +395,8 @@ export function cleanServiceGroups(groups) { // emby, jellyfin, tautulli enableUser, + expandOneStreamToTwoRows, + showEpisodeNumber, // glances, pihole version, @@ -520,14 +522,13 @@ export function cleanServiceGroups(groups) { if (["emby", "jellyfin"].includes(type)) { if (enableBlocks !== undefined) cleanedService.widget.enableBlocks = JSON.parse(enableBlocks); if (enableNowPlaying !== undefined) cleanedService.widget.enableNowPlaying = JSON.parse(enableNowPlaying); - if (enableUser !== undefined) { - cleanedService.widget.enableUser = !!JSON.parse(enableUser); - } } - if (["tautulli"].includes(type)) { - if (enableUser !== undefined) { - cleanedService.widget.enableUser = !!JSON.parse(enableUser); - } + if (["emby", "jellyfin", "tautulli"].includes(type)) { + if (expandOneStreamToTwoRows !== undefined) + cleanedService.widget.expandOneStreamToTwoRows = !!JSON.parse(expandOneStreamToTwoRows); + if (showEpisodeNumber !== undefined) + cleanedService.widget.showEpisodeNumber = !!JSON.parse(showEpisodeNumber); + if (enableUser !== undefined) cleanedService.widget.enableUser = !!JSON.parse(enableUser); } if (["sonarr", "radarr"].includes(type)) { if (enableQueue !== undefined) cleanedService.widget.enableQueue = JSON.parse(enableQueue); diff --git a/src/widgets/emby/component.jsx b/src/widgets/emby/component.jsx index f11a689d..9084cbac 100644 --- a/src/widgets/emby/component.jsx +++ b/src/widgets/emby/component.jsx @@ -27,12 +27,28 @@ function ticksToString(ticks) { return parts.map((part) => part.toString().padStart(2, "0")).join(":"); } -function SingleSessionEntry({ playCommand, session, enableUser }) { +function generateStreamTitle(session, enableUser, showEpisodeNumber) { const { - NowPlayingItem: { Name, SeriesName }, - PlayState: { PositionTicks, IsPaused, IsMuted }, + NowPlayingItem: { Name, SeriesName, Type, ParentIndexNumber, IndexNumber }, UserName, } = session; + let streamTitle = ""; + + if (Type === "Episode" && showEpisodeNumber) { + const seasonStr = `S${ParentIndexNumber.toString().padStart(2, "0")}`; + const episodeStr = `E${IndexNumber.toString().padStart(2, "0")}`; + streamTitle = `${SeriesName}: ${seasonStr} · ${episodeStr} - ${Name}`; + } else { + streamTitle = `${Name}${SeriesName ? ` - ${SeriesName}` : ""}`; + } + + return enableUser ? `${streamTitle} (${UserName})` : streamTitle; +} + +function SingleSessionEntry({ playCommand, session, enableUser, showEpisodeNumber }) { + const { + PlayState: { PositionTicks, IsPaused, IsMuted }, + } = session; const RunTimeTicks = session.NowPlayingItem?.RunTimeTicks ?? session.NowPlayingItem?.CurrentProgram?.RunTimeTicks ?? 0; @@ -43,14 +59,13 @@ function SingleSessionEntry({ playCommand, session, enableUser }) { const percent = Math.min(1, PositionTicks / RunTimeTicks) * 100; + const streamTitle = generateStreamTitle(session, enableUser, showEpisodeNumber); return ( <>
    -
    - {Name} - {SeriesName && ` - ${SeriesName}`} - {enableUser && ` (${UserName})`} +
    + {streamTitle}
    @@ -99,11 +114,9 @@ function SingleSessionEntry({ playCommand, session, enableUser }) { ); } -function SessionEntry({ playCommand, session, enableUser }) { +function SessionEntry({ playCommand, session, enableUser, showEpisodeNumber }) { const { - NowPlayingItem: { Name, SeriesName }, PlayState: { PositionTicks, IsPaused, IsMuted }, - UserName, } = session; const RunTimeTicks = @@ -113,6 +126,8 @@ function SessionEntry({ playCommand, session, enableUser }) { IsVideoDirect: true, }; // if no transcodinginfo its videodirect + const streamTitle = generateStreamTitle(session, enableUser, showEpisodeNumber); + const percent = Math.min(1, PositionTicks / RunTimeTicks) * 100; return ( @@ -142,10 +157,8 @@ function SessionEntry({ playCommand, session, enableUser }) { )}
    -
    - {Name} - {SeriesName && ` - ${SeriesName}`} - {enableUser && ` (${UserName})`} +
    + {streamTitle}
    {IsMuted && }
    @@ -219,7 +232,9 @@ export default function Component({ service }) { const enableBlocks = service.widget?.enableBlocks; const enableNowPlaying = service.widget?.enableNowPlaying ?? true; - const enableUser = !!service.widget?.enableUser; + const enableUser = !!service.widget?.enableUser; // default is false + const expandOneStreamToTwoRows = service.widget?.expandOneStreamToTwoRows !== false; // default is true + const showEpisodeNumber = !!service.widget?.showEpisodeNumber; // default is false if (!sessionsData || !countData) { return ( @@ -230,9 +245,11 @@ export default function Component({ service }) {
    -
    -
    - - -
    + {expandOneStreamToTwoRows && ( +
    + - +
    + )}
    )} @@ -260,15 +277,17 @@ export default function Component({ service }) {
    {t("emby.no_active")}
    -
    - - -
    + {expandOneStreamToTwoRows && ( +
    + - +
    + )}
    ); } - if (playing.length === 1) { + if (expandOneStreamToTwoRows && playing.length === 1) { const session = playing[0]; return ( <> @@ -278,28 +297,29 @@ export default function Component({ service }) { playCommand={(currentSession, command) => handlePlayCommand(currentSession, command)} session={session} enableUser={enableUser} + showEpisodeNumber={showEpisodeNumber} />
    ); } - if (playing.length > 0) - return ( - <> - {enableBlocks && } -
    - {playing.map((session) => ( - handlePlayCommand(currentSession, command)} - session={session} - enableUser={enableUser} - /> - ))} -
    - - ); + return ( + <> + {enableBlocks && } +
    + {playing.map((session) => ( + handlePlayCommand(currentSession, command)} + session={session} + enableUser={enableUser} + showEpisodeNumber={showEpisodeNumber} + /> + ))} +
    + + ); } if (enableBlocks) { diff --git a/src/widgets/tautulli/component.jsx b/src/widgets/tautulli/component.jsx index d224391b..b540c6d7 100644 --- a/src/widgets/tautulli/component.jsx +++ b/src/widgets/tautulli/component.jsx @@ -25,17 +25,31 @@ function millisecondsToString(milliseconds) { return parts.map((part) => part.toString().padStart(2, "0")).join(":"); } -function SingleSessionEntry({ session, enableUser }) { - const { full_title, duration, view_offset, progress_percent, state, video_decision, audio_decision, username } = - session; +function generateStreamTitle(session, enableUser, showEpisodeNumber) { + let stream_title = ""; + const { media_type, parent_media_index, media_index, title, grandparent_title, full_title, friendly_name } = session; + if (media_type === "episode" && showEpisodeNumber) { + const season_str = `S${parent_media_index.toString().padStart(2, "0")}`; + const episode_str = `E${media_index.toString().padStart(2, "0")}`; + stream_title = `${grandparent_title}: ${season_str} · ${episode_str} - ${title}`; + } else { + stream_title = full_title; + } + + return enableUser ? `${stream_title} (${friendly_name})` : stream_title; +} + +function SingleSessionEntry({ session, enableUser, showEpisodeNumber }) { + const { duration, view_offset, progress_percent, state, video_decision, audio_decision } = session; + + const stream_title = generateStreamTitle(session, enableUser, showEpisodeNumber); return ( <>
    -
    - {full_title} - {enableUser && ` (${username})`} +
    + {stream_title}
    @@ -78,8 +92,10 @@ function SingleSessionEntry({ session, enableUser }) { ); } -function SessionEntry({ session, enableUser }) { - const { full_title, view_offset, progress_percent, state, video_decision, audio_decision, username } = session; +function SessionEntry({ session, enableUser, showEpisodeNumber }) { + const { view_offset, progress_percent, state, video_decision, audio_decision } = session; + + const stream_title = generateStreamTitle(session, enableUser, showEpisodeNumber); return (
    @@ -98,9 +114,8 @@ function SessionEntry({ session, enableUser }) { )}
    -
    - {full_title} - {enableUser && ` (${username})`} +
    + {stream_title}
    @@ -129,6 +144,10 @@ export default function Component({ service }) { refreshInterval: 5000, }); + const enableUser = !!service.widget?.enableUser; // default is false + const expandOneStreamToTwoRows = service.widget?.expandOneStreamToTwoRows !== false; // default is true + const showEpisodeNumber = !!service.widget?.showEpisodeNumber; // default is false + if (activityError || (activityData && Object.keys(activityData.response.data).length === 0)) { return ; } @@ -139,9 +158,11 @@ export default function Component({ service }) {
    -
    -
    - - -
    + {expandOneStreamToTwoRows && ( +
    + - +
    + )}
    ); } @@ -162,20 +183,20 @@ export default function Component({ service }) {
    {t("tautulli.no_active")}
    -
    - - -
    + {expandOneStreamToTwoRows && ( +
    + - +
    + )}
    ); } - const enableUser = !!service.widget?.enableUser; - - if (playing.length === 1) { + if (expandOneStreamToTwoRows && playing.length === 1) { const session = playing[0]; return (
    - +
    ); } @@ -183,7 +204,12 @@ export default function Component({ service }) { return (
    {playing.map((session) => ( - + ))}
    ); From 340424391f0e7e171b362ee82ac8ec8b582b62b0 Mon Sep 17 00:00:00 2001 From: Ameer Abdallah Date: Mon, 22 Apr 2024 21:20:08 -0700 Subject: [PATCH 082/100] Enhancement: add bitrate precision config option for speedtest-tracker (#3354) --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/speedtest-tracker.md | 1 + src/utils/config/service-helpers.js | 8 ++++++++ src/widgets/speedtest/component.jsx | 18 ++++++++++++++++-- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/docs/widgets/services/speedtest-tracker.md b/docs/widgets/services/speedtest-tracker.md index 7e250967..99b5b993 100644 --- a/docs/widgets/services/speedtest-tracker.md +++ b/docs/widgets/services/speedtest-tracker.md @@ -16,4 +16,5 @@ Allowed fields: `["download", "upload", "ping"]`. widget: type: speedtest url: http://speedtest.host.or.ip + bitratePrecision: 3 # optional, default is 0 ``` diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index fc4d57eb..aaee636c 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -450,6 +450,9 @@ export function cleanServiceGroups(groups) { // proxmox node, + // speedtest + bitratePrecision, + // sonarr, radarr enableQueue, @@ -588,6 +591,11 @@ export function cleanServiceGroups(groups) { if (type === "healthchecks") { if (uuid !== undefined) cleanedService.widget.uuid = uuid; } + if (type === "speedtest") { + if (bitratePrecision !== undefined) { + cleanedService.widget.bitratePrecision = parseInt(bitratePrecision, 10); + } + } } return cleanedService; diff --git a/src/widgets/speedtest/component.jsx b/src/widgets/speedtest/component.jsx index 0102025b..9826f776 100644 --- a/src/widgets/speedtest/component.jsx +++ b/src/widgets/speedtest/component.jsx @@ -11,6 +11,11 @@ export default function Component({ service }) { const { data: speedtestData, error: speedtestError } = useWidgetAPI(widget, "speedtest/latest"); + const bitratePrecision = + !widget?.bitratePrecision || Number.isNaN(widget?.bitratePrecision) || widget?.bitratePrecision < 0 + ? 0 + : widget.bitratePrecision; + if (speedtestError) { return ; } @@ -29,9 +34,18 @@ export default function Component({ service }) { + - Date: Tue, 23 Apr 2024 22:13:53 +0100 Subject: [PATCH 083/100] Fix: format Romm statistics (#3358) --- src/widgets/romm/component.jsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/widgets/romm/component.jsx b/src/widgets/romm/component.jsx index 1cb3033e..44b114b0 100644 --- a/src/widgets/romm/component.jsx +++ b/src/widgets/romm/component.jsx @@ -1,9 +1,12 @@ +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 default function Component({ service }) { const { widget } = service; + const { t } = useTranslation(); const { data: response, error: responseError } = useWidgetAPI(widget, "statistics"); @@ -24,8 +27,8 @@ export default function Component({ service }) { const totalRoms = response.reduce((total, stat) => total + stat.rom_count, 0); return ( - - + + ); } From ea63716b61fc9af0228e1f910dc960ee8da36664 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 29 Apr 2024 17:18:55 -0700 Subject: [PATCH 084/100] Fix: some error URLs aren't sanitized (#3385) --- src/utils/proxy/api-helpers.js | 2 +- src/utils/proxy/http.js | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/utils/proxy/api-helpers.js b/src/utils/proxy/api-helpers.js index 5fc22e1e..ffd2f63b 100644 --- a/src/utils/proxy/api-helpers.js +++ b/src/utils/proxy/api-helpers.js @@ -57,7 +57,7 @@ export function jsonArrayFilter(data, filter) { export function sanitizeErrorURL(errorURL) { // Dont display sensitive params on frontend const url = new URL(errorURL); - ["apikey", "api_key", "token", "t", "access_token"].forEach((key) => { + ["apikey", "api_key", "token", "t", "access_token", "auth"].forEach((key) => { if (url.searchParams.has(key)) url.searchParams.set(key, "***"); }); return url.toString(); diff --git a/src/utils/proxy/http.js b/src/utils/proxy/http.js index 8a9ce380..875bfb4c 100644 --- a/src/utils/proxy/http.js +++ b/src/utils/proxy/http.js @@ -5,6 +5,7 @@ import { createUnzip, constants as zlibConstants } from "node:zlib"; import { http, https } from "follow-redirects"; import { addCookieToJar, setCookieHeader } from "./cookie-jar"; +import { sanitizeErrorURL } from "./api-helpers"; import createLogger from "utils/logger"; @@ -113,6 +114,11 @@ export async function httpProxy(url, params = {}) { constructedUrl.pathname, ); if (err) logger.error(err); - return [500, "application/json", { error: { message: err?.message ?? "Unknown error", url, rawError: err } }, null]; + return [ + 500, + "application/json", + { error: { message: err?.message ?? "Unknown error", url: sanitizeErrorURL(url), rawError: err } }, + null, + ]; } } From d90bf8079a7ded5637d5094c1e037e65f5f24f9f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 09:24:21 -0700 Subject: [PATCH 085/100] Chore(deps): Bump recharts from 2.12.3 to 2.12.6 (#3397) Bumps [recharts](https://github.com/recharts/recharts) from 2.12.3 to 2.12.6. - [Release notes](https://github.com/recharts/recharts/releases) - [Changelog](https://github.com/recharts/recharts/blob/3.x/CHANGELOG.md) - [Commits](https://github.com/recharts/recharts/compare/v2.12.3...v2.12.6) --- updated-dependencies: - dependency-name: recharts dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 46db054c..97c2186c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "react-dom": "^18.2.0", "react-i18next": "^11.18.6", "react-icons": "^4.12.0", - "recharts": "^2.12.3", + "recharts": "^2.12.6", "rrule": "^2.8.1", "swr": "^1.3.0", "systeminformation": "^5.22.0", @@ -5772,9 +5772,9 @@ } }, "node_modules/recharts": { - "version": "2.12.3", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.3.tgz", - "integrity": "sha512-vE/F7wTlokf5mtCqVDJlVKelCjliLSJ+DJxj79XlMREm7gpV7ljwbrwE3CfeaoDlOaLX+6iwHaVRn9587YkwIg==", + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.6.tgz", + "integrity": "sha512-D+7j9WI+D0NHauah3fKHuNNcRK8bOypPW7os1DERinogGBGaHI7i6tQKJ0aUF3JXyBZ63dyfKIW2WTOPJDxJ8w==", "dependencies": { "clsx": "^2.0.0", "eventemitter3": "^4.0.1", diff --git a/package.json b/package.json index 53d0e3bb..cc0c87fe 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "react-dom": "^18.2.0", "react-i18next": "^11.18.6", "react-icons": "^4.12.0", - "recharts": "^2.12.3", + "recharts": "^2.12.6", "rrule": "^2.8.1", "swr": "^1.3.0", "systeminformation": "^5.22.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 52ffe17f..d8856387 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -75,8 +75,8 @@ dependencies: specifier: ^4.12.0 version: 4.12.0(react@18.2.0) recharts: - specifier: ^2.12.3 - version: 2.12.3(react-dom@18.2.0)(react@18.2.0) + specifier: ^2.12.6 + version: 2.12.6(react-dom@18.2.0)(react@18.2.0) rrule: specifier: ^2.8.1 version: 2.8.1 @@ -3934,8 +3934,8 @@ packages: decimal.js-light: 2.5.1 dev: false - /recharts@2.12.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-vE/F7wTlokf5mtCqVDJlVKelCjliLSJ+DJxj79XlMREm7gpV7ljwbrwE3CfeaoDlOaLX+6iwHaVRn9587YkwIg==} + /recharts@2.12.6(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-D+7j9WI+D0NHauah3fKHuNNcRK8bOypPW7os1DERinogGBGaHI7i6tQKJ0aUF3JXyBZ63dyfKIW2WTOPJDxJ8w==} engines: {node: '>=14'} peerDependencies: react: ^16.0.0 || ^17.0.0 || ^18.0.0 From 4fc70eb1ffe9b052583268e4534f6da117ab7579 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 09:43:52 -0700 Subject: [PATCH 086/100] Chore(deps-dev): Bump typescript from 4.9.5 to 5.4.5 (#3396) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.9.5 to 5.4.5. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml) - [Commits](https://github.com/Microsoft/TypeScript/compare/v4.9.5...v5.4.5) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 10 +++++----- package.json | 2 +- pnpm-lock.yaml | 38 +++++++++++++++++++------------------- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 97c2186c..78918479 100644 --- a/package-lock.json +++ b/package-lock.json @@ -56,7 +56,7 @@ "prettier": "^3.2.5", "tailwind-scrollbar": "^3.0.5", "tailwindcss": "^3.4.3", - "typescript": "^4.9.5" + "typescript": "^5.4.5" }, "optionalDependencies": { "osx-temperature-sensor": "^1.0.8" @@ -7091,16 +7091,16 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/unbox-primitive": { diff --git a/package.json b/package.json index cc0c87fe..796af378 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "prettier": "^3.2.5", "tailwind-scrollbar": "^3.0.5", "tailwindcss": "^3.4.3", - "typescript": "^4.9.5" + "typescript": "^5.4.5" }, "optionalDependencies": { "osx-temperature-sensor": "^1.0.8" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d8856387..3d120fb3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -119,7 +119,7 @@ devDependencies: version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@8.57.0) eslint-config-next: specifier: ^12.3.4 - version: 12.3.4(eslint@8.57.0)(typescript@4.9.5) + version: 12.3.4(eslint@8.57.0)(typescript@5.4.5) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -151,8 +151,8 @@ devDependencies: specifier: ^3.4.3 version: 3.4.3 typescript: - specifier: ^4.9.5 - version: 4.9.5 + specifier: ^5.4.5 + version: 5.4.5 packages: @@ -603,7 +603,7 @@ packages: resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} dev: false - /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5): + /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -615,10 +615,10 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - typescript: 4.9.5 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -636,7 +636,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -651,8 +651,8 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -1834,7 +1834,7 @@ packages: object.entries: 1.1.7 dev: true - /eslint-config-next@12.3.4(eslint@8.57.0)(typescript@4.9.5): + /eslint-config-next@12.3.4(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-WuT3gvgi7Bwz00AOmKGhOeqnyA5P29Cdyr0iVjLyfDbk+FANQKcOjFUTZIdyYfe5Tq1x4TGcmoe4CwctGvFjHQ==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -1845,7 +1845,7 @@ packages: dependencies: '@next/eslint-plugin-next': 12.3.4 '@rushstack/eslint-patch': 1.7.2 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.29.1)(eslint@8.57.0) @@ -1853,7 +1853,7 @@ packages: eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - typescript: 4.9.5 + typescript: 5.4.5 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color @@ -1917,7 +1917,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -1936,7 +1936,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -4675,14 +4675,14 @@ packages: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: false - /tsutils@3.21.0(typescript@4.9.5): + /tsutils@3.21.0(typescript@5.4.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 4.9.5 + typescript: 5.4.5 dev: true /tunnel-agent@0.6.0: @@ -4789,9 +4789,9 @@ packages: possible-typed-array-names: 1.0.0 dev: true - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} hasBin: true dev: true From 8ca7f422da68aa8ca458ec1494fe13ce7182815e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 09:44:07 -0700 Subject: [PATCH 087/100] Chore(deps): Bump systeminformation from 5.22.0 to 5.22.7 (#3398) Bumps [systeminformation](https://github.com/sebhildebrandt/systeminformation) from 5.22.0 to 5.22.7. - [Changelog](https://github.com/sebhildebrandt/systeminformation/blob/master/CHANGELOG.md) - [Commits](https://github.com/sebhildebrandt/systeminformation/compare/v5.22.0...v5.22.7) --- updated-dependencies: - dependency-name: systeminformation dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 78918479..51dbbe3a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,7 @@ "recharts": "^2.12.6", "rrule": "^2.8.1", "swr": "^1.3.0", - "systeminformation": "^5.22.0", + "systeminformation": "^5.22.7", "tough-cookie": "^4.1.3", "urbackup-server-api": "^0.8.9", "winston": "^3.11.0", @@ -6663,9 +6663,9 @@ } }, "node_modules/systeminformation": { - "version": "5.22.0", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.22.0.tgz", - "integrity": "sha512-oAP80ymt8ssrAzjX8k3frbL7ys6AotqC35oikG6/SG15wBw+tG9nCk4oPaXIhEaAOAZ8XngxUv3ORq2IuR3r4Q==", + "version": "5.22.7", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.22.7.tgz", + "integrity": "sha512-AWxlP05KeHbpGdgvZkcudJpsmChc2Y5Eo/GvxG/iUA/Aws5LZKHAMSeAo+V+nD+nxWZaxrwpWcnx4SH3oxNL3A==", "os": [ "darwin", "linux", diff --git a/package.json b/package.json index 796af378..c0fc8e44 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "recharts": "^2.12.6", "rrule": "^2.8.1", "swr": "^1.3.0", - "systeminformation": "^5.22.0", + "systeminformation": "^5.22.7", "tough-cookie": "^4.1.3", "urbackup-server-api": "^0.8.9", "winston": "^3.11.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3d120fb3..22b6cc3f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,8 +84,8 @@ dependencies: specifier: ^1.3.0 version: 1.3.0(react@18.2.0) systeminformation: - specifier: ^5.22.0 - version: 5.22.0 + specifier: ^5.22.7 + version: 5.22.7 tough-cookie: specifier: ^4.1.3 version: 4.1.3 @@ -4499,8 +4499,8 @@ packages: react: 18.2.0 dev: false - /systeminformation@5.22.0: - resolution: {integrity: sha512-oAP80ymt8ssrAzjX8k3frbL7ys6AotqC35oikG6/SG15wBw+tG9nCk4oPaXIhEaAOAZ8XngxUv3ORq2IuR3r4Q==} + /systeminformation@5.22.7: + resolution: {integrity: sha512-AWxlP05KeHbpGdgvZkcudJpsmChc2Y5Eo/GvxG/iUA/Aws5LZKHAMSeAo+V+nD+nxWZaxrwpWcnx4SH3oxNL3A==} engines: {node: '>=8.0.0'} os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] hasBin: true From 43e258a58d46b6934bac65d3641573aa87940753 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 09:44:31 -0700 Subject: [PATCH 088/100] Chore(deps): Bump react from 18.2.0 to 18.3.1 (#3400) Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react) from 18.2.0 to 18.3.1. - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v18.3.1/packages/react) --- updated-dependencies: - dependency-name: react dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++-- package.json | 2 +- pnpm-lock.yaml | 104 +++++++++++++++++++++++----------------------- 3 files changed, 57 insertions(+), 57 deletions(-) diff --git a/package-lock.json b/package-lock.json index 51dbbe3a..df6f838d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,7 @@ "ping": "^0.4.4", "pretty-bytes": "^6.1.1", "raw-body": "^2.5.2", - "react": "^18.2.0", + "react": "^18.3.1", "react-dom": "^18.2.0", "react-i18next": "^11.18.6", "react-icons": "^4.12.0", @@ -5652,9 +5652,9 @@ } }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dependencies": { "loose-envify": "^1.1.0" }, diff --git a/package.json b/package.json index c0fc8e44..d07cc3fe 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "ping": "^0.4.4", "pretty-bytes": "^6.1.1", "raw-body": "^2.5.2", - "react": "^18.2.0", + "react": "^18.3.1", "react-dom": "^18.2.0", "react-i18next": "^11.18.6", "react-icons": "^4.12.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 22b6cc3f..eb375259 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,7 +7,7 @@ settings: dependencies: '@headlessui/react': specifier: ^1.7.18 - version: 1.7.18(react-dom@18.2.0)(react@18.2.0) + version: 1.7.18(react-dom@18.2.0)(react@18.3.1) '@kubernetes/client-node': specifier: ^0.17.1 version: 0.17.1 @@ -49,10 +49,10 @@ dependencies: version: 1.0.2 next: specifier: ^12.3.4 - version: 12.3.4(react-dom@18.2.0)(react@18.2.0) + version: 12.3.4(react-dom@18.2.0)(react@18.3.1) next-i18next: specifier: ^12.1.0 - version: 12.1.0(next@12.3.4)(react-dom@18.2.0)(react@18.2.0) + version: 12.1.0(next@12.3.4)(react-dom@18.2.0)(react@18.3.1) ping: specifier: ^0.4.4 version: 0.4.4 @@ -63,26 +63,26 @@ dependencies: specifier: ^2.5.2 version: 2.5.2 react: - specifier: ^18.2.0 - version: 18.2.0 + specifier: ^18.3.1 + version: 18.3.1 react-dom: specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) + version: 18.2.0(react@18.3.1) react-i18next: specifier: ^11.18.6 - version: 11.18.6(i18next@21.10.0)(react-dom@18.2.0)(react@18.2.0) + version: 11.18.6(i18next@21.10.0)(react-dom@18.2.0)(react@18.3.1) react-icons: specifier: ^4.12.0 - version: 4.12.0(react@18.2.0) + version: 4.12.0(react@18.3.1) recharts: specifier: ^2.12.6 - version: 2.12.6(react-dom@18.2.0)(react@18.2.0) + version: 2.12.6(react-dom@18.2.0)(react@18.3.1) rrule: specifier: ^2.8.1 version: 2.8.1 swr: specifier: ^1.3.0 - version: 1.3.0(react@18.2.0) + version: 1.3.0(react@18.3.1) systeminformation: specifier: ^5.22.7 version: 5.22.7 @@ -226,17 +226,17 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@headlessui/react@1.7.18(react-dom@18.2.0)(react@18.2.0): + /@headlessui/react@1.7.18(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-4i5DOrzwN4qSgNsL4Si61VMkUcWbcSKueUV7sFhpHzQcSShdlHENE5+QBntMSRvHt8NyoFO2AGG8si9lq+w4zQ==} engines: {node: '>=10'} peerDependencies: react: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18 dependencies: - '@tanstack/react-virtual': 3.0.2(react-dom@18.2.0)(react@18.2.0) + '@tanstack/react-virtual': 3.0.2(react-dom@18.2.0)(react@18.3.1) client-only: 0.0.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) dev: false /@humanwhocodes/config-array@0.11.14: @@ -511,15 +511,15 @@ packages: tailwindcss: 3.4.3 dev: true - /@tanstack/react-virtual@3.0.2(react-dom@18.2.0)(react@18.2.0): + /@tanstack/react-virtual@3.0.2(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-9XbRLPKgnhMwwmuQMnJMv+5a9sitGNCSEtf/AZXzmJdesYk7XsjYHaEDny+IrJzvPNwZliIIDwCRiaUqR3zzCA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@tanstack/virtual-core': 3.0.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) dev: false /@tanstack/virtual-core@3.0.0: @@ -3302,7 +3302,7 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /next-i18next@12.1.0(next@12.3.4)(react-dom@18.2.0)(react@18.2.0): + /next-i18next@12.1.0(next@12.3.4)(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-rhos/PVULmZPdC0jpec2MDBQMXdGZ3+Mbh/tZfrDtjgnVN3ucdq7k8BlwsJNww6FnqC8AC31n6dSYuqVzYsGsw==} engines: {node: '>=12'} peerDependencies: @@ -3315,15 +3315,15 @@ packages: hoist-non-react-statics: 3.3.2 i18next: 21.10.0 i18next-fs-backend: 1.2.0 - next: 12.3.4(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-i18next: 11.18.6(i18next@21.10.0)(react-dom@18.2.0)(react@18.2.0) + next: 12.3.4(react-dom@18.2.0)(react@18.3.1) + react: 18.3.1 + react-i18next: 11.18.6(i18next@21.10.0)(react-dom@18.2.0)(react@18.3.1) transitivePeerDependencies: - react-dom - react-native dev: false - /next@12.3.4(react-dom@18.2.0)(react@18.2.0): + /next@12.3.4(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-VcyMJUtLZBGzLKo3oMxrEF0stxh8HwuW976pAzlHhI3t8qJ4SROjCrSh1T24bhrbjw55wfZXAbXPGwPt5FLRfQ==} engines: {node: '>=12.22.0'} hasBin: true @@ -3345,10 +3345,10 @@ packages: '@swc/helpers': 0.4.11 caniuse-lite: 1.0.30001581 postcss: 8.4.14 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.0.7(react@18.2.0) - use-sync-external-store: 1.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) + styled-jsx: 5.0.7(react@18.3.1) + use-sync-external-store: 1.2.0(react@18.3.1) optionalDependencies: '@next/swc-android-arm-eabi': 12.3.4 '@next/swc-android-arm64': 12.3.4 @@ -3810,17 +3810,17 @@ packages: unpipe: 1.0.0 dev: false - /react-dom@18.2.0(react@18.2.0): + /react-dom@18.2.0(react@18.3.1): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: react: ^18.2.0 dependencies: loose-envify: 1.4.0 - react: 18.2.0 + react: 18.3.1 scheduler: 0.23.0 dev: false - /react-i18next@11.18.6(i18next@21.10.0)(react-dom@18.2.0)(react@18.2.0): + /react-i18next@11.18.6(i18next@21.10.0)(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==} peerDependencies: i18next: '>= 19.0.0' @@ -3836,22 +3836,22 @@ packages: '@babel/runtime': 7.23.9 html-parse-stringify: 3.0.1 i18next: 21.10.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) dev: false - /react-icons@4.12.0(react@18.2.0): + /react-icons@4.12.0(react@18.3.1): resolution: {integrity: sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==} peerDependencies: react: '*' dependencies: - react: 18.2.0 + react: 18.3.1 dev: false /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - /react-smooth@4.0.0(react-dom@18.2.0)(react@18.2.0): + /react-smooth@4.0.0(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-2NMXOBY1uVUQx1jBeENGA497HK20y6CPGYL1ZnJLeoQ8rrc3UfmOM82sRxtzpcoCkUMy4CS0RGylfuVhuFjBgg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -3859,12 +3859,12 @@ packages: dependencies: fast-equals: 5.0.1 prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) + react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.3.1) dev: false - /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): + /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: react: '>=16.6.0' @@ -3874,12 +3874,12 @@ packages: dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) dev: false - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + /react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 @@ -3934,7 +3934,7 @@ packages: decimal.js-light: 2.5.1 dev: false - /recharts@2.12.6(react-dom@18.2.0)(react@18.2.0): + /recharts@2.12.6(react-dom@18.2.0)(react@18.3.1): resolution: {integrity: sha512-D+7j9WI+D0NHauah3fKHuNNcRK8bOypPW7os1DERinogGBGaHI7i6tQKJ0aUF3JXyBZ63dyfKIW2WTOPJDxJ8w==} engines: {node: '>=14'} peerDependencies: @@ -3944,10 +3944,10 @@ packages: clsx: 2.1.0 eventemitter3: 4.0.7 lodash: 4.17.21 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.2.0(react@18.3.1) react-is: 16.13.1 - react-smooth: 4.0.0(react-dom@18.2.0)(react@18.2.0) + react-smooth: 4.0.0(react-dom@18.2.0)(react@18.3.1) recharts-scale: 0.4.5 tiny-invariant: 1.3.1 victory-vendor: 36.8.4 @@ -4450,7 +4450,7 @@ packages: engines: {node: '>=8'} dev: true - /styled-jsx@5.0.7(react@18.2.0): + /styled-jsx@5.0.7(react@18.3.1): resolution: {integrity: sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -4463,7 +4463,7 @@ packages: babel-plugin-macros: optional: true dependencies: - react: 18.2.0 + react: 18.3.1 dev: false /sucrase@3.35.0: @@ -4491,12 +4491,12 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /swr@1.3.0(react@18.2.0): + /swr@1.3.0(react@18.3.1): resolution: {integrity: sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==} peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 dependencies: - react: 18.2.0 + react: 18.3.1 dev: false /systeminformation@5.22.7: @@ -4850,12 +4850,12 @@ packages: requires-port: 1.0.0 dev: false - /use-sync-external-store@1.2.0(react@18.2.0): + /use-sync-external-store@1.2.0(react@18.3.1): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - react: 18.2.0 + react: 18.3.1 dev: false /util-deprecate@1.0.2: From 5efed2e740b6e038e89e70fa6100951cbfa8a1b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 12:08:26 -0700 Subject: [PATCH 089/100] Chore(deps-dev): Bump eslint-config-next from 12.3.4 to 14.2.3 (#3399) Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 12.3.4 to 14.2.3. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/commits/v14.2.3/packages/eslint-config-next) --- updated-dependencies: - dependency-name: eslint-config-next dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 168 ++++++++++++++++++++++++++++++++++------------ package.json | 2 +- pnpm-lock.yaml | 91 +++++++++++++++---------- 3 files changed, 181 insertions(+), 80 deletions(-) diff --git a/package-lock.json b/package-lock.json index df6f838d..5e933947 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,7 +45,7 @@ "autoprefixer": "^10.4.17", "eslint": "^8.57.0", "eslint-config-airbnb": "^19.0.4", - "eslint-config-next": "^12.3.4", + "eslint-config-next": "^14.2.3", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsx-a11y": "^6.8.0", @@ -344,12 +344,58 @@ "integrity": "sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A==" }, "node_modules/@next/eslint-plugin-next": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.4.tgz", - "integrity": "sha512-BFwj8ykJY+zc1/jWANsDprDIu2MgwPOIKxNVnrKvPs+f5TPegrVnem8uScND+1veT4B7F6VeqgaNLFW1Hzl9Og==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.3.tgz", + "integrity": "sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==", "dev": true, "dependencies": { - "glob": "7.1.7" + "glob": "10.3.10" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@next/swc-android-arm-eabi": { @@ -2318,6 +2364,19 @@ "once": "^1.4.0" } }, + "node_modules/enhanced-resolve": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -2604,20 +2663,20 @@ } }, "node_modules/eslint-config-next": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.3.4.tgz", - "integrity": "sha512-WuT3gvgi7Bwz00AOmKGhOeqnyA5P29Cdyr0iVjLyfDbk+FANQKcOjFUTZIdyYfe5Tq1x4TGcmoe4CwctGvFjHQ==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.3.tgz", + "integrity": "sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "12.3.4", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.21.0", + "@next/eslint-plugin-next": "14.2.3", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^2.7.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" }, "peerDependencies": { "eslint": "^7.23.0 || ^8.0.0", @@ -2662,45 +2721,30 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "dev": true, "dependencies": { "debug": "^4.3.4", - "glob": "^7.2.0", - "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" }, "engines": { - "node": ">=4" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*" } }, - "node_modules/eslint-import-resolver-typescript/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/eslint-module-utils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", @@ -3436,6 +3480,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -3561,6 +3617,12 @@ "url": "https://github.com/sindresorhus/got?sponsor=1" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -5933,6 +5995,15 @@ "node": ">=4" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/responselike": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", @@ -6789,6 +6860,15 @@ "node": ">=14" } }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/tar": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", diff --git a/package.json b/package.json index d07cc3fe..a59a75ed 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "autoprefixer": "^10.4.17", "eslint": "^8.57.0", "eslint-config-airbnb": "^19.0.4", - "eslint-config-next": "^12.3.4", + "eslint-config-next": "^14.2.3", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsx-a11y": "^6.8.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eb375259..79bf2a51 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -118,14 +118,14 @@ devDependencies: specifier: ^19.0.4 version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@8.57.0) eslint-config-next: - specifier: ^12.3.4 - version: 12.3.4(eslint@8.57.0)(typescript@5.4.5) + specifier: ^14.2.3 + version: 14.2.3(eslint@8.57.0)(typescript@5.4.5) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: specifier: ^6.8.0 version: 6.8.0(eslint@8.57.0) @@ -329,10 +329,10 @@ packages: resolution: {integrity: sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A==} dev: false - /@next/eslint-plugin-next@12.3.4: - resolution: {integrity: sha512-BFwj8ykJY+zc1/jWANsDprDIu2MgwPOIKxNVnrKvPs+f5TPegrVnem8uScND+1veT4B7F6VeqgaNLFW1Hzl9Og==} + /@next/eslint-plugin-next@14.2.3: + resolution: {integrity: sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==} dependencies: - glob: 7.1.7 + glob: 10.3.10 dev: true /@next/swc-android-arm-eabi@12.3.4: @@ -1596,6 +1596,14 @@ packages: once: 1.4.0 dev: false + /enhanced-resolve@5.16.0: + resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -1808,7 +1816,7 @@ packages: dependencies: confusing-browser-globals: 1.0.11 eslint: 8.57.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) object.assign: 4.1.5 object.entries: 1.1.7 semver: 6.3.1 @@ -1826,7 +1834,7 @@ packages: dependencies: eslint: 8.57.0 eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) @@ -1834,8 +1842,8 @@ packages: object.entries: 1.1.7 dev: true - /eslint-config-next@12.3.4(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-WuT3gvgi7Bwz00AOmKGhOeqnyA5P29Cdyr0iVjLyfDbk+FANQKcOjFUTZIdyYfe5Tq1x4TGcmoe4CwctGvFjHQ==} + /eslint-config-next@14.2.3(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 typescript: '>=3.3.1' @@ -1843,13 +1851,13 @@ packages: typescript: optional: true dependencies: - '@next/eslint-plugin-next': 12.3.4 + '@next/eslint-plugin-next': 14.2.3 '@rushstack/eslint-patch': 1.7.2 '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) @@ -1878,25 +1886,30 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.29.1)(eslint@8.57.0): - resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==} - engines: {node: '>=4'} + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' eslint-plugin-import: '*' dependencies: debug: 4.3.4 + enhanced-resolve: 5.16.0 eslint: 8.57.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) - glob: 7.2.3 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.3 + is-core-module: 2.13.1 is-glob: 4.0.3 - resolve: 1.22.8 - tsconfig-paths: 3.15.0 transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -1921,12 +1934,12 @@ packages: debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -1945,7 +1958,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -2398,6 +2411,12 @@ packages: get-intrinsic: 1.2.4 dev: true + /get-tsconfig@4.7.3: + resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + /getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} dependencies: @@ -2430,17 +2449,6 @@ packages: path-scurry: 1.10.1 dev: true - /glob@7.1.7: - resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: @@ -2500,6 +2508,10 @@ packages: responselike: 3.0.0 dev: false + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true @@ -4034,6 +4046,10 @@ packages: engines: {node: '>=4'} dev: true + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -4546,6 +4562,11 @@ packages: - ts-node dev: true + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + /tar-fs@2.0.1: resolution: {integrity: sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==} dependencies: From 198835a697cf5bd4042f0b553060578db3ce2660 Mon Sep 17 00:00:00 2001 From: Ben Phelps Date: Sat, 4 May 2024 19:34:38 +0300 Subject: [PATCH 090/100] allow seperate href for widget container links addresses #3140 --- src/components/widgets/widget/container_link.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/widgets/widget/container_link.jsx b/src/components/widgets/widget/container_link.jsx index e6bc4cec..6f157875 100644 --- a/src/components/widgets/widget/container_link.jsx +++ b/src/components/widgets/widget/container_link.jsx @@ -3,7 +3,7 @@ import { getAllClasses, getInnerBlock, getBottomBlock } from "./container"; export default function ContainerLink({ children = [], options, additionalClassNames = "", target }) { return ( From 986a18170c12f63c10264a666700973c84bf13a0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 5 May 2024 20:51:37 -0700 Subject: [PATCH 091/100] New Crowdin translations by GitHub Action (#3321) Co-authored-by: Crowdin Bot --- public/locales/de/common.json | 6 +- public/locales/el/common.json | 42 ++--- public/locales/fr/common.json | 36 ++-- public/locales/no/common.json | 160 +++++++++--------- public/locales/pt_BR/common.json | 258 ++++++++++++++--------------- public/locales/tr/common.json | 150 ++++++++--------- public/locales/zh-Hans/common.json | 8 +- 7 files changed, 330 insertions(+), 330 deletions(-) diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 78f28c0a..a2cafb84 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -142,8 +142,8 @@ "connectionStatusDisconnected": "Getrennt", "connectionStatusConnected": "Verbunden", "uptime": "Betriebszeit", - "maxDown": "Max. Empfang", - "maxUp": "Max. Senden", + "maxDown": "Max. Down", + "maxUp": "Max. Up", "down": "Empfangen", "up": "Senden", "received": "Empfangen", @@ -392,7 +392,7 @@ "authentik": { "users": "Benutzer", "loginsLast24H": "Anmeldungen (24 h)", - "failedLoginsLast24H": "Fehlgeschlagene Anmeldungen (24 h)" + "failedLoginsLast24H": "Fehlversuche (24 h)" }, "proxmox": { "mem": "RAM", diff --git a/public/locales/el/common.json b/public/locales/el/common.json index d4f55f98..dfa0a5bc 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -146,9 +146,9 @@ "maxUp": "Max. Up", "down": "Down", "up": "Up", - "received": "Received", - "sent": "Sent", - "externalIPAddress": "Ext. IP" + "received": "Ληφθέντα", + "sent": "Απεσταλμένα", + "externalIPAddress": "Εξωτερική IP" }, "caddy": { "upstreams": "Upstreams", @@ -327,7 +327,7 @@ }, "traefik": { "routers": "Routers", - "services": "Services", + "services": "Υπηρεσίες", "middleware": "Middleware" }, "navidrome": { @@ -522,7 +522,7 @@ "tubearchivist": { "downloads": "Ουρά", "videos": "Videos", - "channels": "Channels", + "channels": "Κανάλια", "playlists": "Playlists" }, "truenas": { @@ -542,14 +542,14 @@ "country": "Χώρα" }, "hdhomerun": { - "channels": "Channels", + "channels": "Κανάλια", "hd": "HD", "tunerCount": "Tuners", - "channelNumber": "Channel", - "channelNetwork": "Network", + "channelNumber": "Κανάλι", + "channelNetwork": "Δίκτυο", "signalStrength": "Strength", - "signalQuality": "Quality", - "symbolQuality": "Quality", + "signalQuality": "Ποιότητα", + "symbolQuality": "Ποιότητα", "networkRate": "Ρυθμός bit", "clientIP": "Client" }, @@ -559,7 +559,7 @@ "unknown": "Άγνωστο" }, "paperlessngx": { - "inbox": "Inbox", + "inbox": "Εισερχόμενα", "total": "Σύνολο" }, "peanut": { @@ -567,8 +567,8 @@ "ups_load": "UPS Load", "ups_status": "UPS Status", "online": "Συνδεδεμένοι", - "on_battery": "On Battery", - "low_battery": "Low Battery" + "on_battery": "Σε μπαταρία", + "low_battery": "Χαμηλή μπαταρία" }, "nextdns": { "wait": "Παρακαλώ περιμένετε", @@ -620,7 +620,7 @@ "up": "Up", "down": "Down", "temp": "Temp", - "disk": "Disk Usage", + "disk": "Χρήση δίσκου", "wanIP": "WAN IP" }, "proxmoxbackupserver": { @@ -631,7 +631,7 @@ }, "immich": { "users": "Χρήστες", - "photos": "Photos", + "photos": "Φωτογραφίες", "videos": "Videos", "storage": "Storage" }, @@ -646,7 +646,7 @@ "series": "Σειρές", "archives": "Archives", "chapters": "Chapters", - "categories": "Categories" + "categories": "Κατηγορίες" }, "komga": { "libraries": "Libraries", @@ -665,7 +665,7 @@ }, "photoprism": { "albums": "Άλμπουμ", - "photos": "Photos", + "photos": "Φωτογραφίες", "videos": "Videos", "people": "People" }, @@ -738,7 +738,7 @@ "calibreweb": { "books": "Βιβλία", "authors": "Authors", - "categories": "Categories", + "categories": "Κατηγορίες", "series": "Σειρές" }, "jdownloader": { @@ -785,7 +785,7 @@ "mealie": { "recipes": "Recipes", "users": "Χρήστες", - "categories": "Categories", + "categories": "Κατηγορίες", "tags": "Tags" }, "openmediavault": { @@ -802,7 +802,7 @@ "up": "Up", "down": "Down", "bytesTx": "Transmitted", - "bytesRx": "Received" + "bytesRx": "Ληφθέντα" }, "uptimerobot": { "status": "Κατάσταση", @@ -836,7 +836,7 @@ "plantit": { "events": "Events", "plants": "Plants", - "photos": "Photos", + "photos": "Φωτογραφίες", "species": "Species" }, "gitea": { diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 17975096..d5a95638 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -15,13 +15,13 @@ "relativeDate": "{{value, relativeDate}}", "uptime": "{{value, uptime}}", "months": "mo", - "days": "d", + "days": "j", "hours": "h", "minutes": "m", "seconds": "s" }, "widget": { - "missing_type": "Widget manquant: {{type}}", + "missing_type": "Type de widget manquant: {{type}}", "api_error": "Erreur API", "information": "Informations", "status": "Statut", @@ -40,7 +40,7 @@ }, "resources": { "cpu": "CPU", - "mem": "Mém", + "mem": "MÉM", "total": "Total", "free": "Libre", "used": "Utilisé", @@ -69,7 +69,7 @@ "docker": { "rx": "Rx", "tx": "Tx", - "mem": "Mém", + "mem": "MÉM", "cpu": "CPU", "running": "Démarré", "offline": "Hors ligne", @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Déconnexion en attente", "connectionStatusDisconnecting": "Déconnexion en cours", "connectionStatusDisconnected": "Déconnecté", - "connectionStatusConnected": "Connected", + "connectionStatusConnected": "Connecté", "uptime": "Démarré depuis", "maxDown": "Max. Bas", "maxUp": "Max. Haut", @@ -279,9 +279,9 @@ }, "netalertx": { "total": "Total", - "connected": "Connected", - "new_devices": "New Devices", - "down_alerts": "Down Alerts" + "connected": "Connecté", + "new_devices": "Nouveaux appareils", + "down_alerts": "Alertes d'arrêt" }, "pihole": { "queries": "Requêtes", @@ -395,7 +395,7 @@ "failedLoginsLast24H": "Cnx. échouées (24h)" }, "proxmox": { - "mem": "Mém", + "mem": "MÉM", "cpu": "CPU", "lxc": "LxC", "vms": "VMs" @@ -411,7 +411,7 @@ "total": "Total", "free": "Libre", "used": "Utilisé", - "days": "d", + "days": "j", "hours": "h", "crit": "Crit.", "read": "Lu", @@ -847,18 +847,18 @@ "stash": { "scenes": "Scènes", "scenesPlayed": "Scènes jouées", - "playCount": "Total Plays", - "playDuration": "Time Watched", - "sceneSize": "Scenes Size", - "sceneDuration": "Scenes Duration", + "playCount": "Lectures Totales", + "playDuration": "Temps regardé", + "sceneSize": "Taille des scènes", + "sceneDuration": "Durée des scènes", "images": "Images", "imageSize": "Taille des images", "galleries": "Galeries", - "performers": "Performers", + "performers": "Acteurs", "studios": "Studios", "movies": "Films", "tags": "Étiquettes", - "oCount": "O Count" + "oCount": "0 Compte" }, "tandoor": { "users": "Utilisateurs", @@ -871,10 +871,10 @@ "locations": "Emplacements", "labels": "Étiquettes", "users": "Utilisateurs", - "totalValue": "Total Value" + "totalValue": "Valeur Totale" }, "crowdsec": { "alerts": "Alertes", - "bans": "Bans" + "bans": "Exclusions" } } diff --git a/public/locales/no/common.json b/public/locales/no/common.json index bfc335c9..a0988c88 100644 --- a/public/locales/no/common.json +++ b/public/locales/no/common.json @@ -80,22 +80,22 @@ "unhealthy": "Usunn", "not_found": "Not Found", "exited": "Exited", - "partial": "Partial" + "partial": "Delvis" }, "ping": { "error": "Feil", - "ping": "Ping", - "down": "Down", - "up": "Up", - "not_available": "Not Available" + "ping": "Responstid", + "down": "Nede", + "up": "Oppe", + "not_available": "Ikke tilgjengelig" }, "siteMonitor": { "http_status": "HTTP status", "error": "Feil", "response": "Svar", - "down": "Down", - "up": "Up", - "not_available": "Not Available" + "down": "Nede", + "up": "Oppe", + "not_available": "Ikke tilgjengelig" }, "emby": { "playing": "Spiller", @@ -110,7 +110,7 @@ "esphome": { "offline": "Frakoblet", "offline_alt": "Frakoblet", - "online": "Online", + "online": "På nett", "total": "Totalt", "unknown": "Ukjent" }, @@ -140,12 +140,12 @@ "connectionStatusPendingDisconnect": "Venter på frakobling", "connectionStatusDisconnecting": "Kobler fra", "connectionStatusDisconnected": "Frakoblet", - "connectionStatusConnected": "Connected", + "connectionStatusConnected": "Tilkoblet", "uptime": "Oppetid", "maxDown": "Maks. Ned", "maxUp": "Max. Opp", - "down": "Down", - "up": "Up", + "down": "Nede", + "up": "Oppe", "received": "Mottatt", "sent": "Sendt", "externalIPAddress": "Ekstern IP" @@ -279,8 +279,8 @@ }, "netalertx": { "total": "Totalt", - "connected": "Connected", - "new_devices": "New Devices", + "connected": "Tilkoblet", + "new_devices": "Nye enheter", "down_alerts": "Down Alerts" }, "pihole": { @@ -298,7 +298,7 @@ "speedtest": { "upload": "Opplastning", "download": "Last ned", - "ping": "Ping" + "ping": "Responstid" }, "portainer": { "running": "Kjører", @@ -321,57 +321,57 @@ }, "tdarr": { "queue": "Kø", - "processed": "Processed", - "errored": "Errored", - "saved": "Saved" + "processed": "Behandlet", + "errored": "Feilet", + "saved": "Lagret" }, "traefik": { - "routers": "Routers", - "services": "Services", - "middleware": "Middleware" + "routers": "Rutere", + "services": "Tjenester", + "middleware": "Mellomvare" }, "navidrome": { "nothing_streaming": "Ingen aktive strømminger", - "please_wait": "Please Wait" + "please_wait": "Vennligst vent" }, "npm": { - "enabled": "Enabled", - "disabled": "Disabled", + "enabled": "Aktivert", + "disabled": "Deaktivert", "total": "Totalt" }, "coinmarketcap": { - "configure": "Configure one or more crypto currencies to track", - "1hour": "1 Hour", - "1day": "1 Day", - "7days": "7 Days", - "30days": "30 Days" + "configure": "Konfigurer én eller flere krypteringsvalutaer som skal spores", + "1hour": "Én time", + "1day": "Én dag", + "7days": "7 dager", + "30days": "30 dager" }, "gotify": { - "apps": "Applications", - "clients": "Clients", - "messages": "Messages" + "apps": "Applikasjoner", + "clients": "Klienter", + "messages": "Meldinger" }, "prowlarr": { - "enableIndexers": "Indexers", - "numberOfGrabs": "Grabs", + "enableIndexers": "Indeksere", + "numberOfGrabs": "Tatt", "numberOfQueries": "Spørringer", - "numberOfFailGrabs": "Fail Grabs", - "numberOfFailQueries": "Fail Queries" + "numberOfFailGrabs": "Feil ved henting", + "numberOfFailQueries": "Spørring mislyktes" }, "jackett": { - "configured": "Configured", - "errored": "Errored" + "configured": "Konfigurert", + "errored": "Feilet" }, "strelaysrv": { - "numActiveSessions": "Sessions", - "numConnections": "Connections", - "dataRelayed": "Relayed", + "numActiveSessions": "Sesjoner", + "numConnections": "Tilkoblinger", + "dataRelayed": "Videresendt", "transferRate": "Ranger" }, "mastodon": { "user_count": "Brukere", - "status_count": "Posts", - "domain_count": "Domains" + "status_count": "Innlegg", + "domain_count": "Domener" }, "medusa": { "wanted": "Ønsket", @@ -379,10 +379,10 @@ "series": "Serie" }, "minecraft": { - "players": "Players", + "players": "Spillere", "version": "Versjon", "status": "Status", - "up": "Online", + "up": "På nett", "down": "Frakoblet" }, "miniflux": { @@ -494,15 +494,15 @@ "up_to_date": "Oppdatert", "child_bridges": "Child Bridges", "child_bridges_status": "{{ok}}/{{total}}", - "up": "Up", + "up": "Oppe", "pending": "Ventende", - "down": "Down" + "down": "Nede" }, "healthchecks": { "new": "Ny", - "up": "Up", + "up": "Oppe", "grace": "I rammeperiode", - "down": "Down", + "down": "Nede", "paused": "Pauset", "status": "Status", "last_ping": "Siste Ping", @@ -517,7 +517,7 @@ "approvedPushes": "Godkjent", "rejectedPushes": "Avvist", "filters": "Filtre", - "indexers": "Indexers" + "indexers": "Indeksere" }, "tubearchivist": { "downloads": "Kø", @@ -566,12 +566,12 @@ "battery_charge": "Batteriladning", "ups_load": "UPS last", "ups_status": "UPS status", - "online": "Online", + "online": "På nett", "on_battery": "På batteri", "low_battery": "Lavt batterinivå" }, "nextdns": { - "wait": "Please Wait", + "wait": "Vennligst vent", "no_devices": "Ingen enhetsdata mottatt" }, "mikrotik": { @@ -617,8 +617,8 @@ "load": "Load Avg", "memory": "Mem Usage", "wanStatus": "WAN Status", - "up": "Up", - "down": "Down", + "up": "Oppe", + "down": "Nede", "temp": "Temp", "disk": "Disk Usage", "wanIP": "WAN IP" @@ -672,7 +672,7 @@ "fileflows": { "queue": "Kø", "processing": "Behandler", - "processed": "Processed", + "processed": "Behandlet", "time": "Time" }, "grafana": { @@ -698,17 +698,17 @@ }, "unmanic": { "active_workers": "Active Workers", - "total_workers": "Total Workers", - "records_total": "Queue Length" + "total_workers": "Totalt antall Arbeidere", + "records_total": "Kø lengde" }, "pterodactyl": { - "servers": "Servers", - "nodes": "Nodes" + "servers": "Servere", + "nodes": "Noder" }, "prometheus": { - "targets_up": "Targets Up", - "targets_down": "Targets Down", - "targets_total": "Total Targets" + "targets_up": "Mål oppe", + "targets_down": "Mål nede", + "targets_total": "Totalt antall mål" }, "gatus": { "up": "Nettsteder opp", @@ -717,27 +717,27 @@ }, "ghostfolio": { "gross_percent_today": "Idag", - "gross_percent_1y": "One year", - "gross_percent_max": "All time" + "gross_percent_1y": "Ett år", + "gross_percent_max": "Gjennom tidene" }, "audiobookshelf": { - "podcasts": "Podcasts", + "podcasts": "Podkaster", "books": "Bøker", - "podcastsDuration": "Duration", - "booksDuration": "Duration" + "podcastsDuration": "Varighet", + "booksDuration": "Varighet" }, "homeassistant": { - "people_home": "People Home", - "lights_on": "Lights On", - "switches_on": "Switches On" + "people_home": "Personer hjemme", + "lights_on": "Lys på", + "switches_on": "Slår På" }, "whatsupdocker": { - "monitoring": "Monitoring", + "monitoring": "Overvåker", "updates": "Oppdateringer" }, "calibreweb": { "books": "Bøker", - "authors": "Authors", + "authors": "Forfattere", "categories": "Categories", "series": "Serie" }, @@ -766,15 +766,15 @@ }, "gamedig": { "status": "Status", - "online": "Online", + "online": "På nett", "offline": "Frakoblet", "name": "Navn", "map": "Kart", "currentPlayers": "Aktuelle spillere", - "players": "Players", + "players": "Spillere", "maxPlayers": "Maks spillere", "bots": "Bots", - "ping": "Ping" + "ping": "Responstid" }, "urbackup": { "ok": "Ok", @@ -799,8 +799,8 @@ "openwrt": { "uptime": "Oppetid", "cpuLoad": "CPU-belastning snitt (5m)", - "up": "Up", - "down": "Down", + "up": "Oppe", + "down": "Nede", "bytesTx": "Sendt", "bytesRx": "Mottatt" }, @@ -813,9 +813,9 @@ "sitesDown": "Sites Down", "paused": "Pauset", "notyetchecked": "Ikke sjekket enda", - "up": "Up", + "up": "Oppe", "seemsdown": "Virker nede", - "down": "Down", + "down": "Nede", "unknown": "Ukjent" }, "calendar": { @@ -842,7 +842,7 @@ "gitea": { "notifications": "Varslinger", "issues": "Issues", - "pulls": "Pull Requests" + "pulls": "Forespørsel" }, "stash": { "scenes": "Scener", diff --git a/public/locales/pt_BR/common.json b/public/locales/pt_BR/common.json index 0de066b7..f3b716bd 100644 --- a/public/locales/pt_BR/common.json +++ b/public/locales/pt_BR/common.json @@ -22,11 +22,11 @@ }, "widget": { "missing_type": "Tipo de Widget ausente: {{type}}", - "api_error": "Erro da API", + "api_error": "Erros de API", "information": "Informação", "status": "Estado", "url": "Endereço URL", - "raw_error": "Erro", + "raw_error": "Erro Raw", "response_data": "Dados da Resposta" }, "weather": { @@ -101,7 +101,7 @@ "playing": "A reproduzir", "transcoding": "Transcodificação", "bitrate": "Taxa de bits", - "no_active": "Sem streams ativas", + "no_active": "Sem Streams Ativos", "movies": "Filmes", "series": "Séries", "episodes": "Episódios", @@ -110,7 +110,7 @@ "esphome": { "offline": "Desligado", "offline_alt": "Desligado", - "online": "Online", + "online": "Disponível", "total": "Total", "unknown": "Desconhecido" }, @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Desconexão Pendente", "connectionStatusDisconnecting": "Desconectando", "connectionStatusDisconnected": "Desconectado", - "connectionStatusConnected": "Connected", + "connectionStatusConnected": "Conectado", "uptime": "Ligado", "maxDown": "Max. Down", "maxUp": "Max. Up", @@ -151,7 +151,7 @@ "externalIPAddress": "IP Externo" }, "caddy": { - "upstreams": "Upstreams", + "upstreams": "Streams de Envio", "requests": "Solicitações atuais", "requests_failed": "Solicitações com falha" }, @@ -169,15 +169,15 @@ "playing": "A reproduzir", "transcoding": "Transcodificação", "bitrate": "Taxa de bits", - "no_active": "Sem streams ativas", + "no_active": "Sem Streams Ativos", "plex_connection_error": "Verifique a conexão do Plex" }, "omada": { "connectedAp": "APs Ligados", - "activeUser": "Dispositivos activos", + "activeUser": "Dispositivos ativos", "alerts": "Alertas", - "connectedGateway": "Gateways ligados", - "connectedSwitches": "Switches ligados" + "connectedGateway": "Gateways conectados", + "connectedSwitches": "Switches conectados" }, "nzbget": { "rate": "Taxa", @@ -217,8 +217,8 @@ "memUsage": "Uso de Memória", "systemTempC": "Temp. do Sistema", "poolUsage": "Pool Usage", - "volumeUsage": "Volume Usage", - "invalid": "Invalid" + "volumeUsage": "Uso do volume", + "invalid": "Inválido" }, "deluge": { "download": "Descarregar", @@ -250,7 +250,7 @@ "lidarr": { "wanted": "Desejada", "queued": "Em fila", - "artists": "Artists" + "artists": "Artistas" }, "readarr": { "wanted": "Desejada", @@ -279,14 +279,14 @@ }, "netalertx": { "total": "Total", - "connected": "Connected", - "new_devices": "New Devices", - "down_alerts": "Down Alerts" + "connected": "Conectado", + "new_devices": "Novos dispositivos", + "down_alerts": "Alertas de Inatividade" }, "pihole": { "queries": "Consultas", "blocked": "Bloqueado", - "blocked_percent": "Blocked %", + "blocked_percent": "Bloqueado %", "gravity": "Gravidade" }, "adguard": { @@ -306,11 +306,11 @@ "total": "Total" }, "tailscale": { - "address": "Address", - "expires": "Expires", - "never": "Never", - "last_seen": "Last Seen", - "now": "Now", + "address": "Endereço", + "expires": "Expira em", + "never": "Nunca", + "last_seen": "Visto por último", + "now": "Agora", "years": "{{number}}y", "weeks": "{{number}}w", "days": "{{number}}d", @@ -331,8 +331,8 @@ "middleware": "Middleware" }, "navidrome": { - "nothing_streaming": "Sem streams ativas", - "please_wait": "Por favor aguarde" + "nothing_streaming": "Sem Streams Ativos", + "please_wait": "Por favor, aguarde" }, "npm": { "enabled": "Ativo", @@ -382,7 +382,7 @@ "players": "Reprodutores", "version": "Versão", "status": "Estado", - "up": "Online", + "up": "Disponível", "down": "Desligado" }, "miniflux": { @@ -405,20 +405,20 @@ "load": "Carga", "wait": "Por favor aguarde", "temp": "TEMP", - "_temp": "Temp", - "warn": "Warn", + "_temp": "Temperatura", + "warn": "Aviso", "uptime": "CIMA", "total": "Total", "free": "Livre", "used": "Utilizado", "days": "d", "hours": "h", - "crit": "Crit", + "crit": "Crítico", "read": "Lido", - "write": "Write", + "write": "Escrita", "gpu": "GPU", - "mem": "Mem", - "swap": "Swap" + "mem": "Memória", + "swap": "Temporário" }, "quicklaunch": { "bookmark": "Marcador", @@ -427,7 +427,7 @@ "custom": "Personalizado", "visit": "Visitar", "url": "Endereço URL", - "searchsuggestion": "Suggestion" + "searchsuggestion": "Sugestão" }, "wmo": { "0-day": "Solarengo", @@ -544,14 +544,14 @@ "hdhomerun": { "channels": "Canais", "hd": "HD", - "tunerCount": "Tuners", - "channelNumber": "Channel", - "channelNetwork": "Network", - "signalStrength": "Strength", - "signalQuality": "Quality", - "symbolQuality": "Quality", + "tunerCount": "Sintonizadores", + "channelNumber": "Canal", + "channelNetwork": "Rede", + "signalStrength": "Potência", + "signalQuality": "Qualidade", + "symbolQuality": "Qualidade", "networkRate": "Taxa de bits", - "clientIP": "Client" + "clientIP": "Cliente" }, "scrutiny": { "passed": "Aprovado", @@ -563,15 +563,15 @@ "total": "Total" }, "peanut": { - "battery_charge": "Battery Charge", - "ups_load": "UPS Load", - "ups_status": "UPS Status", - "online": "Online", - "on_battery": "On Battery", - "low_battery": "Low Battery" + "battery_charge": "Carga da bateria", + "ups_load": "Carga do UPS", + "ups_status": "Estado UPS", + "online": "Disponível", + "on_battery": "Na bateria", + "low_battery": "Bateria Fraca" }, "nextdns": { - "wait": "Por favor aguarde", + "wait": "Por favor, aguarde", "no_devices": "Nenhum dado do dispositivo recebido" }, "mikrotik": { @@ -586,10 +586,10 @@ "streams_xepg": "Canais XEPG" }, "opendtu": { - "yieldDay": "Today", - "absolutePower": "Power", - "relativePower": "Power %", - "limit": "Limit" + "yieldDay": "Hoje", + "absolutePower": "Energia", + "relativePower": "Energia %", + "limit": "Limite" }, "opnsense": { "cpu": "Carga do CPU", @@ -614,14 +614,14 @@ "status": "Estado" }, "pfsense": { - "load": "Load Avg", - "memory": "Mem Usage", - "wanStatus": "WAN Status", + "load": "Carga Média", + "memory": "Uso de memória", + "wanStatus": "Estado WAN", "up": "Ativo", "down": "Inativo", - "temp": "Temp", - "disk": "Disk Usage", - "wanIP": "WAN IP" + "temp": "Temperatura", + "disk": "Uso do disco", + "wanIP": "IP WAN" }, "proxmoxbackupserver": { "datastore_usage": "Armaz. de Dados", @@ -644,9 +644,9 @@ }, "atsumeru": { "series": "Séries", - "archives": "Archives", - "chapters": "Chapters", - "categories": "Categories" + "archives": "Arquivos", + "chapters": "Capítulos", + "categories": "Categorias" }, "komga": { "libraries": "Bibliotecas", @@ -686,8 +686,8 @@ "memoryusage": "Memória Utilizada", "freespace": "Espaço Livre", "activeusers": "Utilizadores Ativos", - "numfiles": "Files", - "numshares": "Shared Items" + "numfiles": "Arquivos", + "numshares": "Itens compartilhados" }, "kopia": { "status": "Estado", @@ -698,7 +698,7 @@ }, "unmanic": { "active_workers": "Workers Ativos", - "total_workers": "Total Workers", + "total_workers": "Total de trabalhadores", "records_total": "Comprimento da Fila" }, "pterodactyl": { @@ -716,7 +716,7 @@ "uptime": "Ligado" }, "ghostfolio": { - "gross_percent_today": "Today", + "gross_percent_today": "Hoje", "gross_percent_1y": "Um ano", "gross_percent_max": "Todo o tempo" }, @@ -732,13 +732,13 @@ "switches_on": "Interruptores Ligados" }, "whatsupdocker": { - "monitoring": "Monitoring", + "monitoring": "Monitorando", "updates": "Atualizações" }, "calibreweb": { "books": "Livros", - "authors": "Authors", - "categories": "Categories", + "authors": "Autores", + "categories": "Categorias", "series": "Séries" }, "jdownloader": { @@ -749,47 +749,47 @@ }, "kavita": { "seriesCount": "Séries", - "totalFiles": "Files" + "totalFiles": "Arquivos" }, "azuredevops": { - "result": "Result", + "result": "Resultado", "status": "Estado", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", + "buildId": "ID Compilação", + "succeeded": "Bem-sucedido", + "notStarted": "Não iniciado", "failed": "Falhou", - "canceled": "Canceled", - "inProgress": "In Progress", - "totalPrs": "Total PRs", - "myPrs": "My PRs", + "canceled": "Cancelado", + "inProgress": "Em Progresso", + "totalPrs": "Total de PRs", + "myPrs": "Minhas PRs", "approved": "Aprovada" }, "gamedig": { "status": "Estado", - "online": "Online", + "online": "Disponível", "offline": "Desligado", - "name": "Name", - "map": "Map", - "currentPlayers": "Current players", + "name": "Nome", + "map": "Mapa", + "currentPlayers": "Jogadores atuais", "players": "Reprodutores", - "maxPlayers": "Max players", - "bots": "Bots", + "maxPlayers": "Número Máximo de Jogadores", + "bots": "Robôs", "ping": "Tempo de resposta" }, "urbackup": { "ok": "Ok", - "errored": "Errors", - "noRecent": "Out of Date", - "totalUsed": "Used Storage" + "errored": "Erros", + "noRecent": "Desatualizado", + "totalUsed": "Armazanamento Utilizado" }, "mealie": { - "recipes": "Recipes", + "recipes": "Receitas", "users": "Utilizadores", - "categories": "Categories", - "tags": "Tags" + "categories": "Categorias", + "tags": "Marcadores" }, "openmediavault": { - "downloading": "Downloading", + "downloading": "Baixando", "total": "Total", "running": "A correr", "stopped": "Parado", @@ -798,83 +798,83 @@ }, "openwrt": { "uptime": "Ligado", - "cpuLoad": "CPU Load Avg (5m)", + "cpuLoad": "Carga da CPU média (5m)", "up": "Ativo", "down": "Inativo", - "bytesTx": "Transmitted", + "bytesTx": "Transmitido", "bytesRx": "Recebido" }, "uptimerobot": { "status": "Estado", "uptime": "Ligado", - "lastDown": "Last Downtime", - "downDuration": "Downtime Duration", + "lastDown": "Última inatividade", + "downDuration": "Duração de inatividade", "sitesUp": "Sites no Ar", "sitesDown": "Sites Fora do Ar", "paused": "Pausado", - "notyetchecked": "Not Yet Checked", + "notyetchecked": "Não conferidos ainda", "up": "Ativo", - "seemsdown": "Seems Down", + "seemsdown": "Parece Desconectado", "down": "Inativo", "unknown": "Desconhecido" }, "calendar": { - "inCinemas": "In cinemas", - "physicalRelease": "Physical release", - "digitalRelease": "Digital release", - "noEventsToday": "No events for today!", - "noEventsFound": "No events found" + "inCinemas": "Nos cinemas", + "physicalRelease": "Versão física", + "digitalRelease": "Versão digital", + "noEventsToday": "Nenhum evento para hoje!", + "noEventsFound": "Nenhum evento encontrado" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Total ROMs" + "platforms": "Plataformas", + "totalRoms": "Total de ROMs" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "Alertas", + "criticals": "Críticos" }, "plantit": { - "events": "Events", - "plants": "Plants", + "events": "Eventos", + "plants": "Plantas", "photos": "Fotos", - "species": "Species" + "species": "Espécies" }, "gitea": { - "notifications": "Notifications", + "notifications": "Notificações", "issues": "Problemas", - "pulls": "Pull Requests" + "pulls": "Solicitações de Envio" }, "stash": { - "scenes": "Scenes", - "scenesPlayed": "Scenes Played", - "playCount": "Total Plays", - "playDuration": "Time Watched", - "sceneSize": "Scenes Size", - "sceneDuration": "Scenes Duration", - "images": "Images", - "imageSize": "Images Size", - "galleries": "Galleries", - "performers": "Performers", - "studios": "Studios", + "scenes": "Cenas", + "scenesPlayed": "Cenas Reproduzidas", + "playCount": "Total de Reproduções", + "playDuration": "Tempo Assistido", + "sceneSize": "Tamanho das cenas", + "sceneDuration": "Duração das cenas", + "images": "Imagens", + "imageSize": "Tamanho da Imagem", + "galleries": "Galerias", + "performers": "Atores", + "studios": "Estúdios", "movies": "Filmes", - "tags": "Tags", - "oCount": "O Count" + "tags": "Marcadores", + "oCount": "Contagem 0" }, "tandoor": { "users": "Utilizadores", - "recipes": "Recipes", - "keywords": "Keywords" + "recipes": "Receitas", + "keywords": "Palavras-chave" }, "homebox": { - "items": "Items", - "totalWithWarranty": "With Warranty", - "locations": "Locations", - "labels": "Labels", + "items": "Itens", + "totalWithWarranty": "Com Garantia", + "locations": "Localização", + "labels": "Rótulos", "users": "Utilizadores", - "totalValue": "Total Value" + "totalValue": "Valor Total" }, "crowdsec": { "alerts": "Alertas", - "bans": "Bans" + "bans": "Banimentos" } } diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index 9d284786..10e32a0c 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -21,7 +21,7 @@ "seconds": "s" }, "widget": { - "missing_type": "Kayıp Araç Türü: {{type}}", + "missing_type": "Eksik Araç Türü: {{type}}", "api_error": "API Hatası", "information": "Bilgi", "status": "Durum", @@ -42,12 +42,12 @@ "cpu": "CPU", "mem": "MEM", "total": "Toplam", - "free": "Boşta", + "free": "Boş", "used": "Kullanımda", "load": "Yük", - "temp": "Geçici", + "temp": "Sıcaklık", "max": "En Yüksek", - "uptime": "Çalışma Süresi" + "uptime": "Çalışıyor" }, "unifi": { "users": "Kullanıcılar", @@ -61,7 +61,7 @@ "wlan_devices": "WLAN Aygıtları", "lan_users": "LAN Kullanıcıları", "wlan_users": "WLAN Kullanıcıları", - "up": "Çalışma Süresi", + "up": "Çalışıyor", "down": "Aşağı", "wait": "Lütfen bekleyin", "empty_data": "Alt sistem durumu bilinmiyor" @@ -71,15 +71,15 @@ "tx": "Giden Veri", "mem": "MEM", "cpu": "CPU", - "running": "Çalışan", + "running": "Çalışıyor", "offline": "Çevrimdışı", "error": "Hata", "unknown": "Bilinmiyor", - "healthy": "Sağlık", + "healthy": "Sağlıklı", "starting": "Başlatılıyor", "unhealthy": "Sağlıksız", "not_found": "Bulunamadı", - "exited": "Durduruldu", + "exited": "Kapandı", "partial": "Parçalı" }, "ping": { @@ -123,8 +123,8 @@ "watt_hour": "Watt/Saat" }, "flood": { - "download": "İndir", - "upload": "Yükle", + "download": "İndirme", + "upload": "Yükleme", "leech": "Tüketici", "seed": "Sağlayıcı" }, @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Bağlantının Kesilmesi Bekleniyor", "connectionStatusDisconnecting": "Bağlantı kesiliyor...", "connectionStatusDisconnected": "Bağlantı kesildi", - "connectionStatusConnected": "Connected", + "connectionStatusConnected": "Bağlandı", "uptime": "Çalışma Süresi", "maxDown": "Max. Indirme", "maxUp": "Max. Gönderme", @@ -197,18 +197,18 @@ }, "rutorrent": { "active": "Aktif", - "upload": "Yükle", - "download": "İndir" + "upload": "Yükleme", + "download": "İndirme" }, "transmission": { - "download": "İndir", - "upload": "Yükle", + "download": "İndirme", + "upload": "Yükleme", "leech": "Tüketici", "seed": "Sağlayıcı" }, "qbittorrent": { - "download": "İndir", - "upload": "Yükle", + "download": "İndirme", + "upload": "Yükleme", "leech": "Tüketici", "seed": "Sağlayıcı" }, @@ -221,87 +221,87 @@ "invalid": "Geçersiz" }, "deluge": { - "download": "İndir", - "upload": "Yükle", + "download": "İndirme", + "upload": "Yükleme", "leech": "Tüketici", "seed": "Sağlayıcı" }, "downloadstation": { - "download": "İndir", - "upload": "Yükle", + "download": "İndirme", + "upload": "Yükleme", "leech": "Tüketici", "seed": "Sağlayıcı" }, "sonarr": { - "wanted": "Aranan", - "queued": "Kuyrukta", + "wanted": "İstendi", + "queued": "Sırada", "series": "Diziler", "queue": "Kuyruk", "unknown": "Bilinmiyor" }, "radarr": { - "wanted": "Aranan", - "missing": "Kayıp", - "queued": "Kuyrukta", + "wanted": "İstendi", + "missing": "Eksik", + "queued": "Sırada", "movies": "Filmler", "queue": "Kuyruk", "unknown": "Bilinmiyor" }, "lidarr": { - "wanted": "Aranan", - "queued": "Kuyrukta", + "wanted": "İstendi", + "queued": "Sırada", "artists": "Sanatçılar" }, "readarr": { - "wanted": "Aranan", - "queued": "Kuyrukta", + "wanted": "İstendi", + "queued": "Sırada", "books": "Kitaplar" }, "bazarr": { - "missingEpisodes": "Kayıp Bölümler", - "missingMovies": "Kayıp Filmler" + "missingEpisodes": "Eksik Bölümler", + "missingMovies": "Eksik Filmler" }, "ombi": { - "pending": "Bekliyor", + "pending": "Bekleyen", "approved": "Onaylı", "available": "Kullanılabilir" }, "jellyseerr": { - "pending": "Bekliyor", + "pending": "Bekleyen", "approved": "Onaylı", "available": "Kullanılabilir" }, "overseerr": { - "pending": "Bekliyor", + "pending": "Bekleyen", "processing": "İşleniyor", "approved": "Onaylı", "available": "Kullanılabilir" }, "netalertx": { "total": "Toplam", - "connected": "Connected", - "new_devices": "New Devices", - "down_alerts": "Down Alerts" + "connected": "Bağlandı", + "new_devices": "Yeni Cihazlar", + "down_alerts": "Hata Uyarıları" }, "pihole": { "queries": "Sorgular", "blocked": "Engellenen", "blocked_percent": "Engellenen %", - "gravity": "Yer Çekimi" + "gravity": "Gravity" }, "adguard": { "queries": "Sorgular", "blocked": "Engellenen", - "filtered": "Filtrelenen", + "filtered": "Filtrelendi", "latency": "Gecikme" }, "speedtest": { - "upload": "Yükle", - "download": "İndir", + "upload": "Yükleme", + "download": "İndirme", "ping": "Gecikme" }, "portainer": { - "running": "Çalışan", + "running": "Çalışıyor", "stopped": "Durduruldu", "total": "Toplam" }, @@ -353,10 +353,10 @@ }, "prowlarr": { "enableIndexers": "Dizin Oluşturucular", - "numberOfGrabs": "Yakalama Sayısı", + "numberOfGrabs": "Yakalamalar", "numberOfQueries": "Sorgular", - "numberOfFailGrabs": "Başarısız Yakalama Sayısı", - "numberOfFailQueries": "Başarısız Sorgu Sayısı" + "numberOfFailGrabs": "Başarısız Yakalamalar", + "numberOfFailQueries": "Başarısız Sorgular" }, "jackett": { "configured": "Yapılandırılmış", @@ -374,8 +374,8 @@ "domain_count": "Etki Alanları" }, "medusa": { - "wanted": "Aranan", - "queued": "Kuyrukta", + "wanted": "İstendi", + "queued": "Sırada", "series": "Diziler" }, "minecraft": { @@ -386,7 +386,7 @@ "down": "Çevrimdışı" }, "miniflux": { - "read": "Oku", + "read": "Okunan", "unread": "Okunmamış" }, "authentik": { @@ -404,17 +404,17 @@ "cpu": "CPU", "load": "Yük", "wait": "Lütfen bekleyin", - "temp": "Geçici", + "temp": "Sıcaklık", "_temp": "Sıcaklık", "warn": "Uyarı", - "uptime": "Çalışma Süresi", + "uptime": "Çalışıyor", "total": "Toplam", - "free": "Boşta", + "free": "Boş", "used": "Kullanımda", "days": "g", "hours": "sa", "crit": "Kritik", - "read": "Oku", + "read": "Okunan", "write": "Yazma", "gpu": "GPU", "mem": "Hafıza", @@ -495,7 +495,7 @@ "child_bridges": "Alt Köprüler", "child_bridges_status": "{{ok}}/{{total}}", "up": "Yükleme", - "pending": "Bekliyor", + "pending": "Bekleyen", "down": "İndirme" }, "healthchecks": { @@ -503,7 +503,7 @@ "up": "Yükleme", "grace": "Tolerans Döneminde", "down": "İndirme", - "paused": "Durduruldu", + "paused": "Duraklatıldı", "status": "Durum", "last_ping": "Son Ping", "never": "Henüz ping yok" @@ -636,8 +636,8 @@ "storage": "Depo" }, "uptimekuma": { - "up": "Sites Up", - "down": "Sites Down", + "up": "Siteler Çalışıyor", + "down": "Siteler Çalışmıyor", "uptime": "Çalışma Süresi", "incident": "Olay", "m": "dk" @@ -661,7 +661,7 @@ "mylar": { "series": "Diziler", "issues": "Sorunlar", - "wanted": "Aranan" + "wanted": "İstendi" }, "photoprism": { "albums": "Albümler", @@ -706,13 +706,13 @@ "nodes": "Düğümler" }, "prometheus": { - "targets_up": "Targets Up", - "targets_down": "Targets Down", + "targets_up": "Hedef Çalışıyor", + "targets_down": "Hedef Çalışmıyor", "targets_total": "Toplam Hedef" }, "gatus": { - "up": "Sites Up", - "down": "Sites Down", + "up": "Siteler Çalışıyor", + "down": "Siteler Çalışmıyor", "uptime": "Çalışma Süresi" }, "ghostfolio": { @@ -727,7 +727,7 @@ "booksDuration": "Süre" }, "homeassistant": { - "people_home": "People Home", + "people_home": "Evdeki İnsanlar", "lights_on": "Işıklar Açık", "switches_on": "Aç" }, @@ -754,14 +754,14 @@ "azuredevops": { "result": "Sonuç", "status": "Durum", - "buildId": "Build ID", + "buildId": "Yapı Kimliği", "succeeded": "Başarılı", "notStarted": "Henüz Başlamadı", "failed": "Başarısız", "canceled": "İptal edildi", "inProgress": "Sürüyor", - "totalPrs": "Total PRs", - "myPrs": "My PRs", + "totalPrs": "Toplam Çekme İstekleri", + "myPrs": "Benim Çekme İsteklerim", "approved": "Onaylı" }, "gamedig": { @@ -791,7 +791,7 @@ "openmediavault": { "downloading": "İndiriliyor", "total": "Toplam", - "running": "Çalışan", + "running": "Çalışıyor", "stopped": "Durduruldu", "passed": "Geçti", "failed": "Başarısız" @@ -809,9 +809,9 @@ "uptime": "Çalışma Süresi", "lastDown": "Son Kesinti", "downDuration": "Kesinti Süresi", - "sitesUp": "Sites Up", - "sitesDown": "Sites Down", - "paused": "Durduruldu", + "sitesUp": "Siteler Çalışıyor", + "sitesDown": "Siteler Çalışmıyor", + "paused": "Duraklatıldı", "notyetchecked": "Henüz Kontrol Edilmedi", "up": "Yükleme", "seemsdown": "Kapalı görünüyor", @@ -821,7 +821,7 @@ "calendar": { "inCinemas": "Sinemalarda", "physicalRelease": "Fiziksel Yayınlanan", - "digitalRelease": "Dijital Yayınlanan", + "digitalRelease": "Dijitalde Yayınlandı", "noEventsToday": "Bugün için etkinlik yok!", "noEventsFound": "Etkinlik bulunamadı" }, @@ -835,7 +835,7 @@ }, "plantit": { "events": "Etkinlikler", - "plants": "Plants", + "plants": "Bitkiler", "photos": "Fotoğraflar", "species": "Türler" }, @@ -854,11 +854,11 @@ "images": "Görseller", "imageSize": "Görsel Boyutu", "galleries": "Galeriler", - "performers": "Performers", + "performers": "Oyuncu", "studios": "Stüdyolar", "movies": "Filmler", "tags": "Etiketler", - "oCount": "O Count" + "oCount": "O Sayısı" }, "tandoor": { "users": "Kullanıcılar", @@ -875,6 +875,6 @@ }, "crowdsec": { "alerts": "Alarmlar", - "bans": "Bans" + "bans": "Yasaklar" } } diff --git a/public/locales/zh-Hans/common.json b/public/locales/zh-Hans/common.json index 5ae9de40..41706e9f 100644 --- a/public/locales/zh-Hans/common.json +++ b/public/locales/zh-Hans/common.json @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "等待断开连接", "connectionStatusDisconnecting": "正在断开连接", "connectionStatusDisconnected": "未连接", - "connectionStatusConnected": "Connected", + "connectionStatusConnected": "已连接", "uptime": "运行时间", "maxDown": "最大下载速度", "maxUp": "", @@ -279,9 +279,9 @@ }, "netalertx": { "total": "总计", - "connected": "Connected", - "new_devices": "New Devices", - "down_alerts": "Down Alerts" + "connected": "已连接", + "new_devices": "新设备", + "down_alerts": "离线警报" }, "pihole": { "queries": "查询", From 857ac1f7dc19819424e807ff8d2894788f2c90f7 Mon Sep 17 00:00:00 2001 From: "Noah S. Roberts" <35052448+Mase3206@users.noreply.github.com> Date: Fri, 10 May 2024 01:56:30 -0600 Subject: [PATCH 092/100] Documentation: use generic url in channels dvr widget docs (#3434) --- docs/widgets/services/channelsdvrserver.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/widgets/services/channelsdvrserver.md b/docs/widgets/services/channelsdvrserver.md index bedf8037..9dcafa58 100644 --- a/docs/widgets/services/channelsdvrserver.md +++ b/docs/widgets/services/channelsdvrserver.md @@ -8,5 +8,5 @@ Learn more about [Channels DVR Server](https://getchannels.com/dvr-server/). ```yaml widget: type: channelsdvrserver - url: http://192.168.1.55:8089 + url: http://server.host.or.ip:port ``` From d20ab844d6ec84062b22f6b5b7d339ce32789349 Mon Sep 17 00:00:00 2001 From: zinsmeik <77801963+zinsmeik@users.noreply.github.com> Date: Fri, 10 May 2024 15:23:54 +0200 Subject: [PATCH 093/100] Documentation: correct weatherapi example (#3436) --- docs/configs/settings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configs/settings.md b/docs/configs/settings.md index 753d71d8..ea5db734 100644 --- a/docs/configs/settings.md +++ b/docs/configs/settings.md @@ -363,7 +363,7 @@ providers: You can then pass `provider` instead of `apiKey` in your widget configuration. ```yaml -- weather: +- weatherapi: latitude: 50.449684 longitude: 30.525026 provider: weatherapi From 43ebd6d0c5ea88fcb87e713ecdda0f2661dedc08 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 16 May 2024 08:07:33 -0700 Subject: [PATCH 094/100] Fix: handle ghostfolio v2.79.0 breaking API changes (#3471) --- src/widgets/ghostfolio/component.jsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/widgets/ghostfolio/component.jsx b/src/widgets/ghostfolio/component.jsx index 3bd79325..747fdabf 100644 --- a/src/widgets/ghostfolio/component.jsx +++ b/src/widgets/ghostfolio/component.jsx @@ -5,8 +5,12 @@ import Block from "components/services/widget/block"; import useWidgetAPI from "utils/proxy/use-widget-api"; function getPerformancePercent(t, performanceRange) { - return `${performanceRange.performance.currentGrossPerformancePercent > 0 ? "+" : ""}${t("common.percent", { - value: performanceRange.performance.currentGrossPerformancePercent * 100, + // ghostfolio v2.79.0 changed to grossPerformancePercentage + const percent = + performanceRange.performance.grossPerformancePercentage ?? + performanceRange.performance.currentGrossPerformancePercent; + return `${percent > 0 ? "+" : ""}${t("common.percent", { + value: percent * 100, maximumFractionDigits: 2, })}`; } @@ -24,6 +28,10 @@ export default function Component({ service }) { return ; } + if (performanceToday?.statusCode === 401) { + return ; + } + if (!performanceToday || !performanceYear || !performanceMax) { return ( From a9ad2a2146e8caeaa834cbab3d0cfca693c22dcf Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 16 May 2024 08:28:12 -0700 Subject: [PATCH 095/100] Improve k8s not found pod status --- src/pages/api/kubernetes/status/[...service].js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/api/kubernetes/status/[...service].js b/src/pages/api/kubernetes/status/[...service].js index f771d69d..7d950038 100644 --- a/src/pages/api/kubernetes/status/[...service].js +++ b/src/pages/api/kubernetes/status/[...service].js @@ -43,8 +43,9 @@ export default async function handler(req, res) { if (pods.length === 0) { res.status(404).send({ - error: `no pods found with namespace=${namespace} and labelSelector=${labelSelector}`, + status: "not found", }); + logger.error(`no pods found with namespace=${namespace} and labelSelector=${labelSelector}`); return; } const someReady = pods.find((pod) => pod.status.phase === "Running"); From 1144f4dfa0a5fcb786505114bdc09b2589b04efe Mon Sep 17 00:00:00 2001 From: Jesus Lopez Date: Thu, 16 May 2024 18:09:50 -0700 Subject: [PATCH 096/100] Fix: allow exclamation to open quicklaunch (#3475) --- src/pages/index.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 5e1bd6e2..4ae5d93a 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -227,7 +227,8 @@ function Home({ initialSettings }) { (e.key.length === 1 && e.key.match(/(\w|\s|[à-ü]|[À-Ü]|[\w\u0430-\u044f])/gi) && !(e.altKey || e.ctrlKey || e.metaKey || e.shiftKey)) || - e.key.match(/([à-ü]|[À-Ü])/g) || // accented characters may require modifier keys + // accented characters and the bang may require modifier keys + e.key.match(/([à-ü]|[À-Ü]|!)/g) || (e.key === "v" && (e.ctrlKey || e.metaKey)) ) { setSearching(true); From 6ab6d6fd3a592da1ad3a6b446701253578e2a4de Mon Sep 17 00:00:00 2001 From: Conner Hnatiuk <46903591+ConnerWithAnE@users.noreply.github.com> Date: Thu, 16 May 2024 23:26:12 -0600 Subject: [PATCH 097/100] Feature: Wg-Easy Widget (#3476) --------- Co-authored-by: ConnerWithAnE <46903591+ConnerWithAnE@users.noreply.github.com> Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/wgeasy.md | 20 +++++++++ public/locales/en/common.json | 6 +++ src/utils/config/service-helpers.js | 6 +++ src/widgets/components.js | 1 + src/widgets/wgeasy/component.jsx | 45 +++++++++++++++++++ src/widgets/wgeasy/proxy.js | 70 +++++++++++++++++++++++++++++ src/widgets/wgeasy/widget.js | 8 ++++ src/widgets/widgets.js | 2 + 8 files changed, 158 insertions(+) create mode 100644 docs/widgets/services/wgeasy.md create mode 100644 src/widgets/wgeasy/component.jsx create mode 100644 src/widgets/wgeasy/proxy.js create mode 100644 src/widgets/wgeasy/widget.js diff --git a/docs/widgets/services/wgeasy.md b/docs/widgets/services/wgeasy.md new file mode 100644 index 00000000..c5442081 --- /dev/null +++ b/docs/widgets/services/wgeasy.md @@ -0,0 +1,20 @@ +--- +title: Wg-Easy +description: Wg-Easy Widget Configuration +--- + +Learn more about [Wg-Easy](https://github.com/wg-easy/wg-easy). + +Allowed fields: `["connected", "enabled", "disabled", "total"]`. + +Note: by default `["connected", "enabled", "total"]` are displayed. + +To detect if a device is connected the time since the last handshake is queried. `threshold` is the time to wait in minutes since the last handshake to consider a device connected. Default is 2 minutes. + +```yaml +widget: + type: wgeasy + url: http://wg.easy.or.ip + password: yourwgeasypassword + threshold: 2 # optional +``` diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 3ac3ed0d..15de0ee9 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -876,5 +876,11 @@ "crowdsec": { "alerts": "Alerts", "bans": "Bans" + }, + "wgeasy": { + "connected": "Connected", + "enabled": "Enabled", + "disabled": "Disabled", + "total": "Total" } } diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index aaee636c..8e2f12d5 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -462,6 +462,9 @@ export function cleanServiceGroups(groups) { // unifi site, + + // wgeasy + threshold, } = cleanedService.widget; let fieldsList = fields; @@ -596,6 +599,9 @@ export function cleanServiceGroups(groups) { cleanedService.widget.bitratePrecision = parseInt(bitratePrecision, 10); } } + if (type === "wgeasy") { + if (threshold !== undefined) cleanedService.widget.threshold = parseInt(threshold, 10); + } } return cleanedService; diff --git a/src/widgets/components.js b/src/widgets/components.js index 500fe0ce..1b5c4b68 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -117,6 +117,7 @@ const components = { uptimerobot: dynamic(() => import("./uptimerobot/component")), urbackup: dynamic(() => import("./urbackup/component")), watchtower: dynamic(() => import("./watchtower/component")), + wgeasy: dynamic(() => import("./wgeasy/component")), whatsupdocker: dynamic(() => import("./whatsupdocker/component")), xteve: dynamic(() => import("./xteve/component")), }; diff --git a/src/widgets/wgeasy/component.jsx b/src/widgets/wgeasy/component.jsx new file mode 100644 index 00000000..0289d48c --- /dev/null +++ b/src/widgets/wgeasy/component.jsx @@ -0,0 +1,45 @@ +import Container from "components/services/widget/container"; +import Block from "components/services/widget/block"; +import useWidgetAPI from "utils/proxy/use-widget-api"; + +export default function Component({ service }) { + const { widget } = service; + + const { data: infoData, error: infoError } = useWidgetAPI(widget); + + if (!widget.fields) { + widget.fields = ["connected", "enabled", "total"]; + } + + if (infoError) { + return ; + } + + if (!infoData) { + return ( + + + + + + + ); + } + + const enabled = infoData.filter((item) => item.enabled).length; + const disabled = infoData.length - enabled; + const connectionThreshold = widget.threshold ?? 2 * 60 * 1000; + const currentTime = new Date(); + const connected = infoData.filter( + (item) => currentTime - new Date(item.latestHandshakeAt) < connectionThreshold, + ).length; + + return ( + + + + + + + ); +} diff --git a/src/widgets/wgeasy/proxy.js b/src/widgets/wgeasy/proxy.js new file mode 100644 index 00000000..ec733475 --- /dev/null +++ b/src/widgets/wgeasy/proxy.js @@ -0,0 +1,70 @@ +import cache from "memory-cache"; + +import getServiceWidget from "utils/config/service-helpers"; +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 = "wgeasyProxyHandler"; +const logger = createLogger(proxyName); +const sessionSIDCacheKey = `${proxyName}__sessionSID`; + +async function login(widget, service) { + const url = formatApiCall(widgets[widget.type].api, { ...widget, endpoint: "session" }); + const [, , , responseHeaders] = await httpProxy(url, { + method: "POST", + body: JSON.stringify({ password: widget.password }), + headers: { + "Content-Type": "application/json", + }, + }); + + try { + const connectSidCookie = responseHeaders["set-cookie"] + .find((cookie) => cookie.startsWith("connect.sid=")) + .split(";")[0] + .replace("connect.sid=", ""); + cache.put(`${sessionSIDCacheKey}.${service}`, connectSidCookie); + return connectSidCookie; + } catch (e) { + logger.error(`Error logging into wg-easy`); + cache.del(`${sessionSIDCacheKey}.${service}`); + return null; + } +} + +export default async function wgeasyProxyHandler(req, res) { + const { group, service } = req.query; + + if (group && service) { + const widget = await getServiceWidget(group, service); + + if (!widgets?.[widget.type]?.api) { + return res.status(403).json({ error: "Service does not support API calls" }); + } + + if (widget) { + let sid = cache.get(`${sessionSIDCacheKey}.${service}`); + if (!sid) { + sid = await login(widget, service); + if (!sid) { + return res.status(500).json({ error: "Failed to authenticate with Wg-Easy" }); + } + } + const [, , data] = await httpProxy( + formatApiCall(widgets[widget.type].api, { ...widget, endpoint: "wireguard/client" }), + { + headers: { + "Content-Type": "application/json", + Cookie: `connect.sid=${sid}`, + }, + }, + ); + + return res.json(JSON.parse(data)); + } + } + + return res.status(400).json({ error: "Invalid proxy service type" }); +} diff --git a/src/widgets/wgeasy/widget.js b/src/widgets/wgeasy/widget.js new file mode 100644 index 00000000..7f7d69d7 --- /dev/null +++ b/src/widgets/wgeasy/widget.js @@ -0,0 +1,8 @@ +import wgeasyProxyHandler from "./proxy"; + +const widget = { + api: "{url}/api/{endpoint}", + proxyHandler: wgeasyProxyHandler, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 7ed98bfb..d6965f50 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -107,6 +107,7 @@ import unmanic from "./unmanic/widget"; import uptimekuma from "./uptimekuma/widget"; import uptimerobot from "./uptimerobot/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"; @@ -227,6 +228,7 @@ const widgets = { uptimerobot, urbackup, watchtower, + wgeasy, whatsupdocker, xteve, }; From 97d7ae21e483c13c71c3a61ff5f18ac0b119d3f8 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 17 May 2024 08:57:41 -0700 Subject: [PATCH 098/100] Fix: handle some status cases with non-existent k8s pods (#3489) --- src/widgets/kubernetes/component.jsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/widgets/kubernetes/component.jsx b/src/widgets/kubernetes/component.jsx index 2454f2aa..68d0da29 100644 --- a/src/widgets/kubernetes/component.jsx +++ b/src/widgets/kubernetes/component.jsx @@ -18,10 +18,13 @@ export default function Component({ service }) { ); if (statsError || statusError) { - return ; + return ; } - if (statusData && !(statusData.status.includes("running") || statusData.status.includes("partial"))) { + if ( + statusData && + (!statusData.status || !(statusData.status.includes("running") || statusData.status.includes("partial"))) + ) { return ( From 4d76443846ab0fa9c1b1b4cf1a4a20d982de0381 Mon Sep 17 00:00:00 2001 From: Nick Disiere Date: Tue, 21 May 2024 15:06:59 -0500 Subject: [PATCH 099/100] Fix: correct icon in the longhorn widget (#3509) --- src/components/widgets/longhorn/node.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/widgets/longhorn/node.jsx b/src/components/widgets/longhorn/node.jsx index da2882ee..75bff72c 100644 --- a/src/components/widgets/longhorn/node.jsx +++ b/src/components/widgets/longhorn/node.jsx @@ -1,5 +1,5 @@ import { useTranslation } from "next-i18next"; -import { FaThermometerHalf } from "react-icons/fa"; +import { FiHardDrive } from "react-icons/fi"; import Resource from "../widget/resource"; import WidgetLabel from "../widget/widget_label"; @@ -10,7 +10,7 @@ export default function Node({ data, expanded, labels }) { return ( Date: Wed, 22 May 2024 16:19:48 +0300 Subject: [PATCH 100/100] Documentation: DO Credits (#3505) --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- README.md | 7 +++++++ docs/index.md | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/README.md b/README.md index d137ba5e..b47ef870 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,13 @@ GitHub Sponsors

    +

    + DigitalOcean Referral Badge +

    +

    +Homepage builds are kindly powered by DigitalOcean. +

    + # Features With features like quick search, bookmarks, weather support, a wide range of integrations and widgets, an elegant and modern design, and a focus on performance, Homepage is your ideal start to the day and a handy companion throughout it. diff --git a/docs/index.md b/docs/index.md index 97a3704b..fe1c0adf 100644 --- a/docs/index.md +++ b/docs/index.md @@ -17,3 +17,10 @@ hide: A modern, fully static, fast, secure fully proxied, highly customizable application dashboard with integrations for over 100 services and translations into multiple languages. Easily configured via YAML files or through docker label discovery. ![Alt text](assets/homepage_demo.png) + +

    + DigitalOcean Referral Badge +

    +

    +Homepage builds are kindly powered by DigitalOcean. +