|
Some checks are pending
build-gate / build (push) Waiting to run
The Driver's ordering: desktop opens on the Big Picture dashboard; mobile opens on the research map and does not show Big Picture at all. Both capability-4 composites already existed, so this is the shell choosing between them. A row in the nav model can now declare onlyWhen desktop or mobile; everything below the first rung is identical on both, which is why only the first two rows carry it. One nav model rather than two, so the teaching order lives in one place. Two parallel models would be two things to keep in sync and the failure would be silent: a row added to one and forgotten in the other simply never appears. Crossing the breakpoint can remove the row that is currently active, which would leave the user on a mounted but unlisted tab with no highlight. The shell now snaps to the first surviving row, and establishes the viewport class before opening the first tab so a phone never opens Big Picture for a frame. Also fixes a pre-existing bug this exposed: with no header there was no way to open the rail on mobile. The drawer sits off-canvas, the only toggle lives inside the header, and the collapse control is inside the drawer itself — measured off-screen at x:-244. Every tab except the one that happened to open was unreachable. A floating button now appears only when narrow, headerless and shut, so no existing consumer can see a change. |
||
|---|---|---|
| .. | ||
| 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.