LegendMobile already shows "The dot marks where this people is found, not a town or a boundary." once, floating above the sheet, and placed so that it takes no room from the options inside. The SemanticTreeLegend it renders inside the sheet printed the same sentence again, so with the sheet open a phone reader saw it twice. Measured on Prayer Progress at 390 on the shared browser, with the sheet opened through its own toggle (pp-caption.mjs): - before, on development as served by DX Life: 2 visible copies on / and on the Deep Research tab, the floating note plus the tree's note inside the sheet; - after, Prayer Progress rebuilt locally with this change: 1 visible copy, the floating note, in en and ar; - desktop, 1440: still 1 copy, the desktop legend's own tree, unchanged. The sheet's tree now gets :pin-note="false". The detail view keeps its own note, which carries the shared-point wording. Library only. Every bundle that renders LegendMobile needs a rebuild to ship it. |
||
|---|---|---|
| .. | ||
| api | ||
| charts | ||
| colors | ||
| components | ||
| composables | ||
| constants | ||
| dashboards | ||
| data | ||
| elements | ||
| i18n | ||
| layouts | ||
| lists | ||
| maps | ||
| packet | ||
| packets | ||
| scripts | ||
| stores | ||
| styles | ||
| utils | ||
| vendor/cldr | ||
| index.js | ||
| ProfileLoader.vue | ||
| README.md | ||
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.