doxa-maps/library
Doxa Maps d533431997 Phones: one top bar on a website too; maps fill a sized host, so the legend is never cut off
- WEB MODE GETS THE TOP BAR BACK. The corner ☰ with no header was rejected on a real phone. Both shell modes
  now show the one top bar on a phone, the ☰ at its start and the language at its end; web mode's bar takes no
  camera inset (the shell is not at the top of the screen in a website). The corner circle and the drawer-foot
  language are gone. check:shell-header renders both modes (13 planted defects).
- THE FLOOR NEVER EXCEEDS A SIZED HOST. ProfileLoader's 100svh floor is for a host sized by its content (the
  scroll-page leaf). Inside a host with a definite height (DX Life's map slot, overflow hidden) it made the map
  taller than the host, which clipped the map's bottom and its legend footer, and tied the map's height to the
  window's. ProfileLoader now MEASURES the host (the floor at 0 and at a huge value: a sized host keeps its
  height) and drops the floor inside a sized one, re-measuring when the host resizes (a ResizeObserver on the
  host, not a window resize).
- LegendDesktop caps itself at the map's height (100% - 80px), not the window's (100vh - 80px).
2026-10-02 05:27:37 +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 Phones: one top bar on a website too; maps fill a sized host, so the legend is never cut off 2026-10-02 05:27:37 +00:00
composables P assembly: the widened census, stated neutrally 2026-10-01 05:42:24 +00:00
constants Poster sizes: the ladder offers eight sizes (paper, 18x24, 36x36, 36x48, 36x60, 36x66, 66x66, 60x96) 2026-09-30 23:49:05 +00:00
dashboards Docs: "reusable by default" in the library guides, and Deep Research by its name 2026-10-01 08:27:04 +00:00
data Country names for 13 territories with their own posters; Kosovo's label 2026-10-01 19:28:27 +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 Country Posters: India's state and union territory cards named in the reader's language; the state table retried after a failure 2026-10-01 11:41:37 +00:00
layouts Phones: one top bar on a website too; maps fill a sized host, so the legend is never cut off 2026-10-02 05:27:37 +00:00
lists Merge branch 'bundler-2/driver-1650' into bundler-2/handoff 2026-09-29 14:50:44 +00:00
maps Source comments state design history and measurements as facts, without quoting or naming anyone 2026-10-01 00:37:17 +00:00
packet The whole-India poster is withheld for now: "Too many people groups to fit on one poster legibly" 2026-10-01 22:18:31 +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 The private entry-policy table is built by its own script outside the public export; the public research script carries no trace of it 2026-10-01 16:32:22 +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 Merge remote-tracking branch 'origin/development' into upg100/pg-names 2026-10-01 13:25:01 +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 Phones: one top bar on a website too; maps fill a sized host, so the legend is never cut off 2026-10-02 05:27:37 +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.