|
Some checks are pending
build-gate / build (push) Waiting to run
The selections row left the DOM whenever nothing was selected, so it appeared on every select and vanished on every clear — and the map, the table and the grid moved each time. That is what made the dashboard hard to use: not where the chips sat, but that everything below them shifted while you were looking at it. The row now always renders and only its contents change. Empty it reads "Selected World", which is also true rather than merely a placeholder: nothing filtered really does mean the whole world is in scope. Clear-all is simply absent when there is nothing to clear, instead of the row collapsing around it. Height is pinned and the row no longer wraps, because wrapping was the other way it could grow; a long selection scrolls sideways instead of taking a second line. Slim enough to read as a status strip rather than a tray. Measured across all three states — empty, selected, cleared — the row height stays 28px and the map top stays at 186px. Nothing below the row moves. |
||
|---|---|---|
| .. | ||
| api | ||
| colors | ||
| components | ||
| composables | ||
| constants | ||
| data | ||
| i18n | ||
| layouts | ||
| scripts | ||
| stores | ||
| styles | ||
| utils | ||
| 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.