diff --git a/src/components/quicklaunch.jsx b/src/components/quicklaunch.jsx
index 077e6c5c..1836e9b7 100644
--- a/src/components/quicklaunch.jsx
+++ b/src/components/quicklaunch.jsx
@@ -2,7 +2,7 @@ import { useTranslation } from "react-i18next";
import { useEffect, useState, useRef, useCallback, useContext } from "react";
import classNames from "classnames";
-import { resolveIcon } from "./services/item";
+import ResolvedIcon from "./resolvedicon";
import { SettingsContext } from "utils/contexts/settings";
@@ -135,7 +135,7 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
)} onClick={handleItemClick}>
- {r.icon && resolveIcon(r.icon)}
+ {r.icon && }
{r.abbr && r.abbr}
diff --git a/src/components/resolvedicon.jsx b/src/components/resolvedicon.jsx
new file mode 100644
index 00000000..d5aa8c88
--- /dev/null
+++ b/src/components/resolvedicon.jsx
@@ -0,0 +1,35 @@
+import Image from "next/future/image";
+
+export default function ResolvedIcon({ icon }) {
+ // direct or relative URLs
+ if (icon.startsWith("http") || icon.startsWith("/")) {
+ return
;
+ }
+
+ // mdi- prefixed, material design icons
+ if (icon.startsWith("mdi-")) {
+ const iconName = icon.replace("mdi-", "").replace(".svg", "");
+ return (
+
+ );
+ }
+
+ // fallback to dashboard-icons
+ const iconName = icon.replace(".png", "");
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/src/components/services/group.jsx b/src/components/services/group.jsx
index 2220f9df..13b745fd 100644
--- a/src/components/services/group.jsx
+++ b/src/components/services/group.jsx
@@ -1,8 +1,7 @@
-import Image from "next/future/image";
import classNames from "classnames";
import List from "components/services/list";
-import resolveIcon from "utils/icon-resolver";
+import ResolvedIcon from "components/resolvedicon";
export default function ServicesGroup({ services, layout }) {
return (
@@ -14,11 +13,12 @@ export default function ServicesGroup({ services, layout }) {
)}
>
- {layout?.icon &&
-
- }
-
{services.name}
-
+ {layout?.icon &&
+
+
+
+ }
+
{services.name}
diff --git a/src/components/services/item.jsx b/src/components/services/item.jsx
index fc1ef9a4..56ed2b4b 100644
--- a/src/components/services/item.jsx
+++ b/src/components/services/item.jsx
@@ -6,7 +6,7 @@ import Widget from "./widget";
import Docker from "widgets/docker/component";
import { SettingsContext } from "utils/contexts/settings";
-import resolveIcon from "utils/icon-resolver";
+import ResolvedIcon from "components/resolvedicon";
export default function Item({ service }) {
const hasLink = service.href && service.href !== "#";
@@ -41,10 +41,12 @@ export default function Item({ service }) {
rel="noreferrer"
className="flex-shrink-0 flex items-center justify-center w-12 "
>
- {resolveIcon(service.icon)}
+
) : (
-
{resolveIcon(service.icon)}
+
+
+
))}
{hasLink ? (
diff --git a/src/utils/icon-resolver.js b/src/utils/icon-resolver.js
deleted file mode 100644
index c88fae09..00000000
--- a/src/utils/icon-resolver.js
+++ /dev/null
@@ -1,15 +0,0 @@
-export default function resolveIcon(icon) {
- if (icon.startsWith("http")) {
- return `/api/proxy?url=${encodeURIComponent(icon)}`;
- }
-
- if (icon.startsWith("/")) {
- return icon;
- }
-
- if (icon.endsWith(".png")) {
- return `https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/${icon}`;
- }
-
- return `https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/${icon}.png`;
-}
\ No newline at end of file