From f79d7ff03a274d14a91271f601af718f937fbebe Mon Sep 17 00:00:00 2001 From: Sergio <77530549+sergi0g@users.noreply.github.com> Date: Sat, 15 Feb 2025 12:50:59 +0200 Subject: [PATCH] Switch to Lucide Icons --- web/bun.lockb | Bin 125855 -> 125523 bytes web/package.json | 2 +- web/src/components/CodeBlock.tsx | 6 ++--- web/src/components/Image.tsx | 44 +++++++++++++------------------ web/src/components/Loading.tsx | 4 +-- web/src/components/Search.tsx | 6 ++--- web/src/components/Server.tsx | 4 +-- web/src/components/Statistic.tsx | 15 ++++------- 8 files changed, 34 insertions(+), 47 deletions(-) diff --git a/web/bun.lockb b/web/bun.lockb index 84d2b9b396b62057b4493b6e731df54dc4fb529e..407add8fdad3a1738923c01c39da9aa99a199ffd 100755 GIT binary patch delta 18776 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 delta 18936 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 diff --git a/web/package.json b/web/package.json index c82976a..a872d85 100644 --- a/web/package.json +++ b/web/package.json @@ -13,10 +13,10 @@ "dependencies": { "@headlessui/react": "^2.1.10", "@radix-ui/react-tooltip": "^1.1.2", - "@tabler/icons-react": "^3.14.0", "caniuse-lite": "^1.0.30001698", "clsx": "^2.1.1", "date-fns": "^3.6.0", + "lucide-react": "^0.475.0", "react": "^18.3.1", "react-dom": "^18.3.1", "tailwind-merge": "^2.5.2", diff --git a/web/src/components/CodeBlock.tsx b/web/src/components/CodeBlock.tsx index 4de3fe1..6f14f63 100644 --- a/web/src/components/CodeBlock.tsx +++ b/web/src/components/CodeBlock.tsx @@ -1,6 +1,6 @@ import { ReactNode, useState } from "react"; import { theme } from "../theme"; -import { IconCheck, IconClipboard } from "@tabler/icons-react"; +import { Clipboard, ClipboardCheck } from "lucide-react"; export function CodeBlock({ children, @@ -29,7 +29,7 @@ export function CodeBlock({ {enableCopy && navigator.clipboard && (copySuccess ? ( - ) : ( @@ -37,7 +37,7 @@ export function CodeBlock({ className={`duration-50 absolute right-3 bg-${theme}-100 py-1 pl-2 opacity-0 transition-opacity group-hover:opacity-100 dark:bg-${theme}-950`} onClick={handleCopy(`docker pull ${children}`)} > - + ))} diff --git a/web/src/components/Image.tsx b/web/src/components/Image.tsx index c1e6a14..f2d161b 100644 --- a/web/src/components/Image.tsx +++ b/web/src/components/Image.tsx @@ -5,19 +5,11 @@ import { DialogPanel, DialogTitle, } from "@headlessui/react"; -import { - IconAlertTriangleFilled, - IconCircleArrowUpFilled, - IconCircleCheckFilled, - IconCube, - IconHelpCircleFilled, - IconStopwatch, - IconX, -} from "@tabler/icons-react"; import { WithTooltip } from "./Tooltip"; import type { Image } from "../types"; import { theme } from "../theme"; import { CodeBlock } from "./CodeBlock"; +import { Box, CircleArrowUp, CircleCheck, HelpCircle, Timer, TriangleAlert, X } from "lucide-react"; const clickable_registries = [ "registry-1.docker.io", @@ -53,7 +45,7 @@ export default function Image({ data }: { data: Image }) { <>
- + Checked in {data.time} ms
{data.result.error && (
- + {data.result.error}
)} @@ -164,7 +156,7 @@ function Icon({ data }: { data: Image }) { text="Unknown" className="ml-auto size-6 shrink-0 text-gray-500" > - + ); case false: @@ -173,7 +165,7 @@ function Icon({ data }: { data: Image }) { text="Up to date" className="ml-auto size-6 shrink-0 text-green-500" > - + ); case true: @@ -185,7 +177,7 @@ function Icon({ data }: { data: Image }) { text="Major Update" className="ml-auto size-6 shrink-0 text-red-500" > - + ); case "minor": @@ -194,7 +186,7 @@ function Icon({ data }: { data: Image }) { text="Minor Update" className="ml-auto size-6 shrink-0 text-yellow-500" > - + ); case "patch": @@ -203,7 +195,7 @@ function Icon({ data }: { data: Image }) { text="Patch Update" className="ml-auto size-6 shrink-0 text-blue-500" > - + ); } @@ -213,7 +205,7 @@ function Icon({ data }: { data: Image }) { text="Update available" className="ml-auto size-6 shrink-0 text-blue-500" > - + ); } @@ -225,14 +217,14 @@ function DialogIcon({ data }: { data: Image }) { case null: return ( <> - + Unknown ); case false: return ( <> - + Up to date ); @@ -242,21 +234,21 @@ function DialogIcon({ data }: { data: Image }) { case "major": return ( <> - + Major update ); case "minor": return ( <> - + Minor update ); case "patch": return ( <> - + Patch update ); @@ -264,7 +256,7 @@ function DialogIcon({ data }: { data: Image }) { } else if (data.result.info?.type === "digest") { return ( <> - + Update available ); diff --git a/web/src/components/Loading.tsx b/web/src/components/Loading.tsx index 907e337..67fe256 100644 --- a/web/src/components/Loading.tsx +++ b/web/src/components/Loading.tsx @@ -1,7 +1,7 @@ -import { IconLoader2 } from "@tabler/icons-react"; import { Data } from "../types"; import Logo from "./Logo"; import { theme } from "../theme"; +import { RefreshCw } from "lucide-react"; export default function Loading({ onLoad }: { onLoad: (data: Data) => void }) { fetch( @@ -28,7 +28,7 @@ export default function Loading({ onLoad }: { onLoad: (data: Data) => void }) {
- Loading + Loading
diff --git a/web/src/components/Search.tsx b/web/src/components/Search.tsx index b4cd82a..ee221a9 100644 --- a/web/src/components/Search.tsx +++ b/web/src/components/Search.tsx @@ -1,6 +1,6 @@ import { ChangeEvent, useState } from "react"; import { theme } from "../theme"; -import { IconSearch, IconX } from "@tabler/icons-react"; +import { SearchIcon, X } from "lucide-react"; export default function Search({ onChange, @@ -27,7 +27,7 @@ export default function Search({
- +
- + )}
diff --git a/web/src/components/Server.tsx b/web/src/components/Server.tsx index c7ccb72..2669d65 100644 --- a/web/src/components/Server.tsx +++ b/web/src/components/Server.tsx @@ -4,7 +4,7 @@ import { DisclosurePanel, } from "@headlessui/react"; import { theme } from "../theme"; -import { IconChevronDown } from "@tabler/icons-react"; +import { ChevronDown } from "lucide-react"; export function Server({ name, @@ -29,7 +29,7 @@ export function Server({ > {name} - diff --git a/web/src/components/Statistic.tsx b/web/src/components/Statistic.tsx index a368c45..c76432c 100644 --- a/web/src/components/Statistic.tsx +++ b/web/src/components/Statistic.tsx @@ -1,9 +1,4 @@ -import { - IconCircleArrowUpFilled, - IconCircleCheckFilled, - IconEyeFilled, - IconHelpCircleFilled, -} from "@tabler/icons-react"; +import { CircleArrowUp, CircleCheck, Eye, HelpCircle } from "lucide-react"; import { theme } from "../theme"; import { Data } from "../types"; @@ -39,14 +34,14 @@ export default function Statistic({ {metrics[name]} {name === "monitored_images" && ( - + )} {name === "up_to_date" && ( - + )} {name === "updates_available" && getUpdatesAvailableIcon(metrics)} {name === "unknown" && ( - + )}
@@ -75,5 +70,5 @@ function getUpdatesAvailableIcon(metrics: Data["metrics"]) { default: color = "text-blue-500"; } - return ; + return ; }