The 35 files behind twelve public pages, seven admin views, two player views and three core-page extensions, ported onto `window.__rg`. Every one of them imports exactly the seven kit members plus `lib/format.js`, which is the finding §2.7.1 predicted and this confirms. `client/src/core.js` is the port mechanism, and unlike the server's it is a plain read: `window.__rg` is published before any module chunk evaluates, so there is no gap to defer around and a ported component keeps its ordinary import shape. `client/src/api.js` rebuilds the UO namespaces over the request primitive — same URLs, because §1.2 freezes the API surface. SPA paths changed and API paths did not. `/site/shard` is `/uo/shard`, and the admin paths lost their now-redundant `shard-` prefixes (`/admin/uo/ops`), a clean break being the only moment that is free. `shim/rg.js` becomes the single reader of the global, so the "core did not publish its dependencies" message is reachable from whichever module the bundler happens to touch first rather than from whichever one is imported first — a guarantee that used to last until someone sorted the imports. Co-Authored-By: Claude <noreply@anthropic.com>
32 lines
1.5 KiB
JavaScript
32 lines
1.5 KiB
JavaScript
// Placeholder heraldry for the eight City-Loyalty cities. Each entry is a simple
|
|
// emoji sigil + a ring colour — enough to make the Governors board and the
|
|
// governor badge read as distinct "crests" today, swappable for real artwork
|
|
// later WITHOUT touching any component: drop an `img` (an imported asset URL or a
|
|
// public path) onto an entry and update CityCrest to prefer it.
|
|
//
|
|
// Keyed by the exact `city` string the sidecar sends (see INTEGRATION.md §4:
|
|
// Moonglow, Britain, Jhelom, Yew, Minoc, Trinsic, SkaraBrae, NewMagincia).
|
|
|
|
export const CITY_CRESTS = {
|
|
Britain: { sigil: '⚜', color: '#c9a24b', label: 'Britain' },
|
|
Moonglow: { sigil: '🔮', color: '#7f8fd0', label: 'Moonglow' },
|
|
Minoc: { sigil: '⚒', color: '#b0763f', label: 'Minoc' },
|
|
Trinsic: { sigil: '⚓', color: '#5f9bd0', label: 'Trinsic' },
|
|
Yew: { sigil: '🌳', color: '#5fb98a', label: 'Yew' },
|
|
Jhelom: { sigil: '⚔', color: '#c76f6f', label: 'Jhelom' },
|
|
SkaraBrae: { sigil: '🐎', color: '#9a8bbf', label: 'Skara Brae' },
|
|
NewMagincia: { sigil: '🕊', color: '#cfc3a0', label: 'New Magincia' },
|
|
}
|
|
|
|
const FALLBACK = { sigil: '🏰', color: '#8c96a5', label: '' }
|
|
|
|
// Look up a crest by the raw city key, tolerating spacing variants
|
|
// ("Skara Brae" / "New Magincia"). `label` falls back to the given name.
|
|
export function crestFor(city) {
|
|
if (!city) return FALLBACK
|
|
const key = String(city).replace(/\s+/g, '')
|
|
const crest = CITY_CRESTS[city] || CITY_CRESTS[key]
|
|
if (crest) return crest
|
|
return { ...FALLBACK, label: String(city) }
|
|
}
|