From 6027bbdf7a7fa94ba3103f580f558b9b80b03cb8 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 3 Aug 2026 16:48:57 +0000 Subject: [PATCH] feat: add server icon, edit link, and permanent tabs to plugin updater Restores a few UI refinements from the pre-revert plugin-store work (fbe520b..71d1368) that never made it back in: each server tab shows its live favicon (or a Globe fallback) fetched via getServerStatus, tabs linked to a real Server List listing are marked permanent so they can't be accidentally deleted, and an external-link button next to linked tabs opens that server's edit page. Also tightens the export button's padding to match the rest of the toolbar row. The external link now points at /serverlist/:slug/edit (the current server management route) rather than the old /dashboard/servers/:slug path from before the server list feature settled on its current routes. --- src/routes/resources/plugins/index.tsx | 44 ++++++++++++++++++++++++-- src/util/serverlist/actions.ts | 34 +++++++++++++++++++- 2 files changed, 74 insertions(+), 4 deletions(-) diff --git a/src/routes/resources/plugins/index.tsx b/src/routes/resources/plugins/index.tsx index 1a338289..d4617dde 100644 --- a/src/routes/resources/plugins/index.tsx +++ b/src/routes/resources/plugins/index.tsx @@ -24,6 +24,8 @@ import Plus from 'lucide-icons-qwik/icons/Plus'; import RefreshCw from 'lucide-icons-qwik/icons/RefreshCw'; import Trash from 'lucide-icons-qwik/icons/Trash'; import X from 'lucide-icons-qwik/icons/X'; +import { Link } from '@qwik.dev/router'; +import ExternalLink from 'lucide-icons-qwik/icons/ExternalLink'; import { defaultDescription, generateHead } from '~/root'; import { Label, SelectMenu, Tabs } from '@luminescent/ui-qwik'; import PluginCard from '~/components/plugins/PluginCard'; @@ -108,6 +110,7 @@ export default component$(() => { name: string; slug: string; plugins: { [id: string]: PluginType } | null; + icon: string | null; }[] >([]); @@ -300,9 +303,10 @@ export default component$(() => {

({ + values={Object.entries(pluginsStore.servers).map(([k, v]) => ({ name: k, value: k, + permanent: !!v.serverId, }))} value={ pluginsStore.openServer @@ -330,7 +334,41 @@ export default component$(() => { pluginsStore.openServer = serverName; } }} - > + > + {Object.keys(pluginsStore.servers).map((k, i) => { + const s = pluginsStore.servers[k]; + const linked = userServers.value.find((us) => us.id === s.serverId); + return [ + linked?.icon ? ( + {`${linked.name} + ) : ( + + ), + ...(linked + ? [ + + + , + ] + : []), + ]; + })} + {Object.keys(pluginsStore.servers).length < 1 && (

{t( @@ -402,7 +440,7 @@ export default component$(() => {