doxa-maps/library
Doxa Maps c193621bc2 My UPG Neighbors: the cockpit, list, flower and send panels speak the reader's language
The universal-props re-measure (PRODUCTION-MATRIX.md, main dee9f9c9) found
typed-in English still left in upg-neighbor after its first i18n pass. This
translates the rest of the INTERFACE text, under the approved scope (interface
text, not research jargon):
- ListCell: the sender count, "Build send list", the pinned card's People
  group / Country / Language / Population / Religion, and the empty and
  placeholder states (no senders, N hidden, no reached neighbours yet, pick a
  red target, cluster/sender counts, tap a bubble);
- bloom-cockpit: the view switch's aria-label, the "unreached target" legend
  key, the loading overlay;
- FlowerCell: the empty-state instruction;
- send-map: the target's UPG / sender counts and its no-senders message;
- FlowerClusters: the API-down status reuses neighbor.lc.apiDown.

20 new keys (neighbor.list.*, neighbor.cockpit.*, neighbor.flower.*,
neighbor.sm.*) in all 11 locales. Every existing key is unchanged (checked per
locale). Method vocabulary (Bridge, Adjacency, Code, the 4-D SEND panel) and
the scripture / method footers stay English by the scope ruling. Numbers keep
their current toLocaleString (numerals held). No code branches on any of
these strings (swept).

Headless: build OK; no-free-identifiers, i18n-parity, i18n-never-translated
and profiles-mount pass. Library change (catalogues): consumers need
rebuilding.
2026-09-26 17:10:06 +00:00
..
api The people-group list is a universal prop: the same maps can show any project's list 2026-09-26 05:16:02 +00:00
colors C1b: the resource palette moves to library/colors/, and the local colour globs go with it 2026-09-26 08:51:39 +00:00
components MapToolbar: the mobile comment names the top it actually sets (72, a 26px gap) 2026-09-26 17:10:06 +00:00
composables The engine logo's label follows the reader's language, on both engines 2026-09-26 13:04:16 +00:00
constants Every runtime CDN script and stylesheet is an exact version with an integrity hash 2026-09-26 05:50:24 +00:00
data Regions: expand a region to its country posters, reusing the shared wall 2026-09-24 04:26:29 +00:00
i18n My UPG Neighbors: the cockpit, list, flower and send panels speak the reader's language 2026-09-26 17:10:06 +00:00
layouts The last of the shared-library English: legend, poster preview and tab loading states 2026-09-26 13:04:16 +00:00
lists List names speak the reader's language: listLabel and listDefinition 2026-09-26 08:39:52 +00:00
maps Map labels ask for a font the engine's glyph server has: one shared helper 2026-09-25 13:48:10 +00:00
packet A packet says which list it holds, in the reader's language 2026-09-26 08:39:54 +00:00
scripts The funnel stops claiming a coverage gap it cannot measure 2026-09-26 08:39:54 +00:00
stores Make the map's clustering picker real: four options, four different maps 2026-09-25 16:16:46 +00:00
styles Fiord: the MapLibre dark that actually looks like the map it replaces 2026-09-24 02:26:14 +00:00
utils People-group pins say what they are: one shared note, and the groups that share a point are named 2026-09-26 13:04:15 +00:00
index.js Move internal files out of the repo; fix five dead links; a fuller delegation diagram 2026-09-25 05:14:10 +00:00
ProfileLoader.vue Engine and token props: a token-service URL is honoured, Clear clears, and a pending token is awaited 2026-09-26 03:34:15 +00:00
README.md Complete app-profiles->plugin-designs sweep across comments/docs; build green; layouts kept at root (load-bearing) 2026-09-17 18:18:19 +00:00

library/ (@map) — the shared map template

The other half of the architecture (see ../plugin-designs/README.md): every map in plugin-designs/<your-map>/ composes the reusable, parameterized pieces that live here. Fix something here and every map benefits on the next build; break something here and every map breaks — read components/WARNING.md before touching shared pieces.

Folder What lives there
ProfileLoader.vue The root of every bundle: parses profile-config, loads the profile, provides the stores + config
components/ Shared UI — map, legends, controls, popup (PeopleGroupDetail), tables, charts, hints (README)
composables/ Shared logic — map engine (useMapInstance), provider switch, shadow-DOM styles, theming
stores/ Per-instance Pinia stores (ui / map / data) — provided by ProfileLoader, injected by children
api/ Data-source registry (sources.json) + fetch layer — the JAMstack runtime wiring
colors/ Color sets maps opt into via profile-config.colorSet
i18n/ The shared string catalogs (all maps speak the same languages)
data/ Small shared datasets baked at build time (big served data lives in ../data/)
constants/ Shared constants
scripts/ Maintainer pipelines (posters, research) — not part of any bundle

The rule of thumb (same as WARNING.md): custom code in your app-profile, reusable code here — and things only move from the first to the second once they've earned it.