+
Date: Mon, 17 Mar 2025 12:32:09 -0700
Subject: [PATCH 62/93] Enhancement: support maximum group cols up 8 (#5022)
---
docs/configs/settings.md | 8 ++++----
src/components/services/group.jsx | 6 +++---
src/pages/_app.jsx | 6 ++++++
src/pages/index.jsx | 5 +++--
4 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/docs/configs/settings.md b/docs/configs/settings.md
index d56d0f75..bd000ccb 100644
--- a/docs/configs/settings.md
+++ b/docs/configs/settings.md
@@ -262,15 +262,15 @@ You can make homepage take up the entire window width by adding:
fullWidth: true
```
-### Five Columns
+### Maximum Group Columns
-You can add a fifth column to services (when `style: columns` which is default) by adding:
+You can set the maximum number of columns of service groups on larger screen sizes (groups with `style: columns` which is default) by adding:
```yaml
-fiveColumns: true
+maxGroupColumns: 8 # default is 4, max 8
```
-By default homepage will max out at 4 columns for services with `columns` style
+By default homepage will max out at 4 columns (also the minimum number). If you're setting this to 8, you may want to consider enabling the [fullWidth](#full-width) option as well.
### Collapsible sections
diff --git a/src/components/services/group.jsx b/src/components/services/group.jsx
index 06fb83e1..3e6327a4 100644
--- a/src/components/services/group.jsx
+++ b/src/components/services/group.jsx
@@ -10,7 +10,7 @@ import { columnMap } from "../../utils/layout/columns";
export default function ServicesGroup({
group,
layout,
- fiveColumns,
+ maxGroupColumns,
disableCollapse,
useEqualHeights,
groupsInitiallyCollapsed,
@@ -31,7 +31,7 @@ export default function ServicesGroup({
className={classNames(
"services-group flex-1",
layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/2 lg:basis-1/3 xl:basis-1/4",
- layout?.style !== "row" && fiveColumns ? "3xl:basis-1/5" : "",
+ layout?.style !== "row" && maxGroupColumns ? `3xl:basis-1/${maxGroupColumns}` : "",
groupPadding,
isSubgroup ? "subgroup" : "",
)}
@@ -97,7 +97,7 @@ export default function ServicesGroup({
key={subgroup.name}
group={subgroup}
layout={layout?.[subgroup.name]}
- fiveColumns={fiveColumns}
+ maxGroupColumns={maxGroupColumns}
disableCollapse={disableCollapse}
useEqualHeights={useEqualHeights}
groupsInitiallyCollapsed={groupsInitiallyCollapsed}
diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx
index 052412d9..f4345a7c 100644
--- a/src/pages/_app.jsx
+++ b/src/pages/_app.jsx
@@ -52,6 +52,12 @@ const tailwindSafelist = [
"dark:bg-white",
"bg-orange-400",
"dark:bg-orange-400",
+ // maxGroupColumns
+ "3xl:basis-1/4",
+ "3xl:basis-1/5",
+ "3xl:basis-1/6",
+ "3xl:basis-1/7",
+ "3xl:basis-1/8",
// yep
"h-0 h-1 h-2 h-3 h-4 h-5 h-6 h-7 h-8 h-9 h-10 h-11 h-12 h-13 h-14 h-15 h-16 h-17 h-18 h-19 h-20 h-21 h-22 h-23 h-24 h-25 h-26 h-27 h-28 h-29 h-30 h-31 h-32 h-33 h-34 h-35 h-36 h-37 h-38 h-39 h-40 h-41 h-42 h-43 h-44 h-45 h-46 h-47 h-48 h-49 h-50 h-51 h-52 h-53 h-54 h-55 h-56 h-57 h-58 h-59 h-60 h-61 h-62 h-63 h-64 h-65 h-66 h-67 h-68 h-69 h-70 h-71 h-72 h-73 h-74 h-75 h-76 h-77 h-78 h-79 h-80 h-81 h-82 h-83 h-84 h-85 h-86 h-87 h-88 h-89 h-90 h-91 h-92 h-93 h-94 h-95 h-96",
"sm:h-0 sm:h-1 sm:h-2 sm:h-3 sm:h-4 sm:h-5 sm:h-6 sm:h-7 sm:h-8 sm:h-9 sm:h-10 sm:h-11 sm:h-12 sm:h-13 sm:h-14 sm:h-15 sm:h-16 sm:h-17 sm:h-18 sm:h-19 sm:h-20 sm:h-21 sm:h-22 sm:h-23 sm:h-24 sm:h-25 sm:h-26 sm:h-27 sm:h-28 sm:h-29 sm:h-30 sm:h-31 sm:h-32 sm:h-33 sm:h-34 sm:h-35 sm:h-36 sm:h-37 sm:h-38 sm:h-39 sm:h-40 sm:h-41 sm:h-42 sm:h-43 sm:h-44 sm:h-45 sm:h-46 sm:h-47 sm:h-48 sm:h-49 sm:h-50 sm:h-51 sm:h-52 sm:h-53 sm:h-54 sm:h-55 sm:h-56 sm:h-57 sm:h-58 sm:h-59 sm:h-60 sm:h-61 sm:h-62 sm:h-63 sm:h-64 sm:h-65 sm:h-66 sm:h-67 sm:h-68 sm:h-69 sm:h-70 sm:h-71 sm:h-72 sm:h-73 sm:h-74 sm:h-75 sm:h-76 sm:h-77 sm:h-78 sm:h-79 sm:h-80 sm:h-81 sm:h-82 sm:h-83 sm:h-84 sm:h-85 sm:h-86 sm:h-87 sm:h-88 sm:h-89 sm:h-90 sm:h-91 sm:h-92 sm:h-93 sm:h-94 sm:h-95 sm:h-96",
diff --git a/src/pages/index.jsx b/src/pages/index.jsx
index 51f5ead3..96a9377d 100644
--- a/src/pages/index.jsx
+++ b/src/pages/index.jsx
@@ -323,7 +323,7 @@ function Home({ initialSettings }) {
key={group.name}
group={group}
layout={settings.layout?.[group.name]}
- fiveColumns={settings.fiveColumns}
+ maxGroupColumns={settings.fiveColumns ? 5 : settings.maxGroupColumns}
disableCollapse={settings.disableCollapse}
useEqualHeights={settings.useEqualHeights}
groupsInitiallyCollapsed={settings.groupsInitiallyCollapsed}
@@ -347,7 +347,7 @@ function Home({ initialSettings }) {
key={group.name}
group={group}
layout={settings.layout?.[group.name]}
- fiveColumns={settings.fiveColumns}
+ maxGroupColumns={settings.fiveColumns ? 5 : settings.maxGroupColumns}
disableCollapse={settings.disableCollapse}
groupsInitiallyCollapsed={settings.groupsInitiallyCollapsed}
/>
@@ -377,6 +377,7 @@ function Home({ initialSettings }) {
bookmarks,
settings.layout,
settings.fiveColumns,
+ settings.maxGroupColumns,
settings.disableCollapse,
settings.useEqualHeights,
settings.cardBlur,
From 708c4e64d1a94c4e6c445e853b295aeb3fbc50c8 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Mon, 17 Mar 2025 12:47:34 -0700
Subject: [PATCH 63/93] Tweak this
---
docs/configs/settings.md | 2 +-
src/pages/_app.jsx | 1 -
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/docs/configs/settings.md b/docs/configs/settings.md
index bd000ccb..d3882121 100644
--- a/docs/configs/settings.md
+++ b/docs/configs/settings.md
@@ -270,7 +270,7 @@ You can set the maximum number of columns of service groups on larger screen siz
maxGroupColumns: 8 # default is 4, max 8
```
-By default homepage will max out at 4 columns (also the minimum number). If you're setting this to 8, you may want to consider enabling the [fullWidth](#full-width) option as well.
+By default homepage will max out at 4 columns (thus the minimum for this setting is _5_). Of course, if you're setting this to higher numbers, you may want to consider enabling the [fullWidth](#full-width) option as well.
### Collapsible sections
diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx
index f4345a7c..8c5020f7 100644
--- a/src/pages/_app.jsx
+++ b/src/pages/_app.jsx
@@ -53,7 +53,6 @@ const tailwindSafelist = [
"bg-orange-400",
"dark:bg-orange-400",
// maxGroupColumns
- "3xl:basis-1/4",
"3xl:basis-1/5",
"3xl:basis-1/6",
"3xl:basis-1/7",
From a3b693e2b6bfe84ca33e35d7e77a13fd678a7c2d Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Mon, 17 Mar 2025 13:03:04 -0700
Subject: [PATCH 64/93] Support maxBookmarkGroupColumns too
---
docs/configs/settings.md | 12 +++++++++---
src/components/bookmarks/group.jsx | 4 ++++
src/pages/index.jsx | 3 +++
3 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/docs/configs/settings.md b/docs/configs/settings.md
index d3882121..9d35ae07 100644
--- a/docs/configs/settings.md
+++ b/docs/configs/settings.md
@@ -264,13 +264,19 @@ fullWidth: true
### Maximum Group Columns
-You can set the maximum number of columns of service groups on larger screen sizes (groups with `style: columns` which is default) by adding:
+You can set the maximum number of columns of groups on larger screen sizes (note this is only for groups with the default `style: columns`, not groups with `stle: row`) by adding:
```yaml
-maxGroupColumns: 8 # default is 4, max 8
+maxGroupColumns: 8 # default is 4 for services, 6 for bookmarks, max 8
```
-By default homepage will max out at 4 columns (thus the minimum for this setting is _5_). Of course, if you're setting this to higher numbers, you may want to consider enabling the [fullWidth](#full-width) option as well.
+By default homepage will max out at 4 columns for services and 6 for bookmarks, thus the minimum for this setting is _5_. Of course, if you're setting this to higher numbers, you may want to consider enabling the [fullWidth](#full-width) option as well.
+
+If you want to set the maximum columns for bookmark groups separately, you can do so by adding:
+
+```yaml
+maxBookmarkGroupColumns: 6 # default is 6, max 8
+```
### Collapsible sections
diff --git a/src/components/bookmarks/group.jsx b/src/components/bookmarks/group.jsx
index d8eb296d..726f54e8 100644
--- a/src/components/bookmarks/group.jsx
+++ b/src/components/bookmarks/group.jsx
@@ -12,6 +12,7 @@ export default function BookmarksGroup({
disableCollapse,
groupsInitiallyCollapsed,
bookmarksStyle,
+ maxGroupColumns,
}) {
const panel = useRef();
@@ -25,6 +26,9 @@ export default function BookmarksGroup({
className={classNames(
"bookmark-group flex-1 overflow-hidden",
layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/4 lg:basis-1/5 xl:basis-1/6",
+ layout?.style !== "row" && maxGroupColumns && parseInt(maxGroupColumns, 10) > 6
+ ? `3xl:basis-1/${maxGroupColumns}`
+ : "",
layout?.header === false ? "px-1" : "p-1 pb-0",
)}
>
diff --git a/src/pages/index.jsx b/src/pages/index.jsx
index 96a9377d..78702796 100644
--- a/src/pages/index.jsx
+++ b/src/pages/index.jsx
@@ -334,6 +334,7 @@ function Home({ initialSettings }) {
bookmarks={group}
layout={settings.layout?.[group.name]}
disableCollapse={settings.disableCollapse}
+ maxGroupColumns={settings.maxBookmarkGroupColumns ?? settings.maxGroupColumns}
groupsInitiallyCollapsed={settings.groupsInitiallyCollapsed}
/>
),
@@ -362,6 +363,7 @@ function Home({ initialSettings }) {
bookmarks={group}
layout={settings.layout?.[group.name]}
disableCollapse={settings.disableCollapse}
+ maxGroupColumns={settings.maxBookmarkGroupColumns ?? settings.maxGroupColumns}
groupsInitiallyCollapsed={settings.groupsInitiallyCollapsed}
bookmarksStyle={settings.bookmarksStyle}
/>
@@ -378,6 +380,7 @@ function Home({ initialSettings }) {
settings.layout,
settings.fiveColumns,
settings.maxGroupColumns,
+ settings.maxBookmarkGroupColumns,
settings.disableCollapse,
settings.useEqualHeights,
settings.cardBlur,
From fa28a116583b97a51f750ddec9c29cf2555432c7 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Mon, 17 Mar 2025 23:30:07 -0700
Subject: [PATCH 65/93] Fix: include new backdrop-blur-xs option (#5030)
---
docs/configs/settings.md | 2 +-
src/pages/_app.jsx | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/docs/configs/settings.md b/docs/configs/settings.md
index 9d35ae07..c1605f4d 100644
--- a/docs/configs/settings.md
+++ b/docs/configs/settings.md
@@ -78,7 +78,7 @@ background:
You can apply a blur filter to the service & bookmark cards. Note this option is incompatible with the background blur, saturate and brightness filters.
```yaml
-cardBlur: sm # sm, "", md, etc... see https://tailwindcss.com/docs/backdrop-blur
+cardBlur: xs # xs, md, etc... see https://tailwindcss.com/docs/backdrop-blur
```
## Favicon
diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx
index 8c5020f7..c5465a80 100644
--- a/src/pages/_app.jsx
+++ b/src/pages/_app.jsx
@@ -16,6 +16,7 @@ import nextI18nextConfig from "../../next-i18next.config";
const tailwindSafelist = [
// TODO: remove pending https://github.com/tailwindlabs/tailwindcss/pull/17147
"backdrop-blur",
+ "backdrop-blur-xs",
"backdrop-blur-sm",
"backdrop-blur-md",
"backdrop-blur-xl",
From aed602ad70cabf5ad259cb9ac5bbbbd0e8801d53 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Tue, 18 Mar 2025 19:29:43 -0700
Subject: [PATCH 66/93] Tweak: try to reduce rootless startup time (#5037)
---
docker-entrypoint.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh
index c2858808..9890fbee 100755
--- a/docker-entrypoint.sh
+++ b/docker-entrypoint.sh
@@ -15,7 +15,7 @@ export HOMEPAGE_BUILDTIME=$(date +%s)
# Set privileges for /app but only if pid 1 user is root and we are dropping privileges.
# If container is run as an unprivileged user, it means owner already handled ownership setup on their own.
# Running chown in that case (as non-root) will cause error
-[ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ] && chown -R ${PUID}:${PGID} /app
+[ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ] && chown -R ${PUID}:${PGID} /app/config /app/public
# Drop privileges (when asked to) if root, otherwise run as current user
if [ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ]; then
From 7fd5e6ccb16da4a727b5cb2d7ac1f49f87cc95f4 Mon Sep 17 00:00:00 2001
From: IhatemyISP <1625407+ihatemyisp@users.noreply.github.com>
Date: Wed, 19 Mar 2025 19:26:49 -0400
Subject: [PATCH 67/93] Tweak: change moonraker widget standby output (#4060)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
---
src/widgets/moonraker/component.jsx | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/src/widgets/moonraker/component.jsx b/src/widgets/moonraker/component.jsx
index f70a1c5b..ed99e418 100644
--- a/src/widgets/moonraker/component.jsx
+++ b/src/widgets/moonraker/component.jsx
@@ -36,14 +36,16 @@ export default function Component({ service }) {
const printStatsInfo = printStats.result.status.print_stats.info ?? {};
const { current_layer: currentLayer = "-", total_layer: totalLayer = "-" } = printStatsInfo;
+ const layers = printStats.result.status.print_stats.state === "standby" ? "- / -" : `${currentLayer} / ${totalLayer}`;
+ const progress =
+ printStats.result.status.print_stats.state === "standby"
+ ? "-"
+ : t("common.percent", { value: displayStatus.result.status.display_status.progress * 100 });
return (
-
-
+
+
);
From d853bbfe44a63d2d0e123a6ee41b769f5f9571ec Mon Sep 17 00:00:00 2001
From: Chris <67816022+vhsdream@users.noreply.github.com>
Date: Fri, 21 Mar 2025 00:46:54 -0400
Subject: [PATCH 68/93] Feature: Slskd Service Widget (#5045)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
---
docs/widgets/services/index.md | 1 +
docs/widgets/services/slskd.md | 25 +++++++++++++++
public/locales/en/common.json | 11 +++++++
src/widgets/components.js | 1 +
src/widgets/slskd/component.jsx | 55 +++++++++++++++++++++++++++++++++
src/widgets/slskd/widget.js | 21 +++++++++++++
src/widgets/widgets.js | 2 ++
7 files changed, 116 insertions(+)
create mode 100644 docs/widgets/services/slskd.md
create mode 100644 src/widgets/slskd/component.jsx
create mode 100644 src/widgets/slskd/widget.js
diff --git a/docs/widgets/services/index.md b/docs/widgets/services/index.md
index 15caadc2..beb6d491 100644
--- a/docs/widgets/services/index.md
+++ b/docs/widgets/services/index.md
@@ -117,6 +117,7 @@ You can also find a list of all available service widgets in the sidebar navigat
- [ruTorrent](rutorrent.md)
- [SABnzbd](sabnzbd.md)
- [Scrutiny](scrutiny.md)
+- [Slskd](slskd.md)
- [Sonarr](sonarr.md)
- [Speedtest Tracker](speedtest-tracker.md)
- [Stash](stash.md)
diff --git a/docs/widgets/services/slskd.md b/docs/widgets/services/slskd.md
new file mode 100644
index 00000000..7afb0760
--- /dev/null
+++ b/docs/widgets/services/slskd.md
@@ -0,0 +1,25 @@
+---
+title: Slskd
+description: Slskd Widget Configuration
+---
+
+Learn more about [Slskd](https://github.com/slskd/slskd).
+
+Generate an API key for slskd with `openssl rand -base64 48`.
+Add it to your `path/to/config/slskd.yml` in `web > authentication > api_keys`:
+
+```yaml
+homepage_widget:
+ key:
+ role: readonly
+ cidr:
+```
+
+Allowed fields: `["slskStatus", "updateStatus", "downloads", "uploads", "sharedFiles"]` (maximum of 4).
+
+```yaml
+widget:
+ type: slskd
+ url: http[s]://slskd.host.or.ip[:5030]
+ key: generatedapikey
+```
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 2bc4cf9c..0535cd6e 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -1030,5 +1030,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
+ },
+ "slskd": {
+ "slskStatus": "Network",
+ "connected": "Connected",
+ "disconnected": "Disconnected",
+ "updateStatus": "Update",
+ "update_yes": "Available",
+ "update_no": "Up to Date",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Files"
}
}
diff --git a/src/widgets/components.js b/src/widgets/components.js
index 6c12d823..148a626b 100644
--- a/src/widgets/components.js
+++ b/src/widgets/components.js
@@ -113,6 +113,7 @@ const components = {
rutorrent: dynamic(() => import("./rutorrent/component")),
sabnzbd: dynamic(() => import("./sabnzbd/component")),
scrutiny: dynamic(() => import("./scrutiny/component")),
+ slskd: dynamic(() => import("./slskd/component")),
sonarr: dynamic(() => import("./sonarr/component")),
speedtest: dynamic(() => import("./speedtest/component")),
spoolman: dynamic(() => import("./spoolman/component")),
diff --git a/src/widgets/slskd/component.jsx b/src/widgets/slskd/component.jsx
new file mode 100644
index 00000000..8c26d4e4
--- /dev/null
+++ b/src/widgets/slskd/component.jsx
@@ -0,0 +1,55 @@
+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";
+
+const slskdDefaultFields = ["slskStatus", "downloads", "uploads", "sharedFiles"];
+const MAX_ALLOWED_FIELDS = 4;
+
+export default function Component({ service }) {
+ const { t } = useTranslation();
+ const { widget } = service;
+
+ const { data: appData, error: appError } = useWidgetAPI(widget, "application");
+ const { data: downData, error: downError } = useWidgetAPI(widget, "downloads");
+ const { data: upData, error: upError } = useWidgetAPI(widget, "uploads");
+
+ if (appError || downError || upError) {
+ return ;
+ }
+
+ if (!widget.fields || widget.fields.length === 0) {
+ widget.fields = slskdDefaultFields;
+ } else if (widget.fields?.length > MAX_ALLOWED_FIELDS) {
+ widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS);
+ }
+
+ if (!appData || !downData || !upData) {
+ return (
+
+
+
+
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/widgets/slskd/widget.js b/src/widgets/slskd/widget.js
new file mode 100644
index 00000000..fdea7738
--- /dev/null
+++ b/src/widgets/slskd/widget.js
@@ -0,0 +1,21 @@
+import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
+import { asJson } from "utils/proxy/api-helpers";
+
+const widget = {
+ api: `{url}/api/v0/{endpoint}`,
+ proxyHandler: credentialedProxyHandler,
+
+ mappings: {
+ application: {
+ endpoint: "application",
+ },
+ downloads: {
+ endpoint: "transfers/downloads",
+ },
+ uploads: {
+ endpoint: "transfers/uploads",
+ },
+ },
+};
+
+export default widget;
diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js
index 1537301c..21cff92b 100644
--- a/src/widgets/widgets.js
+++ b/src/widgets/widgets.js
@@ -104,6 +104,7 @@ import readarr from "./readarr/widget";
import rutorrent from "./rutorrent/widget";
import sabnzbd from "./sabnzbd/widget";
import scrutiny from "./scrutiny/widget";
+import slskd from "./slskd/widget";
import sonarr from "./sonarr/widget";
import speedtest from "./speedtest/widget";
import spoolman from "./spoolman/widget";
@@ -244,6 +245,7 @@ const widgets = {
rutorrent,
sabnzbd,
scrutiny,
+ slskd,
sonarr,
speedtest,
spoolman,
From a4b07b91fedc85cad69df74d11a7001adb92328c Mon Sep 17 00:00:00 2001
From: chiragkrishna
Date: Sat, 22 Mar 2025 20:15:27 +0530
Subject: [PATCH 69/93] Enhancement: Add Repositories field to Gitea (#5053)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
---
docs/widgets/services/gitea.md | 2 +-
public/locales/en/common.json | 7 ++++---
src/widgets/gitea/component.jsx | 11 ++++++++---
src/widgets/gitea/widget.js | 3 +++
4 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/docs/widgets/services/gitea.md b/docs/widgets/services/gitea.md
index 140c4ee7..eb47849d 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: `["repositories", "notifications", "issues", "pulls"]`.
```yaml
widget:
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 0535cd6e..4a9c33d5 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -883,9 +883,10 @@
"species": "Species"
},
"gitea": {
- "notifications": "Notifications",
- "issues": "Issues",
- "pulls": "Pull Requests"
+ "notifications": "Notifications",
+ "issues": "Issues",
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
diff --git a/src/widgets/gitea/component.jsx b/src/widgets/gitea/component.jsx
index 74e6dc82..c45ded06 100644
--- a/src/widgets/gitea/component.jsx
+++ b/src/widgets/gitea/component.jsx
@@ -8,17 +8,21 @@ export default function Component({ service }) {
const { data: giteaNotifications, error: giteaNotificationsError } = useWidgetAPI(widget, "notifications");
const { data: giteaIssues, error: giteaIssuesError } = useWidgetAPI(widget, "issues");
+ const { data: giteaRepositories, error: giteaRepositoriesError } = useWidgetAPI(widget, "repositories");
- if (giteaNotificationsError || giteaIssuesError) {
- return ;
+ if (giteaNotificationsError || giteaIssuesError || giteaRepositoriesError) {
+ return (
+
+ );
}
- if (!giteaNotifications || !giteaIssues) {
+ if (!giteaNotifications || !giteaIssues || !giteaRepositories) {
return (
+
);
}
@@ -28,6 +32,7 @@ export default function Component({ service }) {
+
);
}
diff --git a/src/widgets/gitea/widget.js b/src/widgets/gitea/widget.js
index 32871b00..b0420ccc 100644
--- a/src/widgets/gitea/widget.js
+++ b/src/widgets/gitea/widget.js
@@ -16,6 +16,9 @@ const widget = {
issues: asJson(data).filter((issue) => !issue.pull_request),
}),
},
+ repositories: {
+ endpoint: "repos/search",
+ },
},
};
From 5d557844cc8a738f0cfe4a84c02fea2804862ff9 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sat, 22 Mar 2025 07:49:16 -0700
Subject: [PATCH 70/93] Chore(deps): Bump next from 15.1.7 to 15.2.3 (#5055)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 113 ++++++++++++++++++++++++++-----------------------
2 files changed, 61 insertions(+), 54 deletions(-)
diff --git a/package.json b/package.json
index 2b8bd695..83e80a38 100644
--- a/package.json
+++ b/package.json
@@ -25,7 +25,7 @@
"luxon": "^3.5.0",
"memory-cache": "^0.2.0",
"minecraftstatuspinger": "^1.2.2",
- "next": "^15.1.7",
+ "next": "^15.2.3",
"next-i18next": "^12.1.0",
"ping": "^0.4.4",
"pretty-bytes": "^6.1.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 6b5c5910..2848e239 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -51,11 +51,11 @@ importers:
specifier: ^1.2.2
version: 1.2.2
next:
- specifier: ^15.1.7
- version: 15.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^15.2.3
+ version: 15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-i18next:
specifier: ^12.1.0
- version: 12.1.0(next@15.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 12.1.0(next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
ping:
specifier: ^0.4.4
version: 0.4.4
@@ -101,6 +101,10 @@ importers:
xml-js:
specifier: ^1.6.11
version: 1.6.11
+ optionalDependencies:
+ osx-temperature-sensor:
+ specifier: ^1.0.8
+ version: 1.0.8
devDependencies:
'@tailwindcss/forms':
specifier: ^0.5.10
@@ -147,10 +151,6 @@ importers:
typescript:
specifier: ^5.7.3
version: 5.7.3
- optionalDependencies:
- osx-temperature-sensor:
- specifier: ^1.0.8
- version: 1.0.8
packages:
@@ -376,56 +376,56 @@ packages:
'@kubernetes/client-node@1.0.0':
resolution: {integrity: sha512-a8NSvFDSHKFZ0sR1hbPSf8IDFNJwctEU5RodSCNiq/moRXWmrdmqhb1RRQzF+l+TSBaDgHw3YsYNxxE92STBzw==}
- '@next/env@15.1.7':
- resolution: {integrity: sha512-d9jnRrkuOH7Mhi+LHav2XW91HOgTAWHxjMPkXMGBc9B2b7614P7kjt8tAplRvJpbSt4nbO1lugcT/kAaWzjlLQ==}
+ '@next/env@15.2.3':
+ resolution: {integrity: sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==}
'@next/eslint-plugin-next@15.1.7':
resolution: {integrity: sha512-kRP7RjSxfTO13NE317ek3mSGzoZlI33nc/i5hs1KaWpK+egs85xg0DJ4p32QEiHnR0mVjuUfhRIun7awqfL7pQ==}
- '@next/swc-darwin-arm64@15.1.7':
- resolution: {integrity: sha512-hPFwzPJDpA8FGj7IKV3Yf1web3oz2YsR8du4amKw8d+jAOHfYHYFpMkoF6vgSY4W6vB29RtZEklK9ayinGiCmQ==}
+ '@next/swc-darwin-arm64@15.2.3':
+ resolution: {integrity: sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@next/swc-darwin-x64@15.1.7':
- resolution: {integrity: sha512-2qoas+fO3OQKkU0PBUfwTiw/EYpN+kdAx62cePRyY1LqKtP09Vp5UcUntfZYajop5fDFTjSxCHfZVRxzi+9FYQ==}
+ '@next/swc-darwin-x64@15.2.3':
+ resolution: {integrity: sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@next/swc-linux-arm64-gnu@15.1.7':
- resolution: {integrity: sha512-sKLLwDX709mPdzxMnRIXLIT9zaX2w0GUlkLYQnKGoXeWUhcvpCrK+yevcwCJPdTdxZEUA0mOXGLdPsGkudGdnA==}
+ '@next/swc-linux-arm64-gnu@15.2.3':
+ resolution: {integrity: sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-arm64-musl@15.1.7':
- resolution: {integrity: sha512-zblK1OQbQWdC8fxdX4fpsHDw+VSpBPGEUX4PhSE9hkaWPrWoeIJn+baX53vbsbDRaDKd7bBNcXRovY1hEhFd7w==}
+ '@next/swc-linux-arm64-musl@15.2.3':
+ resolution: {integrity: sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-x64-gnu@15.1.7':
- resolution: {integrity: sha512-GOzXutxuLvLHFDAPsMP2zDBMl1vfUHHpdNpFGhxu90jEzH6nNIgmtw/s1MDwpTOiM+MT5V8+I1hmVFeAUhkbgQ==}
+ '@next/swc-linux-x64-gnu@15.2.3':
+ resolution: {integrity: sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-linux-x64-musl@15.1.7':
- resolution: {integrity: sha512-WrZ7jBhR7ATW1z5iEQ0ZJfE2twCNSXbpCSaAunF3BKcVeHFADSI/AW1y5Xt3DzTqPF1FzQlwQTewqetAABhZRQ==}
+ '@next/swc-linux-x64-musl@15.2.3':
+ resolution: {integrity: sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-win32-arm64-msvc@15.1.7':
- resolution: {integrity: sha512-LDnj1f3OVbou1BqvvXVqouJZKcwq++mV2F+oFHptToZtScIEnhNRJAhJzqAtTE2dB31qDYL45xJwrc+bLeKM2Q==}
+ '@next/swc-win32-arm64-msvc@15.2.3':
+ resolution: {integrity: sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@next/swc-win32-x64-msvc@15.1.7':
- resolution: {integrity: sha512-dC01f1quuf97viOfW05/K8XYv2iuBgAxJZl7mbCKEjMgdQl5JjAKJ0D2qMKZCgPWDeFbFT0Q0nYWwytEW0DWTQ==}
+ '@next/swc-win32-x64-msvc@15.2.3':
+ resolution: {integrity: sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -882,8 +882,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- caniuse-lite@1.0.30001700:
- resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==}
+ caniuse-lite@1.0.30001706:
+ resolution: {integrity: sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==}
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -1955,6 +1955,11 @@ packages:
nan@2.22.0:
resolution: {integrity: sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==}
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
nanoid@3.3.8:
resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -1970,8 +1975,8 @@ packages:
next: '>= 10.0.0'
react: '>= 16.8.0'
- next@15.1.7:
- resolution: {integrity: sha512-GNeINPGS9c6OZKCvKypbL8GTsT5GhWPp4DM0fzkXJuXMilOO2EeFxuAY6JZbtk6XIl6Ws10ag3xRINDjSO5+wg==}
+ next@15.2.3:
+ resolution: {integrity: sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true
peerDependencies:
@@ -2977,34 +2982,34 @@ snapshots:
- encoding
- utf-8-validate
- '@next/env@15.1.7': {}
+ '@next/env@15.2.3': {}
'@next/eslint-plugin-next@15.1.7':
dependencies:
fast-glob: 3.3.1
- '@next/swc-darwin-arm64@15.1.7':
+ '@next/swc-darwin-arm64@15.2.3':
optional: true
- '@next/swc-darwin-x64@15.1.7':
+ '@next/swc-darwin-x64@15.2.3':
optional: true
- '@next/swc-linux-arm64-gnu@15.1.7':
+ '@next/swc-linux-arm64-gnu@15.2.3':
optional: true
- '@next/swc-linux-arm64-musl@15.1.7':
+ '@next/swc-linux-arm64-musl@15.2.3':
optional: true
- '@next/swc-linux-x64-gnu@15.1.7':
+ '@next/swc-linux-x64-gnu@15.2.3':
optional: true
- '@next/swc-linux-x64-musl@15.1.7':
+ '@next/swc-linux-x64-musl@15.2.3':
optional: true
- '@next/swc-win32-arm64-msvc@15.1.7':
+ '@next/swc-win32-arm64-msvc@15.2.3':
optional: true
- '@next/swc-win32-x64-msvc@15.1.7':
+ '@next/swc-win32-x64-msvc@15.2.3':
optional: true
'@nodelib/fs.scandir@2.1.5':
@@ -3486,7 +3491,7 @@ snapshots:
callsites@3.1.0: {}
- caniuse-lite@1.0.30001700: {}
+ caniuse-lite@1.0.30001706: {}
chalk@4.1.2:
dependencies:
@@ -4684,11 +4689,13 @@ snapshots:
nan@2.22.0:
optional: true
+ nanoid@3.3.11: {}
+
nanoid@3.3.8: {}
natural-compare@1.4.0: {}
- next-i18next@12.1.0(next@15.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ next-i18next@12.1.0(next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@babel/runtime': 7.26.9
'@types/hoist-non-react-statics': 3.3.6
@@ -4696,33 +4703,33 @@ snapshots:
hoist-non-react-statics: 3.3.2
i18next: 21.10.0
i18next-fs-backend: 1.2.0
- next: 15.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ next: 15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
react-i18next: 11.18.6(i18next@21.10.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
transitivePeerDependencies:
- react-dom
- react-native
- next@15.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- '@next/env': 15.1.7
+ '@next/env': 15.2.3
'@swc/counter': 0.1.3
'@swc/helpers': 0.5.15
busboy: 1.6.0
- caniuse-lite: 1.0.30001700
+ caniuse-lite: 1.0.30001706
postcss: 8.4.31
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
styled-jsx: 5.1.6(react@18.3.1)
optionalDependencies:
- '@next/swc-darwin-arm64': 15.1.7
- '@next/swc-darwin-x64': 15.1.7
- '@next/swc-linux-arm64-gnu': 15.1.7
- '@next/swc-linux-arm64-musl': 15.1.7
- '@next/swc-linux-x64-gnu': 15.1.7
- '@next/swc-linux-x64-musl': 15.1.7
- '@next/swc-win32-arm64-msvc': 15.1.7
- '@next/swc-win32-x64-msvc': 15.1.7
+ '@next/swc-darwin-arm64': 15.2.3
+ '@next/swc-darwin-x64': 15.2.3
+ '@next/swc-linux-arm64-gnu': 15.2.3
+ '@next/swc-linux-arm64-musl': 15.2.3
+ '@next/swc-linux-x64-gnu': 15.2.3
+ '@next/swc-linux-x64-musl': 15.2.3
+ '@next/swc-win32-arm64-msvc': 15.2.3
+ '@next/swc-win32-x64-msvc': 15.2.3
sharp: 0.33.5
transitivePeerDependencies:
- '@babel/core'
@@ -4860,7 +4867,7 @@ snapshots:
postcss@8.4.31:
dependencies:
- nanoid: 3.3.8
+ nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
From 1f8fd1c69db299ad93a38270b7e107f5fc84174e Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sun, 23 Mar 2025 07:11:20 -0700
Subject: [PATCH 71/93] Add install pnpm to source instructions
---
docs/installation/source.md | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/docs/installation/source.md b/docs/installation/source.md
index 6697eb92..fd0275a7 100644
--- a/docs/installation/source.md
+++ b/docs/installation/source.md
@@ -9,7 +9,13 @@ First, clone the repository:
git clone https://github.com/gethomepage/homepage.git
```
-Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like):
+If `pnpm` is not installed, install it:
+
+```bash
+npm install -g pnpm
+```
+
+Then install dependencies and build the production bundle:
```bash
pnpm install
From 77bbdc6a0475bd788ec729717e88eb42d2c183d7 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 27 Mar 2025 13:21:33 -0700
Subject: [PATCH 72/93] New Crowdin translations by GitHub Action (#5010)
Co-authored-by: Crowdin Bot
---
public/locales/af/common.json | 24 +++--
public/locales/ar/common.json | 14 ++-
public/locales/bg/common.json | 14 ++-
public/locales/ca/common.json | 14 ++-
public/locales/cs/common.json | 14 ++-
public/locales/da/common.json | 14 ++-
public/locales/de/common.json | 24 +++--
public/locales/el/common.json | 14 ++-
public/locales/eo/common.json | 14 ++-
public/locales/es/common.json | 14 ++-
public/locales/eu/common.json | 14 ++-
public/locales/fi/common.json | 14 ++-
public/locales/fr/common.json | 28 ++++--
public/locales/he/common.json | 14 ++-
public/locales/hi/common.json | 14 ++-
public/locales/hr/common.json | 14 ++-
public/locales/hu/common.json | 14 ++-
public/locales/id/common.json | 32 ++++---
public/locales/it/common.json | 14 ++-
public/locales/ja/common.json | 14 ++-
public/locales/ko/common.json | 14 ++-
public/locales/lv/common.json | 14 ++-
public/locales/ms/common.json | 14 ++-
public/locales/nl/common.json | 14 ++-
public/locales/no/common.json | 14 ++-
public/locales/pl/common.json | 14 ++-
public/locales/pt/common.json | 14 ++-
public/locales/pt_BR/common.json | 138 ++++++++++++++++-------------
public/locales/ro/common.json | 14 ++-
public/locales/ru/common.json | 50 +++++++----
public/locales/sk/common.json | 14 ++-
public/locales/sl/common.json | 14 ++-
public/locales/sr/common.json | 14 ++-
public/locales/sv/common.json | 14 ++-
public/locales/te/common.json | 14 ++-
public/locales/th/common.json | 14 ++-
public/locales/tr/common.json | 14 ++-
public/locales/uk/common.json | 14 ++-
public/locales/vi/common.json | 14 ++-
public/locales/yue/common.json | 14 ++-
public/locales/zh-Hans/common.json | 14 ++-
public/locales/zh-Hant/common.json | 14 ++-
42 files changed, 652 insertions(+), 148 deletions(-)
diff --git a/public/locales/af/common.json b/public/locales/af/common.json
index 20f3d170..bf1e5f9c 100644
--- a/public/locales/af/common.json
+++ b/public/locales/af/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Kennisgewings",
"issues": "Kwessies",
- "pulls": "Trek Versoeke"
+ "pulls": "Trek Versoeke",
+ "repositories": "Bewaarplekke"
},
"stash": {
"scenes": "Tonele",
@@ -1024,11 +1025,22 @@
"timeleft": "Oorblywende Tyd"
},
"hoarder": {
- "bookmarks": "Bookmarks",
- "favorites": "Favorites",
- "archived": "Archived",
- "highlights": "Highlights",
- "lists": "Lists",
+ "bookmarks": "Boekmerke",
+ "favorites": "Gunstelinge",
+ "archived": "Geargiveer",
+ "highlights": "Hoogtepunte",
+ "lists": "Lyste",
"tags": "Merkers"
+ },
+ "slskd": {
+ "slskStatus": "Netwerk",
+ "connected": "Gekoppel",
+ "disconnected": "Ontkoppel",
+ "updateStatus": "Opdateer",
+ "update_yes": "Beskikbaar",
+ "update_no": "Op Datum",
+ "downloads": "Aflaaie",
+ "uploads": "Oplaaie",
+ "sharedFiles": "Lêers"
}
}
diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json
index 7c7344f8..baa4d593 100644
--- a/public/locales/ar/common.json
+++ b/public/locales/ar/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "الإشعارات",
"issues": "المُشكِلات",
- "pulls": "طلبات السحب"
+ "pulls": "طلبات السحب",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "المشاهد",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "التصنيفات"
+ },
+ "slskd": {
+ "slskStatus": "الشبكة",
+ "connected": "متصل",
+ "disconnected": "غير متصل",
+ "updateStatus": "Update",
+ "update_yes": "متاح",
+ "update_no": "حتى الآن",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "ملفات"
}
}
diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json
index 74505cc6..3c721bce 100644
--- a/public/locales/bg/common.json
+++ b/public/locales/bg/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Известия",
"issues": "Издания",
- "pulls": "Заявки за сливане"
+ "pulls": "Заявки за сливане",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Сцени",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Тагове"
+ },
+ "slskd": {
+ "slskStatus": "Мрежа",
+ "connected": "Свързан",
+ "disconnected": "Не е свързан",
+ "updateStatus": "Update",
+ "update_yes": "Наличен",
+ "update_no": "Актуално",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Файлове"
}
}
diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json
index 620a0df5..07b1f611 100644
--- a/public/locales/ca/common.json
+++ b/public/locales/ca/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notificacions",
"issues": "Problemes",
- "pulls": "Sol·licitud de Canvis"
+ "pulls": "Sol·licitud de Canvis",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Escenes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Etiquetes"
+ },
+ "slskd": {
+ "slskStatus": "Xarxa",
+ "connected": "Connectat",
+ "disconnected": "Desconnectat",
+ "updateStatus": "Update",
+ "update_yes": "Disponible",
+ "update_no": "Actualitzat",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Fitxers"
}
}
diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json
index 31c7921a..e9a8061d 100644
--- a/public/locales/cs/common.json
+++ b/public/locales/cs/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Problémy",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
+ },
+ "slskd": {
+ "slskStatus": "Network",
+ "connected": "",
+ "disconnected": "Odpojeno",
+ "updateStatus": "Update",
+ "update_yes": "Dostupné",
+ "update_no": "Žádné",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Soubory"
}
}
diff --git a/public/locales/da/common.json b/public/locales/da/common.json
index 8a354b91..901d0ce4 100644
--- a/public/locales/da/common.json
+++ b/public/locales/da/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Problemer",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
+ },
+ "slskd": {
+ "slskStatus": "Network",
+ "connected": "Connected",
+ "disconnected": "Disconnected",
+ "updateStatus": "Update",
+ "update_yes": "Tilgængelig",
+ "update_no": "Opdateret",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Filer"
}
}
diff --git a/public/locales/de/common.json b/public/locales/de/common.json
index 69c0fe7c..94fb91aa 100644
--- a/public/locales/de/common.json
+++ b/public/locales/de/common.json
@@ -447,7 +447,7 @@
"write": "Schreiben",
"gpu": "GPU",
"mem": "RAM",
- "swap": "Swap"
+ "swap": "Auslagerung"
},
"quicklaunch": {
"bookmark": "Lesezeichen",
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Benachrichtigungen",
"issues": "Probleme",
- "pulls": "Pull-Requests"
+ "pulls": "Pull-Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Szenen",
@@ -1024,11 +1025,22 @@
"timeleft": "Verbleibende Zeit"
},
"hoarder": {
- "bookmarks": "Bookmarks",
- "favorites": "Favorites",
- "archived": "Archived",
+ "bookmarks": "Lesezeichen",
+ "favorites": "Favoriten",
+ "archived": "Archiviert",
"highlights": "Highlights",
- "lists": "Lists",
+ "lists": "Listen",
"tags": "Schlagwörter"
+ },
+ "slskd": {
+ "slskStatus": "Netzwerk",
+ "connected": "Verbunden",
+ "disconnected": "Getrennt",
+ "updateStatus": "Update",
+ "update_yes": "Verfügbar",
+ "update_no": "Aktuell",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Dateien"
}
}
diff --git a/public/locales/el/common.json b/public/locales/el/common.json
index c582f49f..b1cbe307 100644
--- a/public/locales/el/common.json
+++ b/public/locales/el/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Issues",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Ετικέτες"
+ },
+ "slskd": {
+ "slskStatus": "Δίκτυο",
+ "connected": "Συνδέθηκε",
+ "disconnected": "Αποσυνδέθηκε",
+ "updateStatus": "Update",
+ "update_yes": "Διαθέσιμο",
+ "update_no": "Ενημερωμένο",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Αρχεία"
}
}
diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json
index 8a7bb831..908bd124 100644
--- a/public/locales/eo/common.json
+++ b/public/locales/eo/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Issues",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
+ },
+ "slskd": {
+ "slskStatus": "Network",
+ "connected": "Connected",
+ "disconnected": "Disconnected",
+ "updateStatus": "Update",
+ "update_yes": "Havebla",
+ "update_no": "Up to Date",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Files"
}
}
diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index 9d23e343..a5ac67ed 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notificaciones",
"issues": "Números",
- "pulls": "Solicitudes de cambios"
+ "pulls": "Solicitudes de cambios",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Escenas",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Etiquetas"
+ },
+ "slskd": {
+ "slskStatus": "Red",
+ "connected": "Conectado",
+ "disconnected": "Desconectado",
+ "updateStatus": "Update",
+ "update_yes": "Disponible",
+ "update_no": "Actualizado",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Archivos"
}
}
diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json
index f935b928..f0654ebb 100644
--- a/public/locales/eu/common.json
+++ b/public/locales/eu/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Jakinarazpenak",
"issues": "Arazoak",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Zerrendak",
"tags": "Etiketak"
+ },
+ "slskd": {
+ "slskStatus": "Network",
+ "connected": "Konektatuta",
+ "disconnected": "Deskonektatuta",
+ "updateStatus": "Update",
+ "update_yes": "Available",
+ "update_no": "Up to Date",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Files"
}
}
diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json
index 782bc2c4..b1ff23b4 100644
--- a/public/locales/fi/common.json
+++ b/public/locales/fi/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Issues",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
+ },
+ "slskd": {
+ "slskStatus": "Network",
+ "connected": "Connected",
+ "disconnected": "Disconnected",
+ "updateStatus": "Update",
+ "update_yes": "Saatavilla",
+ "update_no": "Up to Date",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Files"
}
}
diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json
index 191706b2..f0cd54f6 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -149,8 +149,8 @@
"received": "Reçu",
"sent": "Envoyé",
"externalIPAddress": "IP externe",
- "externalIPv6Address": "Ext. IPv6",
- "externalIPv6Prefix": "Ext. IPv6-Prefix"
+ "externalIPv6Address": "IPv6 externe",
+ "externalIPv6Prefix": "Préfixe IPv6 externe"
},
"caddy": {
"upstreams": "En amont",
@@ -178,7 +178,7 @@
"connectedAp": "AP connectés",
"activeUser": "Périphériques actifs",
"alerts": "Alertes",
- "connectedGateways": "Connected gateways",
+ "connectedGateways": "Passerelles connectées",
"connectedSwitches": "Switchs connectés"
},
"nzbget": {
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Anomalies",
- "pulls": "Demandes de tirage"
+ "pulls": "Demandes de tirage",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scènes",
@@ -1024,11 +1025,22 @@
"timeleft": "Temps restant"
},
"hoarder": {
- "bookmarks": "Bookmarks",
- "favorites": "Favorites",
- "archived": "Archived",
+ "bookmarks": "Marque-pages",
+ "favorites": "Favoris",
+ "archived": "Archivé",
"highlights": "Highlights",
- "lists": "Lists",
+ "lists": "Listes",
"tags": "Étiquettes"
+ },
+ "slskd": {
+ "slskStatus": "Réseau",
+ "connected": "Connecté",
+ "disconnected": "Déconnecté",
+ "updateStatus": "Mise à jour",
+ "update_yes": "Disponible",
+ "update_no": "À jour",
+ "downloads": "Téléchargements",
+ "uploads": "Téléversements",
+ "sharedFiles": "Fichiers"
}
}
diff --git a/public/locales/he/common.json b/public/locales/he/common.json
index 57ce66b9..2751430c 100644
--- a/public/locales/he/common.json
+++ b/public/locales/he/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Issues",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
+ },
+ "slskd": {
+ "slskStatus": "Network",
+ "connected": "Connected",
+ "disconnected": "Disconnected",
+ "updateStatus": "Update",
+ "update_yes": "זמין",
+ "update_no": "Up to Date",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Files"
}
}
diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json
index 0744578a..19f419cd 100644
--- a/public/locales/hi/common.json
+++ b/public/locales/hi/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Issues",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
+ },
+ "slskd": {
+ "slskStatus": "Network",
+ "connected": "Connected",
+ "disconnected": "Disconnected",
+ "updateStatus": "Update",
+ "update_yes": "Available",
+ "update_no": "Up to Date",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Files"
}
}
diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json
index 31f92935..2b1c013c 100644
--- a/public/locales/hr/common.json
+++ b/public/locales/hr/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Obavijesti",
"issues": "Problemi",
- "pulls": "Zahtjevi za povlačenje"
+ "pulls": "Zahtjevi za povlačenje",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scene",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Oznake"
+ },
+ "slskd": {
+ "slskStatus": "Mreža",
+ "connected": "Povezano",
+ "disconnected": "Odspojeno",
+ "updateStatus": "Update",
+ "update_yes": "Dostupno",
+ "update_no": "Aktualno",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Datoteke"
}
}
diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json
index e21689aa..f6b5e183 100644
--- a/public/locales/hu/common.json
+++ b/public/locales/hu/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Üzenetek",
"issues": "Problémák",
- "pulls": "Pull request-ek"
+ "pulls": "Pull request-ek",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Jelenetek",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Címkék"
+ },
+ "slskd": {
+ "slskStatus": "Hálózat",
+ "connected": "Csatlakozva",
+ "disconnected": "Kapcsolat bontva",
+ "updateStatus": "Update",
+ "update_yes": "Elérhető",
+ "update_no": "Naprakész",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Fájlok"
}
}
diff --git a/public/locales/id/common.json b/public/locales/id/common.json
index 7d049bec..fa4d6459 100644
--- a/public/locales/id/common.json
+++ b/public/locales/id/common.json
@@ -342,7 +342,7 @@
"totalNxDomain": "Domain NX",
"totalRefused": "Ditolak",
"totalAuthoritative": "Authoritative",
- "totalRecursive": "Recursive",
+ "totalRecursive": "Rekursif",
"totalCached": "Cached",
"totalBlocked": "Terblokir",
"totalDropped": "Dropped",
@@ -705,8 +705,8 @@
"time": "Waktu"
},
"firefly": {
- "networth": "Net Worth",
- "budget": "Budget"
+ "networth": "Kekayaan Bersih",
+ "budget": "Anggaran"
},
"grafana": {
"dashboards": "Dasbor",
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifikasi",
"issues": "Isu",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Adegan",
@@ -965,7 +966,7 @@
"lubelogger": {
"vehicle": "Kendaraan",
"vehicles": "Kendaraan",
- "serviceRecords": "Service Records",
+ "serviceRecords": "Catatan Servis",
"reminders": "Pengingat",
"nextReminder": "Pengingat Berikutnya",
"none": "Tidak ada"
@@ -1024,11 +1025,22 @@
"timeleft": "Sisa Waktu"
},
"hoarder": {
- "bookmarks": "Bookmarks",
- "favorites": "Favorites",
- "archived": "Archived",
- "highlights": "Highlights",
- "lists": "Lists",
+ "bookmarks": "Markah",
+ "favorites": "Favorit",
+ "archived": "Diarsipkan",
+ "highlights": "Sorotan",
+ "lists": "Daftar",
"tags": "Tag"
+ },
+ "slskd": {
+ "slskStatus": "Jaringan",
+ "connected": "Tersambung",
+ "disconnected": "Terputus",
+ "updateStatus": "Update",
+ "update_yes": "Tersedia",
+ "update_no": "Terbaru",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "File"
}
}
diff --git a/public/locales/it/common.json b/public/locales/it/common.json
index 3d0dc450..4b0672f9 100644
--- a/public/locales/it/common.json
+++ b/public/locales/it/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifiche",
"issues": "Problemi",
- "pulls": "Richieste di Pull"
+ "pulls": "Richieste di Pull",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scene",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tag"
+ },
+ "slskd": {
+ "slskStatus": "Rete",
+ "connected": "Connesso",
+ "disconnected": "Disconnesso",
+ "updateStatus": "Update",
+ "update_yes": "Disponibili",
+ "update_no": "Aggiornato",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "File"
}
}
diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json
index 020d7d3b..58869e84 100644
--- a/public/locales/ja/common.json
+++ b/public/locales/ja/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "通知",
"issues": "課題",
- "pulls": "プルリクエスト"
+ "pulls": "プルリクエスト",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "シーン",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "タグ"
+ },
+ "slskd": {
+ "slskStatus": "ネットワーク",
+ "connected": "接続済",
+ "disconnected": "切断されました",
+ "updateStatus": "Update",
+ "update_yes": "利用可",
+ "update_no": "最新",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "ファイル"
}
}
diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json
index 00ff2ea1..5f5523ff 100644
--- a/public/locales/ko/common.json
+++ b/public/locales/ko/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "알림",
"issues": "Issues",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "장면",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "태그"
+ },
+ "slskd": {
+ "slskStatus": "네트워크",
+ "connected": "연결됨",
+ "disconnected": "연결 끊김",
+ "updateStatus": "Update",
+ "update_yes": "이용 가능",
+ "update_no": "최신 상태",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "파일"
}
}
diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json
index 538febf1..85d9a359 100644
--- a/public/locales/lv/common.json
+++ b/public/locales/lv/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Issues",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
+ },
+ "slskd": {
+ "slskStatus": "Network",
+ "connected": "Connected",
+ "disconnected": "Disconnected",
+ "updateStatus": "Update",
+ "update_yes": "Available",
+ "update_no": "Up to Date",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Files"
}
}
diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json
index ba32381f..4ebfd6d8 100644
--- a/public/locales/ms/common.json
+++ b/public/locales/ms/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Issues",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Adegan",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tanda nama"
+ },
+ "slskd": {
+ "slskStatus": "Rangkaian",
+ "connected": "Connected",
+ "disconnected": "Sambungan Terputus",
+ "updateStatus": "Update",
+ "update_yes": "Sudah Ada",
+ "update_no": "Terkemaskini",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Files"
}
}
diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json
index dfa15f10..e26ad05e 100644
--- a/public/locales/nl/common.json
+++ b/public/locales/nl/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notificaties",
"issues": "Problemen",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scènes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Label"
+ },
+ "slskd": {
+ "slskStatus": "Netwerk",
+ "connected": "Verbonden",
+ "disconnected": "Verbinding verbroken",
+ "updateStatus": "Update",
+ "update_yes": "Beschikbaar",
+ "update_no": "Bijgewerkt",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Bestanden"
}
}
diff --git a/public/locales/no/common.json b/public/locales/no/common.json
index b179110b..67710fe1 100644
--- a/public/locales/no/common.json
+++ b/public/locales/no/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Varslinger",
"issues": "Issues",
- "pulls": "Forespørsel"
+ "pulls": "Forespørsel",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scener",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Stikkord"
+ },
+ "slskd": {
+ "slskStatus": "Nettverk",
+ "connected": "Tilkoblet",
+ "disconnected": "Frakoblet",
+ "updateStatus": "Update",
+ "update_yes": "Tilgjengelig",
+ "update_no": "Oppdatert",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Files"
}
}
diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json
index 9d669f8a..1316d5c9 100644
--- a/public/locales/pl/common.json
+++ b/public/locales/pl/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Powiadomienia",
"issues": "Zgłoszenia",
- "pulls": "Żądania Pull"
+ "pulls": "Żądania Pull",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Sceny",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tagi"
+ },
+ "slskd": {
+ "slskStatus": "Sieć",
+ "connected": "Połączono",
+ "disconnected": "Rozłączono",
+ "updateStatus": "Update",
+ "update_yes": "Dostępne",
+ "update_no": "Aktualny",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Pliki"
}
}
diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json
index 66439545..acbf2d96 100644
--- a/public/locales/pt/common.json
+++ b/public/locales/pt/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notificações",
"issues": "Problemas",
- "pulls": "Solicitar pull"
+ "pulls": "Solicitar pull",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Cenas",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Etiquetas"
+ },
+ "slskd": {
+ "slskStatus": "Rede",
+ "connected": "Conectado",
+ "disconnected": "Desconectado",
+ "updateStatus": "Update",
+ "update_yes": "Disponível",
+ "update_no": "Atualizado",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Ficheiros"
}
}
diff --git a/public/locales/pt_BR/common.json b/public/locales/pt_BR/common.json
index 23c5c3dc..92a1dfcf 100644
--- a/public/locales/pt_BR/common.json
+++ b/public/locales/pt_BR/common.json
@@ -47,7 +47,7 @@
"load": "Carga",
"temp": "TEMP",
"max": "Máximo",
- "uptime": "CIMA"
+ "uptime": "ATIVO"
},
"unifi": {
"users": "Usuários",
@@ -61,7 +61,7 @@
"wlan_devices": "Dispositivos WLAN",
"lan_users": "Usuários de LAN",
"wlan_users": "Usuários de WLAN",
- "up": "CIMA",
+ "up": "ATIVO",
"down": "Desligado",
"wait": "Por favor, aguarde",
"empty_data": "Status do Subsistema desconhecido"
@@ -149,8 +149,8 @@
"received": "Recebido",
"sent": "Enviado",
"externalIPAddress": "IP Externo",
- "externalIPv6Address": "Ext. IPv6",
- "externalIPv6Prefix": "Ext. IPv6-Prefix"
+ "externalIPv6Address": "IPv6 Externo",
+ "externalIPv6Prefix": "Prefixo IPv6 Externo"
},
"caddy": {
"upstreams": "Streams de Envio",
@@ -178,7 +178,7 @@
"connectedAp": "APs Ligados",
"activeUser": "Dispositivos ativos",
"alerts": "Alertas",
- "connectedGateways": "Connected gateways",
+ "connectedGateways": "Gateways conectados",
"connectedSwitches": "Switches conectados"
},
"nzbget": {
@@ -229,8 +229,8 @@
"seed": "Semente"
},
"develancacheui": {
- "cachehitbytes": "Cache Hit Bytes",
- "cachemissbytes": "Cache Miss Bytes"
+ "cachehitbytes": "Bytes de Acerto de Cache",
+ "cachemissbytes": "Bytes de Falha de Cache"
},
"downloadstation": {
"download": "Descarregar",
@@ -313,13 +313,13 @@
},
"suwayomi": {
"download": "Baixado",
- "nondownload": "Non-Downloaded",
+ "nondownload": "Não Baixado",
"read": "Lido",
"unread": "Não lida",
- "downloadedread": "Downloaded & Read",
- "downloadedunread": "Downloaded & Unread",
- "nondownloadedread": "Non-Downloaded & Read",
- "nondownloadedunread": "Non-Downloaded & Unread"
+ "downloadedread": "Baixado e Lido",
+ "downloadedunread": "Baixado e Não Lido",
+ "nondownloadedread": "Não Baixado e Lido",
+ "nondownloadedunread": "Não Baixado e Não Lido"
},
"tailscale": {
"address": "Endereço",
@@ -337,15 +337,15 @@
},
"technitium": {
"totalQueries": "Consultas",
- "totalNoError": "Success",
- "totalServerFailure": "Failures",
- "totalNxDomain": "NX Domains",
- "totalRefused": "Refused",
- "totalAuthoritative": "Authoritative",
- "totalRecursive": "Recursive",
- "totalCached": "Cached",
+ "totalNoError": "Sucesso",
+ "totalServerFailure": "Falhas",
+ "totalNxDomain": "Domínios NX",
+ "totalRefused": "Recusado",
+ "totalAuthoritative": "Autoritativo",
+ "totalRecursive": "Recursivo",
+ "totalCached": "Em cache",
"totalBlocked": "Bloqueado",
- "totalDropped": "Dropped",
+ "totalDropped": "Perdidos",
"totalClients": "Clientes"
},
"tdarr": {
@@ -436,7 +436,7 @@
"temp": "TEMP",
"_temp": "Temperatura",
"warn": "Aviso",
- "uptime": "CIMA",
+ "uptime": "ATIVO",
"total": "Total",
"free": "Livre",
"used": "Utilizado",
@@ -705,8 +705,8 @@
"time": "Hora"
},
"firefly": {
- "networth": "Net Worth",
- "budget": "Budget"
+ "networth": "Valor Líquido",
+ "budget": "Orçamento"
},
"grafana": {
"dashboards": "Painéis",
@@ -860,16 +860,16 @@
},
"romm": {
"platforms": "Plataformas",
- "totalRoms": "Games",
+ "totalRoms": "Jogos",
"saves": "Saves",
- "states": "States",
- "screenshots": "Screenshots",
- "totalfilesize": "Total Size"
+ "states": "Estados",
+ "screenshots": "Capturas de Tela",
+ "totalfilesize": "Tamanho total"
},
"mailcow": {
"domains": "Domínios",
- "mailboxes": "Mailboxes",
- "mails": "Mails",
+ "mailboxes": "Caixas de e-mail",
+ "mails": "Mensagens",
"storage": "Armazenamento"
},
"netdata": {
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notificações",
"issues": "Problemas",
- "pulls": "Solicitações de Envio"
+ "pulls": "Solicitações de Envio",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Cenas",
@@ -951,30 +952,30 @@
},
"linkwarden": {
"links": "Links",
- "collections": "Collections",
+ "collections": "Coleções",
"tags": "Marcadores"
},
"zabbix": {
- "unclassified": "Not classified",
+ "unclassified": "Não classificado",
"information": "Informação",
- "warning": "Warning",
- "average": "Average",
- "high": "High",
- "disaster": "Disaster"
+ "warning": "Aviso",
+ "average": "Médio",
+ "high": "Alto",
+ "disaster": "Desastre"
},
"lubelogger": {
- "vehicle": "Vehicle",
- "vehicles": "Vehicles",
- "serviceRecords": "Service Records",
- "reminders": "Reminders",
- "nextReminder": "Next Reminder",
- "none": "None"
+ "vehicle": "Veículo",
+ "vehicles": "Veículos",
+ "serviceRecords": "Registros de Serviço",
+ "reminders": "Lembretes",
+ "nextReminder": "Próximo Lembrete",
+ "none": "Nenhum"
},
"vikunja": {
- "projects": "Active Projects",
- "tasks7d": "Tasks Due This Week",
- "tasksOverdue": "Overdue Tasks",
- "tasksInProgress": "Tasks In Progress"
+ "projects": "Projetos Ativos",
+ "tasks7d": "Tarefas que vencem nesta semana",
+ "tasksOverdue": "Tarefas Atrasadas",
+ "tasksInProgress": "Tarefas em Andamento"
},
"headscale": {
"name": "Nome",
@@ -986,7 +987,7 @@
},
"beszel": {
"name": "Nome",
- "systems": "Systems",
+ "systems": "Sistemas",
"up": "Ativo",
"down": "Inativo",
"paused": "Pausado",
@@ -995,27 +996,27 @@
"updated": "Atualizado",
"cpu": "CPU",
"memory": "MEM",
- "disk": "Disk",
- "network": "NET"
+ "disk": "Disco",
+ "network": "Rede"
},
"argocd": {
- "apps": "Apps",
- "synced": "Synced",
- "outOfSync": "Out Of Sync",
+ "apps": "Aplicativos",
+ "synced": "Sincronizado",
+ "outOfSync": "Fora de sincronia",
"healthy": "Saudável",
- "degraded": "Degraded",
- "progressing": "Progressing",
+ "degraded": "Degradado",
+ "progressing": "Progredindo",
"missing": "Faltando",
- "suspended": "Suspended"
+ "suspended": "Suspenso"
},
"spoolman": {
"loading": "Carregando"
},
"gitlab": {
- "groups": "Groups",
+ "groups": "Grupos",
"issues": "Problemas",
- "merges": "Merge Requests",
- "projects": "Projects"
+ "merges": "Solicitações de mesclagem",
+ "projects": "Projetos"
},
"apcups": {
"status": "Status",
@@ -1024,11 +1025,22 @@
"timeleft": "Tempo restante"
},
"hoarder": {
- "bookmarks": "Bookmarks",
- "favorites": "Favorites",
- "archived": "Archived",
- "highlights": "Highlights",
- "lists": "Lists",
+ "bookmarks": "Favoritos",
+ "favorites": "Favoritos",
+ "archived": "Arquivados",
+ "highlights": "Destaques",
+ "lists": "Listas",
"tags": "Marcadores"
+ },
+ "slskd": {
+ "slskStatus": "Rede",
+ "connected": "Conectado",
+ "disconnected": "Desconectado",
+ "updateStatus": "Update",
+ "update_yes": "Disponível",
+ "update_no": "Atualizado",
+ "downloads": "Transferências",
+ "uploads": "Envios",
+ "sharedFiles": "Arquivos"
}
}
diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json
index 4d38502d..b0eb7747 100644
--- a/public/locales/ro/common.json
+++ b/public/locales/ro/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Issues",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
+ },
+ "slskd": {
+ "slskStatus": "Network",
+ "connected": "Connected",
+ "disconnected": "Disconnected",
+ "updateStatus": "Update",
+ "update_yes": "Disponibile",
+ "update_no": "Up to Date",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Files"
}
}
diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json
index 72785a96..e1e1a94f 100644
--- a/public/locales/ru/common.json
+++ b/public/locales/ru/common.json
@@ -149,8 +149,8 @@
"received": "Получено",
"sent": "Отправлено",
"externalIPAddress": "Внеш. IP",
- "externalIPv6Address": "Ext. IPv6",
- "externalIPv6Prefix": "Ext. IPv6-Prefix"
+ "externalIPv6Address": "Внешний IPv6",
+ "externalIPv6Prefix": "Внешний IPv6 префикс"
},
"caddy": {
"upstreams": "Входящие каналы",
@@ -178,7 +178,7 @@
"connectedAp": "Подключенные точки доступа",
"activeUser": "Активные устройства",
"alerts": "Предупреждения",
- "connectedGateways": "Connected gateways",
+ "connectedGateways": "Подключенные шлюзы",
"connectedSwitches": "Подключенные коммутаторы"
},
"nzbget": {
@@ -705,8 +705,8 @@
"time": "Время"
},
"firefly": {
- "networth": "Net Worth",
- "budget": "Budget"
+ "networth": "Общая средства",
+ "budget": "Бюджет"
},
"grafana": {
"dashboards": "Панели",
@@ -861,7 +861,7 @@
"romm": {
"platforms": "Платформы",
"totalRoms": "Игры",
- "saves": "Сейвы",
+ "saves": "Сохранения",
"states": "Состояния",
"screenshots": "Скриншоты",
"totalfilesize": "Общий объем"
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Уведомления",
"issues": "Вопросы",
- "pulls": "Запросы на слияние (Pull Request)"
+ "pulls": "Запросы на слияние (Pull Request)",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Сцены",
@@ -927,7 +928,7 @@
"total": "Всего"
},
"swagdashboard": {
- "proxied": "Прокси",
+ "proxied": "Проксировано",
"auth": "С Авторизацией",
"outdated": "Устаревшие",
"banned": "Заблокированные"
@@ -958,17 +959,17 @@
"unclassified": "Не классифицировано",
"information": "Информация",
"warning": "Предупреждение",
- "average": "Средняя",
+ "average": "Среднее",
"high": "Высокая",
- "disaster": "Чрезвычайная"
+ "disaster": "Чрезвычайное"
},
"lubelogger": {
- "vehicle": "Автомобиль",
- "vehicles": "Автомобили",
- "serviceRecords": "Сервисные работы",
+ "vehicle": "Транспорт",
+ "vehicles": "Транспорты",
+ "serviceRecords": "Сервисные записи",
"reminders": "Напоминания",
"nextReminder": "Следующее напоминание",
- "none": "Нет"
+ "none": "Отсутствует"
},
"vikunja": {
"projects": "Активные Проекты",
@@ -1024,11 +1025,22 @@
"timeleft": "Осталось"
},
"hoarder": {
- "bookmarks": "Bookmarks",
- "favorites": "Favorites",
- "archived": "Archived",
- "highlights": "Highlights",
- "lists": "Lists",
+ "bookmarks": "Закладки",
+ "favorites": "Избранное",
+ "archived": "Архивированное",
+ "highlights": "События",
+ "lists": "Список",
"tags": "Теги"
+ },
+ "slskd": {
+ "slskStatus": "Сеть",
+ "connected": "Подключено",
+ "disconnected": "Отключено",
+ "updateStatus": "Обновление",
+ "update_yes": "Доступно",
+ "update_no": "Последняя версия",
+ "downloads": "Скачивания",
+ "uploads": "Загрузки",
+ "sharedFiles": "Файлов"
}
}
diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json
index 4272c51f..9c154cce 100644
--- a/public/locales/sk/common.json
+++ b/public/locales/sk/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Oznámenia",
"issues": "Problémy",
- "pulls": "Pull requesty"
+ "pulls": "Pull requesty",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scény",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Štítky"
+ },
+ "slskd": {
+ "slskStatus": "Sieť",
+ "connected": "Pripojené",
+ "disconnected": "Odpojené",
+ "updateStatus": "Update",
+ "update_yes": "Dostupné",
+ "update_no": "Aktuálny",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Súborov"
}
}
diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json
index 34db459d..a32aa0dd 100644
--- a/public/locales/sl/common.json
+++ b/public/locales/sl/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Obvestila",
"issues": "Težave",
- "pulls": "Zahteve za prenos"
+ "pulls": "Zahteve za prenos",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scene",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Značke"
+ },
+ "slskd": {
+ "slskStatus": "Omrežje",
+ "connected": "Povezan",
+ "disconnected": "Prekinjeno",
+ "updateStatus": "Update",
+ "update_yes": "Na voljo",
+ "update_no": "Posodobljeno",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Datotek"
}
}
diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json
index ba50eef1..4e3f5fb0 100644
--- a/public/locales/sr/common.json
+++ b/public/locales/sr/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Issues",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
+ },
+ "slskd": {
+ "slskStatus": "Network",
+ "connected": "Connected",
+ "disconnected": "Disconnected",
+ "updateStatus": "Update",
+ "update_yes": "Available",
+ "update_no": "Up to Date",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Files"
}
}
diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json
index ead80b0b..caa18acd 100644
--- a/public/locales/sv/common.json
+++ b/public/locales/sv/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Issues",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
+ },
+ "slskd": {
+ "slskStatus": "Network",
+ "connected": "Connected",
+ "disconnected": "Disconnected",
+ "updateStatus": "Update",
+ "update_yes": "Tillgänglig",
+ "update_no": "Up to Date",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Files"
}
}
diff --git a/public/locales/te/common.json b/public/locales/te/common.json
index 2cd066a6..e34d6fae 100644
--- a/public/locales/te/common.json
+++ b/public/locales/te/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Issues",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
+ },
+ "slskd": {
+ "slskStatus": "Network",
+ "connected": "Connected",
+ "disconnected": "Disconnected",
+ "updateStatus": "Update",
+ "update_yes": "అందుబాటులో వున్నవి",
+ "update_no": "తాజాగా",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Files"
}
}
diff --git a/public/locales/th/common.json b/public/locales/th/common.json
index 42a0b6a2..b37b662d 100644
--- a/public/locales/th/common.json
+++ b/public/locales/th/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Issues",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
+ },
+ "slskd": {
+ "slskStatus": "Network",
+ "connected": "Connected",
+ "disconnected": "Disconnected",
+ "updateStatus": "Update",
+ "update_yes": "Available",
+ "update_no": "Up to Date",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Files"
}
}
diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json
index 40611dac..815b9150 100644
--- a/public/locales/tr/common.json
+++ b/public/locales/tr/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Bildirimler",
"issues": "Sorunlar",
- "pulls": "Değişiklik İstekleri"
+ "pulls": "Değişiklik İstekleri",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Sahneler",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Etiketler"
+ },
+ "slskd": {
+ "slskStatus": "Ağ",
+ "connected": "Bağlandı",
+ "disconnected": "Bağlantı kesildi",
+ "updateStatus": "Update",
+ "update_yes": "Kullanılabilir",
+ "update_no": "Güncel",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Dosyalar"
}
}
diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json
index 0914c49f..3412d591 100644
--- a/public/locales/uk/common.json
+++ b/public/locales/uk/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Сповіщення",
"issues": "Питання",
- "pulls": "Pull-запити"
+ "pulls": "Pull-запити",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Сцени",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Теги"
+ },
+ "slskd": {
+ "slskStatus": "Мережа",
+ "connected": "З'єднано",
+ "disconnected": "Відключено",
+ "updateStatus": "Update",
+ "update_yes": "Доступно",
+ "update_no": "Актуально",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Файли"
}
}
diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json
index d2753c97..7e8974f8 100644
--- a/public/locales/vi/common.json
+++ b/public/locales/vi/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Issues",
- "pulls": "Pull Requests"
+ "pulls": "Pull Requests",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
+ },
+ "slskd": {
+ "slskStatus": "Network",
+ "connected": "Connected",
+ "disconnected": "Disconnected",
+ "updateStatus": "Update",
+ "update_yes": "Available",
+ "update_no": "Up to Date",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Files"
}
}
diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json
index 64bc1e72..dfe604dd 100644
--- a/public/locales/yue/common.json
+++ b/public/locales/yue/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "信息",
"issues": "出版",
- "pulls": "提取請求"
+ "pulls": "提取請求",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "場景",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "標籤"
+ },
+ "slskd": {
+ "slskStatus": "網絡",
+ "connected": "Connected",
+ "disconnected": "連接已中斷",
+ "updateStatus": "Update",
+ "update_yes": "可用",
+ "update_no": "已更新至最新",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "檔案"
}
}
diff --git a/public/locales/zh-Hans/common.json b/public/locales/zh-Hans/common.json
index 5e54cd8d..064e2c1c 100644
--- a/public/locales/zh-Hans/common.json
+++ b/public/locales/zh-Hans/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "通知",
"issues": "问题",
- "pulls": "PR"
+ "pulls": "PR",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "场景",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
+ },
+ "slskd": {
+ "slskStatus": "网络",
+ "connected": "已连接",
+ "disconnected": "未连接",
+ "updateStatus": "Update",
+ "update_yes": "可用",
+ "update_no": "Up to Date",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "Files"
}
}
diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json
index 5a356009..eb1f7423 100644
--- a/public/locales/zh-Hant/common.json
+++ b/public/locales/zh-Hant/common.json
@@ -885,7 +885,8 @@
"gitea": {
"notifications": "信息",
"issues": "出版",
- "pulls": "提取請求"
+ "pulls": "提取請求",
+ "repositories": "Repositories"
},
"stash": {
"scenes": "場景",
@@ -1030,5 +1031,16 @@
"highlights": "Highlights",
"lists": "Lists",
"tags": "標籤"
+ },
+ "slskd": {
+ "slskStatus": "網絡",
+ "connected": "Connected",
+ "disconnected": "連接已中斷",
+ "updateStatus": "Update",
+ "update_yes": "可觀看",
+ "update_no": "已更新至最新",
+ "downloads": "Downloads",
+ "uploads": "Uploads",
+ "sharedFiles": "檔案"
}
}
From cadf1433af005b54fd5b26270100eddc91cc36d9 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Thu, 27 Mar 2025 13:22:02 -0700
Subject: [PATCH 73/93] Bump version to 1.1.0
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 209aea33..ae9047c1 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "homepage",
- "version": "1.0.4",
+ "version": "1.1.0",
"private": true,
"scripts": {
"preinstall": "npx only-allow pnpm",
From e19dcc2729795fc6a1feac8744f239a7f9677752 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Thu, 27 Mar 2025 13:27:20 -0700
Subject: [PATCH 74/93] Only deploy docs from main branch
---
.github/workflows/docs-publish.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/docs-publish.yml b/.github/workflows/docs-publish.yml
index def1ee1e..5479e492 100644
--- a/.github/workflows/docs-publish.yml
+++ b/.github/workflows/docs-publish.yml
@@ -55,7 +55,7 @@ jobs:
run: MKINSIDERS=false mkdocs build
deploy:
name: Build & Deploy
- if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request'
+ if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
needs:
- pre-commit
From 2cabe77b555b94e8adfba75cfea1afdce4b3b23a Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Thu, 27 Mar 2025 20:15:39 -0700
Subject: [PATCH 75/93] Fix: add fallback for shvl syntax
---
src/widgets/customapi/component.jsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/widgets/customapi/component.jsx b/src/widgets/customapi/component.jsx
index b8147caa..7624c2f5 100644
--- a/src/widgets/customapi/component.jsx
+++ b/src/widgets/customapi/component.jsx
@@ -18,7 +18,7 @@ function getValue(field, data) {
// shvl is easier, everything else is kept for backwards compatibility.
if (typeof field === "string") {
- return shvl.get(data, field, null);
+ return shvl.get(data, field, null) ?? data[field] ?? null;
}
while (typeof lastField === "object") {
From 999dade86114deae80870364282f251e35993a78 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Thu, 27 Mar 2025 20:16:50 -0700
Subject: [PATCH 76/93] Fix: add fallback for shvl syntax (#5080)
From 313835c0e6ba383c9da2d6204cfa14923eef84bb Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Thu, 27 Mar 2025 20:20:02 -0700
Subject: [PATCH 77/93] Bump version to 1.1.1
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index ae9047c1..7f0fbdf7 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "homepage",
- "version": "1.1.0",
+ "version": "1.1.1",
"private": true,
"scripts": {
"preinstall": "npx only-allow pnpm",
From ee7e8fab615c6d7d473f85fd95f251070ceb3571 Mon Sep 17 00:00:00 2001
From: Matheus Vellone
Date: Fri, 28 Mar 2025 20:29:23 -0300
Subject: [PATCH 78/93] Fix: support shvl on customapi dynamic list target
(#5081)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
---
src/widgets/customapi/component.jsx | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/widgets/customapi/component.jsx b/src/widgets/customapi/component.jsx
index 7624c2f5..cb377628 100644
--- a/src/widgets/customapi/component.jsx
+++ b/src/widgets/customapi/component.jsx
@@ -245,7 +245,15 @@ export default function Component({ service }) {
listItems.map((item, index) => {
const itemName = shvl.get(item, name, "");
const itemLabel = shvl.get(item, label, "");
- const itemUrl = target ? target.replace(/\{([^}]+)\}/g, (_, key) => item[key] || "") : null;
+
+ const itemUrl = target
+ ? [...target.matchAll(/\{(.*?)\}/g)]
+ .map((match) => match[1])
+ .reduce((url, targetTemplate) => {
+ const value = shvl.get(item, targetTemplate, item[targetTemplate]) ?? "";
+ return url.replaceAll(`{${targetTemplate}}`, value);
+ }, target)
+ : null;
const className =
"bg-theme-200/50 dark:bg-theme-900/20 rounded-sm m-1 flex-1 flex flex-row items-center justify-between p-1 text-xs";
From 4567427b9cde4c468174b466869dd29f2b039664 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Fri, 28 Mar 2025 16:32:56 -0700
Subject: [PATCH 79/93] Enhancement: add shvl fallback for custom api dynamic
list (#5091)
---
src/widgets/customapi/component.jsx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/widgets/customapi/component.jsx b/src/widgets/customapi/component.jsx
index cb377628..b651045f 100644
--- a/src/widgets/customapi/component.jsx
+++ b/src/widgets/customapi/component.jsx
@@ -243,8 +243,8 @@ export default function Component({ service }) {
) : (
listItems.map((item, index) => {
- const itemName = shvl.get(item, name, "");
- const itemLabel = shvl.get(item, label, "");
+ const itemName = shvl.get(item, name, item[name]) ?? "";
+ const itemLabel = shvl.get(item, label, item[label]) ?? "";
const itemUrl = target
? [...target.matchAll(/\{(.*?)\}/g)]
From 30cb893354883a33b67588693e74f296bd02604c Mon Sep 17 00:00:00 2001
From: Chris <67816022+vhsdream@users.noreply.github.com>
Date: Sat, 29 Mar 2025 22:49:53 -0400
Subject: [PATCH 80/93] Fix: remove unneeded import from Hoarder widget.js
(#5097)
---
src/widgets/hoarder/widget.js | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/widgets/hoarder/widget.js b/src/widgets/hoarder/widget.js
index 8a3cfef0..b005b04f 100644
--- a/src/widgets/hoarder/widget.js
+++ b/src/widgets/hoarder/widget.js
@@ -1,5 +1,4 @@
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
-import { asJson } from "utils/proxy/api-helpers";
const widget = {
api: `{url}/api/v1/{endpoint}`,
From 954ab544931658dfcab1540382b7d241e5e907b5 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sun, 30 Mar 2025 08:52:23 -0700
Subject: [PATCH 81/93] Speed up CI: Skip unnecessary build steps, optimize
caching etc (#5098)
---
.dockerignore | 2 +-
.github/workflows/docker-publish.yml | 131 ++++++++++++++-------------
Dockerfile | 72 +++++++--------
3 files changed, 104 insertions(+), 101 deletions(-)
diff --git a/.dockerignore b/.dockerignore
index edbf8525..698137cb 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -16,11 +16,11 @@
**/compose*
**/Dockerfile*
**/node_modules
+!.next/standalone/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
-**/.next
README.md
config/
k3d/
diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml
index c7d36f33..afb7fca4 100644
--- a/.github/workflows/docker-publish.yml
+++ b/.github/workflows/docker-publish.yml
@@ -1,9 +1,4 @@
-name: Docker
-
-# This workflow uses actions that are not certified by GitHub.
-# They are provided by a third-party and are governed by
-# separate terms of service, privacy policy, and support
-# documentation.
+name: Docker CI
on:
schedule:
@@ -13,7 +8,6 @@ on:
- main
- feature/**
- dev
- # Publish semver tags as releases.
tags: [ 'v*.*.*' ]
paths-ignore:
- 'docs/**'
@@ -26,89 +20,56 @@ on:
merge_group:
env:
- # github.repository as
/
IMAGE_NAME: ${{ github.repository }}
-
jobs:
pre-commit:
name: Linting Checks
runs-on: ubuntu-22.04
steps:
- -
- name: Checkout repository
+ - name: Checkout repository
uses: actions/checkout@v4
- -
- name: Install python
+
+ - name: Install python
uses: actions/setup-python@v5
with:
python-version: 3.x
- -
- name: Check files
+
+ - name: Check files
uses: pre-commit/action@v3.0.1
- -
- name: Install pnpm
+
+ - name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
run_install: false
- -
- name: Install Node.js
+
+ - name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- -
- name: Install dependencies
+
+ - name: Install dependencies
run: pnpm install
- -
- name: Lint frontend
+
+ - name: Lint frontend
run: pnpm run lint
build:
name: Docker Build & Push
- if: github.repository == 'gethomepage/homepage'
+ if: github.repository == 'gethomepage/homepage'
runs-on: self-hosted
- needs:
- - pre-commit
+ needs: [ pre-commit ]
permissions:
contents: read
packages: write
- # This is used to complete the identity challenge
- # with sigstore/fulcio when running outside of PRs.
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- # Login to Docker Registry
- # https://github.com/docker/login-action
- - name: Log into registry ${{ env.REGISTRY }}
- if: github.event_name != 'pull_request'
- uses: docker/login-action@v3
- with:
- registry: ghcr.io
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- - name: Login to Docker Hub
- if: github.event_name != 'pull_request'
- uses: docker/login-action@v3
- with:
- username: ${{ secrets.DOCKERHUB_USERNAME }}
- password: ${{ secrets.DOCKERHUB_TOKEN }}
-
- # Setup QEMU
- # https://github.com/marketplace/actions/docker-setup-buildx#with-qemu
- - name: Setup QEMU
- uses: docker/setup-qemu-action@v3.6.0
-
- # Workaround: https://github.com/docker/build-push-action/issues/461
- - name: Setup Docker buildx
- uses: docker/setup-buildx-action@v3
-
- # Extract metadata (tags, labels) for Docker
- # https://github.com/docker/metadata-action
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v5
@@ -119,8 +80,57 @@ jobs:
flavor: |
latest=auto
- # Build and push Docker image with Buildx (don't push on PR)
- # https://github.com/docker/build-push-action
+ - name: Next.js build cache
+ uses: actions/cache@v4
+ with:
+ path: .next/cache
+ key: nextjs-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('**/*.js', '**/*.jsx') }}
+ restore-keys: |
+ nextjs-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
+
+ - name: Install pnpm
+ uses: pnpm/action-setup@v4
+ with:
+ version: 10
+ run_install: false
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: 'pnpm'
+
+ - name: Install dependencies
+ run: pnpm install
+
+ - name: Build app
+ run: |
+ NEXT_PUBLIC_BUILDTIME="${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}" \
+ NEXT_PUBLIC_VERSION="${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}" \
+ NEXT_PUBLIC_REVISION="${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}" \
+ pnpm run build
+
+ - name: Log into registry ${{ env.REGISTRY }}
+ if: github.event_name != 'pull_request'
+ uses: docker/login-action@v3
+ with:
+ registry: ghcr.io
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Login to Docker Hub
+ if: github.event_name != 'pull_request'
+ uses: docker/login-action@v3
+ with:
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+
+ - name: Setup QEMU
+ uses: docker/setup-qemu-action@v3.6.0
+
+ - name: Setup Docker buildx
+ uses: docker/setup-buildx-action@v3
+
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v6
@@ -130,18 +140,15 @@ jobs:
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
+ CI=true
BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}
VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
- # https://github.com/docker/setup-qemu-action#about
- # platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
platforms: linux/amd64,linux/arm64
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
- # Temp fix
- # https://github.com/docker/build-push-action/issues/252
- # https://github.com/moby/buildkit/issues/1896
+ # https://github.com/docker/build-push-action/issues/252 / https://github.com/moby/buildkit/issues/1896
- name: Move cache
run: |
rm -rf /tmp/.buildx-cache
diff --git a/Dockerfile b/Dockerfile
index 7963407c..ec59c6b0 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,67 +1,63 @@
-# Install dependencies only when needed
-FROM docker.io/node:22-alpine AS deps
-
-WORKDIR /app
-
-COPY --link package.json pnpm-lock.yaml* ./
-
-SHELL ["/bin/ash", "-xeo", "pipefail", "-c"]
-RUN apk add --no-cache libc6-compat \
- && apk add --no-cache --virtual .gyp python3 make g++ \
- && npm install -g pnpm
-
-RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store pnpm fetch | grep -v "cross-device link not permitted\|Falling back to copying packages from store"
-
-RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store pnpm install -r --offline
-
-# Rebuild the source code only when needed
-FROM docker.io/node:22-alpine AS builder
+# =========================
+# Builder Stage
+# =========================
+FROM node:22-slim AS builder
WORKDIR /app
+# Setup
RUN mkdir config
+COPY . .
+ARG CI
ARG BUILDTIME
ARG VERSION
ARG REVISION
+ENV CI=$CI
-COPY --link --from=deps /app/node_modules ./node_modules/
-COPY . .
+# Install and build only outside CI
+RUN if [ "$CI" != "true" ]; then \
+ corepack enable && corepack prepare pnpm@latest --activate && \
+ pnpm install --frozen-lockfile --prefer-offline && \
+ NEXT_TELEMETRY_DISABLED=1 \
+ NEXT_PUBLIC_BUILDTIME=$BUILDTIME \
+ NEXT_PUBLIC_VERSION=$VERSION \
+ NEXT_PUBLIC_REVISION=$REVISION \
+ pnpm run build; \
+ else \
+ echo "✅ Using prebuilt app from CI context"; \
+ fi
-SHELL ["/bin/ash", "-xeo", "pipefail", "-c"]
-RUN npm install -g pnpm \
- && pnpm run telemetry \
- && NEXT_PUBLIC_BUILDTIME=$BUILDTIME NEXT_PUBLIC_VERSION=$VERSION NEXT_PUBLIC_REVISION=$REVISION pnpm run build
-
-# Production image, copy all the files and run next
-FROM docker.io/node:22-alpine AS runner
-LABEL org.opencontainers.image.title "Homepage"
-LABEL org.opencontainers.image.description "A self-hosted services landing page, with docker and service integrations."
+# =========================
+# Runtime Stage
+# =========================
+FROM node:22-alpine AS runner
+LABEL org.opencontainers.image.title="Homepage"
+LABEL org.opencontainers.image.description="A self-hosted services landing page, with docker and service integrations."
LABEL org.opencontainers.image.url="https://github.com/gethomepage/homepage"
LABEL org.opencontainers.image.documentation='https://github.com/gethomepage/homepage/wiki'
LABEL org.opencontainers.image.source='https://github.com/gethomepage/homepage'
LABEL org.opencontainers.image.licenses='Apache-2.0'
-ENV NODE_ENV=production
-
+# Setup
WORKDIR /app
-# Copy files from context (this allows the files to copy before the builder stage is done).
-COPY --link --chown=1000:1000 package.json next.config.js ./
+# Copy some files from context
COPY --link --chown=1000:1000 /public ./public/
-
-# Copy files from builder
-COPY --link --from=builder --chown=1000:1000 /app/.next/standalone ./
-COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static/
COPY --link --chmod=755 docker-entrypoint.sh /usr/local/bin/
+# Copy only necessary files from the build stage
+COPY --link --from=builder --chown=1000:1000 /app/.next/standalone/ ./
+COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static
+
RUN apk add --no-cache su-exec
+ENV NODE_ENV=production
ENV HOSTNAME=0.0.0.0
ENV PORT=3000
EXPOSE $PORT
HEALTHCHECK --interval=10s --timeout=3s --start-period=20s \
- CMD wget --no-verbose --tries=1 --spider --no-check-certificate http://127.0.0.1:$PORT/api/healthcheck || exit 1
+ CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:$PORT/api/healthcheck || exit 1
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["node", "server.js"]
From eda06965fa55709bb7dbbc8bca1d2616d7f36b51 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sun, 30 Mar 2025 21:40:03 -0700
Subject: [PATCH 82/93] Chore: add organize imports to pre-commit (#5104)
---
.pre-commit-config.yaml | 7 ++--
.prettierrc | 1 -
.prettierrc.js | 5 +++
next-i18next.config.js | 4 +--
package.json | 1 +
pnpm-lock.yaml | 26 +++++++++++---
src/components/bookmarks/group.jsx | 8 ++---
src/components/bookmarks/item.jsx | 4 +--
src/components/favicon.jsx | 2 +-
src/components/quicklaunch.jsx | 6 ++--
src/components/resolvedicon.jsx | 2 +-
src/components/services/dropdown.jsx | 4 +--
src/components/services/group.jsx | 8 ++---
src/components/services/item.jsx | 10 +++---
src/components/services/kubernetes-status.jsx | 2 +-
src/components/services/widget.jsx | 2 +-
src/components/services/widget/block.jsx | 2 +-
src/components/tab.jsx | 2 +-
src/components/toggles/color.jsx | 4 +--
src/components/version.jsx | 4 +--
src/components/widgets/datetime/datetime.jsx | 2 +-
src/components/widgets/glances/glances.jsx | 6 ++--
.../widgets/kubernetes/kubernetes.jsx | 4 +--
src/components/widgets/kubernetes/node.jsx | 2 +-
src/components/widgets/longhorn/longhorn.jsx | 2 +-
.../widgets/openmeteo/openmeteo.jsx | 14 ++++----
.../widgets/openweathermap/weather.jsx | 12 +++----
src/components/widgets/resources/cpu.jsx | 6 ++--
src/components/widgets/resources/cputemp.jsx | 6 ++--
src/components/widgets/resources/disk.jsx | 6 ++--
src/components/widgets/resources/memory.jsx | 6 ++--
src/components/widgets/resources/network.jsx | 6 ++--
.../widgets/resources/resources.jsx | 6 ++--
src/components/widgets/resources/uptime.jsx | 6 ++--
src/components/widgets/search/search.jsx | 12 +++----
src/components/widgets/stocks/stocks.jsx | 8 ++---
.../widgets/unifi_console/unifi_console.jsx | 8 ++---
src/components/widgets/weather/weather.jsx | 14 ++++----
src/components/widgets/widget.jsx | 2 +-
src/components/widgets/widget/container.jsx | 4 +--
.../widgets/widget/container_button.jsx | 2 +-
.../widgets/widget/container_form.jsx | 2 +-
.../widgets/widget/container_link.jsx | 2 +-
src/components/widgets/widget/resources.jsx | 2 +-
src/pages/_app.jsx | 6 ++--
src/pages/_document.jsx | 2 +-
src/pages/api/config/[path].js | 2 +-
src/pages/api/hash.js | 2 +-
src/pages/api/releases.js | 2 +-
src/pages/api/search/searchSuggestion.js | 2 +-
src/pages/api/services/proxy.js | 10 +++---
src/pages/api/widgets/glances.js | 4 +--
src/pages/api/widgets/longhorn.js | 4 +--
src/pages/api/widgets/openweathermap.js | 2 +-
src/pages/api/widgets/stocks.js | 2 +-
src/pages/api/widgets/weather.js | 2 +-
src/pages/index.jsx | 36 +++++++++----------
src/utils/config/api-response.js | 6 ++--
src/utils/config/config.js | 4 +--
src/utils/config/docker.js | 2 +-
src/utils/config/kubernetes.js | 4 +--
src/utils/config/service-helpers.js | 6 ++--
src/utils/contexts/color.jsx | 2 +-
src/utils/contexts/settings.jsx | 2 +-
src/utils/contexts/tab.jsx | 2 +-
src/utils/contexts/theme.jsx | 2 +-
src/utils/hooks/window-focus.js | 2 +-
src/utils/kubernetes/export.js | 6 ++--
src/utils/kubernetes/ingress-list.js | 2 +-
src/utils/kubernetes/resource-helpers.js | 6 ++--
src/utils/kubernetes/traefik-list.js | 2 +-
src/utils/proxy/handlers/credentialed.js | 10 +++---
src/utils/proxy/handlers/generic.js | 6 ++--
src/utils/proxy/handlers/jsonrpc.js | 4 +--
src/utils/proxy/handlers/synology.js | 2 +-
src/utils/proxy/http.js | 2 +-
src/utils/proxy/validate-widget-data.js | 2 +-
src/widgets/adguard/component.jsx | 4 +--
src/widgets/apcups/component.jsx | 2 +-
src/widgets/apcups/proxy.js | 2 +-
src/widgets/argocd/component.jsx | 2 +-
src/widgets/atsumeru/component.jsx | 4 +--
src/widgets/audiobookshelf/component.jsx | 4 +--
src/widgets/audiobookshelf/proxy.js | 4 +--
src/widgets/authentik/component.jsx | 4 +--
src/widgets/autobrr/component.jsx | 4 +--
src/widgets/azuredevops/component.jsx | 4 +--
src/widgets/bazarr/component.jsx | 4 +--
src/widgets/bazarr/widget.js | 2 +-
src/widgets/beszel/component.jsx | 4 +--
src/widgets/beszel/proxy.js | 2 +-
src/widgets/caddy/component.jsx | 4 +--
src/widgets/calendar/agenda.jsx | 2 +-
src/widgets/calendar/component.jsx | 8 ++---
src/widgets/calendar/event.jsx | 6 ++--
src/widgets/calendar/integrations/ical.jsx | 6 ++--
src/widgets/calendar/integrations/lidarr.jsx | 2 +-
src/widgets/calendar/integrations/radarr.jsx | 4 +--
src/widgets/calendar/integrations/readarr.jsx | 2 +-
src/widgets/calendar/integrations/sonarr.jsx | 2 +-
src/widgets/calendar/monthly.jsx | 4 +--
src/widgets/calendar/proxy.js | 2 +-
src/widgets/calibreweb/component.jsx | 4 +--
src/widgets/changedetectionio/component.jsx | 4 +--
src/widgets/channelsdvrserver/component.jsx | 4 +--
src/widgets/cloudflared/component.jsx | 2 +-
src/widgets/coinmarketcap/component.jsx | 8 ++---
src/widgets/crowdsec/component.jsx | 4 +--
src/widgets/crowdsec/proxy.js | 4 +--
src/widgets/customapi/component.jsx | 8 ++---
src/widgets/deluge/component.jsx | 4 +--
src/widgets/deluge/proxy.js | 4 +--
src/widgets/develancacheui/component.jsx | 4 +--
src/widgets/diskstation/component.jsx | 4 +--
src/widgets/docker/component.jsx | 8 ++---
src/widgets/downloadstation/component.jsx | 4 +--
src/widgets/emby/component.jsx | 6 ++--
src/widgets/esphome/component.jsx | 2 +-
src/widgets/evcc/component.jsx | 4 +--
src/widgets/fileflows/component.jsx | 4 +--
src/widgets/firefly/component.jsx | 4 +--
src/widgets/flood/component.jsx | 4 +--
src/widgets/flood/proxy.js | 4 +--
src/widgets/freshrss/component.jsx | 4 +--
src/widgets/freshrss/proxy.js | 4 +--
src/widgets/frigate/component.jsx | 4 +--
src/widgets/fritzbox/component.jsx | 4 +--
src/widgets/fritzbox/proxy.js | 2 +-
src/widgets/gamedig/component.jsx | 4 +--
src/widgets/gamedig/proxy.js | 2 +-
src/widgets/gatus/component.jsx | 4 +--
src/widgets/ghostfolio/component.jsx | 4 +--
src/widgets/gitea/component.jsx | 2 +-
src/widgets/gitlab/component.jsx | 4 +--
src/widgets/glances/component.jsx | 12 +++----
src/widgets/glances/components/chart.jsx | 2 +-
src/widgets/glances/components/chart_dual.jsx | 2 +-
src/widgets/glances/components/container.jsx | 2 +-
src/widgets/glances/metrics/containers.jsx | 4 +--
src/widgets/glances/metrics/cpu.jsx | 6 ++--
src/widgets/glances/metrics/disk.jsx | 6 ++--
src/widgets/glances/metrics/fs.jsx | 2 +-
src/widgets/glances/metrics/gpu.jsx | 6 ++--
src/widgets/glances/metrics/info.jsx | 2 +-
src/widgets/glances/metrics/memory.jsx | 6 ++--
src/widgets/glances/metrics/net.jsx | 6 ++--
src/widgets/glances/metrics/process.jsx | 4 +--
src/widgets/glances/metrics/sensor.jsx | 6 ++--
src/widgets/gluetun/component.jsx | 2 +-
src/widgets/gotify/component.jsx | 2 +-
src/widgets/grafana/component.jsx | 4 +--
src/widgets/hdhomerun/component.jsx | 2 +-
src/widgets/headscale/component.jsx | 4 +--
src/widgets/healthchecks/component.jsx | 2 +-
src/widgets/hoarder/component.jsx | 4 +--
src/widgets/homeassistant/component.jsx | 2 +-
src/widgets/homeassistant/proxy.js | 2 +-
src/widgets/homebox/component.jsx | 4 +--
src/widgets/homebox/proxy.js | 4 +--
src/widgets/homebridge/component.jsx | 4 +--
src/widgets/homebridge/proxy.js | 4 +--
src/widgets/iframe/component.jsx | 2 +-
src/widgets/immich/component.jsx | 4 +--
src/widgets/jackett/component.jsx | 4 +--
src/widgets/jackett/proxy.js | 4 +--
src/widgets/jdownloader/component.jsx | 2 +-
src/widgets/jdownloader/proxy.js | 4 +--
src/widgets/jellyseerr/component.jsx | 2 +-
src/widgets/kavita/component.jsx | 4 +--
src/widgets/kavita/proxy.js | 4 +--
src/widgets/komga/component.jsx | 4 +--
src/widgets/komga/proxy.js | 2 +-
src/widgets/kopia/component.jsx | 4 +--
src/widgets/kubernetes/component.jsx | 6 ++--
src/widgets/lidarr/component.jsx | 4 +--
src/widgets/linkwarden/component.jsx | 4 +--
src/widgets/lubelogger/component.jsx | 4 +--
src/widgets/mailcow/component.jsx | 4 +--
src/widgets/mastodon/component.jsx | 4 +--
src/widgets/mealie/component.jsx | 4 +--
src/widgets/medusa/component.jsx | 4 +--
src/widgets/mikrotik/component.jsx | 4 +--
src/widgets/minecraft/component.jsx | 4 +--
src/widgets/minecraft/proxy.js | 2 +-
src/widgets/miniflux/component.jsx | 4 +--
src/widgets/moonraker/component.jsx | 4 +--
src/widgets/mylar/component.jsx | 4 +--
src/widgets/myspeed/component.jsx | 4 +--
src/widgets/navidrome/component.jsx | 2 +-
src/widgets/netalertx/component.jsx | 4 +--
src/widgets/netdata/component.jsx | 4 +--
src/widgets/nextcloud/component.jsx | 4 +--
src/widgets/nextdns/component.jsx | 4 +--
src/widgets/npm/component.jsx | 2 +-
src/widgets/npm/proxy.js | 2 +-
src/widgets/nzbget/component.jsx | 4 +--
src/widgets/octoprint/component.jsx | 2 +-
src/widgets/omada/component.jsx | 4 +--
src/widgets/omada/proxy.js | 2 +-
src/widgets/ombi/component.jsx | 2 +-
src/widgets/opendtu/component.jsx | 4 +--
src/widgets/openmediavault/component.jsx | 2 +-
.../methods/downloader_get_downloadlist.jsx | 2 +-
.../methods/services_get_status.jsx | 2 +-
.../openmediavault/methods/smart_get_list.jsx | 2 +-
src/widgets/openmediavault/proxy.js | 6 ++--
src/widgets/openwrt/methods/interface.jsx | 4 +--
src/widgets/openwrt/methods/system.jsx | 4 +--
src/widgets/openwrt/proxy.js | 4 +--
src/widgets/opnsense/component.jsx | 4 +--
src/widgets/overseerr/component.jsx | 4 +--
src/widgets/paperlessngx/component.jsx | 2 +-
src/widgets/peanut/component.jsx | 4 +--
src/widgets/pfsense/component.jsx | 4 +--
src/widgets/photoprism/component.jsx | 4 +--
src/widgets/photoprism/proxy.js | 4 +--
src/widgets/pihole/component.jsx | 4 +--
src/widgets/pihole/proxy.js | 4 +--
src/widgets/plantit/component.jsx | 4 +--
src/widgets/plex/component.jsx | 2 +-
src/widgets/plex/proxy.js | 4 +--
src/widgets/portainer/component.jsx | 2 +-
src/widgets/prometheus/component.jsx | 4 +--
src/widgets/prometheusmetric/component.jsx | 4 +--
src/widgets/prowlarr/component.jsx | 4 +--
src/widgets/proxmox/component.jsx | 4 +--
src/widgets/proxmoxbackupserver/component.jsx | 4 +--
src/widgets/pterodactyl/component.jsx | 2 +-
src/widgets/pyload/component.jsx | 4 +--
src/widgets/pyload/proxy.js | 4 +--
src/widgets/qbittorrent/component.jsx | 4 +--
src/widgets/qbittorrent/proxy.js | 4 +--
src/widgets/qnap/component.jsx | 4 +--
src/widgets/qnap/proxy.js | 4 +--
src/widgets/radarr/component.jsx | 4 +--
src/widgets/radarr/widget.js | 2 +-
src/widgets/readarr/component.jsx | 4 +--
src/widgets/readarr/widget.js | 2 +-
src/widgets/romm/component.jsx | 4 +--
src/widgets/rutorrent/component.jsx | 4 +--
src/widgets/rutorrent/proxy.js | 4 +--
src/widgets/sabnzbd/component.jsx | 4 +--
src/widgets/scrutiny/component.jsx | 2 +-
src/widgets/slskd/component.jsx | 4 +--
src/widgets/slskd/widget.js | 1 -
src/widgets/sonarr/component.jsx | 4 +--
src/widgets/sonarr/widget.js | 2 +-
src/widgets/speedtest/component.jsx | 4 +--
src/widgets/spoolman/component.jsx | 4 +--
src/widgets/stash/component.jsx | 4 +--
src/widgets/stocks/component.jsx | 4 +--
src/widgets/strelaysrv/component.jsx | 4 +--
src/widgets/suwayomi/component.jsx | 4 +--
src/widgets/suwayomi/proxy.js | 4 +--
src/widgets/swagdashboard/component.jsx | 2 +-
src/widgets/tailscale/component.jsx | 4 +--
src/widgets/tandoor/component.jsx | 2 +-
src/widgets/tautulli/component.jsx | 6 ++--
src/widgets/tdarr/component.jsx | 4 +--
src/widgets/tdarr/proxy.js | 4 +--
src/widgets/technitium/component.jsx | 4 +--
src/widgets/technitium/widget.js | 2 +-
src/widgets/traefik/component.jsx | 2 +-
src/widgets/transmission/component.jsx | 4 +--
src/widgets/transmission/proxy.js | 4 +--
src/widgets/truenas/component.jsx | 4 +--
src/widgets/truenas/widget.js | 2 +-
src/widgets/tubearchivist/component.jsx | 4 +--
src/widgets/unifi/component.jsx | 4 +--
src/widgets/unifi/proxy.js | 6 ++--
src/widgets/unmanic/component.jsx | 6 ++--
src/widgets/unmanic/widget.js | 2 +-
src/widgets/uptimekuma/component.jsx | 4 +--
src/widgets/uptimerobot/component.jsx | 4 +--
src/widgets/urbackup/component.jsx | 4 +--
src/widgets/vikunja/component.jsx | 4 +--
src/widgets/vikunja/widget.js | 2 +-
src/widgets/watchtower/component.jsx | 4 +--
src/widgets/watchtower/proxy.js | 4 +--
src/widgets/wgeasy/component.jsx | 2 +-
src/widgets/whatsupdocker/component.jsx | 2 +-
src/widgets/widgets.js | 22 ++++++------
src/widgets/xteve/component.jsx | 4 +--
src/widgets/xteve/proxy.js | 4 +--
src/widgets/zabbix/component.jsx | 4 +--
285 files changed, 601 insertions(+), 576 deletions(-)
delete mode 100644 .prettierrc
create mode 100644 .prettierrc.js
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 6cc46b47..0b4f5624 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -9,11 +9,14 @@ repos:
- id: check-yaml
exclude: "(^mkdocs\\.yml$)"
- id: check-added-large-files
-- repo: https://github.com/pre-commit/mirrors-prettier
- rev: 'v3.0.3'
+- repo: https://github.com/rbubley/mirrors-prettier
+ rev: 'v3.3.3'
hooks:
- id: prettier
types_or:
- javascript
- markdown
- jsx
+ additional_dependencies:
+ - prettier@3.3.3
+ - 'prettier-plugin-organize-imports@4.1.0'
diff --git a/.prettierrc b/.prettierrc
deleted file mode 100644
index 0967ef42..00000000
--- a/.prettierrc
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/.prettierrc.js b/.prettierrc.js
new file mode 100644
index 00000000..b48ef007
--- /dev/null
+++ b/.prettierrc.js
@@ -0,0 +1,5 @@
+const config = {
+ plugins: [require("prettier-plugin-organize-imports")],
+};
+
+module.exports = config;
diff --git a/next-i18next.config.js b/next-i18next.config.js
index a1b5c7b3..f6968dc3 100644
--- a/next-i18next.config.js
+++ b/next-i18next.config.js
@@ -131,8 +131,8 @@ module.exports = {
? BIBIT_UNITS
: BIT_UNITS
: options.binary
- ? BIBYTE_UNITS
- : BYTE_UNITS;
+ ? BIBYTE_UNITS
+ : BYTE_UNITS;
if (value === 0) return `0 ${sizes[0]}/s`;
diff --git a/package.json b/package.json
index 7f0fbdf7..07be3d1d 100644
--- a/package.json
+++ b/package.json
@@ -56,6 +56,7 @@
"eslint-plugin-react-hooks": "^5.1.0",
"postcss": "^8.5.2",
"prettier": "^3.5.2",
+ "prettier-plugin-organize-imports": "^4.1.0",
"tailwind-scrollbar": "^4.0.1",
"tailwindcss": "^4.0.9",
"typescript": "^5.7.3"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2848e239..40069cad 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -101,10 +101,6 @@ importers:
xml-js:
specifier: ^1.6.11
version: 1.6.11
- optionalDependencies:
- osx-temperature-sensor:
- specifier: ^1.0.8
- version: 1.0.8
devDependencies:
'@tailwindcss/forms':
specifier: ^0.5.10
@@ -142,6 +138,9 @@ importers:
prettier:
specifier: ^3.5.2
version: 3.5.2
+ prettier-plugin-organize-imports:
+ specifier: ^4.1.0
+ version: 4.1.0(prettier@3.5.2)(typescript@5.7.3)
tailwind-scrollbar:
specifier: ^4.0.1
version: 4.0.1(react@18.3.1)(tailwindcss@4.0.9)
@@ -151,6 +150,10 @@ importers:
typescript:
specifier: ^5.7.3
version: 5.7.3
+ optionalDependencies:
+ osx-temperature-sensor:
+ specifier: ^1.0.8
+ version: 1.0.8
packages:
@@ -2144,6 +2147,16 @@ packages:
resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
engines: {node: '>=6.0.0'}
+ prettier-plugin-organize-imports@4.1.0:
+ resolution: {integrity: sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==}
+ peerDependencies:
+ prettier: '>=2.0'
+ typescript: '>=2.9'
+ vue-tsc: ^2.1.0
+ peerDependenciesMeta:
+ vue-tsc:
+ optional: true
+
prettier@3.5.2:
resolution: {integrity: sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==}
engines: {node: '>=14'}
@@ -4883,6 +4896,11 @@ snapshots:
dependencies:
fast-diff: 1.3.0
+ prettier-plugin-organize-imports@4.1.0(prettier@3.5.2)(typescript@5.7.3):
+ dependencies:
+ prettier: 3.5.2
+ typescript: 5.7.3
+
prettier@3.5.2: {}
pretty-bytes@6.1.1: {}
diff --git a/src/components/bookmarks/group.jsx b/src/components/bookmarks/group.jsx
index 726f54e8..2334dad5 100644
--- a/src/components/bookmarks/group.jsx
+++ b/src/components/bookmarks/group.jsx
@@ -1,10 +1,10 @@
-import { useRef, useEffect } from "react";
-import classNames from "classnames";
import { Disclosure, Transition } from "@headlessui/react";
-import { MdKeyboardArrowDown } from "react-icons/md";
-import ErrorBoundary from "components/errorboundry";
+import classNames from "classnames";
import List from "components/bookmarks/list";
+import ErrorBoundary from "components/errorboundry";
import ResolvedIcon from "components/resolvedicon";
+import { useEffect, useRef } from "react";
+import { MdKeyboardArrowDown } from "react-icons/md";
export default function BookmarksGroup({
bookmarks,
diff --git a/src/components/bookmarks/item.jsx b/src/components/bookmarks/item.jsx
index c9b84eac..7ea16bba 100644
--- a/src/components/bookmarks/item.jsx
+++ b/src/components/bookmarks/item.jsx
@@ -1,7 +1,7 @@
-import { useContext } from "react";
import classNames from "classnames";
-import { SettingsContext } from "utils/contexts/settings";
import ResolvedIcon from "components/resolvedicon";
+import { useContext } from "react";
+import { SettingsContext } from "utils/contexts/settings";
export default function Item({ bookmark, iconOnly = false }) {
const description = bookmark.description ?? new URL(bookmark.href).hostname;
diff --git a/src/components/favicon.jsx b/src/components/favicon.jsx
index 8221c799..8961d655 100644
--- a/src/components/favicon.jsx
+++ b/src/components/favicon.jsx
@@ -1,6 +1,6 @@
/* eslint-disable @next/next/no-img-element */
/* eslint-disable jsx-a11y/alt-text */
-import { useRef, useEffect, useContext } from "react";
+import { useContext, useEffect, useRef } from "react";
import { ColorContext } from "utils/contexts/color";
import themes from "utils/styles/themes";
diff --git a/src/components/quicklaunch.jsx b/src/components/quicklaunch.jsx
index e1f6bc09..14f0f4fb 100644
--- a/src/components/quicklaunch.jsx
+++ b/src/components/quicklaunch.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "react-i18next";
-import { useEffect, useState, useRef, useCallback, useContext } from "react";
import classNames from "classnames";
+import { useCallback, useContext, useEffect, useRef, useState } from "react";
+import { useTranslation } from "react-i18next";
import useSWR from "swr";
import { SettingsContext } from "utils/contexts/settings";
@@ -53,7 +53,7 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea
const result = results[currentItemIndex];
window.open(
result.href,
- newWindow ? "_blank" : result.target ?? searchProvider?.target ?? settings.target ?? "_blank",
+ newWindow ? "_blank" : (result.target ?? searchProvider?.target ?? settings.target ?? "_blank"),
"noreferrer",
);
}
diff --git a/src/components/resolvedicon.jsx b/src/components/resolvedicon.jsx
index eb2a5c0d..77ba9119 100644
--- a/src/components/resolvedicon.jsx
+++ b/src/components/resolvedicon.jsx
@@ -1,5 +1,5 @@
-import { useContext } from "react";
import Image from "next/image";
+import { useContext } from "react";
import { SettingsContext } from "utils/contexts/settings";
import { ThemeContext } from "utils/contexts/theme";
diff --git a/src/components/services/dropdown.jsx b/src/components/services/dropdown.jsx
index 00b8a429..e8e11d97 100644
--- a/src/components/services/dropdown.jsx
+++ b/src/components/services/dropdown.jsx
@@ -1,7 +1,7 @@
-import { Fragment } from "react";
import { Menu, Transition } from "@headlessui/react";
-import { BiCog } from "react-icons/bi";
import classNames from "classnames";
+import { Fragment } from "react";
+import { BiCog } from "react-icons/bi";
export default function Dropdown({ options, value, setValue }) {
return (
diff --git a/src/components/services/group.jsx b/src/components/services/group.jsx
index 3e6327a4..cad7b5aa 100644
--- a/src/components/services/group.jsx
+++ b/src/components/services/group.jsx
@@ -1,9 +1,9 @@
-import { useRef, useEffect } from "react";
-import classNames from "classnames";
import { Disclosure, Transition } from "@headlessui/react";
-import { MdKeyboardArrowDown } from "react-icons/md";
-import List from "components/services/list";
+import classNames from "classnames";
import ResolvedIcon from "components/resolvedicon";
+import List from "components/services/list";
+import { useEffect, useRef } from "react";
+import { MdKeyboardArrowDown } from "react-icons/md";
import { columnMap } from "../../utils/layout/columns";
diff --git a/src/components/services/item.jsx b/src/components/services/item.jsx
index 72b0fd50..8e851611 100644
--- a/src/components/services/item.jsx
+++ b/src/components/services/item.jsx
@@ -1,15 +1,15 @@
import classNames from "classnames";
+import ResolvedIcon from "components/resolvedicon";
import { useContext, useState } from "react";
+import { SettingsContext } from "utils/contexts/settings";
import Docker from "widgets/docker/component";
import Kubernetes from "widgets/kubernetes/component";
-import { SettingsContext } from "utils/contexts/settings";
-import ResolvedIcon from "components/resolvedicon";
-import Status from "./status";
-import Widget from "./widget";
+import KubernetesStatus from "./kubernetes-status";
import Ping from "./ping";
import SiteMonitor from "./site-monitor";
-import KubernetesStatus from "./kubernetes-status";
+import Status from "./status";
+import Widget from "./widget";
export default function Item({ service, groupName, useEqualHeights }) {
const hasLink = service.href && service.href !== "#";
diff --git a/src/components/services/kubernetes-status.jsx b/src/components/services/kubernetes-status.jsx
index a256a2df..e4ea958d 100644
--- a/src/components/services/kubernetes-status.jsx
+++ b/src/components/services/kubernetes-status.jsx
@@ -1,5 +1,5 @@
-import useSWR from "swr";
import { t } from "i18next";
+import useSWR from "swr";
export default function KubernetesStatus({ service, style }) {
const podSelectorString = service.podSelector !== undefined ? `podSelector=${service.podSelector}` : "";
diff --git a/src/components/services/widget.jsx b/src/components/services/widget.jsx
index bda638a4..6e3a6360 100644
--- a/src/components/services/widget.jsx
+++ b/src/components/services/widget.jsx
@@ -1,5 +1,5 @@
-import { useTranslation } from "next-i18next";
import ErrorBoundary from "components/errorboundry";
+import { useTranslation } from "next-i18next";
import components from "widgets/components";
diff --git a/src/components/services/widget/block.jsx b/src/components/services/widget/block.jsx
index 8cd74aad..720140cc 100644
--- a/src/components/services/widget/block.jsx
+++ b/src/components/services/widget/block.jsx
@@ -1,5 +1,5 @@
-import { useTranslation } from "next-i18next";
import classNames from "classnames";
+import { useTranslation } from "next-i18next";
export default function Block({ value, label }) {
const { t } = useTranslation();
diff --git a/src/components/tab.jsx b/src/components/tab.jsx
index 2c3984c9..dc183fe4 100644
--- a/src/components/tab.jsx
+++ b/src/components/tab.jsx
@@ -1,5 +1,5 @@
-import { useContext } from "react";
import classNames from "classnames";
+import { useContext } from "react";
import { TabContext } from "utils/contexts/tab";
function slugify(tabName) {
diff --git a/src/components/toggles/color.jsx b/src/components/toggles/color.jsx
index 60cc8de8..7ea700ab 100644
--- a/src/components/toggles/color.jsx
+++ b/src/components/toggles/color.jsx
@@ -1,7 +1,7 @@
-import { useContext, Fragment } from "react";
-import { IoColorPalette } from "react-icons/io5";
import { Popover, Transition } from "@headlessui/react";
import classNames from "classnames";
+import { Fragment, useContext } from "react";
+import { IoColorPalette } from "react-icons/io5";
import { ColorContext } from "utils/contexts/color";
const colors = [
diff --git a/src/components/version.jsx b/src/components/version.jsx
index b8ee1eb8..946fb0a9 100644
--- a/src/components/version.jsx
+++ b/src/components/version.jsx
@@ -1,8 +1,8 @@
+import { compareVersions, validate } from "compare-versions";
import cache from "memory-cache";
import { useTranslation } from "next-i18next";
-import useSWR from "swr";
-import { compareVersions, validate } from "compare-versions";
import { MdNewReleases } from "react-icons/md";
+import useSWR from "swr";
const LATEST_RELEASE_CACHE_KEY = "latestRelease";
diff --git a/src/components/widgets/datetime/datetime.jsx b/src/components/widgets/datetime/datetime.jsx
index a7aec5da..b59cf809 100644
--- a/src/components/widgets/datetime/datetime.jsx
+++ b/src/components/widgets/datetime/datetime.jsx
@@ -1,5 +1,5 @@
-import { useState, useEffect } from "react";
import { useTranslation } from "next-i18next";
+import { useEffect, useState } from "react";
import Container from "../widget/container";
import Raw from "../widget/raw";
diff --git a/src/components/widgets/glances/glances.jsx b/src/components/widgets/glances/glances.jsx
index 0803b88c..7f772808 100644
--- a/src/components/widgets/glances/glances.jsx
+++ b/src/components/widgets/glances/glances.jsx
@@ -1,9 +1,9 @@
-import useSWR from "swr";
+import classNames from "classnames";
+import { useTranslation } from "next-i18next";
import { useContext } from "react";
import { FaMemory, FaRegClock, FaThermometerHalf } from "react-icons/fa";
import { FiCpu, FiHardDrive } from "react-icons/fi";
-import { useTranslation } from "next-i18next";
-import classNames from "classnames";
+import useSWR from "swr";
import { SettingsContext } from "utils/contexts/settings";
import Error from "../widget/error";
diff --git a/src/components/widgets/kubernetes/kubernetes.jsx b/src/components/widgets/kubernetes/kubernetes.jsx
index f7b101c7..50b173bc 100644
--- a/src/components/widgets/kubernetes/kubernetes.jsx
+++ b/src/components/widgets/kubernetes/kubernetes.jsx
@@ -1,8 +1,8 @@
-import useSWR from "swr";
import { useTranslation } from "next-i18next";
+import useSWR from "swr";
-import Error from "../widget/error";
import Container from "../widget/container";
+import Error from "../widget/error";
import Raw from "../widget/raw";
import Node from "./node";
diff --git a/src/components/widgets/kubernetes/node.jsx b/src/components/widgets/kubernetes/node.jsx
index ba8f8b77..aebb40f2 100644
--- a/src/components/widgets/kubernetes/node.jsx
+++ b/src/components/widgets/kubernetes/node.jsx
@@ -1,7 +1,7 @@
+import { useTranslation } from "next-i18next";
import { FaMemory } from "react-icons/fa";
import { FiAlertTriangle, FiCpu, FiServer } from "react-icons/fi";
import { SiKubernetes } from "react-icons/si";
-import { useTranslation } from "next-i18next";
import UsageBar from "../resources/usage-bar";
diff --git a/src/components/widgets/longhorn/longhorn.jsx b/src/components/widgets/longhorn/longhorn.jsx
index 22047e2c..235c77d0 100644
--- a/src/components/widgets/longhorn/longhorn.jsx
+++ b/src/components/widgets/longhorn/longhorn.jsx
@@ -1,7 +1,7 @@
import useSWR from "swr";
-import Error from "../widget/error";
import Container from "../widget/container";
+import Error from "../widget/error";
import Raw from "../widget/raw";
import Node from "./node";
diff --git a/src/components/widgets/openmeteo/openmeteo.jsx b/src/components/widgets/openmeteo/openmeteo.jsx
index 4d3e7e89..a46f53ab 100644
--- a/src/components/widgets/openmeteo/openmeteo.jsx
+++ b/src/components/widgets/openmeteo/openmeteo.jsx
@@ -1,16 +1,16 @@
-import useSWR from "swr";
-import { useState } from "react";
-import { WiCloudDown } from "react-icons/wi";
-import { MdLocationDisabled, MdLocationSearching } from "react-icons/md";
import { useTranslation } from "next-i18next";
+import { useState } from "react";
+import { MdLocationDisabled, MdLocationSearching } from "react-icons/md";
+import { WiCloudDown } from "react-icons/wi";
+import useSWR from "swr";
-import Error from "../widget/error";
+import mapIcon from "../../../utils/weather/openmeteo-condition-map";
import Container from "../widget/container";
import ContainerButton from "../widget/container_button";
-import WidgetIcon from "../widget/widget_icon";
+import Error from "../widget/error";
import PrimaryText from "../widget/primary_text";
import SecondaryText from "../widget/secondary_text";
-import mapIcon from "../../../utils/weather/openmeteo-condition-map";
+import WidgetIcon from "../widget/widget_icon";
function Widget({ options }) {
const { t } = useTranslation();
diff --git a/src/components/widgets/openweathermap/weather.jsx b/src/components/widgets/openweathermap/weather.jsx
index df0280e3..3336ed4f 100644
--- a/src/components/widgets/openweathermap/weather.jsx
+++ b/src/components/widgets/openweathermap/weather.jsx
@@ -1,16 +1,16 @@
-import useSWR from "swr";
-import { useState } from "react";
-import { WiCloudDown } from "react-icons/wi";
-import { MdLocationDisabled, MdLocationSearching } from "react-icons/md";
import { useTranslation } from "next-i18next";
+import { useState } from "react";
+import { MdLocationDisabled, MdLocationSearching } from "react-icons/md";
+import { WiCloudDown } from "react-icons/wi";
+import useSWR from "swr";
-import Error from "../widget/error";
+import mapIcon from "../../../utils/weather/owm-condition-map";
import Container from "../widget/container";
import ContainerButton from "../widget/container_button";
+import Error from "../widget/error";
import PrimaryText from "../widget/primary_text";
import SecondaryText from "../widget/secondary_text";
import WidgetIcon from "../widget/widget_icon";
-import mapIcon from "../../../utils/weather/owm-condition-map";
function Widget({ options }) {
const { t, i18n } = useTranslation();
diff --git a/src/components/widgets/resources/cpu.jsx b/src/components/widgets/resources/cpu.jsx
index 1963637d..1bea4af9 100644
--- a/src/components/widgets/resources/cpu.jsx
+++ b/src/components/widgets/resources/cpu.jsx
@@ -1,9 +1,9 @@
-import useSWR from "swr";
-import { FiCpu } from "react-icons/fi";
import { useTranslation } from "next-i18next";
+import { FiCpu } from "react-icons/fi";
+import useSWR from "swr";
-import Resource from "../widget/resource";
import Error from "../widget/error";
+import Resource from "../widget/resource";
export default function Cpu({ expanded, refresh = 1500 }) {
const { t } = useTranslation();
diff --git a/src/components/widgets/resources/cputemp.jsx b/src/components/widgets/resources/cputemp.jsx
index ef994c65..248cd396 100644
--- a/src/components/widgets/resources/cputemp.jsx
+++ b/src/components/widgets/resources/cputemp.jsx
@@ -1,9 +1,9 @@
-import useSWR from "swr";
-import { FaThermometerHalf } from "react-icons/fa";
import { useTranslation } from "next-i18next";
+import { FaThermometerHalf } from "react-icons/fa";
+import useSWR from "swr";
-import Resource from "../widget/resource";
import Error from "../widget/error";
+import Resource from "../widget/resource";
function convertToFahrenheit(t) {
return (t * 9) / 5 + 32;
diff --git a/src/components/widgets/resources/disk.jsx b/src/components/widgets/resources/disk.jsx
index 15da7780..d5706ba5 100644
--- a/src/components/widgets/resources/disk.jsx
+++ b/src/components/widgets/resources/disk.jsx
@@ -1,9 +1,9 @@
-import useSWR from "swr";
-import { FiHardDrive } from "react-icons/fi";
import { useTranslation } from "next-i18next";
+import { FiHardDrive } from "react-icons/fi";
+import useSWR from "swr";
-import Resource from "../widget/resource";
import Error from "../widget/error";
+import Resource from "../widget/resource";
export default function Disk({ options, expanded, diskUnits, refresh = 1500 }) {
const { t } = useTranslation();
diff --git a/src/components/widgets/resources/memory.jsx b/src/components/widgets/resources/memory.jsx
index 155b7ecb..a8c82cbf 100644
--- a/src/components/widgets/resources/memory.jsx
+++ b/src/components/widgets/resources/memory.jsx
@@ -1,9 +1,9 @@
-import useSWR from "swr";
-import { FaMemory } from "react-icons/fa";
import { useTranslation } from "next-i18next";
+import { FaMemory } from "react-icons/fa";
+import useSWR from "swr";
-import Resource from "../widget/resource";
import Error from "../widget/error";
+import Resource from "../widget/resource";
export default function Memory({ expanded, refresh = 1500 }) {
const { t } = useTranslation();
diff --git a/src/components/widgets/resources/network.jsx b/src/components/widgets/resources/network.jsx
index a2a3acac..48286030 100644
--- a/src/components/widgets/resources/network.jsx
+++ b/src/components/widgets/resources/network.jsx
@@ -1,9 +1,9 @@
-import useSWR from "swr";
-import { FaNetworkWired } from "react-icons/fa";
import { useTranslation } from "next-i18next";
+import { FaNetworkWired } from "react-icons/fa";
+import useSWR from "swr";
-import Resource from "../widget/resource";
import Error from "../widget/error";
+import Resource from "../widget/resource";
export default function Network({ options, refresh = 1500 }) {
const { t } = useTranslation();
diff --git a/src/components/widgets/resources/resources.jsx b/src/components/widgets/resources/resources.jsx
index db26caa7..1002f98c 100644
--- a/src/components/widgets/resources/resources.jsx
+++ b/src/components/widgets/resources/resources.jsx
@@ -1,12 +1,12 @@
import Container from "../widget/container";
import Raw from "../widget/raw";
-import Disk from "./disk";
import Cpu from "./cpu";
-import Memory from "./memory";
import CpuTemp from "./cputemp";
-import Uptime from "./uptime";
+import Disk from "./disk";
+import Memory from "./memory";
import Network from "./network";
+import Uptime from "./uptime";
export default function Resources({ options }) {
const { expanded, units, diskUnits, tempmin, tempmax } = options;
diff --git a/src/components/widgets/resources/uptime.jsx b/src/components/widgets/resources/uptime.jsx
index 2fac0fcd..f21634c2 100644
--- a/src/components/widgets/resources/uptime.jsx
+++ b/src/components/widgets/resources/uptime.jsx
@@ -1,9 +1,9 @@
-import useSWR from "swr";
-import { FaRegClock } from "react-icons/fa";
import { useTranslation } from "next-i18next";
+import { FaRegClock } from "react-icons/fa";
+import useSWR from "swr";
-import Resource from "../widget/resource";
import Error from "../widget/error";
+import Resource from "../widget/resource";
export default function Uptime({ refresh = 1500 }) {
const { t } = useTranslation();
diff --git a/src/components/widgets/search/search.jsx b/src/components/widgets/search/search.jsx
index e0564c48..6699a374 100644
--- a/src/components/widgets/search/search.jsx
+++ b/src/components/widgets/search/search.jsx
@@ -1,10 +1,10 @@
-import { useState, useEffect, Fragment } from "react";
-import { useTranslation } from "next-i18next";
-import { FiSearch } from "react-icons/fi";
-import { SiDuckduckgo, SiGoogle, SiBaidu, SiBrave } from "react-icons/si";
-import { BiLogoBing } from "react-icons/bi";
-import { Listbox, Transition, Combobox } from "@headlessui/react";
+import { Combobox, Listbox, Transition } from "@headlessui/react";
import classNames from "classnames";
+import { useTranslation } from "next-i18next";
+import { Fragment, useEffect, useState } from "react";
+import { BiLogoBing } from "react-icons/bi";
+import { FiSearch } from "react-icons/fi";
+import { SiBaidu, SiBrave, SiDuckduckgo, SiGoogle } from "react-icons/si";
import ContainerForm from "../widget/container_form";
import Raw from "../widget/raw";
diff --git a/src/components/widgets/stocks/stocks.jsx b/src/components/widgets/stocks/stocks.jsx
index 1a9018d3..e6657878 100644
--- a/src/components/widgets/stocks/stocks.jsx
+++ b/src/components/widgets/stocks/stocks.jsx
@@ -1,13 +1,13 @@
-import useSWR from "swr";
-import { useState } from "react";
import { useTranslation } from "next-i18next";
+import { useState } from "react";
import { FaChartLine } from "react-icons/fa6";
+import useSWR from "swr";
-import Error from "../widget/error";
import Container from "../widget/container";
+import Error from "../widget/error";
import PrimaryText from "../widget/primary_text";
-import WidgetIcon from "../widget/widget_icon";
import Raw from "../widget/raw";
+import WidgetIcon from "../widget/widget_icon";
export default function Widget({ options }) {
const { t, i18n } = useTranslation();
diff --git a/src/components/widgets/unifi_console/unifi_console.jsx b/src/components/widgets/unifi_console/unifi_console.jsx
index 5295dbb7..09e6952f 100644
--- a/src/components/widgets/unifi_console/unifi_console.jsx
+++ b/src/components/widgets/unifi_console/unifi_console.jsx
@@ -1,13 +1,13 @@
-import { BiError, BiWifi, BiCheckCircle, BiXCircle, BiNetworkChart } from "react-icons/bi";
-import { MdSettingsEthernet } from "react-icons/md";
import { useTranslation } from "next-i18next";
+import { BiCheckCircle, BiError, BiNetworkChart, BiWifi, BiXCircle } from "react-icons/bi";
+import { MdSettingsEthernet } from "react-icons/md";
import { SiUbiquiti } from "react-icons/si";
-import Error from "../widget/error";
import Container from "../widget/container";
+import Error from "../widget/error";
+import PrimaryText from "../widget/primary_text";
import Raw from "../widget/raw";
import WidgetIcon from "../widget/widget_icon";
-import PrimaryText from "../widget/primary_text";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/components/widgets/weather/weather.jsx b/src/components/widgets/weather/weather.jsx
index 4ebb08c5..98768963 100644
--- a/src/components/widgets/weather/weather.jsx
+++ b/src/components/widgets/weather/weather.jsx
@@ -1,16 +1,16 @@
-import useSWR from "swr";
-import { useState } from "react";
-import { WiCloudDown } from "react-icons/wi";
-import { MdLocationDisabled, MdLocationSearching } from "react-icons/md";
import { useTranslation } from "next-i18next";
+import { useState } from "react";
+import { MdLocationDisabled, MdLocationSearching } from "react-icons/md";
+import { WiCloudDown } from "react-icons/wi";
+import useSWR from "swr";
-import Error from "../widget/error";
+import mapIcon from "../../../utils/weather/condition-map";
import Container from "../widget/container";
+import ContainerButton from "../widget/container_button";
+import Error from "../widget/error";
import PrimaryText from "../widget/primary_text";
import SecondaryText from "../widget/secondary_text";
import WidgetIcon from "../widget/widget_icon";
-import ContainerButton from "../widget/container_button";
-import mapIcon from "../../../utils/weather/condition-map";
function Widget({ options }) {
const { t, i18n } = useTranslation();
diff --git a/src/components/widgets/widget.jsx b/src/components/widgets/widget.jsx
index 6cb48fde..ebc706ac 100644
--- a/src/components/widgets/widget.jsx
+++ b/src/components/widgets/widget.jsx
@@ -1,5 +1,5 @@
-import dynamic from "next/dynamic";
import ErrorBoundary from "components/errorboundry";
+import dynamic from "next/dynamic";
const widgetMappings = {
weatherapi: dynamic(() => import("components/widgets/weather/weather")),
diff --git a/src/components/widgets/widget/container.jsx b/src/components/widgets/widget/container.jsx
index ae06d8ba..fe6397e0 100644
--- a/src/components/widgets/widget/container.jsx
+++ b/src/components/widgets/widget/container.jsx
@@ -2,10 +2,10 @@ import classNames from "classnames";
import { useContext } from "react";
import { SettingsContext } from "utils/contexts/settings";
-import WidgetIcon from "./widget_icon";
import PrimaryText from "./primary_text";
-import SecondaryText from "./secondary_text";
import Raw from "./raw";
+import SecondaryText from "./secondary_text";
+import WidgetIcon from "./widget_icon";
export function getAllClasses(options, additionalClassNames = "") {
if (options?.style?.header === "boxedWidgets") {
diff --git a/src/components/widgets/widget/container_button.jsx b/src/components/widgets/widget/container_button.jsx
index a6379081..e0802511 100644
--- a/src/components/widgets/widget/container_button.jsx
+++ b/src/components/widgets/widget/container_button.jsx
@@ -1,4 +1,4 @@
-import { getAllClasses, getInnerBlock, getBottomBlock } from "./container";
+import { getAllClasses, getBottomBlock, getInnerBlock } from "./container";
export default function ContainerButton({ children = [], options, additionalClassNames = "", callback }) {
return (
diff --git a/src/components/widgets/widget/container_form.jsx b/src/components/widgets/widget/container_form.jsx
index 68cbd64b..a9afef3a 100644
--- a/src/components/widgets/widget/container_form.jsx
+++ b/src/components/widgets/widget/container_form.jsx
@@ -1,4 +1,4 @@
-import { getAllClasses, getInnerBlock, getBottomBlock } from "./container";
+import { getAllClasses, getBottomBlock, getInnerBlock } from "./container";
export default function ContainerForm({ children = [], options, additionalClassNames = "", callback }) {
return (
diff --git a/src/components/widgets/widget/container_link.jsx b/src/components/widgets/widget/container_link.jsx
index 6f157875..a36f311c 100644
--- a/src/components/widgets/widget/container_link.jsx
+++ b/src/components/widgets/widget/container_link.jsx
@@ -1,4 +1,4 @@
-import { getAllClasses, getInnerBlock, getBottomBlock } from "./container";
+import { getAllClasses, getBottomBlock, getInnerBlock } from "./container";
export default function ContainerLink({ children = [], options, additionalClassNames = "", target }) {
return (
diff --git a/src/components/widgets/widget/resources.jsx b/src/components/widgets/widget/resources.jsx
index 2f594942..b9a48a41 100644
--- a/src/components/widgets/widget/resources.jsx
+++ b/src/components/widgets/widget/resources.jsx
@@ -1,8 +1,8 @@
import classNames from "classnames";
import ContainerLink from "./container_link";
-import Resource from "./resource";
import Raw from "./raw";
+import Resource from "./resource";
import WidgetLabel from "./widget_label";
export default function Resources({ options, children, target, additionalClassNames }) {
diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx
index c5465a80..8e88f6b2 100644
--- a/src/pages/_app.jsx
+++ b/src/pages/_app.jsx
@@ -1,14 +1,14 @@
/* eslint-disable react/jsx-props-no-spreading */
-import { SWRConfig } from "swr";
import { appWithTranslation } from "next-i18next";
import Head from "next/head";
import "styles/globals.css";
-import "styles/theme.css";
import "styles/manrope.css";
+import "styles/theme.css";
+import { SWRConfig } from "swr";
import { ColorProvider } from "utils/contexts/color";
-import { ThemeProvider } from "utils/contexts/theme";
import { SettingsProvider } from "utils/contexts/settings";
import { TabProvider } from "utils/contexts/tab";
+import { ThemeProvider } from "utils/contexts/theme";
import nextI18nextConfig from "../../next-i18next.config";
diff --git a/src/pages/_document.jsx b/src/pages/_document.jsx
index 31083438..ece38aec 100644
--- a/src/pages/_document.jsx
+++ b/src/pages/_document.jsx
@@ -1,4 +1,4 @@
-import { Html, Head, Main, NextScript } from "next/document";
+import { Head, Html, Main, NextScript } from "next/document";
export default function Document() {
return (
diff --git a/src/pages/api/config/[path].js b/src/pages/api/config/[path].js
index 6cb04698..b69ddff5 100644
--- a/src/pages/api/config/[path].js
+++ b/src/pages/api/config/[path].js
@@ -1,5 +1,5 @@
-import path from "path";
import fs from "fs";
+import path from "path";
import { CONF_DIR } from "utils/config/config";
import createLogger from "utils/logger";
diff --git a/src/pages/api/hash.js b/src/pages/api/hash.js
index 992f9ea6..33fb4ef5 100644
--- a/src/pages/api/hash.js
+++ b/src/pages/api/hash.js
@@ -1,6 +1,6 @@
-import { join } from "path";
import { createHash } from "crypto";
import { readFileSync } from "fs";
+import { join } from "path";
import checkAndCopyConfig, { CONF_DIR } from "utils/config/config";
diff --git a/src/pages/api/releases.js b/src/pages/api/releases.js
index 372ace9d..01d0e8a5 100644
--- a/src/pages/api/releases.js
+++ b/src/pages/api/releases.js
@@ -1,5 +1,5 @@
-import { cachedRequest } from "utils/proxy/http";
import createLogger from "utils/logger";
+import { cachedRequest } from "utils/proxy/http";
const logger = createLogger("releases");
diff --git a/src/pages/api/search/searchSuggestion.js b/src/pages/api/search/searchSuggestion.js
index 209d1f2c..13f3f301 100644
--- a/src/pages/api/search/searchSuggestion.js
+++ b/src/pages/api/search/searchSuggestion.js
@@ -1,8 +1,8 @@
import { searchProviders } from "components/widgets/search/search";
import { getSettings } from "utils/config/config";
-import { cachedRequest } from "utils/proxy/http";
import { widgetsFromConfig } from "utils/config/widget-helpers";
+import { cachedRequest } from "utils/proxy/http";
export default async function handler(req, res) {
const { query, providerName } = req.query;
diff --git a/src/pages/api/services/proxy.js b/src/pages/api/services/proxy.js
index 3f8adc88..0cdf806f 100644
--- a/src/pages/api/services/proxy.js
+++ b/src/pages/api/services/proxy.js
@@ -1,9 +1,9 @@
-import { formatApiCall } from "utils/proxy/api-helpers";
-import createLogger from "utils/logger";
-import genericProxyHandler from "utils/proxy/handlers/generic";
-import widgets from "widgets/widgets";
-import calendarProxyHandler from "widgets/calendar/proxy";
import getServiceWidget from "utils/config/service-helpers";
+import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import genericProxyHandler from "utils/proxy/handlers/generic";
+import calendarProxyHandler from "widgets/calendar/proxy";
+import widgets from "widgets/widgets";
const logger = createLogger("servicesProxy");
diff --git a/src/pages/api/widgets/glances.js b/src/pages/api/widgets/glances.js
index 199c133e..f0a3a7d9 100644
--- a/src/pages/api/widgets/glances.js
+++ b/src/pages/api/widgets/glances.js
@@ -1,6 +1,6 @@
-import { httpProxy } from "utils/proxy/http";
-import createLogger from "utils/logger";
import { getPrivateWidgetOptions } from "utils/config/widget-helpers";
+import createLogger from "utils/logger";
+import { httpProxy } from "utils/proxy/http";
const logger = createLogger("glances");
diff --git a/src/pages/api/widgets/longhorn.js b/src/pages/api/widgets/longhorn.js
index 9126e937..c45086bc 100644
--- a/src/pages/api/widgets/longhorn.js
+++ b/src/pages/api/widgets/longhorn.js
@@ -1,6 +1,6 @@
-import { httpProxy } from "../../../utils/proxy/http";
-import createLogger from "../../../utils/logger";
import { getSettings } from "../../../utils/config/config";
+import createLogger from "../../../utils/logger";
+import { httpProxy } from "../../../utils/proxy/http";
const logger = createLogger("longhorn");
diff --git a/src/pages/api/widgets/openweathermap.js b/src/pages/api/widgets/openweathermap.js
index 3bdc7a82..993ee1f5 100644
--- a/src/pages/api/widgets/openweathermap.js
+++ b/src/pages/api/widgets/openweathermap.js
@@ -1,6 +1,6 @@
-import { cachedRequest } from "utils/proxy/http";
import { getSettings } from "utils/config/config";
import { getPrivateWidgetOptions } from "utils/config/widget-helpers";
+import { cachedRequest } from "utils/proxy/http";
export default async function handler(req, res) {
const { latitude, longitude, units, provider, cache, lang, index } = req.query;
diff --git a/src/pages/api/widgets/stocks.js b/src/pages/api/widgets/stocks.js
index 4e9f3f55..77881ad7 100644
--- a/src/pages/api/widgets/stocks.js
+++ b/src/pages/api/widgets/stocks.js
@@ -1,6 +1,6 @@
-import { cachedRequest } from "utils/proxy/http";
import { getSettings } from "utils/config/config";
import createLogger from "utils/logger";
+import { cachedRequest } from "utils/proxy/http";
const logger = createLogger("stocks");
diff --git a/src/pages/api/widgets/weather.js b/src/pages/api/widgets/weather.js
index 9e63e48d..78418f74 100644
--- a/src/pages/api/widgets/weather.js
+++ b/src/pages/api/widgets/weather.js
@@ -1,6 +1,6 @@
-import { cachedRequest } from "utils/proxy/http";
import { getSettings } from "utils/config/config";
import { getPrivateWidgetOptions } from "utils/config/widget-helpers";
+import { cachedRequest } from "utils/proxy/http";
export default async function handler(req, res) {
const { latitude, longitude, provider, cache, lang, index } = req.query;
diff --git a/src/pages/index.jsx b/src/pages/index.jsx
index 78702796..f8d48fdf 100644
--- a/src/pages/index.jsx
+++ b/src/pages/index.jsx
@@ -1,31 +1,31 @@
/* eslint-disable react/no-array-index-key */
-import useSWR, { SWRConfig } from "swr";
-import Head from "next/head";
-import Script from "next/script";
-import dynamic from "next/dynamic";
import classNames from "classnames";
-import { useTranslation } from "next-i18next";
-import { useEffect, useContext, useState, useMemo } from "react";
-import { BiError } from "react-icons/bi";
-import { serverSideTranslations } from "next-i18next/serverSideTranslations";
-import { useRouter } from "next/router";
-import Tab, { slugifyAndEncode } from "components/tab";
-import ServicesGroup from "components/services/group";
import BookmarksGroup from "components/bookmarks/group";
-import Widget from "components/widgets/widget";
-import Revalidate from "components/toggles/revalidate";
-import { ColorContext } from "utils/contexts/color";
-import { ThemeContext } from "utils/contexts/theme";
-import { SettingsContext } from "utils/contexts/settings";
-import { TabContext } from "utils/contexts/tab";
import ErrorBoundary from "components/errorboundry";
import QuickLaunch from "components/quicklaunch";
+import ServicesGroup from "components/services/group";
+import Tab, { slugifyAndEncode } from "components/tab";
+import Revalidate from "components/toggles/revalidate";
+import Widget from "components/widgets/widget";
+import { useTranslation } from "next-i18next";
+import { serverSideTranslations } from "next-i18next/serverSideTranslations";
+import dynamic from "next/dynamic";
+import Head from "next/head";
+import { useRouter } from "next/router";
+import Script from "next/script";
+import { useContext, useEffect, useMemo, useState } from "react";
+import { BiError } from "react-icons/bi";
+import useSWR, { SWRConfig } from "swr";
+import { ColorContext } from "utils/contexts/color";
+import { SettingsContext } from "utils/contexts/settings";
+import { TabContext } from "utils/contexts/tab";
+import { ThemeContext } from "utils/contexts/theme";
import { bookmarksResponse, servicesResponse, widgetsResponse } from "utils/config/api-response";
-import themes from "utils/styles/themes";
import { getSettings } from "utils/config/config";
import useWindowFocus from "utils/hooks/window-focus";
import createLogger from "utils/logger";
+import themes from "utils/styles/themes";
const ThemeToggle = dynamic(() => import("components/toggles/theme"), {
ssr: false,
diff --git a/src/utils/config/api-response.js b/src/utils/config/api-response.js
index 03f155fb..4691f9bc 100644
--- a/src/utils/config/api-response.js
+++ b/src/utils/config/api-response.js
@@ -4,13 +4,13 @@ import path from "path";
import yaml from "js-yaml";
-import checkAndCopyConfig, { getSettings, substituteEnvironmentVars, CONF_DIR } from "utils/config/config";
+import checkAndCopyConfig, { CONF_DIR, getSettings, substituteEnvironmentVars } from "utils/config/config";
import {
+ cleanServiceGroups,
+ findGroupByName,
servicesFromConfig,
servicesFromDocker,
- cleanServiceGroups,
servicesFromKubernetes,
- findGroupByName,
} from "utils/config/service-helpers";
import { cleanWidgetGroups, widgetsFromConfig } from "utils/config/widget-helpers";
diff --git a/src/utils/config/config.js b/src/utils/config/config.js
index 18dedf62..3f688842 100644
--- a/src/utils/config/config.js
+++ b/src/utils/config/config.js
@@ -1,9 +1,9 @@
/* eslint-disable no-console */
-import { join } from "path";
import { copyFileSync, existsSync, mkdirSync, readFileSync } from "fs";
+import { join } from "path";
-import cache from "memory-cache";
import yaml from "js-yaml";
+import cache from "memory-cache";
const cacheKey = "homepageEnvironmentVariables";
const homepageVarPrefix = "HOMEPAGE_VAR_";
diff --git a/src/utils/config/docker.js b/src/utils/config/docker.js
index 6ea728e9..ed1d3347 100644
--- a/src/utils/config/docker.js
+++ b/src/utils/config/docker.js
@@ -1,5 +1,5 @@
-import path from "path";
import { readFileSync } from "fs";
+import path from "path";
import yaml from "js-yaml";
diff --git a/src/utils/config/kubernetes.js b/src/utils/config/kubernetes.js
index 6d2fc17b..680c408e 100644
--- a/src/utils/config/kubernetes.js
+++ b/src/utils/config/kubernetes.js
@@ -1,8 +1,8 @@
-import path from "path";
import { readFileSync } from "fs";
+import path from "path";
+import { ApiextensionsV1Api, KubeConfig } from "@kubernetes/client-node";
import yaml from "js-yaml";
-import { KubeConfig, ApiextensionsV1Api } from "@kubernetes/client-node";
import checkAndCopyConfig, { CONF_DIR, substituteEnvironmentVars } from "utils/config/config";
diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js
index 38e7a2bf..c3df6579 100644
--- a/src/utils/config/service-helpers.js
+++ b/src/utils/config/service-helpers.js
@@ -1,15 +1,15 @@
import { promises as fs } from "fs";
import path from "path";
-import yaml from "js-yaml";
import Docker from "dockerode";
+import yaml from "js-yaml";
-import createLogger from "utils/logger";
import checkAndCopyConfig, { CONF_DIR, getSettings, substituteEnvironmentVars } from "utils/config/config";
import getDockerArguments from "utils/config/docker";
-import kubernetes from "utils/kubernetes/export";
import { getKubeConfig } from "utils/config/kubernetes";
import * as shvl from "utils/config/shvl";
+import kubernetes from "utils/kubernetes/export";
+import createLogger from "utils/logger";
const logger = createLogger("service-helpers");
diff --git a/src/utils/contexts/color.jsx b/src/utils/contexts/color.jsx
index d7d985f0..bc16d605 100644
--- a/src/utils/contexts/color.jsx
+++ b/src/utils/contexts/color.jsx
@@ -1,4 +1,4 @@
-import { createContext, useState, useEffect, useMemo } from "react";
+import { createContext, useEffect, useMemo, useState } from "react";
let lastColor = false;
diff --git a/src/utils/contexts/settings.jsx b/src/utils/contexts/settings.jsx
index d6993b14..76451953 100644
--- a/src/utils/contexts/settings.jsx
+++ b/src/utils/contexts/settings.jsx
@@ -1,4 +1,4 @@
-import { createContext, useState, useMemo } from "react";
+import { createContext, useMemo, useState } from "react";
export const SettingsContext = createContext();
diff --git a/src/utils/contexts/tab.jsx b/src/utils/contexts/tab.jsx
index 8cd5d520..2a3d3457 100644
--- a/src/utils/contexts/tab.jsx
+++ b/src/utils/contexts/tab.jsx
@@ -1,4 +1,4 @@
-import { createContext, useState, useMemo } from "react";
+import { createContext, useMemo, useState } from "react";
export const TabContext = createContext();
diff --git a/src/utils/contexts/theme.jsx b/src/utils/contexts/theme.jsx
index 85d613fc..385eeaa2 100644
--- a/src/utils/contexts/theme.jsx
+++ b/src/utils/contexts/theme.jsx
@@ -1,4 +1,4 @@
-import { createContext, useState, useEffect, useMemo } from "react";
+import { createContext, useEffect, useMemo, useState } from "react";
const getInitialTheme = () => {
if (typeof window !== "undefined" && window.localStorage) {
diff --git a/src/utils/hooks/window-focus.js b/src/utils/hooks/window-focus.js
index 3ad57ad0..a221e48e 100644
--- a/src/utils/hooks/window-focus.js
+++ b/src/utils/hooks/window-focus.js
@@ -1,4 +1,4 @@
-import { useState, useEffect } from "react";
+import { useEffect, useState } from "react";
const hasFocus = () => typeof document !== "undefined" && document.hasFocus();
diff --git a/src/utils/kubernetes/export.js b/src/utils/kubernetes/export.js
index ba41593e..ae53aaca 100644
--- a/src/utils/kubernetes/export.js
+++ b/src/utils/kubernetes/export.js
@@ -1,7 +1,7 @@
-import listIngress from "utils/kubernetes/ingress-list";
-import listTraefikIngress from "utils/kubernetes/traefik-list";
import listHttpRoute from "utils/kubernetes/httproute-list";
-import { isDiscoverable, constructedServiceFromResource } from "utils/kubernetes/resource-helpers";
+import listIngress from "utils/kubernetes/ingress-list";
+import { constructedServiceFromResource, isDiscoverable } from "utils/kubernetes/resource-helpers";
+import listTraefikIngress from "utils/kubernetes/traefik-list";
const kubernetes = {
listIngress,
diff --git a/src/utils/kubernetes/ingress-list.js b/src/utils/kubernetes/ingress-list.js
index 49b5d667..1cd9ca95 100644
--- a/src/utils/kubernetes/ingress-list.js
+++ b/src/utils/kubernetes/ingress-list.js
@@ -1,6 +1,6 @@
import { NetworkingV1Api } from "@kubernetes/client-node";
-import { getKubernetes, getKubeConfig } from "utils/config/kubernetes";
+import { getKubeConfig, getKubernetes } from "utils/config/kubernetes";
import createLogger from "utils/logger";
const logger = createLogger("ingress-list");
diff --git a/src/utils/kubernetes/resource-helpers.js b/src/utils/kubernetes/resource-helpers.js
index 1b59526a..0ac143ac 100644
--- a/src/utils/kubernetes/resource-helpers.js
+++ b/src/utils/kubernetes/resource-helpers.js
@@ -1,15 +1,15 @@
import { CustomObjectsApi } from "@kubernetes/client-node";
+import { substituteEnvironmentVars } from "utils/config/config";
import {
- getKubeConfig,
ANNOTATION_BASE,
ANNOTATION_WIDGET_BASE,
+ getKubeConfig,
HTTPROUTE_API_GROUP,
HTTPROUTE_API_VERSION,
} from "utils/config/kubernetes";
-import { substituteEnvironmentVars } from "utils/config/config";
-import createLogger from "utils/logger";
import * as shvl from "utils/config/shvl";
+import createLogger from "utils/logger";
const logger = createLogger("resource-helpers");
const kc = getKubeConfig();
diff --git a/src/utils/kubernetes/traefik-list.js b/src/utils/kubernetes/traefik-list.js
index 0368629a..f6e07241 100644
--- a/src/utils/kubernetes/traefik-list.js
+++ b/src/utils/kubernetes/traefik-list.js
@@ -1,6 +1,6 @@
import { CustomObjectsApi } from "@kubernetes/client-node";
-import { getKubernetes, getKubeConfig, checkCRD, ANNOTATION_BASE } from "utils/config/kubernetes";
+import { ANNOTATION_BASE, checkCRD, getKubeConfig, getKubernetes } from "utils/config/kubernetes";
import createLogger from "utils/logger";
const logger = createLogger("traefik-list");
diff --git a/src/utils/proxy/handlers/credentialed.js b/src/utils/proxy/handlers/credentialed.js
index 056e919f..d0dbc2d6 100644
--- a/src/utils/proxy/handlers/credentialed.js
+++ b/src/utils/proxy/handlers/credentialed.js
@@ -1,9 +1,9 @@
-import getServiceWidget from "utils/config/service-helpers";
-import { formatApiCall, sanitizeErrorURL } from "utils/proxy/api-helpers";
-import validateWidgetData from "utils/proxy/validate-widget-data";
-import { httpProxy } from "utils/proxy/http";
-import createLogger from "utils/logger";
import { getSettings } from "utils/config/config";
+import getServiceWidget from "utils/config/service-helpers";
+import createLogger from "utils/logger";
+import { formatApiCall, sanitizeErrorURL } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
+import validateWidgetData from "utils/proxy/validate-widget-data";
import widgets from "widgets/widgets";
const logger = createLogger("credentialedProxyHandler");
diff --git a/src/utils/proxy/handlers/generic.js b/src/utils/proxy/handlers/generic.js
index 4a71f704..1914114c 100644
--- a/src/utils/proxy/handlers/generic.js
+++ b/src/utils/proxy/handlers/generic.js
@@ -1,8 +1,8 @@
import getServiceWidget from "utils/config/service-helpers";
-import { formatApiCall, sanitizeErrorURL } from "utils/proxy/api-helpers";
-import validateWidgetData from "utils/proxy/validate-widget-data";
-import { httpProxy } from "utils/proxy/http";
import createLogger from "utils/logger";
+import { formatApiCall, sanitizeErrorURL } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
+import validateWidgetData from "utils/proxy/validate-widget-data";
import widgets from "widgets/widgets";
const logger = createLogger("genericProxyHandler");
diff --git a/src/utils/proxy/handlers/jsonrpc.js b/src/utils/proxy/handlers/jsonrpc.js
index f9fb1883..bdb10e02 100644
--- a/src/utils/proxy/handlers/jsonrpc.js
+++ b/src/utils/proxy/handlers/jsonrpc.js
@@ -1,9 +1,9 @@
import { JSONRPCClient, JSONRPCErrorException } from "json-rpc-2.0";
-import { formatApiCall } from "utils/proxy/api-helpers";
-import { httpProxy } from "utils/proxy/http";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
const logger = createLogger("jsonrpcProxyHandler");
diff --git a/src/utils/proxy/handlers/synology.js b/src/utils/proxy/handlers/synology.js
index 030e53ba..6fe98dce 100644
--- a/src/utils/proxy/handlers/synology.js
+++ b/src/utils/proxy/handlers/synology.js
@@ -1,9 +1,9 @@
import cache from "memory-cache";
import getServiceWidget from "utils/config/service-helpers";
+import createLogger from "utils/logger";
import { asJson, formatApiCall } from "utils/proxy/api-helpers";
import { httpProxy } from "utils/proxy/http";
-import createLogger from "utils/logger";
import widgets from "widgets/widgets";
const INFO_ENDPOINT = "{url}/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query";
diff --git a/src/utils/proxy/http.js b/src/utils/proxy/http.js
index f8d2dcce..1a22a7f7 100644
--- a/src/utils/proxy/http.js
+++ b/src/utils/proxy/http.js
@@ -5,8 +5,8 @@ import { createUnzip, constants as zlibConstants } from "node:zlib";
import { http, https } from "follow-redirects";
import cache from "memory-cache";
-import { addCookieToJar, setCookieHeader } from "./cookie-jar";
import { sanitizeErrorURL } from "./api-helpers";
+import { addCookieToJar, setCookieHeader } from "./cookie-jar";
import createLogger from "utils/logger";
diff --git a/src/utils/proxy/validate-widget-data.js b/src/utils/proxy/validate-widget-data.js
index 8f865fe2..de2a3c4e 100644
--- a/src/utils/proxy/validate-widget-data.js
+++ b/src/utils/proxy/validate-widget-data.js
@@ -1,6 +1,6 @@
/* eslint-disable no-console */
-import widgets from "widgets/widgets";
import createLogger from "utils/logger";
+import widgets from "widgets/widgets";
const logger = createLogger("validateWidgetData");
diff --git a/src/widgets/adguard/component.jsx b/src/widgets/adguard/component.jsx
index 6cb9175a..e5a7670a 100644
--- a/src/widgets/adguard/component.jsx
+++ b/src/widgets/adguard/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/apcups/component.jsx b/src/widgets/apcups/component.jsx
index c1c26b5c..85e621db 100644
--- a/src/widgets/apcups/component.jsx
+++ b/src/widgets/apcups/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/apcups/proxy.js b/src/widgets/apcups/proxy.js
index 8e1d7ffc..bf22730e 100644
--- a/src/widgets/apcups/proxy.js
+++ b/src/widgets/apcups/proxy.js
@@ -1,5 +1,5 @@
-import net from "node:net";
import { Buffer } from "node:buffer";
+import net from "node:net";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
diff --git a/src/widgets/argocd/component.jsx b/src/widgets/argocd/component.jsx
index d4283acf..f61bed43 100644
--- a/src/widgets/argocd/component.jsx
+++ b/src/widgets/argocd/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/atsumeru/component.jsx b/src/widgets/atsumeru/component.jsx
index 2b87ac34..01cc8e46 100644
--- a/src/widgets/atsumeru/component.jsx
+++ b/src/widgets/atsumeru/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/audiobookshelf/component.jsx b/src/widgets/audiobookshelf/component.jsx
index 0444b6b4..b410e1a7 100755
--- a/src/widgets/audiobookshelf/component.jsx
+++ b/src/widgets/audiobookshelf/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/audiobookshelf/proxy.js b/src/widgets/audiobookshelf/proxy.js
index 1a89736b..afff3ba9 100644
--- a/src/widgets/audiobookshelf/proxy.js
+++ b/src/widgets/audiobookshelf/proxy.js
@@ -1,7 +1,7 @@
-import { httpProxy } from "utils/proxy/http";
-import { formatApiCall } from "utils/proxy/api-helpers";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
const proxyName = "audiobookshelfProxyHandler";
diff --git a/src/widgets/authentik/component.jsx b/src/widgets/authentik/component.jsx
index d4446551..edf5ece1 100644
--- a/src/widgets/authentik/component.jsx
+++ b/src/widgets/authentik/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/autobrr/component.jsx b/src/widgets/autobrr/component.jsx
index a73a7d17..5454cd3c 100644
--- a/src/widgets/autobrr/component.jsx
+++ b/src/widgets/autobrr/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/azuredevops/component.jsx b/src/widgets/azuredevops/component.jsx
index bfe9797f..7a36aab2 100644
--- a/src/widgets/azuredevops/component.jsx
+++ b/src/widgets/azuredevops/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/bazarr/component.jsx b/src/widgets/bazarr/component.jsx
index 120774fb..f79ec206 100644
--- a/src/widgets/bazarr/component.jsx
+++ b/src/widgets/bazarr/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/bazarr/widget.js b/src/widgets/bazarr/widget.js
index 5b89b2b4..c54e38ad 100644
--- a/src/widgets/bazarr/widget.js
+++ b/src/widgets/bazarr/widget.js
@@ -1,5 +1,5 @@
-import genericProxyHandler from "utils/proxy/handlers/generic";
import { asJson } from "utils/proxy/api-helpers";
+import genericProxyHandler from "utils/proxy/handlers/generic";
const widget = {
api: "{url}/api/{endpoint}/wanted?apikey={key}",
diff --git a/src/widgets/beszel/component.jsx b/src/widgets/beszel/component.jsx
index a191c31f..e80a9fab 100644
--- a/src/widgets/beszel/component.jsx
+++ b/src/widgets/beszel/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/beszel/proxy.js b/src/widgets/beszel/proxy.js
index 078e22c3..96dfc913 100644
--- a/src/widgets/beszel/proxy.js
+++ b/src/widgets/beszel/proxy.js
@@ -1,10 +1,10 @@
import cache from "memory-cache";
import getServiceWidget from "utils/config/service-helpers";
+import createLogger from "utils/logger";
import { formatApiCall } from "utils/proxy/api-helpers";
import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
-import createLogger from "utils/logger";
const proxyName = "beszelProxyHandler";
const tokenCacheKey = `${proxyName}__token`;
diff --git a/src/widgets/caddy/component.jsx b/src/widgets/caddy/component.jsx
index 60e71e9e..1613760d 100644
--- a/src/widgets/caddy/component.jsx
+++ b/src/widgets/caddy/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/calendar/agenda.jsx b/src/widgets/calendar/agenda.jsx
index 6a3be031..cb00c1d2 100644
--- a/src/widgets/calendar/agenda.jsx
+++ b/src/widgets/calendar/agenda.jsx
@@ -1,5 +1,5 @@
-import { DateTime } from "luxon";
import classNames from "classnames";
+import { DateTime } from "luxon";
import { useTranslation } from "next-i18next";
import Event, { compareDateTimezone } from "./event";
diff --git a/src/widgets/calendar/component.jsx b/src/widgets/calendar/component.jsx
index 56858fad..0647d4ad 100644
--- a/src/widgets/calendar/component.jsx
+++ b/src/widgets/calendar/component.jsx
@@ -1,12 +1,12 @@
-import { useEffect, useMemo, useState, useContext } from "react";
-import dynamic from "next/dynamic";
+import Container from "components/services/widget/container";
import { DateTime } from "luxon";
import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
+import dynamic from "next/dynamic";
+import { useContext, useEffect, useMemo, useState } from "react";
import { SettingsContext } from "utils/contexts/settings";
-import Monthly from "./monthly";
import Agenda from "./agenda";
+import Monthly from "./monthly";
const colorVariants = {
// https://tailwindcss.com/docs/content-configuration#dynamic-class-names
diff --git a/src/widgets/calendar/event.jsx b/src/widgets/calendar/event.jsx
index 754c6ee9..6ea2e1ae 100644
--- a/src/widgets/calendar/event.jsx
+++ b/src/widgets/calendar/event.jsx
@@ -1,7 +1,7 @@
-import { useState } from "react";
-import { useTranslation } from "next-i18next";
-import { DateTime } from "luxon";
import classNames from "classnames";
+import { DateTime } from "luxon";
+import { useTranslation } from "next-i18next";
+import { useState } from "react";
import { IoMdCheckmarkCircleOutline } from "react-icons/io";
export default function Event({ event, colorVariants, showDate = false, showTime = false, showDateColumn = true }) {
diff --git a/src/widgets/calendar/integrations/ical.jsx b/src/widgets/calendar/integrations/ical.jsx
index 77729982..46217977 100644
--- a/src/widgets/calendar/integrations/ical.jsx
+++ b/src/widgets/calendar/integrations/ical.jsx
@@ -1,11 +1,11 @@
-import { DateTime } from "luxon";
import { parseString } from "cal-parser";
-import { useEffect } from "react";
+import { DateTime } from "luxon";
import { useTranslation } from "next-i18next";
+import { useEffect } from "react";
import { RRule } from "rrule";
-import useWidgetAPI from "../../../utils/proxy/use-widget-api";
import Error from "../../../components/services/widget/error";
+import useWidgetAPI from "../../../utils/proxy/use-widget-api";
// https://gist.github.com/jlevy/c246006675becc446360a798e2b2d781
function simpleHash(str) {
diff --git a/src/widgets/calendar/integrations/lidarr.jsx b/src/widgets/calendar/integrations/lidarr.jsx
index d4a6edbe..65ad1da2 100644
--- a/src/widgets/calendar/integrations/lidarr.jsx
+++ b/src/widgets/calendar/integrations/lidarr.jsx
@@ -1,8 +1,8 @@
import { DateTime } from "luxon";
import { useEffect } from "react";
-import useWidgetAPI from "../../../utils/proxy/use-widget-api";
import Error from "../../../components/services/widget/error";
+import useWidgetAPI from "../../../utils/proxy/use-widget-api";
export default function Integration({ config, params, setEvents, hideErrors = false }) {
const { data: lidarrData, error: lidarrError } = useWidgetAPI(config, "calendar", {
diff --git a/src/widgets/calendar/integrations/radarr.jsx b/src/widgets/calendar/integrations/radarr.jsx
index 945eadd9..9c8880a9 100644
--- a/src/widgets/calendar/integrations/radarr.jsx
+++ b/src/widgets/calendar/integrations/radarr.jsx
@@ -1,9 +1,9 @@
import { DateTime } from "luxon";
-import { useEffect } from "react";
import { useTranslation } from "next-i18next";
+import { useEffect } from "react";
-import useWidgetAPI from "../../../utils/proxy/use-widget-api";
import Error from "../../../components/services/widget/error";
+import useWidgetAPI from "../../../utils/proxy/use-widget-api";
export default function Integration({ config, params, setEvents, hideErrors = false }) {
const { t } = useTranslation();
diff --git a/src/widgets/calendar/integrations/readarr.jsx b/src/widgets/calendar/integrations/readarr.jsx
index 6ae919ef..4fe3872e 100644
--- a/src/widgets/calendar/integrations/readarr.jsx
+++ b/src/widgets/calendar/integrations/readarr.jsx
@@ -1,8 +1,8 @@
import { DateTime } from "luxon";
import { useEffect } from "react";
-import useWidgetAPI from "../../../utils/proxy/use-widget-api";
import Error from "../../../components/services/widget/error";
+import useWidgetAPI from "../../../utils/proxy/use-widget-api";
export default function Integration({ config, params, setEvents, hideErrors = false }) {
const { data: readarrData, error: readarrError } = useWidgetAPI(config, "calendar", {
diff --git a/src/widgets/calendar/integrations/sonarr.jsx b/src/widgets/calendar/integrations/sonarr.jsx
index 34cc679d..abdec328 100644
--- a/src/widgets/calendar/integrations/sonarr.jsx
+++ b/src/widgets/calendar/integrations/sonarr.jsx
@@ -1,8 +1,8 @@
import { DateTime } from "luxon";
import { useEffect } from "react";
-import useWidgetAPI from "../../../utils/proxy/use-widget-api";
import Error from "../../../components/services/widget/error";
+import useWidgetAPI from "../../../utils/proxy/use-widget-api";
export default function Integration({ config, params, setEvents, hideErrors = false }) {
const { data: sonarrData, error: sonarrError } = useWidgetAPI(config, "calendar", {
diff --git a/src/widgets/calendar/monthly.jsx b/src/widgets/calendar/monthly.jsx
index 7313232f..4e870261 100644
--- a/src/widgets/calendar/monthly.jsx
+++ b/src/widgets/calendar/monthly.jsx
@@ -1,7 +1,7 @@
-import { useMemo } from "react";
-import { DateTime, Info } from "luxon";
import classNames from "classnames";
+import { DateTime, Info } from "luxon";
import { useTranslation } from "next-i18next";
+import { useMemo } from "react";
import Event, { compareDateTimezone } from "./event";
diff --git a/src/widgets/calendar/proxy.js b/src/widgets/calendar/proxy.js
index d36f30c9..c98441ee 100644
--- a/src/widgets/calendar/proxy.js
+++ b/src/widgets/calendar/proxy.js
@@ -1,6 +1,6 @@
import getServiceWidget from "utils/config/service-helpers";
-import { httpProxy } from "utils/proxy/http";
import createLogger from "utils/logger";
+import { httpProxy } from "utils/proxy/http";
const logger = createLogger("calendarProxyHandler");
diff --git a/src/widgets/calibreweb/component.jsx b/src/widgets/calibreweb/component.jsx
index c334d7d2..be8424e5 100644
--- a/src/widgets/calibreweb/component.jsx
+++ b/src/widgets/calibreweb/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/changedetectionio/component.jsx b/src/widgets/changedetectionio/component.jsx
index a08f38d9..d7d7272b 100644
--- a/src/widgets/changedetectionio/component.jsx
+++ b/src/widgets/changedetectionio/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/channelsdvrserver/component.jsx b/src/widgets/channelsdvrserver/component.jsx
index 42202c05..79ca3f14 100644
--- a/src/widgets/channelsdvrserver/component.jsx
+++ b/src/widgets/channelsdvrserver/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/cloudflared/component.jsx b/src/widgets/cloudflared/component.jsx
index 8825402c..790a5f34 100644
--- a/src/widgets/cloudflared/component.jsx
+++ b/src/widgets/cloudflared/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/coinmarketcap/component.jsx b/src/widgets/coinmarketcap/component.jsx
index 35a3401f..fd9c030f 100644
--- a/src/widgets/coinmarketcap/component.jsx
+++ b/src/widgets/coinmarketcap/component.jsx
@@ -1,9 +1,9 @@
-import { useState } from "react";
-import { useTranslation } from "next-i18next";
import classNames from "classnames";
-import Container from "components/services/widget/container";
-import Block from "components/services/widget/block";
import Dropdown from "components/services/dropdown";
+import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
+import { useState } from "react";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/crowdsec/component.jsx b/src/widgets/crowdsec/component.jsx
index 5bc34d1a..f567ad70 100644
--- a/src/widgets/crowdsec/component.jsx
+++ b/src/widgets/crowdsec/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/crowdsec/proxy.js b/src/widgets/crowdsec/proxy.js
index 85803845..d3257fa6 100644
--- a/src/widgets/crowdsec/proxy.js
+++ b/src/widgets/crowdsec/proxy.js
@@ -1,9 +1,9 @@
import cache from "memory-cache";
-import { httpProxy } from "utils/proxy/http";
-import { formatApiCall } from "utils/proxy/api-helpers";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
const proxyName = "crowdsecProxyHandler";
diff --git a/src/widgets/customapi/component.jsx b/src/widgets/customapi/component.jsx
index b651045f..50a371ad 100644
--- a/src/widgets/customapi/component.jsx
+++ b/src/widgets/customapi/component.jsx
@@ -1,10 +1,10 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
-import Block from "components/services/widget/block";
import classNames from "classnames";
+import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
-import useWidgetAPI from "utils/proxy/use-widget-api";
import * as shvl from "utils/config/shvl";
+import useWidgetAPI from "utils/proxy/use-widget-api";
function getValue(field, data) {
let value = data;
diff --git a/src/widgets/deluge/component.jsx b/src/widgets/deluge/component.jsx
index 510340b7..eb6ddfaa 100644
--- a/src/widgets/deluge/component.jsx
+++ b/src/widgets/deluge/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import QueueEntry from "../../components/widgets/queue/queueEntry";
diff --git a/src/widgets/deluge/proxy.js b/src/widgets/deluge/proxy.js
index 0430a6ac..ef255160 100644
--- a/src/widgets/deluge/proxy.js
+++ b/src/widgets/deluge/proxy.js
@@ -1,7 +1,7 @@
-import { formatApiCall } from "utils/proxy/api-helpers";
-import { sendJsonRpcRequest } from "utils/proxy/handlers/jsonrpc";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { sendJsonRpcRequest } from "utils/proxy/handlers/jsonrpc";
import widgets from "widgets/widgets";
const logger = createLogger("delugeProxyHandler");
diff --git a/src/widgets/develancacheui/component.jsx b/src/widgets/develancacheui/component.jsx
index 4fc184ef..61f608e1 100644
--- a/src/widgets/develancacheui/component.jsx
+++ b/src/widgets/develancacheui/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/diskstation/component.jsx b/src/widgets/diskstation/component.jsx
index 9c516af9..0ca0b8ae 100644
--- a/src/widgets/diskstation/component.jsx
+++ b/src/widgets/diskstation/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/docker/component.jsx b/src/widgets/docker/component.jsx
index 074ce1eb..6e05454f 100644
--- a/src/widgets/docker/component.jsx
+++ b/src/widgets/docker/component.jsx
@@ -1,9 +1,9 @@
-import useSWR from "swr";
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
+import useSWR from "swr";
-import { calculateCPUPercent, calculateUsedMemory, calculateThroughput } from "./stats-helpers";
+import { calculateCPUPercent, calculateThroughput, calculateUsedMemory } from "./stats-helpers";
export default function Component({ service }) {
const { t } = useTranslation();
diff --git a/src/widgets/downloadstation/component.jsx b/src/widgets/downloadstation/component.jsx
index 0d9d8085..016f4953 100644
--- a/src/widgets/downloadstation/component.jsx
+++ b/src/widgets/downloadstation/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/emby/component.jsx b/src/widgets/emby/component.jsx
index 41220e22..88858da2 100644
--- a/src/widgets/emby/component.jsx
+++ b/src/widgets/emby/component.jsx
@@ -1,8 +1,8 @@
-import { useTranslation } from "next-i18next";
-import { BsVolumeMuteFill, BsFillPlayFill, BsPauseFill, BsCpu, BsFillCpuFill } from "react-icons/bs";
-import { MdOutlineSmartDisplay } from "react-icons/md";
import Block from "components/services/widget/block";
import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
+import { BsCpu, BsFillCpuFill, BsFillPlayFill, BsPauseFill, BsVolumeMuteFill } from "react-icons/bs";
+import { MdOutlineSmartDisplay } from "react-icons/md";
import { getURLSearchParams } from "utils/proxy/api-helpers";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/esphome/component.jsx b/src/widgets/esphome/component.jsx
index 6ed1b7b1..e0f02089 100644
--- a/src/widgets/esphome/component.jsx
+++ b/src/widgets/esphome/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
import Block from "components/services/widget/block";
import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/evcc/component.jsx b/src/widgets/evcc/component.jsx
index 2f086902..d0debdc3 100644
--- a/src/widgets/evcc/component.jsx
+++ b/src/widgets/evcc/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/fileflows/component.jsx b/src/widgets/fileflows/component.jsx
index 9b8e0794..fdc75c6e 100755
--- a/src/widgets/fileflows/component.jsx
+++ b/src/widgets/fileflows/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/firefly/component.jsx b/src/widgets/firefly/component.jsx
index baff2304..af236a80 100644
--- a/src/widgets/firefly/component.jsx
+++ b/src/widgets/firefly/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/flood/component.jsx b/src/widgets/flood/component.jsx
index 44c03fd3..92a2b61a 100644
--- a/src/widgets/flood/component.jsx
+++ b/src/widgets/flood/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/flood/proxy.js b/src/widgets/flood/proxy.js
index e0c10173..5e5335ae 100644
--- a/src/widgets/flood/proxy.js
+++ b/src/widgets/flood/proxy.js
@@ -1,7 +1,7 @@
-import { formatApiCall } from "utils/proxy/api-helpers";
-import { httpProxy } from "utils/proxy/http";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
const logger = createLogger("floodProxyHandler");
diff --git a/src/widgets/freshrss/component.jsx b/src/widgets/freshrss/component.jsx
index c5029b8f..70833e1d 100644
--- a/src/widgets/freshrss/component.jsx
+++ b/src/widgets/freshrss/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/freshrss/proxy.js b/src/widgets/freshrss/proxy.js
index 881094bd..6168db86 100644
--- a/src/widgets/freshrss/proxy.js
+++ b/src/widgets/freshrss/proxy.js
@@ -1,9 +1,9 @@
import cache from "memory-cache";
-import { httpProxy } from "utils/proxy/http";
-import { formatApiCall } from "utils/proxy/api-helpers";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
const proxyName = "freshrssProxyHandler";
diff --git a/src/widgets/frigate/component.jsx b/src/widgets/frigate/component.jsx
index a19a464a..ab67c461 100644
--- a/src/widgets/frigate/component.jsx
+++ b/src/widgets/frigate/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/fritzbox/component.jsx b/src/widgets/fritzbox/component.jsx
index c557ece5..d7928c20 100644
--- a/src/widgets/fritzbox/component.jsx
+++ b/src/widgets/fritzbox/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/fritzbox/proxy.js b/src/widgets/fritzbox/proxy.js
index 20521560..c8c57fbc 100644
--- a/src/widgets/fritzbox/proxy.js
+++ b/src/widgets/fritzbox/proxy.js
@@ -2,9 +2,9 @@ import { xml2json } from "xml-js";
import { fritzboxDefaultFields } from "./component";
-import { httpProxy } from "utils/proxy/http";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { httpProxy } from "utils/proxy/http";
const logger = createLogger("fritzboxProxyHandler");
diff --git a/src/widgets/gamedig/component.jsx b/src/widgets/gamedig/component.jsx
index 1c127538..5acd1b9c 100644
--- a/src/widgets/gamedig/component.jsx
+++ b/src/widgets/gamedig/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/gamedig/proxy.js b/src/widgets/gamedig/proxy.js
index 731bb445..79d7fa02 100644
--- a/src/widgets/gamedig/proxy.js
+++ b/src/widgets/gamedig/proxy.js
@@ -1,7 +1,7 @@
import { GameDig } from "gamedig";
-import createLogger from "utils/logger";
import getServiceWidget from "utils/config/service-helpers";
+import createLogger from "utils/logger";
const proxyName = "gamedigProxyHandler";
const logger = createLogger(proxyName);
diff --git a/src/widgets/gatus/component.jsx b/src/widgets/gatus/component.jsx
index 668c0388..25aae239 100644
--- a/src/widgets/gatus/component.jsx
+++ b/src/widgets/gatus/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/ghostfolio/component.jsx b/src/widgets/ghostfolio/component.jsx
index 524e30d9..f2587586 100644
--- a/src/widgets/ghostfolio/component.jsx
+++ b/src/widgets/ghostfolio/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/gitea/component.jsx b/src/widgets/gitea/component.jsx
index c45ded06..81b69d67 100644
--- a/src/widgets/gitea/component.jsx
+++ b/src/widgets/gitea/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/gitlab/component.jsx b/src/widgets/gitlab/component.jsx
index a012ee12..4d2805ba 100644
--- a/src/widgets/gitlab/component.jsx
+++ b/src/widgets/gitlab/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/glances/component.jsx b/src/widgets/glances/component.jsx
index bff31ac1..4ca0cc72 100644
--- a/src/widgets/glances/component.jsx
+++ b/src/widgets/glances/component.jsx
@@ -1,13 +1,13 @@
-import Memory from "./metrics/memory";
+import Containers from "./metrics/containers";
import Cpu from "./metrics/cpu";
-import Sensor from "./metrics/sensor";
-import Net from "./metrics/net";
-import Process from "./metrics/process";
import Disk from "./metrics/disk";
+import Fs from "./metrics/fs";
import GPU from "./metrics/gpu";
import Info from "./metrics/info";
-import Fs from "./metrics/fs";
-import Containers from "./metrics/containers";
+import Memory from "./metrics/memory";
+import Net from "./metrics/net";
+import Process from "./metrics/process";
+import Sensor from "./metrics/sensor";
export default function Component({ service }) {
const { widget } = service;
diff --git a/src/widgets/glances/components/chart.jsx b/src/widgets/glances/components/chart.jsx
index 132fcc8e..b919a92d 100644
--- a/src/widgets/glances/components/chart.jsx
+++ b/src/widgets/glances/components/chart.jsx
@@ -1,5 +1,5 @@
import { PureComponent } from "react";
-import { AreaChart, Area, ResponsiveContainer, Tooltip } from "recharts";
+import { Area, AreaChart, ResponsiveContainer, Tooltip } from "recharts";
import CustomTooltip from "./custom_tooltip";
diff --git a/src/widgets/glances/components/chart_dual.jsx b/src/widgets/glances/components/chart_dual.jsx
index 5fabe755..d6ec2076 100644
--- a/src/widgets/glances/components/chart_dual.jsx
+++ b/src/widgets/glances/components/chart_dual.jsx
@@ -1,5 +1,5 @@
import { PureComponent } from "react";
-import { AreaChart, Area, ResponsiveContainer, Tooltip } from "recharts";
+import { Area, AreaChart, ResponsiveContainer, Tooltip } from "recharts";
import CustomTooltip from "./custom_tooltip";
diff --git a/src/widgets/glances/components/container.jsx b/src/widgets/glances/components/container.jsx
index 0b6fb5f2..7bcd5c46 100644
--- a/src/widgets/glances/components/container.jsx
+++ b/src/widgets/glances/components/container.jsx
@@ -1,5 +1,5 @@
-import { useContext } from "react";
import classNames from "classnames";
+import { useContext } from "react";
import { SettingsContext } from "utils/contexts/settings";
import Error from "./error";
diff --git a/src/widgets/glances/metrics/containers.jsx b/src/widgets/glances/metrics/containers.jsx
index 4b7ac001..93ecbc28 100644
--- a/src/widgets/glances/metrics/containers.jsx
+++ b/src/widgets/glances/metrics/containers.jsx
@@ -1,8 +1,8 @@
-import { useTranslation } from "next-i18next";
import ResolvedIcon from "components/resolvedicon";
+import { useTranslation } from "next-i18next";
-import Container from "../components/container";
import Block from "../components/block";
+import Container from "../components/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/glances/metrics/cpu.jsx b/src/widgets/glances/metrics/cpu.jsx
index e993fca9..3debf11a 100644
--- a/src/widgets/glances/metrics/cpu.jsx
+++ b/src/widgets/glances/metrics/cpu.jsx
@@ -1,9 +1,9 @@
-import dynamic from "next/dynamic";
-import { useState, useEffect } from "react";
import { useTranslation } from "next-i18next";
+import dynamic from "next/dynamic";
+import { useEffect, useState } from "react";
-import Container from "../components/container";
import Block from "../components/block";
+import Container from "../components/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/glances/metrics/disk.jsx b/src/widgets/glances/metrics/disk.jsx
index 0a459e07..69dd2d99 100644
--- a/src/widgets/glances/metrics/disk.jsx
+++ b/src/widgets/glances/metrics/disk.jsx
@@ -1,9 +1,9 @@
-import dynamic from "next/dynamic";
-import { useState, useEffect } from "react";
import { useTranslation } from "next-i18next";
+import dynamic from "next/dynamic";
+import { useEffect, useState } from "react";
-import Container from "../components/container";
import Block from "../components/block";
+import Container from "../components/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/glances/metrics/fs.jsx b/src/widgets/glances/metrics/fs.jsx
index 4dd238e0..317a781f 100644
--- a/src/widgets/glances/metrics/fs.jsx
+++ b/src/widgets/glances/metrics/fs.jsx
@@ -1,7 +1,7 @@
import { useTranslation } from "next-i18next";
-import Container from "../components/container";
import Block from "../components/block";
+import Container from "../components/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/glances/metrics/gpu.jsx b/src/widgets/glances/metrics/gpu.jsx
index 37b06ce3..7eab536c 100644
--- a/src/widgets/glances/metrics/gpu.jsx
+++ b/src/widgets/glances/metrics/gpu.jsx
@@ -1,9 +1,9 @@
-import dynamic from "next/dynamic";
-import { useState, useEffect } from "react";
import { useTranslation } from "next-i18next";
+import dynamic from "next/dynamic";
+import { useEffect, useState } from "react";
-import Container from "../components/container";
import Block from "../components/block";
+import Container from "../components/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/glances/metrics/info.jsx b/src/widgets/glances/metrics/info.jsx
index 5e969800..3c0ef429 100644
--- a/src/widgets/glances/metrics/info.jsx
+++ b/src/widgets/glances/metrics/info.jsx
@@ -1,7 +1,7 @@
import { useTranslation } from "next-i18next";
-import Container from "../components/container";
import Block from "../components/block";
+import Container from "../components/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/glances/metrics/memory.jsx b/src/widgets/glances/metrics/memory.jsx
index 8cfddb66..e5fbc350 100644
--- a/src/widgets/glances/metrics/memory.jsx
+++ b/src/widgets/glances/metrics/memory.jsx
@@ -1,9 +1,9 @@
-import dynamic from "next/dynamic";
-import { useState, useEffect } from "react";
import { useTranslation } from "next-i18next";
+import dynamic from "next/dynamic";
+import { useEffect, useState } from "react";
-import Container from "../components/container";
import Block from "../components/block";
+import Container from "../components/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/glances/metrics/net.jsx b/src/widgets/glances/metrics/net.jsx
index 372c4ec6..2bdd491c 100644
--- a/src/widgets/glances/metrics/net.jsx
+++ b/src/widgets/glances/metrics/net.jsx
@@ -1,9 +1,9 @@
-import dynamic from "next/dynamic";
-import { useState, useEffect } from "react";
import { useTranslation } from "next-i18next";
+import dynamic from "next/dynamic";
+import { useEffect, useState } from "react";
-import Container from "../components/container";
import Block from "../components/block";
+import Container from "../components/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/glances/metrics/process.jsx b/src/widgets/glances/metrics/process.jsx
index 06001e6e..ad3fee54 100644
--- a/src/widgets/glances/metrics/process.jsx
+++ b/src/widgets/glances/metrics/process.jsx
@@ -1,8 +1,8 @@
-import { useTranslation } from "next-i18next";
import ResolvedIcon from "components/resolvedicon";
+import { useTranslation } from "next-i18next";
-import Container from "../components/container";
import Block from "../components/block";
+import Container from "../components/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/glances/metrics/sensor.jsx b/src/widgets/glances/metrics/sensor.jsx
index 3cb38c1c..b5a16d10 100644
--- a/src/widgets/glances/metrics/sensor.jsx
+++ b/src/widgets/glances/metrics/sensor.jsx
@@ -1,9 +1,9 @@
-import dynamic from "next/dynamic";
-import { useState, useEffect } from "react";
import { useTranslation } from "next-i18next";
+import dynamic from "next/dynamic";
+import { useEffect, useState } from "react";
-import Container from "../components/container";
import Block from "../components/block";
+import Container from "../components/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/gluetun/component.jsx b/src/widgets/gluetun/component.jsx
index a834cb4c..f7128237 100644
--- a/src/widgets/gluetun/component.jsx
+++ b/src/widgets/gluetun/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/gotify/component.jsx b/src/widgets/gotify/component.jsx
index 57b6b9c7..6cf9cea9 100644
--- a/src/widgets/gotify/component.jsx
+++ b/src/widgets/gotify/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/grafana/component.jsx b/src/widgets/grafana/component.jsx
index 859be017..82d6e5c9 100755
--- a/src/widgets/grafana/component.jsx
+++ b/src/widgets/grafana/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/hdhomerun/component.jsx b/src/widgets/hdhomerun/component.jsx
index dd55013f..2532f92b 100644
--- a/src/widgets/hdhomerun/component.jsx
+++ b/src/widgets/hdhomerun/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/headscale/component.jsx b/src/widgets/headscale/component.jsx
index 9d0da65b..acee3a82 100644
--- a/src/widgets/headscale/component.jsx
+++ b/src/widgets/headscale/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/healthchecks/component.jsx b/src/widgets/healthchecks/component.jsx
index 5fcef856..b65f91c5 100644
--- a/src/widgets/healthchecks/component.jsx
+++ b/src/widgets/healthchecks/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
import Block from "components/services/widget/block";
import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import { i18n } from "../../../next-i18next.config";
diff --git a/src/widgets/hoarder/component.jsx b/src/widgets/hoarder/component.jsx
index 99497d6f..4be6fbab 100644
--- a/src/widgets/hoarder/component.jsx
+++ b/src/widgets/hoarder/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/homeassistant/component.jsx b/src/widgets/homeassistant/component.jsx
index 5bd2f55c..1df415ae 100644
--- a/src/widgets/homeassistant/component.jsx
+++ b/src/widgets/homeassistant/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/homeassistant/proxy.js b/src/widgets/homeassistant/proxy.js
index e1f02ddb..7702eb5d 100644
--- a/src/widgets/homeassistant/proxy.js
+++ b/src/widgets/homeassistant/proxy.js
@@ -1,6 +1,6 @@
-import { httpProxy } from "utils/proxy/http";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { httpProxy } from "utils/proxy/http";
const logger = createLogger("homeassistantProxyHandler");
diff --git a/src/widgets/homebox/component.jsx b/src/widgets/homebox/component.jsx
index d5ca97be..4c550748 100644
--- a/src/widgets/homebox/component.jsx
+++ b/src/widgets/homebox/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/homebox/proxy.js b/src/widgets/homebox/proxy.js
index c91ce552..8a4550fc 100644
--- a/src/widgets/homebox/proxy.js
+++ b/src/widgets/homebox/proxy.js
@@ -1,9 +1,9 @@
import cache from "memory-cache";
-import { formatApiCall } from "utils/proxy/api-helpers";
-import { httpProxy } from "utils/proxy/http";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
const proxyName = "homeboxProxyHandler";
const sessionTokenCacheKey = `${proxyName}__sessionToken`;
diff --git a/src/widgets/homebridge/component.jsx b/src/widgets/homebridge/component.jsx
index 97896af1..6201b70b 100644
--- a/src/widgets/homebridge/component.jsx
+++ b/src/widgets/homebridge/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/homebridge/proxy.js b/src/widgets/homebridge/proxy.js
index 4da9197b..675e2976 100644
--- a/src/widgets/homebridge/proxy.js
+++ b/src/widgets/homebridge/proxy.js
@@ -1,9 +1,9 @@
import cache from "memory-cache";
-import { httpProxy } from "utils/proxy/http";
-import { formatApiCall } from "utils/proxy/api-helpers";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
const proxyName = "homebridgeProxyHandler";
diff --git a/src/widgets/iframe/component.jsx b/src/widgets/iframe/component.jsx
index 01146771..9d2d60ca 100644
--- a/src/widgets/iframe/component.jsx
+++ b/src/widgets/iframe/component.jsx
@@ -1,6 +1,6 @@
-import { useState, useEffect } from "react";
import classNames from "classnames";
import Container from "components/services/widget/container";
+import { useEffect, useState } from "react";
export default function Component({ service }) {
const [refreshTimer, setRefreshTimer] = useState(0);
diff --git a/src/widgets/immich/component.jsx b/src/widgets/immich/component.jsx
index 7f614797..a38cac1e 100644
--- a/src/widgets/immich/component.jsx
+++ b/src/widgets/immich/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/jackett/component.jsx b/src/widgets/jackett/component.jsx
index 9c5ce0c5..63e3e1c3 100644
--- a/src/widgets/jackett/component.jsx
+++ b/src/widgets/jackett/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/jackett/proxy.js b/src/widgets/jackett/proxy.js
index 035309b3..10e85175 100644
--- a/src/widgets/jackett/proxy.js
+++ b/src/widgets/jackett/proxy.js
@@ -1,7 +1,7 @@
-import { httpProxy } from "utils/proxy/http";
-import { formatApiCall } from "utils/proxy/api-helpers";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
const logger = createLogger("jackettProxyHandler");
diff --git a/src/widgets/jdownloader/component.jsx b/src/widgets/jdownloader/component.jsx
index 6350faeb..a7722c7c 100644
--- a/src/widgets/jdownloader/component.jsx
+++ b/src/widgets/jdownloader/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
import Block from "components/services/widget/block";
import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/jdownloader/proxy.js b/src/widgets/jdownloader/proxy.js
index ae8c845c..d5d5ac3d 100644
--- a/src/widgets/jdownloader/proxy.js
+++ b/src/widgets/jdownloader/proxy.js
@@ -2,11 +2,11 @@
import crypto from "crypto";
import querystring from "querystring";
-import { sha256, uniqueRid, validateRid, createEncryptionToken, decrypt, encrypt } from "./tools";
+import { createEncryptionToken, decrypt, encrypt, sha256, uniqueRid, validateRid } from "./tools";
import getServiceWidget from "utils/config/service-helpers";
-import { httpProxy } from "utils/proxy/http";
import createLogger from "utils/logger";
+import { httpProxy } from "utils/proxy/http";
const proxyName = "jdownloaderProxyHandler";
const logger = createLogger(proxyName);
diff --git a/src/widgets/jellyseerr/component.jsx b/src/widgets/jellyseerr/component.jsx
index 06456c4d..d99fffdb 100644
--- a/src/widgets/jellyseerr/component.jsx
+++ b/src/widgets/jellyseerr/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/kavita/component.jsx b/src/widgets/kavita/component.jsx
index df982328..887b3bbe 100644
--- a/src/widgets/kavita/component.jsx
+++ b/src/widgets/kavita/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/kavita/proxy.js b/src/widgets/kavita/proxy.js
index 842e4b87..cb3b3569 100644
--- a/src/widgets/kavita/proxy.js
+++ b/src/widgets/kavita/proxy.js
@@ -1,9 +1,9 @@
import cache from "memory-cache";
-import { httpProxy } from "utils/proxy/http";
-import { formatApiCall } from "utils/proxy/api-helpers";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
const proxyName = "kavitaProxyHandler";
diff --git a/src/widgets/komga/component.jsx b/src/widgets/komga/component.jsx
index 4272ddfc..1e31b726 100644
--- a/src/widgets/komga/component.jsx
+++ b/src/widgets/komga/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/komga/proxy.js b/src/widgets/komga/proxy.js
index a827f408..b3d72690 100644
--- a/src/widgets/komga/proxy.js
+++ b/src/widgets/komga/proxy.js
@@ -1,8 +1,8 @@
import getServiceWidget from "utils/config/service-helpers";
+import createLogger from "utils/logger";
import { formatApiCall } from "utils/proxy/api-helpers";
import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
-import createLogger from "utils/logger";
const proxyName = "komgaProxyHandler";
const logger = createLogger(proxyName);
diff --git a/src/widgets/kopia/component.jsx b/src/widgets/kopia/component.jsx
index 92c6774c..d022a545 100755
--- a/src/widgets/kopia/component.jsx
+++ b/src/widgets/kopia/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/kubernetes/component.jsx b/src/widgets/kubernetes/component.jsx
index b93e07fb..d3587a59 100644
--- a/src/widgets/kubernetes/component.jsx
+++ b/src/widgets/kubernetes/component.jsx
@@ -1,7 +1,7 @@
-import useSWR from "swr";
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
+import useSWR from "swr";
export default function Component({ service }) {
const { t } = useTranslation();
diff --git a/src/widgets/lidarr/component.jsx b/src/widgets/lidarr/component.jsx
index 28295e57..92f5b893 100644
--- a/src/widgets/lidarr/component.jsx
+++ b/src/widgets/lidarr/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/linkwarden/component.jsx b/src/widgets/linkwarden/component.jsx
index 8046faf9..b2b0d91a 100644
--- a/src/widgets/linkwarden/component.jsx
+++ b/src/widgets/linkwarden/component.jsx
@@ -1,6 +1,6 @@
-import React, { useState, useEffect } from "react";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useEffect, useState } from "react";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/lubelogger/component.jsx b/src/widgets/lubelogger/component.jsx
index 8a18f158..390b74ea 100644
--- a/src/widgets/lubelogger/component.jsx
+++ b/src/widgets/lubelogger/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "react-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "react-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/mailcow/component.jsx b/src/widgets/mailcow/component.jsx
index 96ef0e45..e5d9db65 100644
--- a/src/widgets/mailcow/component.jsx
+++ b/src/widgets/mailcow/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/mastodon/component.jsx b/src/widgets/mastodon/component.jsx
index dbb36320..3a5d9ab6 100644
--- a/src/widgets/mastodon/component.jsx
+++ b/src/widgets/mastodon/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/mealie/component.jsx b/src/widgets/mealie/component.jsx
index aa18c459..4a558157 100644
--- a/src/widgets/mealie/component.jsx
+++ b/src/widgets/mealie/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/medusa/component.jsx b/src/widgets/medusa/component.jsx
index a5ea4ca1..88f55bcb 100644
--- a/src/widgets/medusa/component.jsx
+++ b/src/widgets/medusa/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/mikrotik/component.jsx b/src/widgets/mikrotik/component.jsx
index a34ce62f..4bab6792 100644
--- a/src/widgets/mikrotik/component.jsx
+++ b/src/widgets/mikrotik/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/minecraft/component.jsx b/src/widgets/minecraft/component.jsx
index e277abb6..00c5f6f8 100644
--- a/src/widgets/minecraft/component.jsx
+++ b/src/widgets/minecraft/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/minecraft/proxy.js b/src/widgets/minecraft/proxy.js
index 5f238acb..d1fe1463 100644
--- a/src/widgets/minecraft/proxy.js
+++ b/src/widgets/minecraft/proxy.js
@@ -1,7 +1,7 @@
import mc from "minecraftstatuspinger";
-import createLogger from "utils/logger";
import getServiceWidget from "utils/config/service-helpers";
+import createLogger from "utils/logger";
const proxyName = "minecraftProxyHandler";
const logger = createLogger(proxyName);
diff --git a/src/widgets/miniflux/component.jsx b/src/widgets/miniflux/component.jsx
index 5f5f649e..2cbbb254 100644
--- a/src/widgets/miniflux/component.jsx
+++ b/src/widgets/miniflux/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/moonraker/component.jsx b/src/widgets/moonraker/component.jsx
index ed99e418..238c8327 100644
--- a/src/widgets/moonraker/component.jsx
+++ b/src/widgets/moonraker/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/mylar/component.jsx b/src/widgets/mylar/component.jsx
index 0306b1b6..95ec1aca 100644
--- a/src/widgets/mylar/component.jsx
+++ b/src/widgets/mylar/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/myspeed/component.jsx b/src/widgets/myspeed/component.jsx
index 7de1b2b0..dacd2b59 100644
--- a/src/widgets/myspeed/component.jsx
+++ b/src/widgets/myspeed/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/navidrome/component.jsx b/src/widgets/navidrome/component.jsx
index 7a89f6ca..6218e6d9 100644
--- a/src/widgets/navidrome/component.jsx
+++ b/src/widgets/navidrome/component.jsx
@@ -1,5 +1,5 @@
-import { useTranslation } from "next-i18next";
import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/netalertx/component.jsx b/src/widgets/netalertx/component.jsx
index a52defd3..786db9a5 100644
--- a/src/widgets/netalertx/component.jsx
+++ b/src/widgets/netalertx/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/netdata/component.jsx b/src/widgets/netdata/component.jsx
index 98d0f797..2d04aa23 100644
--- a/src/widgets/netdata/component.jsx
+++ b/src/widgets/netdata/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/nextcloud/component.jsx b/src/widgets/nextcloud/component.jsx
index 2989b6f4..d1f1cac9 100755
--- a/src/widgets/nextcloud/component.jsx
+++ b/src/widgets/nextcloud/component.jsx
@@ -1,7 +1,7 @@
+import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import { useTranslation } from "next-i18next";
import { useMemo } from "react";
-import Container from "components/services/widget/container";
-import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/nextdns/component.jsx b/src/widgets/nextdns/component.jsx
index 75c04a85..45e01281 100644
--- a/src/widgets/nextdns/component.jsx
+++ b/src/widgets/nextdns/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/npm/component.jsx b/src/widgets/npm/component.jsx
index 1ffaf27e..54e123a8 100644
--- a/src/widgets/npm/component.jsx
+++ b/src/widgets/npm/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/npm/proxy.js b/src/widgets/npm/proxy.js
index 6c7ba09e..79307782 100644
--- a/src/widgets/npm/proxy.js
+++ b/src/widgets/npm/proxy.js
@@ -1,10 +1,10 @@
import cache from "memory-cache";
import getServiceWidget from "utils/config/service-helpers";
+import createLogger from "utils/logger";
import { formatApiCall } from "utils/proxy/api-helpers";
import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
-import createLogger from "utils/logger";
const proxyName = "npmProxyHandler";
const tokenCacheKey = `${proxyName}__token`;
diff --git a/src/widgets/nzbget/component.jsx b/src/widgets/nzbget/component.jsx
index 4c0a9d48..a11ac9da 100644
--- a/src/widgets/nzbget/component.jsx
+++ b/src/widgets/nzbget/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/octoprint/component.jsx b/src/widgets/octoprint/component.jsx
index 21c3f7d0..e6b13809 100644
--- a/src/widgets/octoprint/component.jsx
+++ b/src/widgets/octoprint/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/omada/component.jsx b/src/widgets/omada/component.jsx
index 0d76e1a1..bf301d81 100644
--- a/src/widgets/omada/component.jsx
+++ b/src/widgets/omada/component.jsx
@@ -1,8 +1,8 @@
import { useTranslation } from "next-i18next";
-import useWidgetAPI from "../../utils/proxy/use-widget-api";
-import Container from "../../components/services/widget/container";
import Block from "../../components/services/widget/block";
+import Container from "../../components/services/widget/container";
+import useWidgetAPI from "../../utils/proxy/use-widget-api";
export default function Component({ service }) {
const { t } = useTranslation();
diff --git a/src/widgets/omada/proxy.js b/src/widgets/omada/proxy.js
index f4da1293..a5af47b2 100644
--- a/src/widgets/omada/proxy.js
+++ b/src/widgets/omada/proxy.js
@@ -1,6 +1,6 @@
-import { httpProxy } from "utils/proxy/http";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { httpProxy } from "utils/proxy/http";
const proxyName = "omadaProxyHandler";
diff --git a/src/widgets/ombi/component.jsx b/src/widgets/ombi/component.jsx
index 3beb1198..859c01aa 100644
--- a/src/widgets/ombi/component.jsx
+++ b/src/widgets/ombi/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/opendtu/component.jsx b/src/widgets/opendtu/component.jsx
index 4fed88e4..c1b924b9 100644
--- a/src/widgets/opendtu/component.jsx
+++ b/src/widgets/opendtu/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/openmediavault/component.jsx b/src/widgets/openmediavault/component.jsx
index bd34a750..c14581f9 100644
--- a/src/widgets/openmediavault/component.jsx
+++ b/src/widgets/openmediavault/component.jsx
@@ -1,6 +1,6 @@
+import DownloaderGetDownloadList from "./methods/downloader_get_downloadlist";
import ServicesGetStatus from "./methods/services_get_status";
import SmartGetList from "./methods/smart_get_list";
-import DownloaderGetDownloadList from "./methods/downloader_get_downloadlist";
export default function Component({ service }) {
switch (service.widget.method) {
diff --git a/src/widgets/openmediavault/methods/downloader_get_downloadlist.jsx b/src/widgets/openmediavault/methods/downloader_get_downloadlist.jsx
index 22327b92..7caf3426 100644
--- a/src/widgets/openmediavault/methods/downloader_get_downloadlist.jsx
+++ b/src/widgets/openmediavault/methods/downloader_get_downloadlist.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/openmediavault/methods/services_get_status.jsx b/src/widgets/openmediavault/methods/services_get_status.jsx
index 0579f41a..7ab0f8c1 100644
--- a/src/widgets/openmediavault/methods/services_get_status.jsx
+++ b/src/widgets/openmediavault/methods/services_get_status.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/openmediavault/methods/smart_get_list.jsx b/src/widgets/openmediavault/methods/smart_get_list.jsx
index 6c812449..4998c02f 100644
--- a/src/widgets/openmediavault/methods/smart_get_list.jsx
+++ b/src/widgets/openmediavault/methods/smart_get_list.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/openmediavault/proxy.js b/src/widgets/openmediavault/proxy.js
index 9cda42e8..d2365f2b 100644
--- a/src/widgets/openmediavault/proxy.js
+++ b/src/widgets/openmediavault/proxy.js
@@ -1,8 +1,8 @@
-import { formatApiCall } from "utils/proxy/api-helpers";
-import { httpProxy } from "utils/proxy/http";
import getServiceWidget from "utils/config/service-helpers";
-import { addCookieToJar, setCookieHeader } from "utils/proxy/cookie-jar";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { addCookieToJar, setCookieHeader } from "utils/proxy/cookie-jar";
+import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
const PROXY_NAME = "OMVProxyHandler";
diff --git a/src/widgets/openwrt/methods/interface.jsx b/src/widgets/openwrt/methods/interface.jsx
index e02e3171..4f77036f 100644
--- a/src/widgets/openwrt/methods/interface.jsx
+++ b/src/widgets/openwrt/methods/interface.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/openwrt/methods/system.jsx b/src/widgets/openwrt/methods/system.jsx
index 56c3dc9e..55c0b005 100644
--- a/src/widgets/openwrt/methods/system.jsx
+++ b/src/widgets/openwrt/methods/system.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/openwrt/proxy.js b/src/widgets/openwrt/proxy.js
index 0a0da3ff..5db90790 100644
--- a/src/widgets/openwrt/proxy.js
+++ b/src/widgets/openwrt/proxy.js
@@ -1,7 +1,7 @@
-import { sendJsonRpcRequest } from "utils/proxy/handlers/jsonrpc";
-import { formatApiCall } from "utils/proxy/api-helpers";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { sendJsonRpcRequest } from "utils/proxy/handlers/jsonrpc";
import widgets from "widgets/widgets";
const PROXY_NAME = "OpenWRTProxyHandler";
diff --git a/src/widgets/opnsense/component.jsx b/src/widgets/opnsense/component.jsx
index b8a90d72..1caaab47 100644
--- a/src/widgets/opnsense/component.jsx
+++ b/src/widgets/opnsense/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/overseerr/component.jsx b/src/widgets/overseerr/component.jsx
index 3ec66587..d5c64392 100644
--- a/src/widgets/overseerr/component.jsx
+++ b/src/widgets/overseerr/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/paperlessngx/component.jsx b/src/widgets/paperlessngx/component.jsx
index 6585d231..bafc2e99 100644
--- a/src/widgets/paperlessngx/component.jsx
+++ b/src/widgets/paperlessngx/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/peanut/component.jsx b/src/widgets/peanut/component.jsx
index bc0b739b..54a293ad 100644
--- a/src/widgets/peanut/component.jsx
+++ b/src/widgets/peanut/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/pfsense/component.jsx b/src/widgets/pfsense/component.jsx
index 18a54933..9f43488b 100644
--- a/src/widgets/pfsense/component.jsx
+++ b/src/widgets/pfsense/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/photoprism/component.jsx b/src/widgets/photoprism/component.jsx
index 71772a7a..21817a10 100644
--- a/src/widgets/photoprism/component.jsx
+++ b/src/widgets/photoprism/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/photoprism/proxy.js b/src/widgets/photoprism/proxy.js
index fe5096b3..1959817a 100644
--- a/src/widgets/photoprism/proxy.js
+++ b/src/widgets/photoprism/proxy.js
@@ -1,7 +1,7 @@
-import { formatApiCall } from "utils/proxy/api-helpers";
-import { httpProxy } from "utils/proxy/http";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
const logger = createLogger("photoprismProxyHandler");
diff --git a/src/widgets/pihole/component.jsx b/src/widgets/pihole/component.jsx
index e065bf39..6895ab28 100644
--- a/src/widgets/pihole/component.jsx
+++ b/src/widgets/pihole/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/pihole/proxy.js b/src/widgets/pihole/proxy.js
index 2f2d9a88..75cd0fb5 100644
--- a/src/widgets/pihole/proxy.js
+++ b/src/widgets/pihole/proxy.js
@@ -1,9 +1,9 @@
import cache from "memory-cache";
-import { httpProxy } from "utils/proxy/http";
-import { formatApiCall } from "utils/proxy/api-helpers";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
const proxyName = "piholeProxyHandler";
diff --git a/src/widgets/plantit/component.jsx b/src/widgets/plantit/component.jsx
index af46e964..d93304e7 100644
--- a/src/widgets/plantit/component.jsx
+++ b/src/widgets/plantit/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/plex/component.jsx b/src/widgets/plex/component.jsx
index 688893d3..153d57b5 100644
--- a/src/widgets/plex/component.jsx
+++ b/src/widgets/plex/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
import Block from "components/services/widget/block";
import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/plex/proxy.js b/src/widgets/plex/proxy.js
index c092ebaa..18ffc49b 100644
--- a/src/widgets/plex/proxy.js
+++ b/src/widgets/plex/proxy.js
@@ -2,10 +2,10 @@
import cache from "memory-cache";
import { xml2json } from "xml-js";
-import { formatApiCall } from "utils/proxy/api-helpers";
-import { httpProxy } from "utils/proxy/http";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
const proxyName = "plexProxyHandler";
diff --git a/src/widgets/portainer/component.jsx b/src/widgets/portainer/component.jsx
index 149707fc..f8a89507 100644
--- a/src/widgets/portainer/component.jsx
+++ b/src/widgets/portainer/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/prometheus/component.jsx b/src/widgets/prometheus/component.jsx
index 003831e5..7b3722d0 100644
--- a/src/widgets/prometheus/component.jsx
+++ b/src/widgets/prometheus/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/prometheusmetric/component.jsx b/src/widgets/prometheusmetric/component.jsx
index 3ea20af0..d58efde9 100644
--- a/src/widgets/prometheusmetric/component.jsx
+++ b/src/widgets/prometheusmetric/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/prowlarr/component.jsx b/src/widgets/prowlarr/component.jsx
index 55f28634..13d388f7 100644
--- a/src/widgets/prowlarr/component.jsx
+++ b/src/widgets/prowlarr/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "react-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "react-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/proxmox/component.jsx b/src/widgets/proxmox/component.jsx
index fc4c728c..51762a73 100644
--- a/src/widgets/proxmox/component.jsx
+++ b/src/widgets/proxmox/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/proxmoxbackupserver/component.jsx b/src/widgets/proxmoxbackupserver/component.jsx
index 2eb12258..efc71bbb 100644
--- a/src/widgets/proxmoxbackupserver/component.jsx
+++ b/src/widgets/proxmoxbackupserver/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/pterodactyl/component.jsx b/src/widgets/pterodactyl/component.jsx
index b1ccab8d..9a702eef 100644
--- a/src/widgets/pterodactyl/component.jsx
+++ b/src/widgets/pterodactyl/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/pyload/component.jsx b/src/widgets/pyload/component.jsx
index f0e58f52..f618f75e 100644
--- a/src/widgets/pyload/component.jsx
+++ b/src/widgets/pyload/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/pyload/proxy.js b/src/widgets/pyload/proxy.js
index a380c865..2a1949c1 100644
--- a/src/widgets/pyload/proxy.js
+++ b/src/widgets/pyload/proxy.js
@@ -1,10 +1,10 @@
import cache from "memory-cache";
import getServiceWidget from "utils/config/service-helpers";
-import { formatApiCall } from "utils/proxy/api-helpers";
-import widgets from "widgets/widgets";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
import { httpProxy } from "utils/proxy/http";
+import widgets from "widgets/widgets";
const proxyName = "pyloadProxyHandler";
const logger = createLogger(proxyName);
diff --git a/src/widgets/qbittorrent/component.jsx b/src/widgets/qbittorrent/component.jsx
index 7fc47f99..c9f64816 100644
--- a/src/widgets/qbittorrent/component.jsx
+++ b/src/widgets/qbittorrent/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import QueueEntry from "../../components/widgets/queue/queueEntry";
diff --git a/src/widgets/qbittorrent/proxy.js b/src/widgets/qbittorrent/proxy.js
index aead7582..8f1874bf 100644
--- a/src/widgets/qbittorrent/proxy.js
+++ b/src/widgets/qbittorrent/proxy.js
@@ -1,7 +1,7 @@
-import { formatApiCall } from "utils/proxy/api-helpers";
-import { httpProxy } from "utils/proxy/http";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
const logger = createLogger("qbittorrentProxyHandler");
diff --git a/src/widgets/qnap/component.jsx b/src/widgets/qnap/component.jsx
index 79f3c8be..d7fdf8bc 100644
--- a/src/widgets/qnap/component.jsx
+++ b/src/widgets/qnap/component.jsx
@@ -1,8 +1,8 @@
/* eslint no-underscore-dangle: ["error", { "allow": ["_text", "_cdata"] }] */
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/qnap/proxy.js b/src/widgets/qnap/proxy.js
index 07917d28..1c5356ae 100644
--- a/src/widgets/qnap/proxy.js
+++ b/src/widgets/qnap/proxy.js
@@ -3,10 +3,10 @@
import cache from "memory-cache";
import { xml2json } from "xml-js";
-import { httpProxy } from "utils/proxy/http";
-import { formatApiCall } from "utils/proxy/api-helpers";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
const proxyName = "qnapProxyHandler";
const sessionTokenCacheKey = `${proxyName}__sessionToken`;
diff --git a/src/widgets/radarr/component.jsx b/src/widgets/radarr/component.jsx
index 70ddcb33..bcf9301b 100644
--- a/src/widgets/radarr/component.jsx
+++ b/src/widgets/radarr/component.jsx
@@ -1,7 +1,7 @@
+import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import { useTranslation } from "next-i18next";
import { useCallback } from "react";
-import Container from "components/services/widget/container";
-import Block from "components/services/widget/block";
import QueueEntry from "../../components/widgets/queue/queueEntry";
diff --git a/src/widgets/radarr/widget.js b/src/widgets/radarr/widget.js
index 7d370378..4f71b8d9 100644
--- a/src/widgets/radarr/widget.js
+++ b/src/widgets/radarr/widget.js
@@ -1,5 +1,5 @@
-import genericProxyHandler from "utils/proxy/handlers/generic";
import { asJson, jsonArrayFilter } from "utils/proxy/api-helpers";
+import genericProxyHandler from "utils/proxy/handlers/generic";
const widget = {
api: "{url}/api/v3/{endpoint}?apikey={key}",
diff --git a/src/widgets/readarr/component.jsx b/src/widgets/readarr/component.jsx
index cbf68a4d..845b7820 100644
--- a/src/widgets/readarr/component.jsx
+++ b/src/widgets/readarr/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/readarr/widget.js b/src/widgets/readarr/widget.js
index 58cc09c4..f786f0bc 100644
--- a/src/widgets/readarr/widget.js
+++ b/src/widgets/readarr/widget.js
@@ -1,5 +1,5 @@
-import genericProxyHandler from "utils/proxy/handlers/generic";
import { jsonArrayFilter } from "utils/proxy/api-helpers";
+import genericProxyHandler from "utils/proxy/handlers/generic";
const widget = {
api: "{url}/api/v1/{endpoint}?apikey={key}",
diff --git a/src/widgets/romm/component.jsx b/src/widgets/romm/component.jsx
index 5c6349d0..b0787fb3 100644
--- a/src/widgets/romm/component.jsx
+++ b/src/widgets/romm/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/rutorrent/component.jsx b/src/widgets/rutorrent/component.jsx
index 9d2ad4e2..245a786c 100644
--- a/src/widgets/rutorrent/component.jsx
+++ b/src/widgets/rutorrent/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/rutorrent/proxy.js b/src/widgets/rutorrent/proxy.js
index e0ae44fe..910f2311 100644
--- a/src/widgets/rutorrent/proxy.js
+++ b/src/widgets/rutorrent/proxy.js
@@ -1,8 +1,8 @@
import getServiceWidget from "utils/config/service-helpers";
+import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
-import { formatApiCall } from "utils/proxy/api-helpers";
-import createLogger from "utils/logger";
const logger = createLogger("rutorrentProxyHandler");
diff --git a/src/widgets/sabnzbd/component.jsx b/src/widgets/sabnzbd/component.jsx
index 5a9ba488..9807dd93 100644
--- a/src/widgets/sabnzbd/component.jsx
+++ b/src/widgets/sabnzbd/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/scrutiny/component.jsx b/src/widgets/scrutiny/component.jsx
index f81a519c..2450a95e 100644
--- a/src/widgets/scrutiny/component.jsx
+++ b/src/widgets/scrutiny/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/slskd/component.jsx b/src/widgets/slskd/component.jsx
index 8c26d4e4..40a206b6 100644
--- a/src/widgets/slskd/component.jsx
+++ b/src/widgets/slskd/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/slskd/widget.js b/src/widgets/slskd/widget.js
index fdea7738..3eedd356 100644
--- a/src/widgets/slskd/widget.js
+++ b/src/widgets/slskd/widget.js
@@ -1,5 +1,4 @@
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
-import { asJson } from "utils/proxy/api-helpers";
const widget = {
api: `{url}/api/v0/{endpoint}`,
diff --git a/src/widgets/sonarr/component.jsx b/src/widgets/sonarr/component.jsx
index 725e6d66..19cc2c12 100644
--- a/src/widgets/sonarr/component.jsx
+++ b/src/widgets/sonarr/component.jsx
@@ -1,7 +1,7 @@
+import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import { useTranslation } from "next-i18next";
import { useCallback } from "react";
-import Container from "components/services/widget/container";
-import Block from "components/services/widget/block";
import QueueEntry from "../../components/widgets/queue/queueEntry";
diff --git a/src/widgets/sonarr/widget.js b/src/widgets/sonarr/widget.js
index acb4a551..1fcef8eb 100644
--- a/src/widgets/sonarr/widget.js
+++ b/src/widgets/sonarr/widget.js
@@ -1,5 +1,5 @@
-import genericProxyHandler from "utils/proxy/handlers/generic";
import { asJson } from "utils/proxy/api-helpers";
+import genericProxyHandler from "utils/proxy/handlers/generic";
const widget = {
api: "{url}/api/v3/{endpoint}?apikey={key}",
diff --git a/src/widgets/speedtest/component.jsx b/src/widgets/speedtest/component.jsx
index e34f53ac..7be00aa2 100644
--- a/src/widgets/speedtest/component.jsx
+++ b/src/widgets/speedtest/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/spoolman/component.jsx b/src/widgets/spoolman/component.jsx
index b690f9c0..62eb3a1d 100644
--- a/src/widgets/spoolman/component.jsx
+++ b/src/widgets/spoolman/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/stash/component.jsx b/src/widgets/stash/component.jsx
index e3986d4b..965c6b59 100644
--- a/src/widgets/stash/component.jsx
+++ b/src/widgets/stash/component.jsx
@@ -1,7 +1,7 @@
+import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import { useTranslation } from "next-i18next";
import { useEffect, useState } from "react";
-import Container from "components/services/widget/container";
-import Block from "components/services/widget/block";
import { formatProxyUrl } from "utils/proxy/api-helpers";
diff --git a/src/widgets/stocks/component.jsx b/src/widgets/stocks/component.jsx
index bcd3b110..be471ddf 100644
--- a/src/widgets/stocks/component.jsx
+++ b/src/widgets/stocks/component.jsx
@@ -1,7 +1,7 @@
-import { useTranslation } from "next-i18next";
import classNames from "classnames";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/strelaysrv/component.jsx b/src/widgets/strelaysrv/component.jsx
index 0aa70d88..026e19b7 100644
--- a/src/widgets/strelaysrv/component.jsx
+++ b/src/widgets/strelaysrv/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/suwayomi/component.jsx b/src/widgets/suwayomi/component.jsx
index 1a8625b9..1cbd8c53 100644
--- a/src/widgets/suwayomi/component.jsx
+++ b/src/widgets/suwayomi/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/suwayomi/proxy.js b/src/widgets/suwayomi/proxy.js
index def811cc..4df55b95 100644
--- a/src/widgets/suwayomi/proxy.js
+++ b/src/widgets/suwayomi/proxy.js
@@ -1,7 +1,7 @@
-import { httpProxy } from "utils/proxy/http";
-import { formatApiCall } from "utils/proxy/api-helpers";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
const proxyName = "suwayomiProxyHandler";
diff --git a/src/widgets/swagdashboard/component.jsx b/src/widgets/swagdashboard/component.jsx
index 2b17278f..4220e3c8 100644
--- a/src/widgets/swagdashboard/component.jsx
+++ b/src/widgets/swagdashboard/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/tailscale/component.jsx b/src/widgets/tailscale/component.jsx
index a6e76bed..b95cb016 100644
--- a/src/widgets/tailscale/component.jsx
+++ b/src/widgets/tailscale/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/tandoor/component.jsx b/src/widgets/tandoor/component.jsx
index b31cad95..4a02d539 100644
--- a/src/widgets/tandoor/component.jsx
+++ b/src/widgets/tandoor/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/tautulli/component.jsx b/src/widgets/tautulli/component.jsx
index 50e8295f..3f6443dd 100644
--- a/src/widgets/tautulli/component.jsx
+++ b/src/widgets/tautulli/component.jsx
@@ -1,8 +1,8 @@
/* eslint-disable camelcase */
-import { useTranslation } from "next-i18next";
-import { BsFillPlayFill, BsPauseFill, BsCpu, BsFillCpuFill } from "react-icons/bs";
-import { MdOutlineSmartDisplay, MdSmartDisplay } from "react-icons/md";
import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
+import { BsCpu, BsFillCpuFill, BsFillPlayFill, BsPauseFill } from "react-icons/bs";
+import { MdOutlineSmartDisplay, MdSmartDisplay } from "react-icons/md";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/tdarr/component.jsx b/src/widgets/tdarr/component.jsx
index ce9d43fd..824a56b3 100644
--- a/src/widgets/tdarr/component.jsx
+++ b/src/widgets/tdarr/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/tdarr/proxy.js b/src/widgets/tdarr/proxy.js
index 88da30fd..d6897dfc 100644
--- a/src/widgets/tdarr/proxy.js
+++ b/src/widgets/tdarr/proxy.js
@@ -1,7 +1,7 @@
-import { httpProxy } from "utils/proxy/http";
-import { formatApiCall } from "utils/proxy/api-helpers";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
const proxyName = "tdarrProxyHandler";
diff --git a/src/widgets/technitium/component.jsx b/src/widgets/technitium/component.jsx
index 22f56e96..fa221025 100644
--- a/src/widgets/technitium/component.jsx
+++ b/src/widgets/technitium/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/technitium/widget.js b/src/widgets/technitium/widget.js
index c3432a67..fc4577be 100644
--- a/src/widgets/technitium/widget.js
+++ b/src/widgets/technitium/widget.js
@@ -1,5 +1,5 @@
-import genericProxyHandler from "utils/proxy/handlers/generic";
import { asJson } from "utils/proxy/api-helpers";
+import genericProxyHandler from "utils/proxy/handlers/generic";
const widget = {
api: "{url}/api/{endpoint}?token={key}&utc=true",
diff --git a/src/widgets/traefik/component.jsx b/src/widgets/traefik/component.jsx
index 598170fa..e4b3b46b 100644
--- a/src/widgets/traefik/component.jsx
+++ b/src/widgets/traefik/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/transmission/component.jsx b/src/widgets/transmission/component.jsx
index bd19c52e..474fe69f 100644
--- a/src/widgets/transmission/component.jsx
+++ b/src/widgets/transmission/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/transmission/proxy.js b/src/widgets/transmission/proxy.js
index 8b8049bc..b0be7bac 100644
--- a/src/widgets/transmission/proxy.js
+++ b/src/widgets/transmission/proxy.js
@@ -1,9 +1,9 @@
import cache from "memory-cache";
-import { httpProxy } from "utils/proxy/http";
-import { formatApiCall } from "utils/proxy/api-helpers";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
const proxyName = "transmissionProxyHandler";
diff --git a/src/widgets/truenas/component.jsx b/src/widgets/truenas/component.jsx
index 0e56bc91..12ceef56 100644
--- a/src/widgets/truenas/component.jsx
+++ b/src/widgets/truenas/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import Pool from "widgets/truenas/pool";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/truenas/widget.js b/src/widgets/truenas/widget.js
index d322753f..528114ed 100644
--- a/src/widgets/truenas/widget.js
+++ b/src/widgets/truenas/widget.js
@@ -1,5 +1,5 @@
-import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
import { asJson, jsonArrayFilter } from "utils/proxy/api-helpers";
+import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
const widget = {
api: "{url}/api/v2.0/{endpoint}",
diff --git a/src/widgets/tubearchivist/component.jsx b/src/widgets/tubearchivist/component.jsx
index 6af255cd..427298e4 100644
--- a/src/widgets/tubearchivist/component.jsx
+++ b/src/widgets/tubearchivist/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/unifi/component.jsx b/src/widgets/unifi/component.jsx
index 0c00b487..ad58d1d9 100644
--- a/src/widgets/unifi/component.jsx
+++ b/src/widgets/unifi/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/unifi/proxy.js b/src/widgets/unifi/proxy.js
index 24be7dd9..c932fc41 100644
--- a/src/widgets/unifi/proxy.js
+++ b/src/widgets/unifi/proxy.js
@@ -1,11 +1,11 @@
import cache from "memory-cache";
-import { formatApiCall } from "utils/proxy/api-helpers";
-import { httpProxy } from "utils/proxy/http";
-import { addCookieToJar, setCookieHeader } from "utils/proxy/cookie-jar";
import getServiceWidget from "utils/config/service-helpers";
import { getPrivateWidgetOptions } from "utils/config/widget-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { addCookieToJar, setCookieHeader } from "utils/proxy/cookie-jar";
+import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
const udmpPrefix = "/proxy/network";
diff --git a/src/widgets/unmanic/component.jsx b/src/widgets/unmanic/component.jsx
index 7cc8eec1..12069e52 100644
--- a/src/widgets/unmanic/component.jsx
+++ b/src/widgets/unmanic/component.jsx
@@ -1,9 +1,9 @@
-import { useEffect, useState } from "react";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useEffect, useState } from "react";
-import useWidgetAPI from "utils/proxy/use-widget-api";
import { formatProxyUrl } from "utils/proxy/api-helpers";
+import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const { widget } = service;
diff --git a/src/widgets/unmanic/widget.js b/src/widgets/unmanic/widget.js
index 4c9713e4..ef4493e9 100644
--- a/src/widgets/unmanic/widget.js
+++ b/src/widgets/unmanic/widget.js
@@ -1,5 +1,5 @@
-import genericProxyHandler from "utils/proxy/handlers/generic";
import { asJson } from "utils/proxy/api-helpers";
+import genericProxyHandler from "utils/proxy/handlers/generic";
const widget = {
api: "{url}/unmanic/api/v2/{endpoint}",
diff --git a/src/widgets/uptimekuma/component.jsx b/src/widgets/uptimekuma/component.jsx
index d044c255..e8a42e48 100644
--- a/src/widgets/uptimekuma/component.jsx
+++ b/src/widgets/uptimekuma/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/uptimerobot/component.jsx b/src/widgets/uptimerobot/component.jsx
index c18462ba..a1f234c2 100644
--- a/src/widgets/uptimerobot/component.jsx
+++ b/src/widgets/uptimerobot/component.jsx
@@ -1,7 +1,7 @@
+import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import { useTranslation } from "next-i18next";
import { useEffect, useState } from "react";
-import Container from "components/services/widget/container";
-import Block from "components/services/widget/block";
import { formatProxyUrl } from "utils/proxy/api-helpers";
diff --git a/src/widgets/urbackup/component.jsx b/src/widgets/urbackup/component.jsx
index 76769e13..9d8f92ba 100644
--- a/src/widgets/urbackup/component.jsx
+++ b/src/widgets/urbackup/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/vikunja/component.jsx b/src/widgets/vikunja/component.jsx
index 7f8efb41..1afccd38 100644
--- a/src/widgets/vikunja/component.jsx
+++ b/src/widgets/vikunja/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/vikunja/widget.js b/src/widgets/vikunja/widget.js
index 9a192026..8e5e680a 100644
--- a/src/widgets/vikunja/widget.js
+++ b/src/widgets/vikunja/widget.js
@@ -1,5 +1,5 @@
-import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
import { asJson } from "utils/proxy/api-helpers";
+import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
const widget = {
api: `{url}/api/v1/{endpoint}`,
diff --git a/src/widgets/watchtower/component.jsx b/src/widgets/watchtower/component.jsx
index 0bed9445..58b2a3f5 100644
--- a/src/widgets/watchtower/component.jsx
+++ b/src/widgets/watchtower/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/watchtower/proxy.js b/src/widgets/watchtower/proxy.js
index 588d08ee..484c3c7d 100644
--- a/src/widgets/watchtower/proxy.js
+++ b/src/widgets/watchtower/proxy.js
@@ -1,7 +1,7 @@
-import { httpProxy } from "utils/proxy/http";
-import { formatApiCall } from "utils/proxy/api-helpers";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
+import { formatApiCall } from "utils/proxy/api-helpers";
+import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
const proxyName = "watchtowerProxyHandler";
diff --git a/src/widgets/wgeasy/component.jsx b/src/widgets/wgeasy/component.jsx
index eb42532e..829b120d 100644
--- a/src/widgets/wgeasy/component.jsx
+++ b/src/widgets/wgeasy/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/whatsupdocker/component.jsx b/src/widgets/whatsupdocker/component.jsx
index 52afe09d..cc3b5174 100644
--- a/src/widgets/whatsupdocker/component.jsx
+++ b/src/widgets/whatsupdocker/component.jsx
@@ -1,5 +1,5 @@
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js
index 21cff92b..992855d0 100644
--- a/src/widgets/widgets.js
+++ b/src/widgets/widgets.js
@@ -41,15 +41,15 @@ import gotify from "./gotify/widget";
import grafana from "./grafana/widget";
import hdhomerun from "./hdhomerun/widget";
import headscale from "./headscale/widget";
+import healthchecks from "./healthchecks/widget";
import hoarder from "./hoarder/widget";
import homeassistant from "./homeassistant/widget";
import homebox from "./homebox/widget";
import homebridge from "./homebridge/widget";
-import healthchecks from "./healthchecks/widget";
import immich from "./immich/widget";
import jackett from "./jackett/widget";
-import jellyseerr from "./jellyseerr/widget";
import jdownloader from "./jdownloader/widget";
+import jellyseerr from "./jellyseerr/widget";
import kavita from "./kavita/widget";
import komga from "./komga/widget";
import kopia from "./kopia/widget";
@@ -60,9 +60,9 @@ import mailcow from "./mailcow/widget";
import mastodon from "./mastodon/widget";
import mealie from "./mealie/widget";
import medusa from "./medusa/widget";
+import mikrotik from "./mikrotik/widget";
import minecraft from "./minecraft/widget";
import miniflux from "./miniflux/widget";
-import mikrotik from "./mikrotik/widget";
import mjpeg from "./mjpeg/widget";
import moonraker from "./moonraker/widget";
import mylar from "./mylar/widget";
@@ -78,15 +78,14 @@ import octoprint from "./octoprint/widget";
import omada from "./omada/widget";
import ombi from "./ombi/widget";
import opendtu from "./opendtu/widget";
-import opnsense from "./opnsense/widget";
-import overseerr from "./overseerr/widget";
import openmediavault from "./openmediavault/widget";
import openwrt from "./openwrt/widget";
+import opnsense from "./opnsense/widget";
+import overseerr from "./overseerr/widget";
import paperlessngx from "./paperlessngx/widget";
import peanut from "./peanut/widget";
import pfsense from "./pfsense/widget";
import photoprism from "./photoprism/widget";
-import proxmoxbackupserver from "./proxmoxbackupserver/widget";
import pihole from "./pihole/widget";
import plantit from "./plantit/widget";
import plex from "./plex/widget";
@@ -95,12 +94,14 @@ import prometheus from "./prometheus/widget";
import prometheusmetric from "./prometheusmetric/widget";
import prowlarr from "./prowlarr/widget";
import proxmox from "./proxmox/widget";
+import proxmoxbackupserver from "./proxmoxbackupserver/widget";
import pterodactyl from "./pterodactyl/widget";
import pyload from "./pyload/widget";
import qbittorrent from "./qbittorrent/widget";
import qnap from "./qnap/widget";
import radarr from "./radarr/widget";
import readarr from "./readarr/widget";
+import romm from "./romm/widget";
import rutorrent from "./rutorrent/widget";
import sabnzbd from "./sabnzbd/widget";
import scrutiny from "./scrutiny/widget";
@@ -111,28 +112,27 @@ import spoolman from "./spoolman/widget";
import stash from "./stash/widget";
import stocks from "./stocks/widget";
import strelaysrv from "./strelaysrv/widget";
-import swagdashboard from "./swagdashboard/widget";
import suwayomi from "./suwayomi/widget";
+import swagdashboard from "./swagdashboard/widget";
import tailscale from "./tailscale/widget";
import tandoor from "./tandoor/widget";
import tautulli from "./tautulli/widget";
-import technitium from "./technitium/widget";
import tdarr from "./tdarr/widget";
+import technitium from "./technitium/widget";
import traefik from "./traefik/widget";
import transmission from "./transmission/widget";
-import tubearchivist from "./tubearchivist/widget";
import truenas from "./truenas/widget";
+import tubearchivist from "./tubearchivist/widget";
import unifi from "./unifi/widget";
import unmanic from "./unmanic/widget";
import uptimekuma from "./uptimekuma/widget";
import uptimerobot from "./uptimerobot/widget";
+import urbackup from "./urbackup/widget";
import vikunja from "./vikunja/widget";
import watchtower from "./watchtower/widget";
import wgeasy from "./wgeasy/widget";
import whatsupdocker from "./whatsupdocker/widget";
import xteve from "./xteve/widget";
-import urbackup from "./urbackup/widget";
-import romm from "./romm/widget";
import zabbix from "./zabbix/widget";
const widgets = {
diff --git a/src/widgets/xteve/component.jsx b/src/widgets/xteve/component.jsx
index 9d514e75..41f2beb0 100644
--- a/src/widgets/xteve/component.jsx
+++ b/src/widgets/xteve/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/xteve/proxy.js b/src/widgets/xteve/proxy.js
index 453e3645..53d82bc4 100644
--- a/src/widgets/xteve/proxy.js
+++ b/src/widgets/xteve/proxy.js
@@ -1,8 +1,8 @@
+import getServiceWidget from "utils/config/service-helpers";
+import createLogger from "utils/logger";
import { formatApiCall } from "utils/proxy/api-helpers";
import { httpProxy } from "utils/proxy/http";
-import createLogger from "utils/logger";
import widgets from "widgets/widgets";
-import getServiceWidget from "utils/config/service-helpers";
const logger = createLogger("xteveProxyHandler");
diff --git a/src/widgets/zabbix/component.jsx b/src/widgets/zabbix/component.jsx
index a2cc8168..b6a5b20b 100644
--- a/src/widgets/zabbix/component.jsx
+++ b/src/widgets/zabbix/component.jsx
@@ -1,6 +1,6 @@
-import { useTranslation } from "next-i18next";
-import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
From 1666106dcd5e7e8a4c0a0f66da23a1684dd5385c Mon Sep 17 00:00:00 2001
From: RoboMagus <68224306+RoboMagus@users.noreply.github.com>
Date: Mon, 31 Mar 2025 15:44:17 +0200
Subject: [PATCH 83/93] Chore: add more Docker Semver Tags (#5107)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
---
.github/workflows/docker-publish.yml | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml
index afb7fca4..7a133c1d 100644
--- a/.github/workflows/docker-publish.yml
+++ b/.github/workflows/docker-publish.yml
@@ -77,6 +77,15 @@ jobs:
images: |
${{ env.IMAGE_NAME }}
ghcr.io/${{ env.IMAGE_NAME }}
+ tags: |
+ # Default tags
+ type=schedule,pattern=nightly
+ type=ref,event=branch
+ type=ref,event=tag
+ # Versioning tags
+ type=semver,pattern=v{{version}}
+ type=semver,pattern=v{{major}}.{{minor}}
+ type=semver,pattern=v{{major}}
flavor: |
latest=auto
From 6741eb723d1781972465304d9ab5f27d7c3101b2 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 1 Apr 2025 09:22:36 -0700
Subject: [PATCH 84/93] Chore(deps): Bump i18next from 21.10.0 to 24.2.3
(#5109)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 51 ++++++++++++++++++++++++++++++++++++++++----------
2 files changed, 42 insertions(+), 11 deletions(-)
diff --git a/package.json b/package.json
index 07be3d1d..2386454c 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,7 @@
"dockerode": "^4.0.4",
"follow-redirects": "^1.15.9",
"gamedig": "^5.2.0",
- "i18next": "^21.10.0",
+ "i18next": "^24.2.3",
"js-yaml": "^4.1.0",
"json-rpc-2.0": "^1.7.0",
"luxon": "^3.5.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 40069cad..2e0b8b3f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -33,8 +33,8 @@ importers:
specifier: ^5.2.0
version: 5.2.0
i18next:
- specifier: ^21.10.0
- version: 21.10.0
+ specifier: ^24.2.3
+ version: 24.2.3(typescript@5.7.3)
js-yaml:
specifier: ^4.1.0
version: 4.1.0
@@ -73,7 +73,7 @@ importers:
version: 18.3.1(react@18.3.1)
react-i18next:
specifier: ^11.18.6
- version: 11.18.6(i18next@21.10.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 11.18.6(i18next@24.2.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react-icons:
specifier: ^5.4.0
version: 5.4.0(react@18.3.1)
@@ -101,6 +101,10 @@ importers:
xml-js:
specifier: ^1.6.11
version: 1.6.11
+ optionalDependencies:
+ osx-temperature-sensor:
+ specifier: ^1.0.8
+ version: 1.0.8
devDependencies:
'@tailwindcss/forms':
specifier: ^0.5.10
@@ -150,10 +154,6 @@ importers:
typescript:
specifier: ^5.7.3
version: 5.7.3
- optionalDependencies:
- osx-temperature-sensor:
- specifier: ^1.0.8
- version: 1.0.8
packages:
@@ -165,6 +165,10 @@ packages:
resolution: {integrity: sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==}
engines: {node: '>=6.9.0'}
+ '@babel/runtime@7.27.0':
+ resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
+ engines: {node: '>=6.9.0'}
+
'@balena/dockerignore@1.0.2':
resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==}
@@ -1554,6 +1558,14 @@ packages:
i18next@21.10.0:
resolution: {integrity: sha512-YeuIBmFsGjUfO3qBmMOc0rQaun4mIpGKET5WDwvu8lU7gvwpcariZLNtL0Fzj+zazcHUrlXHiptcFhBMFaxzfg==}
+ i18next@24.2.3:
+ resolution: {integrity: sha512-lfbf80OzkocvX7nmZtu7nSTNbrTYR52sLWxPtlXX1zAhVw8WEnFk4puUkCR4B1dNQwbSpEHHHemcZu//7EcB7A==}
+ peerDependencies:
+ typescript: ^5
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
ical-date-parser@4.0.0:
resolution: {integrity: sha512-XRCK/FU1akC2ZaJOdKIeZI6BLLgzWUuE0pegSrrkEva89GOan5mNkLVqCU4EMhCJ9nkG5TLWdMXrVX1fNAkFzw==}
@@ -2783,6 +2795,10 @@ snapshots:
dependencies:
regenerator-runtime: 0.14.1
+ '@babel/runtime@7.27.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
'@balena/dockerignore@1.0.2': {}
'@colors/colors@1.6.0': {}
@@ -3741,7 +3757,7 @@ snapshots:
dom-helpers@5.2.1:
dependencies:
- '@babel/runtime': 7.26.9
+ '@babel/runtime': 7.27.0
csstype: 3.1.3
dom-serializer@2.0.0:
@@ -4346,7 +4362,13 @@ snapshots:
i18next@21.10.0:
dependencies:
- '@babel/runtime': 7.26.9
+ '@babel/runtime': 7.27.0
+
+ i18next@24.2.3(typescript@5.7.3):
+ dependencies:
+ '@babel/runtime': 7.27.0
+ optionalDependencies:
+ typescript: 5.7.3
ical-date-parser@4.0.0: {}
@@ -4967,6 +4989,15 @@ snapshots:
optionalDependencies:
react-dom: 18.3.1(react@18.3.1)
+ react-i18next@11.18.6(i18next@24.2.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.26.9
+ html-parse-stringify: 3.0.1
+ i18next: 24.2.3(typescript@5.7.3)
+ react: 18.3.1
+ optionalDependencies:
+ react-dom: 18.3.1(react@18.3.1)
+
react-icons@5.4.0(react@18.3.1):
dependencies:
react: 18.3.1
@@ -4985,7 +5016,7 @@ snapshots:
react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- '@babel/runtime': 7.26.9
+ '@babel/runtime': 7.27.0
dom-helpers: 5.2.1
loose-envify: 1.4.0
prop-types: 15.8.1
From 5e946ed2c251e098d1cfd48cd0e78866809ee305 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 1 Apr 2025 09:24:24 -0700
Subject: [PATCH 85/93] Chore(deps-dev): Bump postcss from 8.5.2 to 8.5.3
(#5110)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 21 +++++++--------------
2 files changed, 8 insertions(+), 15 deletions(-)
diff --git a/package.json b/package.json
index 2386454c..25a0e85e 100644
--- a/package.json
+++ b/package.json
@@ -54,7 +54,7 @@
"eslint-plugin-prettier": "^5.2.3",
"eslint-plugin-react": "^7.37.4",
"eslint-plugin-react-hooks": "^5.1.0",
- "postcss": "^8.5.2",
+ "postcss": "^8.5.3",
"prettier": "^3.5.2",
"prettier-plugin-organize-imports": "^4.1.0",
"tailwind-scrollbar": "^4.0.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2e0b8b3f..e1255a5c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -137,8 +137,8 @@ importers:
specifier: ^5.1.0
version: 5.1.0(eslint@9.21.0(jiti@2.4.2))
postcss:
- specifier: ^8.5.2
- version: 8.5.2
+ specifier: ^8.5.3
+ version: 8.5.3
prettier:
specifier: ^3.5.2
version: 3.5.2
@@ -1975,11 +1975,6 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- nanoid@3.3.8:
- resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
-
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
@@ -2147,8 +2142,8 @@ packages:
resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines: {node: ^10 || ^12 || >=14}
- postcss@8.5.2:
- resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==}
+ postcss@8.5.3:
+ resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
engines: {node: ^10 || ^12 || >=14}
prelude-ls@1.2.1:
@@ -3163,7 +3158,7 @@ snapshots:
'@tailwindcss/node': 4.0.9
'@tailwindcss/oxide': 4.0.9
lightningcss: 1.29.1
- postcss: 8.5.2
+ postcss: 8.5.3
tailwindcss: 4.0.9
'@tanstack/react-virtual@3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
@@ -4726,8 +4721,6 @@ snapshots:
nanoid@3.3.11: {}
- nanoid@3.3.8: {}
-
natural-compare@1.4.0: {}
next-i18next@12.1.0(next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
@@ -4906,9 +4899,9 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
- postcss@8.5.2:
+ postcss@8.5.3:
dependencies:
- nanoid: 3.3.8
+ nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
From f46568ec2a1eaae1204230631e92870d33ccf6de Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 1 Apr 2025 09:24:46 -0700
Subject: [PATCH 86/93] Chore(deps-dev): Bump eslint-config-prettier from
10.0.2 to 10.1.1 (#5112)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 16 ++++++++--------
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/package.json b/package.json
index 25a0e85e..3a0d1d11 100644
--- a/package.json
+++ b/package.json
@@ -48,7 +48,7 @@
"@tailwindcss/postcss": "^4.0.9",
"eslint": "^9.21.0",
"eslint-config-next": "^15.1.7",
- "eslint-config-prettier": "^10.0.2",
+ "eslint-config-prettier": "^10.1.1",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-prettier": "^5.2.3",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e1255a5c..d68783f6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -119,8 +119,8 @@ importers:
specifier: ^15.1.7
version: 15.1.7(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
eslint-config-prettier:
- specifier: ^10.0.2
- version: 10.0.2(eslint@9.21.0(jiti@2.4.2))
+ specifier: ^10.1.1
+ version: 10.1.1(eslint@9.21.0(jiti@2.4.2))
eslint-plugin-import:
specifier: ^2.31.0
version: 2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2))
@@ -129,7 +129,7 @@ importers:
version: 6.10.2(eslint@9.21.0(jiti@2.4.2))
eslint-plugin-prettier:
specifier: ^5.2.3
- version: 5.2.3(eslint-config-prettier@10.0.2(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.2)
+ version: 5.2.3(eslint-config-prettier@10.1.1(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.2)
eslint-plugin-react:
specifier: ^7.37.4
version: 7.37.4(eslint@9.21.0(jiti@2.4.2))
@@ -1207,8 +1207,8 @@ packages:
typescript:
optional: true
- eslint-config-prettier@10.0.2:
- resolution: {integrity: sha512-1105/17ZIMjmCOJOPNfVdbXafLCLj3hPmkmB7dLgt7XsQ/zkxSuDerE/xgO3RxoHysR1N1whmquY0lSn2O0VLg==}
+ eslint-config-prettier@10.1.1:
+ resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
@@ -3920,7 +3920,7 @@ snapshots:
- eslint-plugin-import-x
- supports-color
- eslint-config-prettier@10.0.2(eslint@9.21.0(jiti@2.4.2)):
+ eslint-config-prettier@10.1.1(eslint@9.21.0(jiti@2.4.2)):
dependencies:
eslint: 9.21.0(jiti@2.4.2)
@@ -4006,14 +4006,14 @@ snapshots:
safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1
- eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.0.2(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.2):
+ eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.1.1(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.2):
dependencies:
eslint: 9.21.0(jiti@2.4.2)
prettier: 3.5.2
prettier-linter-helpers: 1.0.0
synckit: 0.9.2
optionalDependencies:
- eslint-config-prettier: 10.0.2(eslint@9.21.0(jiti@2.4.2))
+ eslint-config-prettier: 10.1.1(eslint@9.21.0(jiti@2.4.2))
eslint-plugin-react-hooks@5.1.0(eslint@9.21.0(jiti@2.4.2)):
dependencies:
From a59ee5a6057e4e42708745489ff2c8d5541d77eb Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 1 Apr 2025 09:32:05 -0700
Subject: [PATCH 87/93] Chore(deps-dev): Bump eslint-config-next from 15.1.7 to
15.2.4 (#5113)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 405 ++++++++++++++++++++++++++++++++++++-------------
2 files changed, 302 insertions(+), 105 deletions(-)
diff --git a/package.json b/package.json
index 3a0d1d11..53d1e770 100644
--- a/package.json
+++ b/package.json
@@ -47,7 +47,7 @@
"@tailwindcss/forms": "^0.5.10",
"@tailwindcss/postcss": "^4.0.9",
"eslint": "^9.21.0",
- "eslint-config-next": "^15.1.7",
+ "eslint-config-next": "^15.2.4",
"eslint-config-prettier": "^10.1.1",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d68783f6..d2eabfe9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -116,14 +116,14 @@ importers:
specifier: ^9.21.0
version: 9.21.0(jiti@2.4.2)
eslint-config-next:
- specifier: ^15.1.7
- version: 15.1.7(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
+ specifier: ^15.2.4
+ version: 15.2.4(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
eslint-config-prettier:
specifier: ^10.1.1
version: 10.1.1(eslint@9.21.0(jiti@2.4.2))
eslint-plugin-import:
specifier: ^2.31.0
- version: 2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2))
+ version: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2))
eslint-plugin-jsx-a11y:
specifier: ^6.10.2
version: 6.10.2(eslint@9.21.0(jiti@2.4.2))
@@ -179,15 +179,30 @@ packages:
'@dabh/diagnostics@2.0.3':
resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==}
+ '@emnapi/core@1.4.0':
+ resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==}
+
'@emnapi/runtime@1.3.1':
resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==}
+ '@emnapi/runtime@1.4.0':
+ resolution: {integrity: sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==}
+
+ '@emnapi/wasi-threads@1.0.1':
+ resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==}
+
'@eslint-community/eslint-utils@4.4.1':
resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ '@eslint-community/eslint-utils@4.5.1':
+ resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
'@eslint-community/regexpp@4.12.1':
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
@@ -383,11 +398,14 @@ packages:
'@kubernetes/client-node@1.0.0':
resolution: {integrity: sha512-a8NSvFDSHKFZ0sR1hbPSf8IDFNJwctEU5RodSCNiq/moRXWmrdmqhb1RRQzF+l+TSBaDgHw3YsYNxxE92STBzw==}
+ '@napi-rs/wasm-runtime@0.2.8':
+ resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==}
+
'@next/env@15.2.3':
resolution: {integrity: sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==}
- '@next/eslint-plugin-next@15.1.7':
- resolution: {integrity: sha512-kRP7RjSxfTO13NE317ek3mSGzoZlI33nc/i5hs1KaWpK+egs85xg0DJ4p32QEiHnR0mVjuUfhRIun7awqfL7pQ==}
+ '@next/eslint-plugin-next@15.2.4':
+ resolution: {integrity: sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ==}
'@next/swc-darwin-arm64@15.2.3':
resolution: {integrity: sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==}
@@ -494,8 +512,8 @@ packages:
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
- '@rushstack/eslint-patch@1.10.5':
- resolution: {integrity: sha512-kkKUDVlII2DQiKy7UstOR1ErJP8kUKAQ4oa+SQtM0K+lPdmmjj0YnnxBgtTVYH7mUKtbsxeFC9y0AmK7Yb78/A==}
+ '@rushstack/eslint-patch@1.11.0':
+ resolution: {integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==}
'@sindresorhus/is@5.6.0':
resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==}
@@ -601,6 +619,9 @@ packages:
'@tanstack/virtual-core@3.13.0':
resolution: {integrity: sha512-NBKJP3OIdmZY3COJdWkSonr50FMVIi+aj5ZJ7hI/DTpEKg2RMfo/KvP8A3B/zOSpMgIe52B5E2yn7rryULzA6g==}
+ '@tybys/wasm-util@0.9.0':
+ resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==}
+
'@types/d3-array@3.2.1':
resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==}
@@ -670,53 +691,128 @@ packages:
'@types/ws@8.5.14':
resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==}
- '@typescript-eslint/eslint-plugin@8.24.1':
- resolution: {integrity: sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==}
+ '@typescript-eslint/eslint-plugin@8.29.0':
+ resolution: {integrity: sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <5.8.0'
+ typescript: '>=4.8.4 <5.9.0'
- '@typescript-eslint/parser@8.24.1':
- resolution: {integrity: sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==}
+ '@typescript-eslint/parser@8.29.0':
+ resolution: {integrity: sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <5.8.0'
+ typescript: '>=4.8.4 <5.9.0'
- '@typescript-eslint/scope-manager@8.24.1':
- resolution: {integrity: sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==}
+ '@typescript-eslint/scope-manager@8.29.0':
+ resolution: {integrity: sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/type-utils@8.24.1':
- resolution: {integrity: sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==}
+ '@typescript-eslint/type-utils@8.29.0':
+ resolution: {integrity: sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <5.8.0'
+ typescript: '>=4.8.4 <5.9.0'
- '@typescript-eslint/types@8.24.1':
- resolution: {integrity: sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==}
+ '@typescript-eslint/types@8.29.0':
+ resolution: {integrity: sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.24.1':
- resolution: {integrity: sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==}
+ '@typescript-eslint/typescript-estree@8.29.0':
+ resolution: {integrity: sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- typescript: '>=4.8.4 <5.8.0'
+ typescript: '>=4.8.4 <5.9.0'
- '@typescript-eslint/utils@8.24.1':
- resolution: {integrity: sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==}
+ '@typescript-eslint/utils@8.29.0':
+ resolution: {integrity: sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <5.8.0'
+ typescript: '>=4.8.4 <5.9.0'
- '@typescript-eslint/visitor-keys@8.24.1':
- resolution: {integrity: sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==}
+ '@typescript-eslint/visitor-keys@8.29.0':
+ resolution: {integrity: sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@unrs/resolver-binding-darwin-arm64@1.3.3':
+ resolution: {integrity: sha512-EpRILdWr3/xDa/7MoyfO7JuBIJqpBMphtu4+80BK1bRfFcniVT74h3Z7q1+WOc92FuIAYatB1vn9TJR67sORGw==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@unrs/resolver-binding-darwin-x64@1.3.3':
+ resolution: {integrity: sha512-ntj/g7lPyqwinMJWZ+DKHBse8HhVxswGTmNgFKJtdgGub3M3zp5BSZ3bvMP+kBT6dnYJLSVlDqdwOq1P8i0+/g==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@unrs/resolver-binding-freebsd-x64@1.3.3':
+ resolution: {integrity: sha512-l6BT8f2CU821EW7U8hSUK8XPq4bmyTlt9Mn4ERrfjJNoCw0/JoHAh9amZZtV3cwC3bwwIat+GUnrcHTG9+qixw==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@unrs/resolver-binding-linux-arm-gnueabihf@1.3.3':
+ resolution: {integrity: sha512-8ScEc5a4y7oE2BonRvzJ+2GSkBaYWyh0/Ko4Q25e/ix6ANpJNhwEPZvCR6GVRmsQAYMIfQvYLdM6YEN+qRjnAQ==}
+ cpu: [arm]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-arm-musleabihf@1.3.3':
+ resolution: {integrity: sha512-8qQ6l1VTzLNd3xb2IEXISOKwMGXDCzY/UNy/7SovFW2Sp0K3YbL7Ao7R18v6SQkLqQlhhqSBIFRk+u6+qu5R5A==}
+ cpu: [arm]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-arm64-gnu@1.3.3':
+ resolution: {integrity: sha512-v81R2wjqcWXJlQY23byqYHt9221h4anQ6wwN64oMD/WAE+FmxPHFZee5bhRkNVtzqO/q7wki33VFWlhiADwUeQ==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-arm64-musl@1.3.3':
+ resolution: {integrity: sha512-cAOx/j0u5coMg4oct/BwMzvWJdVciVauUvsd+GQB/1FZYKQZmqPy0EjJzJGbVzFc6gbnfEcSqvQE6gvbGf2N8Q==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-ppc64-gnu@1.3.3':
+ resolution: {integrity: sha512-mq2blqwErgDJD4gtFDlTX/HZ7lNP8YCHYFij2gkXPtMzrXxPW1hOtxL6xg4NWxvnj4bppppb0W3s/buvM55yfg==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-s390x-gnu@1.3.3':
+ resolution: {integrity: sha512-u0VRzfFYysarYHnztj2k2xr+eu9rmgoTUUgCCIT37Nr+j0A05Xk2c3RY8Mh5+DhCl2aYibihnaAEJHeR0UOFIQ==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-x64-gnu@1.3.3':
+ resolution: {integrity: sha512-OrVo5ZsG29kBF0Ug95a2KidS16PqAMmQNozM6InbquOfW/udouk063e25JVLqIBhHLB2WyBnixOQ19tmeC/hIg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-x64-musl@1.3.3':
+ resolution: {integrity: sha512-PYnmrwZ4HMp9SkrOhqPghY/aoL+Rtd4CQbr93GlrRTjK6kDzfMfgz3UH3jt6elrQAfupa1qyr1uXzeVmoEAxUA==}
+ cpu: [x64]
+ os: [linux]
+
+ '@unrs/resolver-binding-wasm32-wasi@1.3.3':
+ resolution: {integrity: sha512-81AnQY6fShmktQw4hWDUIilsKSdvr/acdJ5azAreu2IWNlaJOKphJSsUVWE+yCk6kBMoQyG9ZHCb/krb5K0PEA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@unrs/resolver-binding-win32-arm64-msvc@1.3.3':
+ resolution: {integrity: sha512-X/42BMNw7cW6xrB9syuP5RusRnWGoq+IqvJO8IDpp/BZg64J1uuIW6qA/1Cl13Y4LyLXbJVYbYNSKwR/FiHEng==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@unrs/resolver-binding-win32-ia32-msvc@1.3.3':
+ resolution: {integrity: sha512-EGNnNGQxMU5aTN7js3ETYvuw882zcO+dsVjs+DwO2j/fRVKth87C8e2GzxW1L3+iWAXMyJhvFBKRavk9Og1Z6A==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@unrs/resolver-binding-win32-x64-msvc@1.3.3':
+ resolution: {integrity: sha512-GraLbYqOJcmW1qY3osB+2YIiD62nVf2/bVLHZmrb4t/YSUwE03l7TwcDJl08T/Tm3SVhepX8RQkpzWbag/Sb4w==}
+ cpu: [x64]
+ os: [win32]
+
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -1198,8 +1294,8 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
- eslint-config-next@15.1.7:
- resolution: {integrity: sha512-zXoMnYUIy3XHaAoOhrcYkT9UQWvXqWju2K7NNsmb5wd/7XESDwof61eUdW4QhERr3eJ9Ko/vnXqIrj8kk/drYw==}
+ eslint-config-next@15.2.4:
+ resolution: {integrity: sha512-v4gYjd4eYIme8qzaJItpR5MMBXJ0/YV07u7eb50kEnlEmX7yhOjdUdzz70v4fiINYRjLf8X8TbogF0k7wlz6sA==}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
typescript: '>=3.3.1'
@@ -1216,8 +1312,8 @@ packages:
eslint-import-resolver-node@0.3.9:
resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
- eslint-import-resolver-typescript@3.8.2:
- resolution: {integrity: sha512-o0nvXxsatYCDTzI1K5b3aYGQ6PjpDGJEVN86zqJw5SEewhmmggfRTotd2dqWr2t2zbeYpIEWGTCkgtUpIEIcaQ==}
+ eslint-import-resolver-typescript@3.10.0:
+ resolution: {integrity: sha512-aV3/dVsT0/H9BtpNwbaqvl+0xGMRGzncLyhm793NFGvbwGGvzyAykqWZ8oZlZuGwuHkwJjhWJkG1cM3ynvd2pQ==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
eslint: '*'
@@ -1365,8 +1461,8 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- fastq@1.19.0:
- resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==}
+ fastq@1.19.1:
+ resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
fdir@6.4.3:
resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==}
@@ -1618,8 +1714,8 @@ packages:
resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
engines: {node: '>= 0.4'}
- is-bun-module@1.3.0:
- resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==}
+ is-bun-module@2.0.0:
+ resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==}
is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
@@ -2309,8 +2405,8 @@ packages:
resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==}
engines: {node: '>=14.16'}
- reusify@1.0.4:
- resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
rfc4648@1.5.4:
@@ -2434,8 +2530,8 @@ packages:
resolution: {integrity: sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==}
engines: {node: '>=10.16.0'}
- stable-hash@0.0.4:
- resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==}
+ stable-hash@0.0.5:
+ resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==}
stack-trace@0.0.10:
resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==}
@@ -2577,8 +2673,8 @@ packages:
tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
- tinyglobby@0.2.11:
- resolution: {integrity: sha512-32TmKeeKUahv0Go8WmQgiEp9Y21NuxjwjqiRC1nrUB51YacfSwuB44xgXD+HdIppmMRgjQNPdrHyA6vIybYZ+g==}
+ tinyglobby@0.2.12:
+ resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==}
engines: {node: '>=12.0.0'}
tldts-core@6.1.82:
@@ -2614,8 +2710,8 @@ packages:
resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==}
engines: {node: '>= 14.0.0'}
- ts-api-utils@2.0.1:
- resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==}
+ ts-api-utils@2.1.0:
+ resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
engines: {node: '>=18.12'}
peerDependencies:
typescript: '>=4.8.4'
@@ -2665,6 +2761,9 @@ packages:
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
engines: {node: '>= 0.8'}
+ unrs-resolver@1.3.3:
+ resolution: {integrity: sha512-PFLAGQzYlyjniXdbmQ3dnGMZJXX5yrl2YS4DLRfR3BhgUsE1zpRIrccp9XMOGRfIHpdFvCn/nr5N1KMVda4x3A==}
+
urbackup-server-api@0.8.9:
resolution: {integrity: sha512-Igu6A0xSZeMsiN6PWT7zG4aD+iJR5fXT/j5+xwAvnD/vCNfvVrettIsXv6MftxOajvTmtlgaYu8KDoH1EJQ6DQ==}
@@ -2804,16 +2903,37 @@ snapshots:
enabled: 2.0.0
kuler: 2.0.0
+ '@emnapi/core@1.4.0':
+ dependencies:
+ '@emnapi/wasi-threads': 1.0.1
+ tslib: 2.8.1
+ optional: true
+
'@emnapi/runtime@1.3.1':
dependencies:
tslib: 2.8.1
optional: true
+ '@emnapi/runtime@1.4.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/wasi-threads@1.0.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@eslint-community/eslint-utils@4.4.1(eslint@9.21.0(jiti@2.4.2))':
dependencies:
eslint: 9.21.0(jiti@2.4.2)
eslint-visitor-keys: 3.4.3
+ '@eslint-community/eslint-utils@4.5.1(eslint@9.21.0(jiti@2.4.2))':
+ dependencies:
+ eslint: 9.21.0(jiti@2.4.2)
+ eslint-visitor-keys: 3.4.3
+
'@eslint-community/regexpp@4.12.1': {}
'@eslint/config-array@0.19.2':
@@ -3006,9 +3126,16 @@ snapshots:
- encoding
- utf-8-validate
+ '@napi-rs/wasm-runtime@0.2.8':
+ dependencies:
+ '@emnapi/core': 1.4.0
+ '@emnapi/runtime': 1.4.0
+ '@tybys/wasm-util': 0.9.0
+ optional: true
+
'@next/env@15.2.3': {}
- '@next/eslint-plugin-next@15.1.7':
+ '@next/eslint-plugin-next@15.2.4':
dependencies:
fast-glob: 3.3.1
@@ -3046,7 +3173,7 @@ snapshots:
'@nodelib/fs.walk@1.2.8':
dependencies:
'@nodelib/fs.scandir': 2.1.5
- fastq: 1.19.0
+ fastq: 1.19.1
'@nolyfill/is-core-module@1.0.39': {}
@@ -3080,7 +3207,7 @@ snapshots:
'@rtsao/scc@1.1.0': {}
- '@rushstack/eslint-patch@1.10.5': {}
+ '@rushstack/eslint-patch@1.11.0': {}
'@sindresorhus/is@5.6.0': {}
@@ -3169,6 +3296,11 @@ snapshots:
'@tanstack/virtual-core@3.13.0': {}
+ '@tybys/wasm-util@0.9.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@types/d3-array@3.2.1': {}
'@types/d3-color@3.1.3': {}
@@ -3238,83 +3370,130 @@ snapshots:
dependencies:
'@types/node': 22.13.4
- '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)':
+ '@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)':
dependencies:
'@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
- '@typescript-eslint/scope-manager': 8.24.1
- '@typescript-eslint/type-utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
- '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
- '@typescript-eslint/visitor-keys': 8.24.1
+ '@typescript-eslint/parser': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
+ '@typescript-eslint/scope-manager': 8.29.0
+ '@typescript-eslint/type-utils': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
+ '@typescript-eslint/utils': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
+ '@typescript-eslint/visitor-keys': 8.29.0
eslint: 9.21.0(jiti@2.4.2)
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
- ts-api-utils: 2.0.1(typescript@5.7.3)
+ ts-api-utils: 2.1.0(typescript@5.7.3)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)':
+ '@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.24.1
- '@typescript-eslint/types': 8.24.1
- '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3)
- '@typescript-eslint/visitor-keys': 8.24.1
+ '@typescript-eslint/scope-manager': 8.29.0
+ '@typescript-eslint/types': 8.29.0
+ '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.7.3)
+ '@typescript-eslint/visitor-keys': 8.29.0
debug: 4.4.0
eslint: 9.21.0(jiti@2.4.2)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.24.1':
+ '@typescript-eslint/scope-manager@8.29.0':
dependencies:
- '@typescript-eslint/types': 8.24.1
- '@typescript-eslint/visitor-keys': 8.24.1
+ '@typescript-eslint/types': 8.29.0
+ '@typescript-eslint/visitor-keys': 8.29.0
- '@typescript-eslint/type-utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)':
+ '@typescript-eslint/type-utils@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)':
dependencies:
- '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3)
- '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
+ '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.7.3)
+ '@typescript-eslint/utils': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
debug: 4.4.0
eslint: 9.21.0(jiti@2.4.2)
- ts-api-utils: 2.0.1(typescript@5.7.3)
+ ts-api-utils: 2.1.0(typescript@5.7.3)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.24.1': {}
+ '@typescript-eslint/types@8.29.0': {}
- '@typescript-eslint/typescript-estree@8.24.1(typescript@5.7.3)':
+ '@typescript-eslint/typescript-estree@8.29.0(typescript@5.7.3)':
dependencies:
- '@typescript-eslint/types': 8.24.1
- '@typescript-eslint/visitor-keys': 8.24.1
+ '@typescript-eslint/types': 8.29.0
+ '@typescript-eslint/visitor-keys': 8.29.0
debug: 4.4.0
fast-glob: 3.3.3
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.7.1
- ts-api-utils: 2.0.1(typescript@5.7.3)
+ ts-api-utils: 2.1.0(typescript@5.7.3)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)':
+ '@typescript-eslint/utils@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2))
- '@typescript-eslint/scope-manager': 8.24.1
- '@typescript-eslint/types': 8.24.1
- '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3)
+ '@eslint-community/eslint-utils': 4.5.1(eslint@9.21.0(jiti@2.4.2))
+ '@typescript-eslint/scope-manager': 8.29.0
+ '@typescript-eslint/types': 8.29.0
+ '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.7.3)
eslint: 9.21.0(jiti@2.4.2)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.24.1':
+ '@typescript-eslint/visitor-keys@8.29.0':
dependencies:
- '@typescript-eslint/types': 8.24.1
+ '@typescript-eslint/types': 8.29.0
eslint-visitor-keys: 4.2.0
+ '@unrs/resolver-binding-darwin-arm64@1.3.3':
+ optional: true
+
+ '@unrs/resolver-binding-darwin-x64@1.3.3':
+ optional: true
+
+ '@unrs/resolver-binding-freebsd-x64@1.3.3':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm-gnueabihf@1.3.3':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm-musleabihf@1.3.3':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm64-gnu@1.3.3':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm64-musl@1.3.3':
+ optional: true
+
+ '@unrs/resolver-binding-linux-ppc64-gnu@1.3.3':
+ optional: true
+
+ '@unrs/resolver-binding-linux-s390x-gnu@1.3.3':
+ optional: true
+
+ '@unrs/resolver-binding-linux-x64-gnu@1.3.3':
+ optional: true
+
+ '@unrs/resolver-binding-linux-x64-musl@1.3.3':
+ optional: true
+
+ '@unrs/resolver-binding-wasm32-wasi@1.3.3':
+ dependencies:
+ '@napi-rs/wasm-runtime': 0.2.8
+ optional: true
+
+ '@unrs/resolver-binding-win32-arm64-msvc@1.3.3':
+ optional: true
+
+ '@unrs/resolver-binding-win32-ia32-msvc@1.3.3':
+ optional: true
+
+ '@unrs/resolver-binding-win32-x64-msvc@1.3.3':
+ optional: true
+
acorn-jsx@5.3.2(acorn@8.14.0):
dependencies:
acorn: 8.14.0
@@ -3900,16 +4079,16 @@ snapshots:
escape-string-regexp@4.0.0: {}
- eslint-config-next@15.1.7(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3):
+ eslint-config-next@15.2.4(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3):
dependencies:
- '@next/eslint-plugin-next': 15.1.7
- '@rushstack/eslint-patch': 1.10.5
- '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
- '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
+ '@next/eslint-plugin-next': 15.2.4
+ '@rushstack/eslint-patch': 1.11.0
+ '@typescript-eslint/eslint-plugin': 8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
+ '@typescript-eslint/parser': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
eslint: 9.21.0(jiti@2.4.2)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.8.2(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2))
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2))
+ eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2))
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2))
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.21.0(jiti@2.4.2))
eslint-plugin-react: 7.37.4(eslint@9.21.0(jiti@2.4.2))
eslint-plugin-react-hooks: 5.1.0(eslint@9.21.0(jiti@2.4.2))
@@ -3932,33 +4111,33 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.8.2(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)):
+ eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.0
- enhanced-resolve: 5.18.1
eslint: 9.21.0(jiti@2.4.2)
get-tsconfig: 4.10.0
- is-bun-module: 1.3.0
- stable-hash: 0.0.4
- tinyglobby: 0.2.11
+ is-bun-module: 2.0.0
+ stable-hash: 0.0.5
+ tinyglobby: 0.2.12
+ unrs-resolver: 1.3.3
optionalDependencies:
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2))
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2))
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)):
+ eslint-module-utils@2.12.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2)):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
+ '@typescript-eslint/parser': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
eslint: 9.21.0(jiti@2.4.2)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.8.2(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2))
+ eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2))
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)):
+ eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@@ -3969,7 +4148,7 @@ snapshots:
doctrine: 2.1.0
eslint: 9.21.0(jiti@2.4.2)
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2))
+ eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -3981,7 +4160,7 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
+ '@typescript-eslint/parser': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
@@ -4139,9 +4318,9 @@ snapshots:
fast-levenshtein@2.0.6: {}
- fastq@1.19.0:
+ fastq@1.19.1:
dependencies:
- reusify: 1.0.4
+ reusify: 1.1.0
fdir@6.4.3(picomatch@4.0.2):
optionalDependencies:
@@ -4417,7 +4596,7 @@ snapshots:
call-bound: 1.0.3
has-tostringtag: 1.0.2
- is-bun-module@1.3.0:
+ is-bun-module@2.0.0:
dependencies:
semver: 7.7.1
@@ -5106,7 +5285,7 @@ snapshots:
dependencies:
lowercase-keys: 3.0.0
- reusify@1.0.4: {}
+ reusify@1.1.0: {}
rfc4648@1.5.4: {}
@@ -5268,7 +5447,7 @@ snapshots:
cpu-features: 0.0.10
nan: 2.22.0
- stable-hash@0.0.4: {}
+ stable-hash@0.0.5: {}
stack-trace@0.0.10: {}
@@ -5428,7 +5607,7 @@ snapshots:
tiny-invariant@1.3.3: {}
- tinyglobby@0.2.11:
+ tinyglobby@0.2.12:
dependencies:
fdir: 6.4.3(picomatch@4.0.2)
picomatch: 4.0.2
@@ -5459,7 +5638,7 @@ snapshots:
triple-beam@1.4.1: {}
- ts-api-utils@2.0.1(typescript@5.7.3):
+ ts-api-utils@2.1.0(typescript@5.7.3):
dependencies:
typescript: 5.7.3
@@ -5524,6 +5703,24 @@ snapshots:
unpipe@1.0.0: {}
+ unrs-resolver@1.3.3:
+ optionalDependencies:
+ '@unrs/resolver-binding-darwin-arm64': 1.3.3
+ '@unrs/resolver-binding-darwin-x64': 1.3.3
+ '@unrs/resolver-binding-freebsd-x64': 1.3.3
+ '@unrs/resolver-binding-linux-arm-gnueabihf': 1.3.3
+ '@unrs/resolver-binding-linux-arm-musleabihf': 1.3.3
+ '@unrs/resolver-binding-linux-arm64-gnu': 1.3.3
+ '@unrs/resolver-binding-linux-arm64-musl': 1.3.3
+ '@unrs/resolver-binding-linux-ppc64-gnu': 1.3.3
+ '@unrs/resolver-binding-linux-s390x-gnu': 1.3.3
+ '@unrs/resolver-binding-linux-x64-gnu': 1.3.3
+ '@unrs/resolver-binding-linux-x64-musl': 1.3.3
+ '@unrs/resolver-binding-wasm32-wasi': 1.3.3
+ '@unrs/resolver-binding-win32-arm64-msvc': 1.3.3
+ '@unrs/resolver-binding-win32-ia32-msvc': 1.3.3
+ '@unrs/resolver-binding-win32-x64-msvc': 1.3.3
+
urbackup-server-api@0.8.9:
dependencies:
async-mutex: 0.3.2
From dbc26e835c25b519086304999bf94e9db17647c0 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 1 Apr 2025 09:36:44 -0700
Subject: [PATCH 88/93] Chore(deps): Bump swr from 1.3.0 to 2.3.3 (#5111)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 29 +++++++++++++++++++++++------
2 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/package.json b/package.json
index 53d1e770..96772f7f 100644
--- a/package.json
+++ b/package.json
@@ -36,7 +36,7 @@
"react-icons": "^5.4.0",
"recharts": "^2.15.1",
"rrule": "^2.8.1",
- "swr": "^1.3.0",
+ "swr": "^2.3.3",
"systeminformation": "^5.25.11",
"tough-cookie": "^5.1.2",
"urbackup-server-api": "^0.8.9",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d2eabfe9..938fd85b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -84,8 +84,8 @@ importers:
specifier: ^2.8.1
version: 2.8.1
swr:
- specifier: ^1.3.0
- version: 1.3.0(react@18.3.1)
+ specifier: ^2.3.3
+ version: 2.3.3(react@18.3.1)
systeminformation:
specifier: ^5.25.11
version: 5.25.11
@@ -1190,6 +1190,10 @@ packages:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
detect-libc@1.0.3:
resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
engines: {node: '>=0.10'}
@@ -2628,10 +2632,10 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- swr@1.3.0:
- resolution: {integrity: sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==}
+ swr@2.3.3:
+ resolution: {integrity: sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==}
peerDependencies:
- react: ^16.11.0 || ^17.0.0 || ^18.0.0
+ react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
synckit@0.9.2:
resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==}
@@ -2770,6 +2774,11 @@ packages:
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ use-sync-external-store@1.5.0:
+ resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@@ -3899,6 +3908,8 @@ snapshots:
depd@2.0.0: {}
+ dequal@2.0.3: {}
+
detect-libc@1.0.3: {}
detect-libc@2.0.3:
@@ -5557,9 +5568,11 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
- swr@1.3.0(react@18.3.1):
+ swr@2.3.3(react@18.3.1):
dependencies:
+ dequal: 2.0.3
react: 18.3.1
+ use-sync-external-store: 1.5.0(react@18.3.1)
synckit@0.9.2:
dependencies:
@@ -5732,6 +5745,10 @@ snapshots:
dependencies:
punycode: 2.3.1
+ use-sync-external-store@1.5.0(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+
util-deprecate@1.0.2: {}
uuid@10.0.0: {}
From 52399e21e137264c944078f1bb54ab0a77dee816 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Tue, 1 Apr 2025 09:48:28 -0700
Subject: [PATCH 89/93] Fix depth issue with t
---
src/components/quicklaunch.jsx | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/components/quicklaunch.jsx b/src/components/quicklaunch.jsx
index 14f0f4fb..7278647f 100644
--- a/src/components/quicklaunch.jsx
+++ b/src/components/quicklaunch.jsx
@@ -204,7 +204,8 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea
return () => {
abortController.abort();
};
- }, [searchString, servicesAndBookmarks, searchDescriptions, hideVisitURL, searchSuggestions, searchProvider, url, t]);
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [searchString, servicesAndBookmarks, searchDescriptions, hideVisitURL, searchSuggestions, searchProvider, url]);
const [hidden, setHidden] = useState(true);
useEffect(() => {
From 6597ec566bb164b8815b8cfbfbf79af1632b545e Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Tue, 1 Apr 2025 09:52:33 -0700
Subject: [PATCH 90/93] Fix translation issue
---
src/components/quicklaunch.jsx | 2 +-
src/components/services/ping.jsx | 2 +-
src/components/services/site-monitor.jsx | 2 +-
src/components/services/status.jsx | 2 +-
src/components/services/widget/error.jsx | 2 +-
src/components/widgets/widget/error.jsx | 2 +-
src/widgets/lubelogger/component.jsx | 2 +-
src/widgets/prowlarr/component.jsx | 2 +-
8 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/components/quicklaunch.jsx b/src/components/quicklaunch.jsx
index 7278647f..a9827659 100644
--- a/src/components/quicklaunch.jsx
+++ b/src/components/quicklaunch.jsx
@@ -1,6 +1,6 @@
import classNames from "classnames";
+import { useTranslation } from "next-i18next";
import { useCallback, useContext, useEffect, useRef, useState } from "react";
-import { useTranslation } from "react-i18next";
import useSWR from "swr";
import { SettingsContext } from "utils/contexts/settings";
diff --git a/src/components/services/ping.jsx b/src/components/services/ping.jsx
index 670f9d4b..f8665e33 100644
--- a/src/components/services/ping.jsx
+++ b/src/components/services/ping.jsx
@@ -1,4 +1,4 @@
-import { useTranslation } from "react-i18next";
+import { useTranslation } from "next-i18next";
import useSWR from "swr";
export default function Ping({ groupName, serviceName, style }) {
diff --git a/src/components/services/site-monitor.jsx b/src/components/services/site-monitor.jsx
index 4dceb44c..79496f65 100644
--- a/src/components/services/site-monitor.jsx
+++ b/src/components/services/site-monitor.jsx
@@ -1,4 +1,4 @@
-import { useTranslation } from "react-i18next";
+import { useTranslation } from "next-i18next";
import useSWR from "swr";
export default function SiteMonitor({ groupName, serviceName, style }) {
diff --git a/src/components/services/status.jsx b/src/components/services/status.jsx
index 3a6f3b33..2688ca0f 100644
--- a/src/components/services/status.jsx
+++ b/src/components/services/status.jsx
@@ -1,4 +1,4 @@
-import { useTranslation } from "react-i18next";
+import { useTranslation } from "next-i18next";
import useSWR from "swr";
export default function Status({ service, style }) {
diff --git a/src/components/services/widget/error.jsx b/src/components/services/widget/error.jsx
index 30c41283..0d4757d3 100644
--- a/src/components/services/widget/error.jsx
+++ b/src/components/services/widget/error.jsx
@@ -1,4 +1,4 @@
-import { useTranslation } from "react-i18next";
+import { useTranslation } from "next-i18next";
import { IoAlertCircle } from "react-icons/io5";
function displayError(error) {
diff --git a/src/components/widgets/widget/error.jsx b/src/components/widgets/widget/error.jsx
index e454256f..e0e8b1e1 100644
--- a/src/components/widgets/widget/error.jsx
+++ b/src/components/widgets/widget/error.jsx
@@ -1,4 +1,4 @@
-import { useTranslation } from "react-i18next";
+import { useTranslation } from "next-i18next";
import { BiError } from "react-icons/bi";
import Container from "./container";
diff --git a/src/widgets/lubelogger/component.jsx b/src/widgets/lubelogger/component.jsx
index 390b74ea..5ec88983 100644
--- a/src/widgets/lubelogger/component.jsx
+++ b/src/widgets/lubelogger/component.jsx
@@ -1,6 +1,6 @@
import Block from "components/services/widget/block";
import Container from "components/services/widget/container";
-import { useTranslation } from "react-i18next";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
diff --git a/src/widgets/prowlarr/component.jsx b/src/widgets/prowlarr/component.jsx
index 13d388f7..e454c1a7 100644
--- a/src/widgets/prowlarr/component.jsx
+++ b/src/widgets/prowlarr/component.jsx
@@ -1,6 +1,6 @@
import Block from "components/services/widget/block";
import Container from "components/services/widget/container";
-import { useTranslation } from "react-i18next";
+import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
From ae9fbdcb8bae4c00388aca132faa67d6b33069e1 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sat, 5 Apr 2025 23:54:48 -0700
Subject: [PATCH 91/93] Chore: change hoarder widget to karakeep (#5143)
---
docs/widgets/services/hoarder.md | 17 -------
docs/widgets/services/index.md | 2 +-
docs/widgets/services/karakeep.md | 17 +++++++
mkdocs.yml | 2 +-
public/locales/en/common.json | 2 +-
src/components/services/widget/container.jsx | 17 ++++++-
src/utils/proxy/handlers/credentialed.js | 1 +
src/widgets/components.js | 3 +-
src/widgets/hoarder/component.jsx | 49 --------------------
src/widgets/karakeep/component.jsx | 49 ++++++++++++++++++++
src/widgets/{hoarder => karakeep}/widget.js | 0
src/widgets/widgets.js | 5 +-
12 files changed, 91 insertions(+), 73 deletions(-)
delete mode 100644 docs/widgets/services/hoarder.md
create mode 100644 docs/widgets/services/karakeep.md
delete mode 100644 src/widgets/hoarder/component.jsx
create mode 100644 src/widgets/karakeep/component.jsx
rename src/widgets/{hoarder => karakeep}/widget.js (100%)
diff --git a/docs/widgets/services/hoarder.md b/docs/widgets/services/hoarder.md
deleted file mode 100644
index 3e8c82ad..00000000
--- a/docs/widgets/services/hoarder.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Hoarder
-description: Hoarder Widget Configuration
----
-
-Learn more about [Hoarder](https://hoarder.app).
-
-Generate an API key for your user at `User Settings > API Keys`.
-
-Allowed fields: `["bookmarks", "favorites", "archived", "highlights", "lists", "tags"]` (maximum of 4).
-
-```yaml
-widget:
- type: hoarder
- url: http[s]://hoarder.host.or.ip[:port]
- key: hoarderapikey
-```
diff --git a/docs/widgets/services/index.md b/docs/widgets/services/index.md
index beb6d491..80ff72ba 100644
--- a/docs/widgets/services/index.md
+++ b/docs/widgets/services/index.md
@@ -51,7 +51,7 @@ You can also find a list of all available service widgets in the sidebar navigat
- [HDHomeRun](hdhomerun.md)
- [Headscale](headscale.md)
- [Healthchecks](healthchecks.md)
-- [Hoarder](hoarder.md)
+- [Karakeep](karakeep.md)
- [Home Assistant](homeassistant.md)
- [HomeBox](homebox.md)
- [Homebridge](homebridge.md)
diff --git a/docs/widgets/services/karakeep.md b/docs/widgets/services/karakeep.md
new file mode 100644
index 00000000..a2902315
--- /dev/null
+++ b/docs/widgets/services/karakeep.md
@@ -0,0 +1,17 @@
+---
+title: Karakeep
+description: Karakeep Widget Configuration
+---
+
+Learn more about [Karakeep](https://karakeep.app) (formerly known as Hoarder).
+
+Generate an API key for your user at `User Settings > API Keys`.
+
+Allowed fields: `["bookmarks", "favorites", "archived", "highlights", "lists", "tags"]` (maximum of 4).
+
+```yaml
+widget:
+ type: karakeep
+ url: http[s]://karakeep.host.or.ip[:port]
+ key: karakeep_api_key
+```
diff --git a/mkdocs.yml b/mkdocs.yml
index 01a5295b..8bb19e43 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -74,7 +74,7 @@ nav:
- widgets/services/hdhomerun.md
- widgets/services/headscale.md
- widgets/services/healthchecks.md
- - widgets/services/hoarder.md
+ - widgets/services/karakeep.md
- widgets/services/homeassistant.md
- widgets/services/homebox.md
- widgets/services/homebridge.md
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 4a9c33d5..09b9c2d3 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -1024,7 +1024,7 @@
"bcharge":"Battery Charge",
"timeleft":"Time Left"
},
- "hoarder": {
+ "karakeep": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
diff --git a/src/components/services/widget/container.jsx b/src/components/services/widget/container.jsx
index 9b10233c..f5957382 100644
--- a/src/components/services/widget/container.jsx
+++ b/src/components/services/widget/container.jsx
@@ -3,6 +3,11 @@ import { SettingsContext } from "utils/contexts/settings";
import Error from "./error";
+const ALIASED_WIDGETS = {
+ pialert: "netalertx",
+ hoarder: "karakeep",
+};
+
export default function Container({ error = false, children, service }) {
const { settings } = useContext(SettingsContext);
@@ -32,7 +37,17 @@ export default function Container({ error = false, children, service }) {
if (!field.includes(".")) {
fullField = `${type}.${field}`;
}
- return fullField === child?.props?.label;
+ let matches = fullField === child?.props?.label;
+ // check if the field is an 'alias'
+ if (matches) {
+ return true;
+ } else if (ALIASED_WIDGETS[type]) {
+ matches = fullField.replace(type, ALIASED_WIDGETS[type]) === child?.props?.label;
+
+ return matches;
+ }
+ // no match
+ return false;
}),
);
}
diff --git a/src/utils/proxy/handlers/credentialed.js b/src/utils/proxy/handlers/credentialed.js
index d0dbc2d6..017d44c9 100644
--- a/src/utils/proxy/handlers/credentialed.js
+++ b/src/utils/proxy/handlers/credentialed.js
@@ -42,6 +42,7 @@ export default async function credentialedProxyHandler(req, res, map) {
"ghostfolio",
"headscale",
"hoarder",
+ "karakeep",
"linkwarden",
"mealie",
"netalertx",
diff --git a/src/widgets/components.js b/src/widgets/components.js
index 148a626b..880c8222 100644
--- a/src/widgets/components.js
+++ b/src/widgets/components.js
@@ -47,7 +47,8 @@ const components = {
grafana: dynamic(() => import("./grafana/component")),
hdhomerun: dynamic(() => import("./hdhomerun/component")),
headscale: dynamic(() => import("./headscale/component")),
- hoarder: dynamic(() => import("./hoarder/component")),
+ hoarder: dynamic(() => import("./karakeep/component")),
+ karakeep: dynamic(() => import("./karakeep/component")),
peanut: dynamic(() => import("./peanut/component")),
homeassistant: dynamic(() => import("./homeassistant/component")),
homebox: dynamic(() => import("./homebox/component")),
diff --git a/src/widgets/hoarder/component.jsx b/src/widgets/hoarder/component.jsx
deleted file mode 100644
index 4be6fbab..00000000
--- a/src/widgets/hoarder/component.jsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import Block from "components/services/widget/block";
-import Container from "components/services/widget/container";
-import { useTranslation } from "next-i18next";
-
-import useWidgetAPI from "utils/proxy/use-widget-api";
-
-export const hoarderDefaultFields = ["bookmarks", "favorites", "archived", "highlights"];
-const MAX_ALLOWED_FIELDS = 4;
-
-export default function Component({ service }) {
- const { t } = useTranslation();
- const { widget } = service;
-
- const { data: statsData, error: statsError } = useWidgetAPI(widget, "stats");
-
- if (statsError) {
- return ;
- }
-
- if (!widget.fields || widget.fields.length === 0) {
- widget.fields = hoarderDefaultFields;
- } else if (widget.fields?.length > MAX_ALLOWED_FIELDS) {
- widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS);
- }
-
- if (!statsData) {
- return (
-
-
-
-
-
-
-
-
- );
- }
-
- return (
-
-
-
-
-
-
-
-
- );
-}
diff --git a/src/widgets/karakeep/component.jsx b/src/widgets/karakeep/component.jsx
new file mode 100644
index 00000000..8a74662d
--- /dev/null
+++ b/src/widgets/karakeep/component.jsx
@@ -0,0 +1,49 @@
+import Block from "components/services/widget/block";
+import Container from "components/services/widget/container";
+import { useTranslation } from "next-i18next";
+
+import useWidgetAPI from "utils/proxy/use-widget-api";
+
+export const karakeepDefaultFields = ["bookmarks", "favorites", "archived", "highlights"];
+const MAX_ALLOWED_FIELDS = 4;
+
+export default function Component({ service }) {
+ const { t } = useTranslation();
+ const { widget } = service;
+
+ const { data: statsData, error: statsError } = useWidgetAPI(widget, "stats");
+
+ if (statsError) {
+ return ;
+ }
+
+ if (!widget.fields || widget.fields.length === 0) {
+ widget.fields = karakeepDefaultFields;
+ } else if (widget.fields?.length > MAX_ALLOWED_FIELDS) {
+ widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS);
+ }
+
+ if (!statsData) {
+ return (
+
+
+
+
+
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/widgets/hoarder/widget.js b/src/widgets/karakeep/widget.js
similarity index 100%
rename from src/widgets/hoarder/widget.js
rename to src/widgets/karakeep/widget.js
diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js
index 992855d0..e183a9c6 100644
--- a/src/widgets/widgets.js
+++ b/src/widgets/widgets.js
@@ -42,7 +42,6 @@ import grafana from "./grafana/widget";
import hdhomerun from "./hdhomerun/widget";
import headscale from "./headscale/widget";
import healthchecks from "./healthchecks/widget";
-import hoarder from "./hoarder/widget";
import homeassistant from "./homeassistant/widget";
import homebox from "./homebox/widget";
import homebridge from "./homebridge/widget";
@@ -50,6 +49,7 @@ import immich from "./immich/widget";
import jackett from "./jackett/widget";
import jdownloader from "./jdownloader/widget";
import jellyseerr from "./jellyseerr/widget";
+import karakeep from "./karakeep/widget";
import kavita from "./kavita/widget";
import komga from "./komga/widget";
import kopia from "./kopia/widget";
@@ -178,7 +178,8 @@ const widgets = {
grafana,
hdhomerun,
headscale,
- hoarder,
+ hoarder: karakeep,
+ karakeep,
homeassistant,
homebox,
homebridge,
From e2c997f29d10cd6dddb60d17e8205b7ab55c8942 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Mon, 7 Apr 2025 23:59:22 -0700
Subject: [PATCH 92/93] Change: install iputils-ping inside docker image
(#5153)
---
Dockerfile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Dockerfile b/Dockerfile
index ec59c6b0..cac7623e 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -49,7 +49,7 @@ COPY --link --chmod=755 docker-entrypoint.sh /usr/local/bin/
COPY --link --from=builder --chown=1000:1000 /app/.next/standalone/ ./
COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static
-RUN apk add --no-cache su-exec
+RUN apk add --no-cache su-exec iputils-ping
ENV NODE_ENV=production
ENV HOSTNAME=0.0.0.0
From 0a1bf3b2be10220e5ee5ec8de7578f8f35bedd7f Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 8 Apr 2025 15:08:54 -0700
Subject: [PATCH 93/93] Chore(deps): Bump next from 15.2.3 to 15.2.4 (#5159)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 106 +++++++++++++++++++++++--------------------------
2 files changed, 50 insertions(+), 58 deletions(-)
diff --git a/package.json b/package.json
index 96772f7f..0c3afd92 100644
--- a/package.json
+++ b/package.json
@@ -25,7 +25,7 @@
"luxon": "^3.5.0",
"memory-cache": "^0.2.0",
"minecraftstatuspinger": "^1.2.2",
- "next": "^15.2.3",
+ "next": "^15.2.4",
"next-i18next": "^12.1.0",
"ping": "^0.4.4",
"pretty-bytes": "^6.1.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 938fd85b..170e380e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -51,11 +51,11 @@ importers:
specifier: ^1.2.2
version: 1.2.2
next:
- specifier: ^15.2.3
- version: 15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^15.2.4
+ version: 15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-i18next:
specifier: ^12.1.0
- version: 12.1.0(next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 12.1.0(next@15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
ping:
specifier: ^0.4.4
version: 0.4.4
@@ -182,9 +182,6 @@ packages:
'@emnapi/core@1.4.0':
resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==}
- '@emnapi/runtime@1.3.1':
- resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==}
-
'@emnapi/runtime@1.4.0':
resolution: {integrity: sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==}
@@ -401,56 +398,56 @@ packages:
'@napi-rs/wasm-runtime@0.2.8':
resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==}
- '@next/env@15.2.3':
- resolution: {integrity: sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==}
+ '@next/env@15.2.4':
+ resolution: {integrity: sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==}
'@next/eslint-plugin-next@15.2.4':
resolution: {integrity: sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ==}
- '@next/swc-darwin-arm64@15.2.3':
- resolution: {integrity: sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==}
+ '@next/swc-darwin-arm64@15.2.4':
+ resolution: {integrity: sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@next/swc-darwin-x64@15.2.3':
- resolution: {integrity: sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==}
+ '@next/swc-darwin-x64@15.2.4':
+ resolution: {integrity: sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@next/swc-linux-arm64-gnu@15.2.3':
- resolution: {integrity: sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==}
+ '@next/swc-linux-arm64-gnu@15.2.4':
+ resolution: {integrity: sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-arm64-musl@15.2.3':
- resolution: {integrity: sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==}
+ '@next/swc-linux-arm64-musl@15.2.4':
+ resolution: {integrity: sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-x64-gnu@15.2.3':
- resolution: {integrity: sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==}
+ '@next/swc-linux-x64-gnu@15.2.4':
+ resolution: {integrity: sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-linux-x64-musl@15.2.3':
- resolution: {integrity: sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==}
+ '@next/swc-linux-x64-musl@15.2.4':
+ resolution: {integrity: sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-win32-arm64-msvc@15.2.3':
- resolution: {integrity: sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==}
+ '@next/swc-win32-arm64-msvc@15.2.4':
+ resolution: {integrity: sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@next/swc-win32-x64-msvc@15.2.3':
- resolution: {integrity: sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==}
+ '@next/swc-win32-x64-msvc@15.2.4':
+ resolution: {integrity: sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -985,8 +982,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- caniuse-lite@1.0.30001706:
- resolution: {integrity: sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==}
+ caniuse-lite@1.0.30001712:
+ resolution: {integrity: sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==}
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -2085,8 +2082,8 @@ packages:
next: '>= 10.0.0'
react: '>= 16.8.0'
- next@15.2.3:
- resolution: {integrity: sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==}
+ next@15.2.4:
+ resolution: {integrity: sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true
peerDependencies:
@@ -2918,11 +2915,6 @@ snapshots:
tslib: 2.8.1
optional: true
- '@emnapi/runtime@1.3.1':
- dependencies:
- tslib: 2.8.1
- optional: true
-
'@emnapi/runtime@1.4.0':
dependencies:
tslib: 2.8.1
@@ -3078,7 +3070,7 @@ snapshots:
'@img/sharp-wasm32@0.33.5':
dependencies:
- '@emnapi/runtime': 1.3.1
+ '@emnapi/runtime': 1.4.0
optional: true
'@img/sharp-win32-ia32@0.33.5':
@@ -3142,34 +3134,34 @@ snapshots:
'@tybys/wasm-util': 0.9.0
optional: true
- '@next/env@15.2.3': {}
+ '@next/env@15.2.4': {}
'@next/eslint-plugin-next@15.2.4':
dependencies:
fast-glob: 3.3.1
- '@next/swc-darwin-arm64@15.2.3':
+ '@next/swc-darwin-arm64@15.2.4':
optional: true
- '@next/swc-darwin-x64@15.2.3':
+ '@next/swc-darwin-x64@15.2.4':
optional: true
- '@next/swc-linux-arm64-gnu@15.2.3':
+ '@next/swc-linux-arm64-gnu@15.2.4':
optional: true
- '@next/swc-linux-arm64-musl@15.2.3':
+ '@next/swc-linux-arm64-musl@15.2.4':
optional: true
- '@next/swc-linux-x64-gnu@15.2.3':
+ '@next/swc-linux-x64-gnu@15.2.4':
optional: true
- '@next/swc-linux-x64-musl@15.2.3':
+ '@next/swc-linux-x64-musl@15.2.4':
optional: true
- '@next/swc-win32-arm64-msvc@15.2.3':
+ '@next/swc-win32-arm64-msvc@15.2.4':
optional: true
- '@next/swc-win32-x64-msvc@15.2.3':
+ '@next/swc-win32-x64-msvc@15.2.4':
optional: true
'@nodelib/fs.scandir@2.1.5':
@@ -3703,7 +3695,7 @@ snapshots:
callsites@3.1.0: {}
- caniuse-lite@1.0.30001706: {}
+ caniuse-lite@1.0.30001712: {}
chalk@4.1.2:
dependencies:
@@ -4913,7 +4905,7 @@ snapshots:
natural-compare@1.4.0: {}
- next-i18next@12.1.0(next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ next-i18next@12.1.0(next@15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@babel/runtime': 7.26.9
'@types/hoist-non-react-statics': 3.3.6
@@ -4921,33 +4913,33 @@ snapshots:
hoist-non-react-statics: 3.3.2
i18next: 21.10.0
i18next-fs-backend: 1.2.0
- next: 15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ next: 15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
react-i18next: 11.18.6(i18next@21.10.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
transitivePeerDependencies:
- react-dom
- react-native
- next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ next@15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- '@next/env': 15.2.3
+ '@next/env': 15.2.4
'@swc/counter': 0.1.3
'@swc/helpers': 0.5.15
busboy: 1.6.0
- caniuse-lite: 1.0.30001706
+ caniuse-lite: 1.0.30001712
postcss: 8.4.31
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
styled-jsx: 5.1.6(react@18.3.1)
optionalDependencies:
- '@next/swc-darwin-arm64': 15.2.3
- '@next/swc-darwin-x64': 15.2.3
- '@next/swc-linux-arm64-gnu': 15.2.3
- '@next/swc-linux-arm64-musl': 15.2.3
- '@next/swc-linux-x64-gnu': 15.2.3
- '@next/swc-linux-x64-musl': 15.2.3
- '@next/swc-win32-arm64-msvc': 15.2.3
- '@next/swc-win32-x64-msvc': 15.2.3
+ '@next/swc-darwin-arm64': 15.2.4
+ '@next/swc-darwin-x64': 15.2.4
+ '@next/swc-linux-arm64-gnu': 15.2.4
+ '@next/swc-linux-arm64-musl': 15.2.4
+ '@next/swc-linux-x64-gnu': 15.2.4
+ '@next/swc-linux-x64-musl': 15.2.4
+ '@next/swc-win32-arm64-msvc': 15.2.4
+ '@next/swc-win32-x64-msvc': 15.2.4
sharp: 0.33.5
transitivePeerDependencies:
- '@babel/core'