DashboardFilterChips.vue moves to library/components/dashboards/. Nothing about the rendering changed. What made the move possible was 4b, which inverted the one dependency that blocked it: this file imported useTreeLegendLabels — the People CODE -> NAME tables, research-specific and staying in plugin-designs — and a library component importing a plugin composable is what check:no-cross-plugin-imports refuses. The resolver now arrives on dashboardConfig.legend. THREE THINGS BEYOND THE MOVE, all found by assessing the file rather than by moving it: 1. THE UNCONFIGURED DEFAULT NOW JOINS A LIST. 4b's fallback returned the value untouched, so a multi-value filter (spec D1) printed String(['A012','A013']) = "A012,A013", comma-jammed, while a dashboard that DID supply a resolver got "South Asian Peoples, Bengali Peoples". Configured and unconfigured should differ in whether CODES RESOLVE, never in punctuation — the second difference reads as a rendering bug rather than as missing configuration, and go-int is the consumer who will see the unconfigured state first. 2. THE DEAD INJECTS ARE GONE. `dataStore` and `searchSourceId` existed only to construct useTreeLegendLabels and have been unused since 4b. Removed rather than left in place: an unused inject is a claim about the host, and a kit component that appears to need a research dataStore is one a new dashboard will dutifully provide before discovering it is never read. 3. AN EXPLICIT EXCEPTION TO library/components/WARNING.md, recorded in the file's own header. That file says a component graduates into the library only once MORE THAN ONE map uses it; this one is used by ZERO, because the topbar dedup pass unmounted it when SearchFilterHeader became the single source of truth for showing and clearing filters. It is here because the kit's promise runs the other way round — a NEW dashboard mounts kit components, so waiting for a second consumer before providing the first one is a deadlock. The honest consequence is written down too: a passing gate means "it mounts and degrades", not "it looks right", and nobody has SEEN this component since the dedup. Whoever wires it in is its first real reader, and must not mount it beside a SearchFilterHeader that is already showing chips. check:legend-mirrors grows arm 5, and it asserts the two things a "move" gets wrong that reading the new file cannot show: that the OLD copy is actually gone (a move that leaves the original behind is a copy, and two chip bars over one filterSet drift the moment one is edited — this tree has already paid that with useNeighborT/usePplrT at Jaccard 0.82), and that the UNCONFIGURED behaviour is right, which no dashboard here would reveal because they all supply a resolver. The default is LIFTED out of the source and RUN, the way arm 3 drives the rail's fallbacks — not mounted, because a no-op renderer cannot show a chip and the rendered result is rega's. Five mutants, all caught: old copy left behind, the join reverted to 4b's bare value, a dead inject re-added, the supplied resolver ignored, and a relative import restored. The barrel re-exports from the library for one cycle, so no consumer's import line changes in the same landing that moves the file. documentation/reference-library-index.md regenerated, per landing. PARENTED ON a285e06c (4b), not on main, because 4b edits this same file — landing them the other way round would revert 4b's inversion. Source only: research-dashboard and dashboard-plus-grid need a rebuild. |
||
|---|---|---|
| .. | ||
| charts | ||
| dashboards | ||
| hints | ||
| legends | ||
| map-controls | ||
| poster | ||
| qa | ||
| regions | ||
| search | ||
| tables | ||
| PeopleGroupDetail.vue | ||
| README.md | ||
| ResearchMapFilterPanel.vue | ||
| ResearchMapSideMenu.vue | ||
| SideMenuDrawer.vue | ||
| ViewSelect.vue | ||
| WARNING.md | ||
library/components/ — shared Vue components
The map UI, built from parameterized pieces every app-profile reuses. Fix one here and every map benefits — never edit a shared component to customize one map.
library/components/
┌───────────────────────────────────────────┐
│ legends/ map-controls/ poster/ │
│ charts/ tables/ │
│ PeopleGroupDetail.vue SideMenuDrawer.vue │
│ ResearchMapFilterPanel.vue …SideMenu.vue │
└───────────────────────────────────────────┘
reused by every app-profile via @map/components/…
legends/,map-controls/,poster/each have their own README.- Every component uses
<script setup>, callsuseShadowStyles(), and reaches stores viainject('mapStore' | 'uiStore' | 'dataStore')— never a direct store import.
Full catalog + conventions:
../../documentation/architecture/components.md ·
per-file roles: ../../documentation/reference.md.