doxa-maps/plugin-designs/research-map-plus-grid
Doxa Maps b5d849f746 The map follows the list: filter the grid and the camera goes there
The link ran one way. A choice on the map narrowed the grid — region, religion
family and language, verified on both engines — and a choice in the grid moved
nothing. A reader who filtered the list down to 83 peoples had no idea where in
the world they were.

★ IT IS THE GRID'S FILTERED SET, NOT A ROW SELECTION, AND THAT IS A FINDING.
The card says "selecting N rows". people-groups-grid has no row selection — no
checkboxes, no selection state — and the desktop pair's fly-to-selection is
driven by the DASHBOARD's own data table through its selection bus
(useSelectionCamera.js), not by this grid. So building "select rows" here would
have meant inventing a control nobody asked for. The grid already reports the
slugs it is showing on every `groups-filtered`, so that existing signal is the
wire: no new UI, and a grid mounted alone still emits into a room with no
listener.

The composite sends slugs rather than a bbox because it has no coordinates —
this map is the half that knows where anything is, so it frames them itself.

CAPPED AT 400, and the cap is the point rather than a performance worry: a
larger set is not a selection, it is "almost everything", and framing it would
swing the camera to a world view that tells the reader nothing while moving a
lot.

CAMERA POLICY COPIED, DELIBERATELY, from research-dashboard's
useSelectionCamera.js, which worked all of this out for the desktop pair: a
single row has a zero-area bbox and would fit at street level for what is really
a country-scale centroid; several peoples in one place are the same problem by
another route; a set spanning most of the globe animates the wrong way around
the antimeridian if framed literally. One shared composable in library/ is the
right end state — cited rather than imported because a library move cannot be
landed from this lane today, and a later move should delete this block rather
than leave a third copy.

⚠ MOTION SAFETY. The Driver is photosensitive, and a camera that re-animates on
every keystroke is the strobe class this repo has already paid for. An identical
slug set never re-flies, and a reduced-motion preference jumps rather than eases
— same destination, no traversal.

VERIFIED HEADLESS, per the browser policy: both bundles build, `fitSlugs`
appears in the sender and the receiver, SRI and composite-freshness are clean
and no other bundle goes stale. The behaviour itself NEEDS EYES.
2026-09-25 23:28:53 +00:00
..
scripts Prove the grid-under-map link on both engines, not just the one we happened to run 2026-09-25 22:35:48 +00:00
index.html Add the mobile capability-4 composite: research map above the people-groups grid 2026-09-22 07:34:02 +00:00
index.js Add the mobile capability-4 composite: research map above the people-groups grid 2026-09-22 07:34:02 +00:00
research-map-plus-grid.instances.json Add the mobile capability-4 composite: research map above the people-groups grid 2026-09-22 07:34:02 +00:00
research-map-plus-grid.meta.json Add the mobile capability-4 composite: research map above the people-groups grid 2026-09-22 07:34:02 +00:00
research-map-plus-grid.vue The map follows the list: filter the grid and the camera goes there 2026-09-25 23:28:53 +00:00