diff --git a/apps/ui/src/components/metagraphed/search-box.tsx b/apps/ui/src/components/metagraphed/search-box.tsx index d1214caa21..c29b8c3f48 100644 --- a/apps/ui/src/components/metagraphed/search-box.tsx +++ b/apps/ui/src/components/metagraphed/search-box.tsx @@ -41,7 +41,7 @@ function ResultRow({ result }: { result: SemanticSearchResult }) {

{resultLabel(result)}

{result.subtitle ? ( -

{result.subtitle}

+

{result.subtitle}

) : null} {tags.length > 0 ? (
diff --git a/apps/ui/src/components/metagraphed/settings-popover.tsx b/apps/ui/src/components/metagraphed/settings-popover.tsx index 0be68eaf2d..6a605a9dcb 100644 --- a/apps/ui/src/components/metagraphed/settings-popover.tsx +++ b/apps/ui/src/components/metagraphed/settings-popover.tsx @@ -102,7 +102,7 @@ export function SettingsPanel() { /> ))} -

+

All presets verified for perceptible contrast in light and dark.

@@ -123,7 +123,7 @@ function Section({
{label}
{children} - {sub ?

{sub}

: null} + {sub ?

{sub}

: null}
); } @@ -157,7 +157,7 @@ function SegmentBtn({ aria-label={label} title={title ?? label} className={classNames( - "flex-1 inline-flex items-center justify-center gap-1.5 rounded px-2 py-1.5 text-[11px] font-medium transition-colors min-h-8", + "flex-1 inline-flex items-center justify-center gap-1.5 rounded px-2 py-1.5 mg-type-caption font-medium transition-colors min-h-8", active ? "bg-card text-ink-strong shadow-sm" : "text-ink-muted hover:text-ink-strong", )} > @@ -205,7 +205,7 @@ function PaletteRow({ {label} - {description} + {description} diff --git a/apps/ui/src/components/metagraphed/shortcuts-popover.tsx b/apps/ui/src/components/metagraphed/shortcuts-popover.tsx index fe0a865ea6..b2b359ed67 100644 --- a/apps/ui/src/components/metagraphed/shortcuts-popover.tsx +++ b/apps/ui/src/components/metagraphed/shortcuts-popover.tsx @@ -75,7 +75,7 @@ export function ShortcutsPopover() { - + Keyboard shortcuts (?) diff --git a/apps/ui/src/components/metagraphed/sponsored-validator-callout.tsx b/apps/ui/src/components/metagraphed/sponsored-validator-callout.tsx index c6d9c85ec9..6696cba721 100644 --- a/apps/ui/src/components/metagraphed/sponsored-validator-callout.tsx +++ b/apps/ui/src/components/metagraphed/sponsored-validator-callout.tsx @@ -85,7 +85,7 @@ export function SponsoredValidatorCallout({ ); })} -
+
@@ -159,10 +162,12 @@ export function StakeAmountInput({ {showUnitToggle ? (
Unit -
{(["tao", "alpha"] as const).map((u) => { const active = u === unit; @@ -184,7 +189,7 @@ export function StakeAmountInput({ ); })} -
+
) : null} diff --git a/apps/ui/src/components/metagraphed/stake-unstake-modal.tsx b/apps/ui/src/components/metagraphed/stake-unstake-modal.tsx index 78b41c699d..d5dd8f5aa9 100644 --- a/apps/ui/src/components/metagraphed/stake-unstake-modal.tsx +++ b/apps/ui/src/components/metagraphed/stake-unstake-modal.tsx @@ -303,7 +303,7 @@ function StatusView({ > {shortHash(txHash, 8)} -

+

May take a few moments to appear once indexed.

diff --git a/apps/ui/src/components/metagraphed/states.tsx b/apps/ui/src/components/metagraphed/states.tsx index 7927857f54..9bed7312d4 100644 --- a/apps/ui/src/components/metagraphed/states.tsx +++ b/apps/ui/src/components/metagraphed/states.tsx @@ -9,7 +9,7 @@ import { } from "lucide-react"; import { useState } from "react"; import { useQueryClient, type QueryKey } from "@tanstack/react-query"; -import { TimeAgo, safeExternalUrl } from "@jsonbored/ui-kit"; +import { TimeAgo, safeExternalUrl, ExternalLink } from "@jsonbored/ui-kit"; import { ApiError } from "@/lib/metagraphed/client"; import { getNetworkPrefix } from "@/lib/metagraphed/config"; import { isUsableTimestamp } from "@/lib/metagraphed/format"; @@ -114,20 +114,19 @@ export function ErrorState({ {onRetry ? ( ) : null} {safeUrl ? ( - Open API URL - + ) : null}
@@ -183,7 +182,7 @@ export function EmptyState({ {action.label} {action.external ? : null} diff --git a/apps/ui/src/components/metagraphed/states/registry-empty.tsx b/apps/ui/src/components/metagraphed/states/registry-empty.tsx index 0c3cfd3f20..5f86e10d8e 100644 --- a/apps/ui/src/components/metagraphed/states/registry-empty.tsx +++ b/apps/ui/src/components/metagraphed/states/registry-empty.tsx @@ -120,15 +120,22 @@ export function RegistryEmpty({ ) : null} {freshnessHint ? ( -

+

how freshness works · {freshnessHint}

) : null} {evidenceHref ? ( -

+

where to verify · + {/* Stays a raw anchor deliberately: evidenceHref is a + same-origin relative artifact path (e.g. /metagraph/gaps.json + on -gaps-page / -surfaces-page), and 's + safeExternalUrl rejects relative URLs outright -- converting + would render the "blocked unsafe URL" fallback and break the + link. Residual no-restricted-syntax warning flagged in the + PR body per the issue's req-2 escape hatch. */} diff --git a/apps/ui/src/components/metagraphed/subnet-health-matrix.tsx b/apps/ui/src/components/metagraphed/subnet-health-matrix.tsx index 7a971640ab..d8830ed604 100644 --- a/apps/ui/src/components/metagraphed/subnet-health-matrix.tsx +++ b/apps/ui/src/components/metagraphed/subnet-health-matrix.tsx @@ -67,12 +67,12 @@ export function SubnetHealthMatrix() { )} aria-label={`SN${s.netuid}${s.name ? ` — ${s.name}` : ""} — ${s.health ?? "unknown"}`} > - + {s.netuid} - +

SN{s.netuid}{" "} {s.name ? · {s.name} : null} diff --git a/apps/ui/src/components/metagraphed/subnet-masthead.tsx b/apps/ui/src/components/metagraphed/subnet-masthead.tsx index ca66157632..3150b2bcda 100644 --- a/apps/ui/src/components/metagraphed/subnet-masthead.tsx +++ b/apps/ui/src/components/metagraphed/subnet-masthead.tsx @@ -15,6 +15,7 @@ import { TooltipContent, TooltipTrigger, BrandIcon, + ExternalLink, safeExternalUrl, CurationChip, HealthPill, @@ -308,7 +309,7 @@ export function SubnetMasthead({ uptimeDelta != null && Math.abs(uptimeDelta) > 0.01 ? ( 0 ? "text-health-ok" : "text-health-down") } title={`${uptimeDelta > 0 ? "+" : ""}${uptimeDelta.toFixed(2)}% over window`} @@ -431,16 +432,20 @@ export function SubnetMasthead({ {safeHref ? ( - - - + + {/* span carries TooltipTrigger's Slot ref/props -- + ExternalLink doesn't forward refs to its anchor + (same wrapper recipe as batch 2/5). */} + + + + ) : ( - + {profile?.curation_level ?? "—"}
diff --git a/apps/ui/src/components/metagraphed/subnet-price-ticker.tsx b/apps/ui/src/components/metagraphed/subnet-price-ticker.tsx index d95f713d79..d1dd7ccbd0 100644 --- a/apps/ui/src/components/metagraphed/subnet-price-ticker.tsx +++ b/apps/ui/src/components/metagraphed/subnet-price-ticker.tsx @@ -104,7 +104,7 @@ export function SubnetPriceTicker({ limit = 12 }: { limit?: number }) { key={`${it.netuid}-${i}`} to="/subnets/$netuid" params={{ netuid: it.netuid }} - className="inline-flex items-center gap-2 text-[11px] hover:text-ink-strong transition-colors" + className="inline-flex items-center gap-2 mg-type-caption hover:text-ink-strong transition-colors" title={`${it.name} · SN${it.netuid} · ${priceStr(it.price)}${ t.changePct != null ? ` · ${t.changePct >= 0 ? "+" : ""}${t.changePct.toFixed(1)}%` diff --git a/apps/ui/src/components/metagraphed/subnet-priority-highlights.tsx b/apps/ui/src/components/metagraphed/subnet-priority-highlights.tsx index de351d6c76..a48d3f7e9f 100644 --- a/apps/ui/src/components/metagraphed/subnet-priority-highlights.tsx +++ b/apps/ui/src/components/metagraphed/subnet-priority-highlights.tsx @@ -60,9 +60,14 @@ function Tile({
{eyebrow}
-
{value}
+
+ {value} +
{hint ? ( -
{hint}
+
{hint}
) : null}
diff --git a/apps/ui/src/components/metagraphed/subnet-profile-panel.tsx b/apps/ui/src/components/metagraphed/subnet-profile-panel.tsx index e686daf3f9..4f1600890e 100644 --- a/apps/ui/src/components/metagraphed/subnet-profile-panel.tsx +++ b/apps/ui/src/components/metagraphed/subnet-profile-panel.tsx @@ -65,7 +65,7 @@ function Stat({ field, trailing }: { field: Field; trailing?: React.ReactNode }) {field.label} - + {field.hint} @@ -73,7 +73,8 @@ function Stat({ field, trailing }: { field: Field; trailing?: React.ReactNode }) {short} @@ -234,7 +235,7 @@ export function SubnetProfilePanel({ netuid }: { netuid: number }) { {String(lineagePeer.netuid).padStart(3, "0")} @@ -325,8 +326,8 @@ export function SubnetProfilePanel({ netuid }: { netuid: number }) { {providerLockup.length > 0 ? (
    {providerLockup.map((p) => ( -
  • - +
  • + {p.name.slice(0, 2)} ) : ( -
    No ownership keys recorded.
    +
    No ownership keys recorded.
    ); })()} @@ -461,7 +462,7 @@ function Meta({ label, value, hint }: { label: string; value: string; hint: stri - + {hint} diff --git a/apps/ui/src/components/metagraphed/subnet-validators-preview.tsx b/apps/ui/src/components/metagraphed/subnet-validators-preview.tsx index 672d25f04b..00d7166c9f 100644 --- a/apps/ui/src/components/metagraphed/subnet-validators-preview.tsx +++ b/apps/ui/src/components/metagraphed/subnet-validators-preview.tsx @@ -125,7 +125,7 @@ function ValidatorPreviewRow({