doxa-maps/library
Doxa Maps ef7ace486e poster-render: large side-lane sheets (60x96, 66x66, 36x60) that name a whole country's groups with crossing-free leaders
A new layout mode, ADDITIVE: three new FORMATS with `sideLanes`; every existing format takes exactly its old path.
Every name horizontal, on the left and right of the map in two staggered columns per side (rows alternate, so each
column keeps a full line pitch and each row holds one name). Co-located groups form a cluster with one leader and
a bracketed block. Crossing-free by construction: one vertical split sends each cluster to the nearer side; each
leader is a short stub to its own lane, a horizontal run to the map edge, and a fan to its block, with lanes placed
farthest-from-the-edge first and clamped between their neighbours, and fans in the lanes' order. The renderer
measures and returns its crossing count. A real photo (never the placeholder) sits outside its name where the
format allows. The type is the largest that fits the rows and columns, capped per format (nameMaxPt).
On these sheets only: pins stay at their true positions (no settle pass), the map frame takes the country's own
shape centred in the band with a thin margin, and the side-lane styles are emitted.
India (855 groups, live data): 60x96 20.7 pt names + 7.9 mm photos; 66x66 14.6 pt + 5.5 mm; 36x60 12.6 pt, no
photos; 0 crossings on all three; 4 s per render where the numbered path took 65 s. Re-pinned.
2026-10-01 05:52:47 +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
charts Two gates the branch backlog turned red 2026-09-29 14:55:35 +00:00
colors library/ keeps the reason and drops the speaker: no comment quotes or cites the Driver 2026-09-29 05:26:25 +00:00
components PosterWall: sectionItemCountKey, so one section can be counted in its own words 2026-10-01 05:10:55 +00:00
composables CSV exports: a value starting with TAB or CR is neutralised too, and the gate asserts it 2026-09-30 21:09:29 +00:00
constants The poster credited Mapbox for tiles OpenFreeMap had served 2026-09-29 00:06:52 +00:00
dashboards Write down the contract the four dashboard panels already share 2026-09-29 01:38:08 +00:00
data WIP P0b: India's states and union territories table (derived from admin-membership, served as an asset, sha384-pinned in the same emitter run), its loader, the tree allowlist row, and check:india-states (not yet registered) 2026-09-30 21:17:28 +00:00
elements library/ keeps the reason and drops the speaker: no comment quotes or cites the Driver 2026-09-29 05:26:25 +00:00
i18n Merge remote-tracking branch 'origin/development' into wall-of-people-groups-plugin/work 2026-10-01 05:31:29 +00:00
layouts Research Gallery: a "Back to homepage" link above Collapse, and the poster rows in Prayer Mobilization 2026-09-30 20:16:15 +00:00
lists Merge branch 'bundler-2/driver-1650' into bundler-2/handoff 2026-09-29 14:50:44 +00:00
maps Merge branch 'bundler-2/whiteboard' into bundler-2/handoff 2026-09-29 14:50:39 +00:00
packet poster-render: large side-lane sheets (60x96, 66x66, 36x60) that name a whole country's groups with crossing-free leaders 2026-10-01 05:52:47 +00:00
packets library/ keeps the reason and drops the speaker: no comment quotes or cites the Driver 2026-09-29 05:26:25 +00:00
print The Country Posters map's legend Packet export works, and the card deck rolls out behind one switch 2026-09-29 05:26:27 +00:00
scripts A poster series for India's states and union territories; series-isolation sees shared wording and poster text correctly 2026-09-30 23:33:34 +00:00
stores A collapsed legend reopens itself after you close a people-group detail 2026-09-29 11:56:47 +00:00
styles library/ keeps the reason and drops the speaker: no comment quotes or cites the Driver 2026-09-29 05:26:25 +00:00
utils Move four identical bodies into the library 2026-09-29 09:19:04 +00:00
vendor/cldr library/ keeps the reason and drops the speaker: no comment quotes or cites the Driver 2026-09-29 05:26:25 +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 Drop the country-map poster wall: +292 KB on every country page 2026-09-29 16:10:00 +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.