doxa-maps/library
Doxa Maps 838df76c14 Paraphrase the Driver's words, keeping the attribution and the measurement
studio strips verbatim Driver quotes from comments and messages when landing (L64), and
these were written before that. Reporting WHO reported a defect and WHEN is what makes a
comment checkable, so the attribution stays; it is only the quoted wording that goes.

Five sites: the scrollbar gate, the embed-url gate and embedBase, the poster-slicing
gate, and research-map's print rule. Every one keeps the date, the source and the
measured numbers — which were always the load-bearing part. "shows a disproportionate
amount of the far south" says the same thing as the quote it replaces, and the 37.0%
band squeezed into 25% is what actually proves it.

No behaviour touched; comments and gate headers only. All six gates still green.
2026-09-28 18:09:41 +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 The legends mirror now, and their labels never became their values 2026-09-26 22:06:58 +00:00
components Two maps placed their share menu correctly because they were named in a string literal 2026-09-28 16:53:12 +00:00
composables The URLs that failed cannot be retried, and the ones that can were not 2026-09-28 18:02:00 +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 Country names in the reader's language, for all 242 2026-09-27 04:14:31 +00:00
i18n Author legend.noList, which existed in no catalogue at all 2026-09-28 15:52:47 +00:00
layouts DataTable + StackLayout: physical left/right -> logical, where the rule mirrors 2026-09-28 09:48:45 +00:00
lists The URLs that failed cannot be retried, and the ones that can were not 2026-09-28 18:02:00 +00:00
maps The poster sliced its rows in degrees, and Mercator charges more for a degree up north 2026-09-28 17:24:47 +00:00
packet One scatter implementation, and the gate that could have caught the bar 2026-09-28 15:01:19 +00:00
packets Number({value:"1"}) is NaN, so the whole reachedness sentence vanished 2026-09-28 15:52:47 +00:00
scripts The language tree's layout becomes library's; its gospel classification does not 2026-09-28 15:52:47 +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 Paraphrase the Driver's words, keeping the attribution and the measurement 2026-09-28 18:09:41 +00:00
vendor/cldr Country names in the reader's language, for all 242 2026-09-27 04:14:31 +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 ?lang= on the page turns every embedded map's direction and data language, not only its text 2026-09-27 06:42:54 +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.