From 3a8a9d926069aaedb47fd693b0de2a67919cdcc3 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Sun, 12 Oct 2025 23:39:43 -0400 Subject: [PATCH] PluginCard: Modified Icon, Tooltips, Update Icon Paths --- scripts/generateEquicordPluginList.ts | 3 + scripts/generatePluginList.ts | 3 + scripts/generateVencordPluginList.ts | 3 + src/components/settings/AddonCard.tsx | 18 ++++- .../settings/tabs/plugins/PluginCard.tsx | 76 ++++++++++--------- .../settings/tabs/plugins/styles.css | 7 ++ src/plugins/noBlockedMessages/index.ts | 1 + src/plugins/showMeYourName/index.tsx | 1 + src/plugins/silentTyping/index.tsx | 1 + src/utils/types.ts | 5 ++ 10 files changed, 79 insertions(+), 39 deletions(-) diff --git a/scripts/generateEquicordPluginList.ts b/scripts/generateEquicordPluginList.ts index f0e9eb85e..37d48929c 100644 --- a/scripts/generateEquicordPluginList.ts +++ b/scripts/generateEquicordPluginList.ts @@ -48,6 +48,7 @@ interface PluginData { target: "discordDesktop" | "vesktop" | "equibop" | "desktop" | "web" | "dev"; filePath: string; dirName: string; + isModified: boolean; } const devs = {} as Record; @@ -150,6 +151,7 @@ async function parseFile(fileName: string) { hasCommands: false, enabledByDefault: false, required: false, + isModified: false, tags: [] as string[] } as PluginData; @@ -219,6 +221,7 @@ async function parseFile(fileName: string) { data.dependencies = (elements as NodeArray).map(e => e.text); break; case "required": + case "isModified": case "enabledByDefault": data[key] = value.kind === SyntaxKind.TrueKeyword; break; diff --git a/scripts/generatePluginList.ts b/scripts/generatePluginList.ts index 521beadac..847020075 100644 --- a/scripts/generatePluginList.ts +++ b/scripts/generatePluginList.ts @@ -48,6 +48,7 @@ interface PluginData { target: "discordDesktop" | "vesktop" | "equibop" | "desktop" | "web" | "dev"; filePath: string; dirName: string; + isModified: boolean; } const devs = {} as Record; @@ -150,6 +151,7 @@ async function parseFile(fileName: string) { hasCommands: false, enabledByDefault: false, required: false, + isModified: false, tags: [] as string[] } as PluginData; @@ -219,6 +221,7 @@ async function parseFile(fileName: string) { data.dependencies = (elements as NodeArray).map(e => e.text); break; case "required": + case "isModified": case "enabledByDefault": data[key] = value.kind === SyntaxKind.TrueKeyword; break; diff --git a/scripts/generateVencordPluginList.ts b/scripts/generateVencordPluginList.ts index b35a93598..94b7b5ef3 100644 --- a/scripts/generateVencordPluginList.ts +++ b/scripts/generateVencordPluginList.ts @@ -48,6 +48,7 @@ interface PluginData { target: "discordDesktop" | "vesktop" | "equibop" | "desktop" | "web" | "dev"; filePath: string; dirName: string; + isModified: boolean; } const devs = {} as Record; const equicordDevs = {} as Record; @@ -149,6 +150,7 @@ async function parseFile(fileName: string) { hasCommands: false, enabledByDefault: false, required: false, + isModified: false, tags: [] as string[] } as PluginData; @@ -218,6 +220,7 @@ async function parseFile(fileName: string) { data.dependencies = (elements as NodeArray).map(e => e.text); break; case "required": + case "isModified": case "enabledByDefault": data[key] = value.kind === SyntaxKind.TrueKeyword; break; diff --git a/src/components/settings/AddonCard.tsx b/src/components/settings/AddonCard.tsx index dde603083..b7acd68b5 100644 --- a/src/components/settings/AddonCard.tsx +++ b/src/components/settings/AddonCard.tsx @@ -22,7 +22,7 @@ import { classNameFactory } from "@api/Styles"; import { BaseText } from "@components/BaseText"; import { AddonBadge } from "@components/settings/PluginBadge"; import { Switch } from "@components/Switch"; -import { useRef } from "@webpack/common"; +import { Tooltip, useRef } from "@webpack/common"; import type { MouseEventHandler, ReactNode } from "react"; import { useTruncatedText } from "./tabs/plugins/components/truncateText"; @@ -37,6 +37,7 @@ interface Props { disabled?: boolean; isNew?: boolean; sourceBadge?: ReactNode; + tooltip?: string; onMouseEnter?: MouseEventHandler; onMouseLeave?: MouseEventHandler; @@ -45,7 +46,7 @@ interface Props { author?: ReactNode; } -export function AddonCard({ disabled, isNew, sourceBadge, name, infoButton, footer, author, enabled, setEnabled, description, onMouseEnter, onMouseLeave }: Props) { +export function AddonCard({ disabled, isNew, sourceBadge, tooltip, name, infoButton, footer, author, enabled, setEnabled, description, onMouseEnter, onMouseLeave }: Props) { const titleRef = useRef(null); const titleContainerRef = useRef(null); const { truncated, containerRef } = useTruncatedText(description ? description.toString() : ""); @@ -75,7 +76,6 @@ export function AddonCard({ disabled, isNew, sourceBadge, name, infoButton, foot {isNew && } - {sourceBadge} {!!author && ( @@ -85,6 +85,18 @@ export function AddonCard({ disabled, isNew, sourceBadge, name, infoButton, foot )} + + {({ onMouseEnter, onMouseLeave }) => ( +
+ {sourceBadge} +
+ )} +
+ {infoButton} isPluginEnabled(plugin.name); @@ -92,48 +94,50 @@ export function PluginCard({ plugin, disabled, onRestartNeeded, onMouseEnter, on settings.enabled = !wasEnabled; } - const sourceBadge = isEquicordPlugin ? ( + const pluginInfo = [ + { + condition: isModifiedPlugin, + src: "https://equicord.org/assets/icons/equicord/modified.png", + alt: "Modified", + title: "Modified Vencord Plugin" + }, + { + condition: isEquicordPlugin, + src: "https://equicord.org/assets/icons/equicord/icon.png", + alt: "Equicord", + title: "Equicord Plugin" + }, + { + condition: isVencordPlugin, + src: "https://equicord.org/assets/icons/vencord/icon-light.png", + alt: "Vencord", + title: "Vencord Plugin" + }, + { + condition: isUserPlugin, + src: "https://equicord.org/assets/icons/misc/userplugin.png", + alt: "User", + title: "User Plugin" + } + ]; + + const pluginDetails = pluginInfo.find(p => p.condition); + + const sourceBadge = pluginDetails ? ( Equicord - ) : isUserplugin ? ( - Userplugin - ) : ( - Vencord - ); + ) : null; + + const tooltip = pluginDetails?.title || "Unknown Plugin"; return (