diff --git a/documentation/reference-capability-exemplars.md b/documentation/reference-capability-exemplars.md index 5fdf202cb..2a5baa455 100644 --- a/documentation/reference-capability-exemplars.md +++ b/documentation/reference-capability-exemplars.md @@ -57,7 +57,6 @@ Generated from 30 bundle(s). | `poster-design` | `poster-sizes` | `single` | | `poster-design` | `poster-styles` | `single` | | `prayer-walk-planner` | `prayer-walk-planner` | `single` | -| `regions-dashboard` | `country-poster-sections` | `single` | | `regions-dashboard` | `region-dashboards` | `single` | | `regions-dashboard` | `regions-list` | `single` | diff --git a/internal/element-census/regions-dashboard.json b/internal/element-census/regions-dashboard.json index 024118b31..5b63c1d5a 100644 --- a/internal/element-census/regions-dashboard.json +++ b/internal/element-census/regions-dashboard.json @@ -8,7 +8,7 @@ "neg": { "leaf": "regions-dashboard/regions-list/index.html", "text": "View country posters" }, "sanctioned": [ { - "match": "^(Select view|Regions List|Dashboard|Country Posters)$", "flags": "i", + "match": "^(Select view|Regions List|Dashboard)$", "flags": "i", "what": "the SELECT VIEW tab strip — sanctioned addition #1", "ruling": "the tabs added, and what the dashboard tab shows before a region or country is selected", "date": "2026-09-24", "card": "SPEC-REGIONS-IS-A-CLONE-PLUS-EXACTLY-TWO-ADDITIONS" diff --git a/plugin-designs/regions-dashboard/country-poster-sections.meta.json b/plugin-designs/regions-dashboard/country-poster-sections.meta.json deleted file mode 100644 index 9f3005b33..000000000 --- a/plugin-designs/regions-dashboard/country-poster-sections.meta.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "single", - "label": "Regions — country posters by region", - "note": "The Regions dashboard's third view: one collapsible per region (the library's element, the same cards and print options as the Country Posters wall), starting shut, in the page's locale. The regions are the ones the poster data files its countries under, in the dashboard's region order." -} diff --git a/plugin-designs/regions-dashboard/country-poster-sections.vue b/plugin-designs/regions-dashboard/country-poster-sections.vue deleted file mode 100644 index 9dae22f4b..000000000 --- a/plugin-designs/regions-dashboard/country-poster-sections.vue +++ /dev/null @@ -1,66 +0,0 @@ - - - diff --git a/plugin-designs/regions-dashboard/regions-list.vue b/plugin-designs/regions-dashboard/regions-list.vue index 61da5969c..b659b9270 100644 --- a/plugin-designs/regions-dashboard/regions-list.vue +++ b/plugin-designs/regions-dashboard/regions-list.vue @@ -61,8 +61,8 @@ import { DXLIFE_TOKENS } from './dxlife-tokens.js' // // NOTHING HERE IS REBUILT. Each region's posters are the library's // (library/elements/posterSectionElement.js), the same section, cards and print options as the Country Posters -// wall and the Regions dashboard's third view, so the list is composed from the shared element rather than -// drawing a wall of its own. This file supplies only the toggle and the region. +// wall, so the list is composed from the shared element rather than drawing a wall of its own. This file supplies +// only the toggle and the region. import RegionSectionCard from '@map/components/regions/RegionSectionCard.vue' import { resolveAssetsBase } from '@map/utils/embedBase.js' import { registerPosterSectionElement } from '@map/elements/posterSectionElement.js' @@ -309,9 +309,8 @@ const postersOpen = (region) => openPosters.value.has(region.slug) // the country record and reusing selectCountry() is what makes the button open the dashboard // tab for that country: the requirement is that the view-on-map button opens the country // dashboard page for that country. -// The library's poster sections name themselves 'poster-section-country-' (PosterSectionView.vue). In the -// Regions composite this list is always mounted, so it also answers the third view's sections (Country Posters): -// ONE handler for both, which keeps the region context in the selection. +// The library's poster sections name themselves 'poster-section-country-' (PosterSectionView.vue); selecting +// through selectCountry() keeps the region context in the selection. function onPosterShowOnMap(ev) { const d = ev?.detail || {} if (!String(d.instanceId || '').startsWith('poster-section-country-')) return diff --git a/plugin-designs/regions-dashboard/regions-mfe.vue b/plugin-designs/regions-dashboard/regions-mfe.vue index 34de2472b..2efe33d2f 100644 --- a/plugin-designs/regions-dashboard/regions-mfe.vue +++ b/plugin-designs/regions-dashboard/regions-mfe.vue @@ -24,7 +24,7 @@ * listens for, and scrolls to tab 2. That is the same seam upg-100-mfe uses for the poster * wall's 'show-on-map', and it keeps each pane under its own ProfileLoader/Pinia. */ -import { ref, computed, inject, onMounted, onBeforeUnmount, watch, nextTick } from 'vue' +import { ref, computed, inject, onMounted, onBeforeUnmount } from 'vue' import { usePaneConfig } from '@map/composables/usePaneConfig.js' import { buildPaneColumn, PANE_GRID_STYLES } from '@map/layouts/pane-wrapper/pane-wrapper.js' import { useShadowStyles } from '@map/composables/useShadowStyles.js' @@ -47,11 +47,8 @@ import MapInfoButton from '@map/components/map-controls/MapInfoButton.vue' // them to 97 and fail the gate. The moment someone adds these three strings to all locales, // the strip localises with no code change here. import { useRegionsI18n } from '@map/i18n/useRegionsI18n.js' -// The third view's label is the gallery's own tab name for country posters (tabs.countryPosters, all eleven locales). -import { useOptionalT } from '@map/composables/useOptionalT.js' const { t } = useRegionsI18n() -const tKey = useOptionalT('') const cfg = inject('profileConfig', ref(null)) const uiStore = inject('uiStore', null) const isDark = computed(() => !!uiStore?.isDark) @@ -73,8 +70,6 @@ const spec = computed(() => ({ panes: [ { id: 'list', label: t('Regions List'), at: [0, 0], config: { profile: 'regions-list' } }, { id: 'dashboard', label: t('Region Dashboards'), at: [1, 0], config: { profile: 'region-dashboards' } }, - // THE THIRD VIEW: country posters, one collapsible section per region (the library's ). - { id: 'posters', label: tKey('tabs.countryPosters'), at: [2, 0], config: { profile: 'country-poster-sections' } }, ], // The View switcher lives in this element's own header, so the layout's "… below ↓" pill // would be a second, redundant control (same call upg-100-mfe makes). @@ -151,13 +146,6 @@ function go(id) { column?.scrollTo(id) } -// On a phone the three tabs scroll sideways (see the 600px rule below): keep the current one in view. -const hdr = ref(null) -watch(view, () => nextTick(() => { - const b = hdr.value && hdr.value.querySelector('.seg button[aria-pressed="true"]') - if (b && b.scrollIntoView) b.scrollIntoView({ inline: 'center', block: 'nearest' }) -})) - // ── tab 1 -> tab 2: forward the selection, then swap the visible pane ─────── const SELECT_EVENT = 'doxa-regions-dashboard:select' @@ -181,10 +169,6 @@ function onCountrySelected(e) { forwardSelection({ regionSlug: d.region?.slug || '', countrySlug: d.slug || '' }) } -// A card's "Show on map" in the third view (Country Posters) opens that country's dashboard: the Regions list pane -// (always mounted here) answers every poster section's event with its own selectCountry(), which arrives above as -// 'country-selected'. One handler for both views (regions-list.vue onPosterShowOnMap). - onMounted(() => { if (!stage.value) return column = buildPaneColumn(spec.value, { host: stage.value }) @@ -250,14 +234,6 @@ useShadowStyles(SHADOW_BOX_SIZING_RESET + PANE_GRID_STYLES + '\n' + // ON A PHONE the centred view switcher (about 290 px at 390) leaves no room for two buttons at one end, so the // ⓘ takes the header's START edge, where the floating ⓘ sat before; Share keeps the end. '@media (max-width: 600px){ .rmfe .hdr .hdr-btns > :first-child{ position:absolute; inset-inline-start:12px; top:50%; transform:translateY(-50%); } }' + - // THREE VIEWS DO NOT FIT A PHONE'S HEADER (measured at 390: the tabs need about 390 px and ran under the corner - // buttons). The switcher keeps the room between the two 36 px buttons (12 + 36 + 8 on each side) and its tab row - // scrolls sideways, every label whole; the current tab is scrolled into view on each change. A fieldset is - // min-content wide by default, hence min-width:0. Desktop is unchanged. - '@media (max-width: 600px){ .rmfe .hdr .viewsel{ min-width:0; max-width:calc(100% - 112px); }' + - ' .rmfe .hdr .viewsel .seg{ overflow-x:auto; scrollbar-width:none; scroll-snap-type:x proximity; -webkit-overflow-scrolling:touch; }' + - ' .rmfe .hdr .viewsel .seg::-webkit-scrollbar{ display:none; }' + - ' .rmfe .hdr .viewsel .seg button{ flex:0 0 auto; scroll-snap-align:center; } }' + // Stage: the pane-wrapper column mounts here (its .pane-col is absolute). '.rmfe .stage{ position:relative; flex:1 1 auto; min-height:0; }' + '.pane > .pane-mount > *{ position:absolute; inset:0; width:100%; height:100%; display:block; }', @@ -267,7 +243,7 @@ useShadowStyles(SHADOW_BOX_SIZING_RESET + PANE_GRID_STYLES + '\n' +