From 4175ae86e30d2f4678b26a343b77436626b659d4 Mon Sep 17 00:00:00 2001 From: iris Date: Sat, 29 Aug 2026 11:50:00 +0200 Subject: [PATCH] icons: restore inline-SVG link/gear icons, share them across all three pages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes a regression + a longer-standing inconsistency (mara: "agent page link icons is different from swarm ui, settings icon looks weird since component extract"). - The `SettingsMenu` shared-component extraction swapped swarm-ui's original inline-SVG gear trigger for a plain `⚙` text glyph (matching agent's `MetaNav`, which was itself still on the `🔗` emoji at the time). An emoji/text glyph is rendered by the OS/browser's own font at that font's fixed metrics — it can never match a neighbouring icon in size or weight, and some codepoints (the gear included) aren't even reliably covered by every font. - New `@hive/shared/icons.js` (`GearIcon`, `LinkIcon`) — the exact SVG markup that used to live only in swarm-ui's `SettingsMenu`/ `LinksMenu` as two separate inline copies, now the one shared source. - `SettingsMenu` (shared) uses `GearIcon`; agent's `MetaNav` and swarm-ui's `LinksMenu` both use `LinkIcon` — three consumers, one rendering path, matching stroke/viewBox/size everywhere. Verified with real screenshots on both agent and swarm-ui — both trigger icons render as the same crisp line-icon style now. --- .../packages/agent/src/components/MetaNav.tsx | 10 +++- frontend/packages/shared/package.json | 1 + frontend/packages/shared/src/icons.tsx | 58 +++++++++++++++++++ .../shared/src/settings/SettingsMenu.tsx | 11 +++- .../packages/swarm-ui/src/shell/LinksMenu.tsx | 31 +++------- 5 files changed, 84 insertions(+), 27 deletions(-) create mode 100644 frontend/packages/shared/src/icons.tsx diff --git a/frontend/packages/agent/src/components/MetaNav.tsx b/frontend/packages/agent/src/components/MetaNav.tsx index 985055e1..78d7dad6 100644 --- a/frontend/packages/agent/src/components/MetaNav.tsx +++ b/frontend/packages/agent/src/components/MetaNav.tsx @@ -1,5 +1,10 @@ // — the header's meta-nav trigger: a single fixed-size Badge -// ("🔗") in the pills cluster that opens a popover listing +// (`@hive/shared/icons.js`'s `LinkIcon` — an emoji glyph here can't +// match a neighbouring icon's size/weight on any platform, see that +// file's comment; mara: "agent page link icons is different from +// swarm ui" was this trigger still on the old `🔗` emoji after +// swarm-ui's own link trigger had already moved to the SVG) in the +// pills cluster that opens a popover listing // stats/screen/forge/config + any `hyperhive.dashboardLinks` extras, // sourced from the backend's `agent_links()` (the single source of // truth — same list also feeds the dashboard card's icon strip) — plus @@ -25,6 +30,7 @@ // `LoginFlow`'s `.login-card` already made for the same reason. import { useEffect, useRef, useState } from 'preact/hooks'; import { Badge } from '@hive/shared/badge.js'; +import { LinkIcon } from '@hive/shared/icons.js'; import type { AgentLink } from '../types.js'; import './MetaNav.css'; @@ -67,7 +73,7 @@ export function MetaNav({ links, forgePublicUrl, dashboardBase }: MetaNavProps) return (
- setOpen((o) => !o)} expanded={open} /> + } title="agent links" onClick={() => setOpen((o) => !o)} expanded={open} /> {open ? (