import { useMemo, useState } from 'react' import PublicLayout from '../../components/PublicLayout.jsx' import PageHeader from '../../components/PageHeader.jsx' import { Loading, ErrorState } from '../../components/PageState.jsx' import { useAsync } from '../../lib/useAsync.js' import { useShardFeed } from '../../lib/useShardFeed.js' import { api } from '../../api/client.js' // The guild board. Loaded once from /public/shard/guilds, then kept live by // merging guild.update / guild.remove deltas; guild.join drives a small "recently // joined" strip on top of the board. const GUILD_KINDS = new Set(['guild.update', 'guild.remove', 'guild.join']) function Leader({ leader }) { if (!leader || !leader.name) return — return {leader.name} } function GuildRow({ g }) { return (
No guilds are being tracked right now.
{board.length} guilds · {totalMembers.toLocaleString()} members
setQ(e.target.value)} placeholder="Search guilds…" style={{ flex: 'none', width: 190, maxWidth: '50%', fontSize: '0.84rem' }} />No guilds match “{q}”.
)} > )} > )}