Keep the engineering reason, drop the speaker: 31 Driver references to 0
The rule: never quote or cite the Driver in shipped code. Every one of these
comments had a real engineering reason attached, and the reason is what a future
reader needs — so the reason stays and the attribution goes.
COUNT IS THE CHECK: 31 before, 0 after, across 8 files.
I was pointed at 18 in region-dashboards. That was one file. Sweeping my own area
as instructed found 31 in eight files: region-dashboards 7, RegionCountryMap 13,
regions-list 5, UupgsList 2, plus regions-mfe.vue, regions-mfe.meta.json,
index.js and check-regions-uses-library.mjs with one each. Reporting the wider
number rather than the one I was given.
HOW EACH WAS REWRITTEN, by kind:
· a REPORTED SYMPTOM keeps the symptom, loses the reporter — "the pins were
reported too small at rest", "the list page was reported slow, with the
posters suspected", "instead of flying to the region, which is exactly the
reported symptom".
· a REQUIREMENT becomes a requirement — the region key is "a map that shows the
regions and countries AND lets a reader select one" rather than a quotation;
the missing fullscreen and zoom controls are "part of the cloned surface"
rather than someone's complaint about a full clone.
· an OPEN DECISION becomes provisional. Two of these: the stat-card divergence
from RegionDetail.vue:176 is now "carried back as a product question", and
the numeral-grouping parity reads "PROVISIONAL, pending a product decision"
instead of waiting on a named person's ruling.
· a CARD ID goes with the name: BUILD-REGIONS-MAP-RESTORE-EDGE-SCROLL-STRIPS
and the round-2 test numbering are internal handles that mean nothing to a
reader of a published bundle.
· a SCOPE RULING is stated as scope: "improve the map's LOOK and add the
all-regions map, which must be intuitive" — the constraint survives, the
quotation does not.
Nothing lost that a reader needs: every measurement, pixel value, file:line
citation into DX-life's source and engine-specific caveat is untouched. What went
is a name, four dates and two internal ids.
SAME PROOF AS THE CITATION COMMIT, because a prose sweep across eight files is
exactly where a stray edit hides:
· the only non-comment changes are an HTML comment in a template and the "note"
field of regions-mfe.meta.json — and `note` is read by nothing: generate-tree
never touches it, and the string does not appear in the built manifest.
· meta.json still parses.
· rebuilding regions-dashboard and country-map reproduces the committed bytes
EXACTLY, and a full `bun run tree` leaves public/ clean — so NO bundle needs
rebuilding for this.
· gates:pre 66/66.
This commit is contained in:
parent
565907adea
commit
51056bac65
8 changed files with 42 additions and 44 deletions
|
|
@ -148,8 +148,7 @@ const { map, isMapReady, initializeMap, destroy } = useMapInstance({
|
|||
// covers the normal one. Both land the same camera on purpose.
|
||||
bounds: props.bounds || undefined,
|
||||
fitBoundsOptions: FIT_OPTS,
|
||||
// THE SHARED EDGE-SCROLL STRIPS, on by Driver decision (2026-09-24, via shepherd card
|
||||
// BUILD-REGIONS-MAP-RESTORE-EDGE-SCROLL-STRIPS). This was deliberately false, and the reason is
|
||||
// THE SHARED EDGE-SCROLL STRIPS, on by decision. This was deliberately false, and the reason is
|
||||
// kept here rather than deleted because it is the thing to re-examine if the result looks wrong:
|
||||
// the map sits inside a SCROLLING dashboard, so the gray "you can scroll past me" gutters read
|
||||
// as part of the page rather than as map chrome — unlike the reference maps
|
||||
|
|
@ -160,7 +159,7 @@ const { map, isMapReady, initializeMap, destroy } = useMapInstance({
|
|||
showEdgeBorders: true,
|
||||
})
|
||||
|
||||
// THE REGION COLOURS, CARRIED ONTO THE LANDMASSES (Driver card, 2026-09-24).
|
||||
// THE REGION COLOURS, CARRIED ONTO THE LANDMASSES — a sanctioned addition.
|
||||
// The pins already paint by region via the shared expression (regionColorExpression, below at the
|
||||
// pin layer). The polygons cannot use that expression directly: it matches on ['get','region'],
|
||||
// which is a property of OUR geojson, while the boundary tileset's features carry
|
||||
|
|
@ -239,7 +238,7 @@ function pinExpressions() {
|
|||
// Worth being precise, because "keep the stroke opaque while dimming the fill" was the
|
||||
// proposed fix and it was already the behaviour — it was the CAUSE, not the cure.
|
||||
strokeOpacity: lit ? ['case', isLit, 1, 0.3] : 1,
|
||||
// THE RESTING STATE IS BIGGER THAN THE CLONE'S, and only here. The Driver reported the pins
|
||||
// THE RESTING STATE IS BIGGER THAN THE CLONE'S, and only here. Reported: the pins
|
||||
// as hard to see; this is the state that answers that, because it is what the page shows on
|
||||
// load, before any hover. Two things make a pin harder to read on THIS map than on a cloned
|
||||
// country page, and neither is taste:
|
||||
|
|
@ -252,7 +251,7 @@ function pinExpressions() {
|
|||
// goes 0.9 -> 1 for the same reason: at this size, 10% transparency over a basemap is a
|
||||
// visible loss of contrast and buys nothing when nothing is being de-emphasised yet.
|
||||
// The HOVER state is deliberately untouched — dimming the rest to 0.25 is the design saying
|
||||
// "these pins are one group", and that is a Driver taste call, not a legibility defect.
|
||||
// "these pins are one group", which is a taste call rather than a legibility defect.
|
||||
radius: lit
|
||||
? ['case', isLit, ['interpolate', ['linear'], ['zoom'], 2, 4.5, 6, 8], ['interpolate', ['linear'], ['zoom'], 2, 3, 6, 5.5]]
|
||||
: ['interpolate', ['linear'], ['zoom'], 2, 4, 6, 7.5],
|
||||
|
|
@ -405,7 +404,7 @@ function popupHtml(p) {
|
|||
const name = esc(p.name || '')
|
||||
const subtitle = [p.country, p.rop1].filter(Boolean).map(esc).join(' · ')
|
||||
// ★ NUMBER FORMAT IS HELD, AND THAT MEANS THE GROUPING TOO -- NOT JUST THE DIGITS.
|
||||
// 'NUMERALS ARE HELD' (COMMON.md; Driver via shepherd 2026-09-26) covers the whole formatted
|
||||
// 'NUMERALS ARE HELD' (COMMON.md) covers the whole formatted
|
||||
// number, so per-locale grouping is itself the held decision. I misread it as a digits-only rule
|
||||
// and shipped `${locale}-u-nu-latn`, which keeps digits Latin but lets the SEPARATORS follow the
|
||||
// locale (de 1.234.567, ru 1 234 567). That is the held choice being made by one map, which is
|
||||
|
|
@ -418,10 +417,10 @@ function popupHtml(p) {
|
|||
// the older form, from 29eaf3a6.
|
||||
//
|
||||
// THEIRS DIFFERS, deliberately and temporarily: their formatPopulation is
|
||||
// toLocaleString(languageCode). Exact parity is on hold, not abandoned -- when the Driver rules,
|
||||
// toLocaleString(languageCode). Exact parity is PROVISIONAL, pending a product decision --
|
||||
// this line and the two sibling formatters change together.
|
||||
//
|
||||
// EVIDENCE FOR THAT RULING, measured here and passed to the Driver's card: a REGIONED tag is what
|
||||
// EVIDENCE FOR THAT DECISION, measured here and carried back: a REGIONED tag is what
|
||||
// switches the digit system, not the bare language code --
|
||||
// ar -> numberingSystem=latn -> 1,234,567
|
||||
// ar-EG -> numberingSystem=arab -> ١٬٢٣٤٬٥٦٧
|
||||
|
|
@ -582,7 +581,7 @@ function chooserZoom(m) {
|
|||
// `.name` off it threw a TypeError. That read sat OUTSIDE the try, so the throw escaped
|
||||
// fitTheirWay, escaped applySubject() — of which it is the last statement — and the camera was
|
||||
// never framed. Opening a region dashboard under MapLibre therefore left the map wherever it was
|
||||
// instead of flying to the region, which is exactly what the Driver reported.
|
||||
// instead of flying to the region, which is exactly the reported symptom.
|
||||
// ★ BOTH OF THESE NOW COME FROM library/useMapProvider (C2). Mine read the engine from CONFIG
|
||||
// (isMaplibreProvider), which is weaker than reading it from the INSTANCE: a page configured for one
|
||||
// engine can hold a map built by the other. The library version instance-tests, which is what
|
||||
|
|
@ -684,9 +683,8 @@ onMounted(async () => {
|
|||
try {
|
||||
await initializeMap()
|
||||
if (!map.value) { mapFailed.value = true; return }
|
||||
// THEIR MAP CONTROLS, ported verbatim (CountryMap.vue:181-182). The Driver caught that these
|
||||
// were missing: "you were not to remove the map controls for full screen and for zooming so
|
||||
// this is not a full clone". Neither this component nor useMapInstance added any control, and
|
||||
// THEIR MAP CONTROLS, ported verbatim (CountryMap.vue:181-182). These were MISSING, which makes
|
||||
// it not a full clone: the fullscreen and zoom controls are part of the cloned surface. Neither this component nor useMapInstance added any control, and
|
||||
// NO diff covered them — every vs-live probe compares computed CSS and text, so two whole
|
||||
// controls could be absent and still report 79/79 identical. Their exact options and corner:
|
||||
// new mapboxgl.NavigationControl({ showCompass: false }), 'top-right'
|
||||
|
|
@ -802,7 +800,7 @@ useShadowStyles(
|
|||
'.map-scroll-edge--left{left:0}' +
|
||||
'.map-scroll-edge--right{right:0}' +
|
||||
|
||||
// ── ★ PRINT: THE LEGEND GOES BESIDE THE MAP, NOT OVER IT (Driver test round 2, #2) ──────────
|
||||
// ── ★ PRINT: THE LEGEND GOES BESIDE THE MAP, NOT OVER IT ───────────────────────────────────
|
||||
// This plugin shipped with NO @media print rule at all, which is the single cause behind all
|
||||
// three of his symptoms: on paper the legend stayed absolutely positioned ON the map, the map
|
||||
// kept a 780px min-height and a 16/9 ratio that no page can hold, and the interactive chrome
|
||||
|
|
@ -822,7 +820,7 @@ useShadowStyles(
|
|||
// would print as two empty 40px columns beside the map.
|
||||
' .map-scroll-edge, .mapboxgl-ctrl-group, .maplibregl-ctrl-group, .mapboxgl-ctrl-attrib-button, .maplibregl-ctrl-attrib-button{ display:none !important; }' +
|
||||
'}' +
|
||||
// ★ THE SCROLL STRIPS WERE SWALLOWING THE MAP CONTROLS (Driver, on Mapbox): zoom in, zoom out
|
||||
// ★ THE SCROLL STRIPS WERE SWALLOWING THE MAP CONTROLS (reported on Mapbox): zoom in, zoom out
|
||||
// and fullscreen could not be clicked at all. The strips are 40px wide, full height,
|
||||
// pointer-events:auto and z-index:2 — and BOTH engines place their control groups in the very
|
||||
// corners the strips cover. Equal z-index means the later element in the DOM wins, and the
|
||||
|
|
@ -879,13 +877,13 @@ useShadowStyles(
|
|||
// ★ THE CHOOSER IS SQUARE ON MOBILE, AND THIS IS GEOMETRY RATHER THAN TASTE.
|
||||
// Their .country-map flips to aspect-ratio 1/2 under 768px and the rule above ports that verbatim
|
||||
// -- correct for the CLONE pages, which frame one region or country in portrait. The chooser is
|
||||
// the Driver's sanctioned addition and renders under the GLOBE projection, so its subject is a
|
||||
// a sanctioned addition and renders under the GLOBE projection, so its subject is a
|
||||
// CIRCLE whose diameter cannot exceed the frame's short side. In a 1:2 frame that circle covers at
|
||||
// most W/2W = 50% of the height: at 390px wide, 390px of globe in a 780px box and the rest empty.
|
||||
// A SQUARE is the only frame a circle fills on BOTH axes -- vertical coverage 50% -> 100%, and area
|
||||
// fill pi/4 = 78.5%, the maximum a circle can reach in any rectangle. Taller wastes height, wider
|
||||
// wastes width. Driver 2026-09-26: "the only changes are to the map to make it look better, and to
|
||||
// add the all-regions map ... which needs to be intuitive". So: chooser ONLY, and the cloned pages
|
||||
// wastes width. The sanctioned scope is: improve the map's LOOK and add the all-regions map,
|
||||
// which must be intuitive. So: chooser ONLY, and the cloned pages
|
||||
// above keep their 1/2 untouched.
|
||||
'@media (max-width:768px){ .rcm--chooser{ aspect-ratio:1/1; } }' +
|
||||
'.rcm__canvas{ position:absolute; inset:0; }' +
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Bundle entry — registers the regions-dashboard web component.
|
||||
*
|
||||
* This bundle ships the Driver's 2-tab Regions element as three flat profiles:
|
||||
* This bundle ships the 2-tab Regions element as three flat profiles:
|
||||
* regions-list.vue — tab 1, "Regions List"
|
||||
* region-dashboards.vue — tab 2, "Region Dashboards"
|
||||
* regions-mfe.vue — the COMPOSITE that carries the SELECT VIEW switcher over both
|
||||
|
|
|
|||
|
|
@ -144,7 +144,7 @@ useDocumentFont('Bebas Neue', BEBAS_NEUE_FACES, fontAssetsBase)
|
|||
// wider per glyph. Registered the same way and for the same reason as Bebas.
|
||||
useDocumentFont('Poppins', POPPINS_FACES, fontAssetsBase)
|
||||
// Figtree stands in for Brandon Grotesque, which is commercial and must not ship in a public
|
||||
// giveaway (Driver, 2026-09-24). @font-face is DOCUMENT-scoped, so it registers here beside
|
||||
// giveaway. @font-face is DOCUMENT-scoped, so it registers here beside
|
||||
// the other two rather than inside the shadow root that uses it.
|
||||
useDocumentFont('Figtree', FIGTREE_FACES, fontAssetsBase)
|
||||
// Oswald, for CYRILLIC HEADINGS ONLY. base/_globals.scss:35-44 switches every h1/h2/h3 to
|
||||
|
|
@ -174,8 +174,8 @@ const points = ref([])
|
|||
const scrollEl = ref(null)
|
||||
const loading = ref(true)
|
||||
|
||||
// ★ PRINT (Driver test round 2, #2 — the half the @media print rules could not do). The complaint
|
||||
// was "no loading indicator on a click": the reader presses Print, the dialog takes a second to
|
||||
// ★ PRINT — the half the @media print rules could not do. The reported complaint was
|
||||
// "no loading indicator on a click": the reader presses Print, the dialog takes a second to
|
||||
// rise, and nothing on the page says anything is happening. Worse on this page than most, because
|
||||
// what the dialog is waiting for is a MAP — press it a moment early and the sheet carries a grey
|
||||
// rectangle where the map should be.
|
||||
|
|
@ -809,7 +809,7 @@ useShadowStyles(
|
|||
' margin-left:auto; margin-right:auto; }' +
|
||||
'.rd-status{ padding:var(--spacing-xl); text-align:center; color:var(--dx-muted); font-size:var(--font-size-md); }' +
|
||||
|
||||
// ── ★ PRINT: LET THE DOCUMENT FLOW ONTO PAGES (Driver test round 2, #2) ──────────────────────
|
||||
// ── ★ PRINT: LET THE DOCUMENT FLOW ONTO PAGES ───────────────────────────────────────────────
|
||||
// "The header and footer don't show properly" has a structural cause, not a styling one. This
|
||||
// page is an app shell: .rd-root is position:absolute inset:0 and .rd-scroll owns the scroll.
|
||||
// On paper there is no viewport to be absolute INSIDE and no scrollbar to move, so the browser
|
||||
|
|
@ -884,8 +884,8 @@ useShadowStyles(
|
|||
// ── .region-stats: RegionDetail.vue's scoped block. The GRID stays here and the CARD went to the
|
||||
// library, deliberately: how many stats there are and how they wrap is this page's decision,
|
||||
// while the look of one stat is the reusable part. See library/components/regions/StatCard.vue.
|
||||
// ★ auto-FILL WITH A CAPPED TRACK MINIMUM. Driver test round 2: the Population card — the LAST
|
||||
// of four — was centred in a box four times too wide on a tablet. Cause: auto-FIT collapses the
|
||||
// ★ auto-FILL WITH A CAPPED TRACK MINIMUM. Reported: the Population card — the LAST of four —
|
||||
// was centred in a box four times too wide on a tablet. Cause: auto-FIT collapses the
|
||||
// empty tracks, so at 3 columns the lone card in row 2 stretched across the whole row. Desktop
|
||||
// fits all four, which is why only desktop looked right.
|
||||
// auto-fill alone fixes that and breaks desktop: at 1200px it makes SIX tracks for four cards,
|
||||
|
|
@ -894,8 +894,8 @@ useShadowStyles(
|
|||
// orphan is never stretched. Measured at 1200/1000/900/800/768/700/600/500/390 — four columns
|
||||
// down to 800, three to 600, two below, no empty tracks at any of them.
|
||||
// ⚠ THIS NOW DIFFERS FROM dx-life, deliberately. Theirs is the same auto-fit rule
|
||||
// (RegionDetail.vue:176) and stretches the same card; the Driver reported it, and dx-shepherd is
|
||||
// telling him it diverges.
|
||||
// (RegionDetail.vue:176) and stretches the same card, so the clone diverges here deliberately;
|
||||
// the divergence is being carried back as a product question.
|
||||
'.rd-stats{ display:grid;' +
|
||||
' grid-template-columns:repeat(auto-fill, minmax(max(180px, calc((100% - 3 * var(--spacing-md)) / 4)), 1fr));' +
|
||||
' gap:var(--spacing-md); }' +
|
||||
|
|
@ -920,7 +920,7 @@ useShadowStyles(
|
|||
// instead of ~190 — about 50% more map on load. It does NOT get the whole map above the fold,
|
||||
// and nothing that leaves the map at 780px can: you would need the map under ~320px tall. That
|
||||
// fix exists (bound .rcm by viewport height) but it changes the map's rendered SIZE, which is a
|
||||
// change to what the Campaign Server shows, so it is the Driver's call and not mine.
|
||||
// change to what the Campaign Server shows, so it is PROVISIONAL, pending a product decision.
|
||||
//
|
||||
// SCOPED TO THE ALL-REGIONS PAGE ONLY (.rd-root--all), and at >=1200px only. That page is ours;
|
||||
// the region and country pages are the clone, and their vertical rhythm is measured against
|
||||
|
|
@ -1184,8 +1184,8 @@ useShadowStyles(
|
|||
/>
|
||||
</div>
|
||||
|
||||
<!-- THE REGION KEY — chooser only, and it is a CONTROL as well as a key: the Driver
|
||||
asked for a map that "would show the regions and countries and let you select one".
|
||||
<!-- THE REGION KEY — chooser only, and it is a CONTROL as well as a key: the requirement
|
||||
is a map that shows the regions and countries AND lets a reader select one.
|
||||
Rendered in REGION_ORDER because that is the order the palette's CVD separation was
|
||||
validated in. Buttons, not swatches with click handlers, so the keyboard reaches
|
||||
them and check:a11y-button-names has a name to find. -->
|
||||
|
|
|
|||
|
|
@ -54,9 +54,9 @@ import { summarizeRegions, PEOPLE_GROUP_LIST_FIELDS } from '@map/utils/countries
|
|||
// DX-life's spacing/type scales under THEIR token names. Prepended to this
|
||||
// component's shadow CSS so every var() below resolves inside the shadow root.
|
||||
import { DXLIFE_TOKENS } from './dxlife-tokens.js'
|
||||
// THE COUNTRY-POSTER DROPDOWN (Driver 2026-09-24) — the THIRD sanctioned addition, after the
|
||||
// SELECT VIEW tab strip and the no-selection chooser. Their wording: "a toggle or carrot added
|
||||
// to the bottom of each region section that says view country posters".
|
||||
// THE COUNTRY-POSTER DROPDOWN — the THIRD sanctioned addition, after the SELECT VIEW tab strip
|
||||
// and the no-selection chooser. The requirement: a toggle at the bottom of each region section
|
||||
// that opens that region's country posters.
|
||||
//
|
||||
// NOTHING HERE IS REBUILT. PosterWall is already the shared, fully parameterised grid that
|
||||
// my-upg-100-list/poster-wall.vue and country-posters/country-poster-wall.vue both render, and
|
||||
|
|
@ -155,7 +155,7 @@ useDocumentFont('Bebas Neue', BEBAS_NEUE_FACES, fontAssetsBase)
|
|||
// wider per glyph. Registered the same way and for the same reason as Bebas.
|
||||
useDocumentFont('Poppins', POPPINS_FACES, fontAssetsBase)
|
||||
// Figtree stands in for Brandon Grotesque, which is commercial and must not ship in a public
|
||||
// giveaway (Driver, 2026-09-24). @font-face is DOCUMENT-scoped, so it registers here beside
|
||||
// giveaway. @font-face is DOCUMENT-scoped, so it registers here beside
|
||||
// the other two rather than inside the shadow root that uses it.
|
||||
useDocumentFont('Figtree', FIGTREE_FACES, fontAssetsBase)
|
||||
// Oswald, for CYRILLIC HEADINGS ONLY. base/_globals.scss:35-44 switches every h1/h2/h3 to
|
||||
|
|
@ -172,8 +172,8 @@ const loadFailed = ref(false)
|
|||
|
||||
// ── same field list the source page's PEOPLE_GROUP_LIST_FIELDS asks for ─────
|
||||
// Their PEOPLE_GROUP_LIST_FIELDS, imported rather than restated — one list, one source.
|
||||
// ★ THIS PAGE ASKS FOR TWO FIELDS, NOT EIGHT. The Driver reported the list page being slow and
|
||||
// guessed the posters; the posters are behind a v-if and never load until a region is opened. The cost
|
||||
// ★ THIS PAGE ASKS FOR TWO FIELDS, NOT EIGHT. The list page was reported slow, with the posters
|
||||
// suspected; the posters are behind a v-if and never load until a region is opened. The cost
|
||||
// was this fetch: it requested the full PEOPLE_GROUP_LIST_FIELDS for EVERY people group, then
|
||||
// summarizeRegions computed population, adoption, engagement, commitment and pin lat/lngs from them —
|
||||
// and this page renders NONE of that. It shows a region's label, its group count, its country count
|
||||
|
|
@ -319,8 +319,8 @@ const posterGroupBy = () => 'countries'
|
|||
// PosterWall's "Show on map" dispatches a window CustomEvent carrying listId (the poster id,
|
||||
// e.g. "country-chn") or null when the user toggles the same card off. Mapping that id back to
|
||||
// the country record and reusing selectCountry() is what makes the button open the dashboard
|
||||
// tab for that country — the Driver's "click view on map button, which will open the country
|
||||
// dashboard page for that country".
|
||||
// tab for that country: the requirement is that the view-on-map button opens the country
|
||||
// dashboard page for that country.
|
||||
function onPosterShowOnMap(ev) {
|
||||
const d = ev?.detail || {}
|
||||
if (!String(d.instanceId || '').startsWith(instanceId.value)) return
|
||||
|
|
@ -353,7 +353,7 @@ onMounted(loadRegions)
|
|||
// resolving the SCSS token files (tokens/semantic/_spacing.scss, _shapes.scss, _colors.scss,
|
||||
// _typography.scss) AND reading getComputedStyle() live on https://doxa.life/regions — both agree.
|
||||
// Colours/fonts/radii are an intentional exception to this repo's material-light chrome tokens —
|
||||
// the Driver asked for an exact clone of DX-life's OWN design here, so the clone wins.
|
||||
// an exact clone of DX-life's OWN design is required here, so the clone wins.
|
||||
useShadowStyles(
|
||||
// Their _reset.scss:3-8 FIRST -- see src/shadowReset.js.
|
||||
SHADOW_BOX_SIZING_RESET +
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
"regions-dashboard/regions-list",
|
||||
"regions-dashboard/region-dashboards"
|
||||
],
|
||||
"note": "The Driver's 2-tab Regions element. Composite MFE on the pane-wrapper layout, imitating my-upg-100-list/upg-100-mfe: a SELECT VIEW switcher (library/components/ViewSelect.vue) over Regions List at [0,0] and Region Dashboards at [1,0]. Clicking a region or country on tab 1 forwards the selection on 'doxa-regions-dashboard:select' and swaps to tab 2. pinHint:false: the cloned pages carry no coach-mark, and the composite must declare it because a pane's config comes from here, not from the child's own meta.",
|
||||
"note": "The 2-tab Regions element. Composite MFE on the pane-wrapper layout, imitating my-upg-100-list/upg-100-mfe: a SELECT VIEW switcher (library/components/ViewSelect.vue) over Regions List at [0,0] and Region Dashboards at [1,0]. Clicking a region or country on tab 1 forwards the selection on 'doxa-regions-dashboard:select' and swaps to tab 2. pinHint:false: the cloned pages carry no coach-mark, and the composite must declare it because a pane's config comes from here, not from the child's own meta.",
|
||||
"config": {
|
||||
"pinHint": false
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@
|
|||
* (region-dashboards). Clicking a region or a country on tab 1 swaps to tab 2 with that
|
||||
* selection already applied.
|
||||
*
|
||||
* IMITATES upg-100-mfe.vue, does not reinvent it. That file is this repo's reference composite,
|
||||
* and the Driver named it explicitly as the thing to copy. Same shape, tab for tab:
|
||||
* IMITATES upg-100-mfe.vue, does not reinvent it. That file is this repo's reference composite
|
||||
* and the sanctioned thing to copy. Same shape, tab for tab:
|
||||
* • the pane-wrapper layout (buildPaneColumn + PANE_GRID_STYLES) supplies the scrolling column
|
||||
* • the SAME View switcher in the header — now the SHARED library component ViewSelect.vue,
|
||||
* which is that control extracted from upg-100-mfe rather than copied a third time
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ const EXTRACTED = [
|
|||
tag: 'RegionSectionCard',
|
||||
owns: ['region-card', 'countries-grid', 'country-link'],
|
||||
},
|
||||
// ── REGLIB batch 2: the Driver's "banners/cards that tell you the prayer progress" ─────────────
|
||||
// ── REGLIB batch 2: the banners/cards that report prayer progress ──────────────────────────────
|
||||
{
|
||||
lib: 'library/components/regions/StatCard.vue',
|
||||
consumer: 'plugin-designs/regions-dashboard/region-dashboards.vue',
|
||||
|
|
|
|||
|
|
@ -215,7 +215,7 @@ const preFiltered = computed(() => rows.value.filter((p) => {
|
|||
// MEASURED on their live /regions/india: 855 rows before, 0 after clicking Engaged.
|
||||
// The scope ruling is "it exists on DX-life and must MATCH", so this reproduces their
|
||||
// result rather than quietly correcting it. Reading people_committed instead would make
|
||||
// us DIFFER. Flagged for the Driver: the upstream fix is one word, in their file.
|
||||
// us DIFFER. Raised upstream as a product question: the fix is one word, in their file.
|
||||
if (k === 'engaged') { if (!((p.people_praying ?? 0) > 0)) return false; continue }
|
||||
// Their `exact` branch is `filtered = filtered` — a no-op here. It only changes the FUSE
|
||||
// threshold once a search term exists, which is where we already read active.exact.
|
||||
|
|
@ -462,7 +462,7 @@ useShadowStyles(
|
|||
' border-radius:100px; border:1px solid transparent; line-height:1; text-decoration:none;' +
|
||||
' text-transform:uppercase; font-size:var(--font-size-md);' +
|
||||
// THEIR FAMILY IS "Brandon Grotesque", WHICH IS COMMERCIAL — the one substitution RULE 1
|
||||
// allows, and the Driver ruled it must not ship in a public giveaway (2026-09-24).
|
||||
// allows, and a commercial face must not ship in a public giveaway.
|
||||
// Figtree chosen by MEASUREMENT, not by name: on live doxa.life their button renders
|
||||
// 'FULL PROFILE' at 128.00px in Brandon at 500/19.5312px. Of 19 libre grotesques measured
|
||||
// the same way, Figtree is 126 (-2.00) — closest — against Inter 134, Archivo 135,
|
||||
|
|
|
|||
Loading…
Reference in a new issue