diff --git a/plugin-designs/doxa-maps-spa/EMBED.md b/plugin-designs/doxa-maps-spa/EMBED.md index 0ee1e8f14..16ed1e1de 100644 --- a/plugin-designs/doxa-maps-spa/EMBED.md +++ b/plugin-designs/doxa-maps-spa/EMBED.md @@ -65,7 +65,7 @@ Add `?tab=` to the `src` to open a specific map. | `home-label` | "Back to homepage" in the gallery’s language | The link’s text, in your own words. | Tab ids: `dashboard-plus-grid` (Big Picture), `research-map-plus-grid` (Simple Research), -`regions-dashboard`, `upg-100` (UPG 100 List Posters), `prayer-map` (Prayer Progress), `country-posters`, `cities-internet`, +`regions-dashboard`, `upg-100` (UPG 100 List Posters), `prayer-map` (Prayer Progress), `country-posters`, `poster-design`, `cities-internet`, `gospel-resources`, and every Experimental bundle by its bundle name. ## Events diff --git a/plugin-designs/doxa-maps-spa/doxa-maps-spa.meta.json b/plugin-designs/doxa-maps-spa/doxa-maps-spa.meta.json index 387afabbc..da4eca625 100644 --- a/plugin-designs/doxa-maps-spa/doxa-maps-spa.meta.json +++ b/plugin-designs/doxa-maps-spa/doxa-maps-spa.meta.json @@ -1,5 +1,5 @@ { - "_comment": "Declares the composability tier. 'nested-mfe-spa' (display alias 'app-shell') = Capability-5: this plugin is the OUTER app shell of the dx-maps app, the Research Gallery. Its single element renders a vertical-tab rail whose tabs each mount a REAL, independently embeddable plugin: the shell loads that bundle's script (URL from manifest.json) and creates its registered custom element in the pane. There is no iframe mode. Tab order and grouping live in NAV_MODEL/TAB_DEFS in doxa-maps-spa.vue; `composes` below lists the eight curated tabs as bundle/profile and must be kept in step with TAB_DEFS (check:composite reads it; the studio's \"Inside doxa-maps-spa\" tree shows it). Bundles not placed in a section appear under Experimental automatically. The tier is now DERIVED from the `composes` edges below at tree generation (a profile that composes anything is cap-4; one that composes a cap-4 is cap-5), and this explicit `type` is CHECKED against that derivation rather than being the only source: if the two disagree the build fails, because one of them is stale. discover.mjs still never infers tiers 3-5 on its own.", + "_comment": "Declares the composability tier. 'nested-mfe-spa' (display alias 'app-shell') = Capability-5: this plugin is the OUTER app shell of the dx-maps app, the Research Gallery. Its single element renders a vertical-tab rail whose tabs each mount a REAL, independently embeddable plugin: the shell loads that bundle's script (URL from manifest.json) and creates its registered custom element in the pane. There is no iframe mode. Tab order and grouping live in NAV_MODEL/TAB_DEFS in doxa-maps-spa.vue; `composes` below lists the nine curated tabs as bundle/profile and must be kept in step with TAB_DEFS (check:composite reads it; the studio's \"Inside doxa-maps-spa\" tree shows it). Bundles not placed in a section appear under Experimental automatically. The tier is now DERIVED from the `composes` edges below at tree generation (a profile that composes anything is cap-4; one that composes a cap-4 is cap-5), and this explicit `type` is CHECKED against that derivation rather than being the only source: if the two disagree the build fails, because one of them is stale. discover.mjs still never infers tiers 3-5 on its own.", "type": "nested-mfe-spa", "composes": [ "dashboard-plus-grid/dashboard-plus-grid", @@ -7,9 +7,10 @@ "regions-dashboard/regions-mfe", "my-upg-100-list/upg-100-mfe", "country-posters/country-posters-mfe", + "poster-design/poster-design-mfe", "doxa-simple-map/doxa-simple-map", "cities-internet/connectivity-map", "gospel-resources/resources-map" ], - "label": "Deep Research (vertical-tab app shell: the eight production maps)" + "label": "Deep Research (vertical-tab app shell: the nine production maps)" } diff --git a/plugin-designs/doxa-maps-spa/doxa-maps-spa.vue b/plugin-designs/doxa-maps-spa/doxa-maps-spa.vue index 1d0d19941..b8504bc35 100644 --- a/plugin-designs/doxa-maps-spa/doxa-maps-spa.vue +++ b/plugin-designs/doxa-maps-spa/doxa-maps-spa.vue @@ -281,14 +281,15 @@ const NAV_MODEL = [ // // THE POSTER ROWS (2026-09-30): the section now runs Prayer Progress, UPG 100 List Posters, Country Posters, // then Poster Design. The same poster plugins also live in the Posterverse shell; each is ONE bundle, mounted - // by whichever shell opens it. Poster Design joins this list when its bundle exists: a row whose bundle is - // not in the manifest is dropped without a word (resolveTabsFromManifest), so listing it early shows nothing. + // by whichever shell opens it, under the same tab ids in both. A row whose bundle is not in the manifest is + // dropped without a word (resolveTabsFromManifest), so a row lands only after its bundle does. { key: 'prayer-mobilization', label: 'Prayer Mobilization', i18n: 'sec.prayer', icon: 'heart', tabs: [ - // Prayer Progress, then UPG 100 List Posters, then Country Posters: the published order, fixed. + // Prayer Progress, UPG 100 List Posters, Country Posters, then Poster Design: the published order, fixed. { id: 'prayer-map', icon: 'embed' }, { id: 'upg-100', icon: 'list' }, { id: 'country-posters', icon: 'poster' }, + { id: 'poster-design', icon: 'grid' }, ] }, // Gospel Research — RENAMED section (was "Research"). Cities with Internet then Gospel Resources, // per the spec's table (rows 5-6). The plain, uncomposited "Research Map" tab (doxa-research-map) @@ -497,6 +498,12 @@ const TAB_DEFS = [ id: 'country-posters', label: 'Country Posters', sub: 'a poster for every country', emoji: '🗺️', bundle: 'country-posters', profile: 'country-posters-mfe' }, + { + // The capability-4 composite again (Styles + Sizes under one view strip); poster-styles and poster-sizes + // are its single views. It draws posters, not a map, so it holds no WebGL context and is not HEAVY. + id: 'poster-design', label: 'Poster Design', sub: 'every poster style and size', emoji: '🎨', + bundle: 'poster-design', profile: 'poster-design-mfe' + }, // ── NOTE: there are deliberately NO hardcoded Experimental entries here. Every built bundle not // named above is discovered from manifest.json at runtime and appended as an Experimental tab // (see discoverExperimental + NOT_EXPERIMENTAL). That is what keeps a NEW plugin visible with diff --git a/plugin-designs/doxa-maps-spa/src/strings.js b/plugin-designs/doxa-maps-spa/src/strings.js index d56a13fce..d509bc93c 100644 --- a/plugin-designs/doxa-maps-spa/src/strings.js +++ b/plugin-designs/doxa-maps-spa/src/strings.js @@ -34,7 +34,7 @@ export const STRINGS = { // (plugin studio's catalog) so both shells name the same buttons the same way. toggleList: "Toggle list", openViews: "Open the list of views", expandList: "Expand list", collapseList: "Collapse list", collapse: "Collapse", home: "Back to homepage", // Experimental bundles known today (rail-length names; a bundle not listed keeps its manifest title). - 'tab.prayer-walk-planner': "Prayer Walk Planner", 'tab.upg-neighbor': "UPG Neighbor", 'tab.key-cities': "Key Cities", 'tab.all-people-groups': "All People Groups", 'tab.pplr-data-maps': "PPLR Data Maps", 'tab.wall-of-people-groups': "Wall of People Groups", 'tab.country-posters': "Country Posters", 'sub.country-posters': "a poster for every country", 'tab.doxa-vision-card': "Doxa Vision Card", + 'tab.prayer-walk-planner': "Prayer Walk Planner", 'tab.upg-neighbor': "UPG Neighbor", 'tab.key-cities': "Key Cities", 'tab.all-people-groups': "All People Groups", 'tab.pplr-data-maps': "PPLR Data Maps", 'tab.wall-of-people-groups': "Wall of People Groups", 'tab.country-posters': "Country Posters", 'sub.country-posters': "a poster for every country", 'tab.poster-design': "Poster Design", 'sub.poster-design': "every poster style and size", 'tab.doxa-vision-card': "Doxa Vision Card", }, es: { backToTop: 'Volver arriba', @@ -55,7 +55,7 @@ export const STRINGS = { // (plugin studio's catalog) so both shells name the same buttons the same way. toggleList: "Mostrar u ocultar la lista", openViews: "Abrir la lista de vistas", expandList: "Expandir la lista", collapseList: "Contraer la lista", collapse: "Contraer", home: "Volver a la página de inicio", // Experimental bundles known today (rail-length names; a bundle not listed keeps its manifest title). - 'tab.prayer-walk-planner': "Caminatas de oración", 'tab.upg-neighbor': "Vecino UPG", 'tab.key-cities': "Ciudades clave", 'tab.all-people-groups': "Todos los pueblos", 'tab.pplr-data-maps': "Mapas de datos PPLR", 'tab.wall-of-people-groups': "Muro de los pueblos", 'tab.country-posters': "Carteles por país", 'sub.country-posters': "un cartel para cada país", 'tab.doxa-vision-card': "Tarjeta de visión Doxa", + 'tab.prayer-walk-planner': "Caminatas de oración", 'tab.upg-neighbor': "Vecino UPG", 'tab.key-cities': "Ciudades clave", 'tab.all-people-groups': "Todos los pueblos", 'tab.pplr-data-maps': "Mapas de datos PPLR", 'tab.wall-of-people-groups': "Muro de los pueblos", 'tab.country-posters': "Carteles por país", 'sub.country-posters': "un cartel para cada país", 'tab.poster-design': "Diseño de carteles", 'sub.poster-design': "todos los estilos y tamaños de cartel", 'tab.doxa-vision-card': "Tarjeta de visión Doxa", }, fr: { backToTop: 'Retour en haut', @@ -76,7 +76,7 @@ export const STRINGS = { // (plugin studio's catalog) so both shells name the same buttons the same way. toggleList: "Afficher ou masquer la liste", openViews: "Ouvrir la liste des vues", expandList: "Déplier la liste", collapseList: "Replier la liste", collapse: "Replier", home: "Retour à l’accueil", // Experimental bundles known today (rail-length names; a bundle not listed keeps its manifest title). - 'tab.prayer-walk-planner': "Marches de prière", 'tab.upg-neighbor': "Voisin UPG", 'tab.key-cities': "Villes clés", 'tab.all-people-groups': "Tous les peuples", 'tab.pplr-data-maps': "Cartes de données PPLR", 'tab.wall-of-people-groups': "Mur des peuples", 'tab.country-posters': "Affiches par pays", 'sub.country-posters': "une affiche pour chaque pays", 'tab.doxa-vision-card': "Carte de vision Doxa", + 'tab.prayer-walk-planner': "Marches de prière", 'tab.upg-neighbor': "Voisin UPG", 'tab.key-cities': "Villes clés", 'tab.all-people-groups': "Tous les peuples", 'tab.pplr-data-maps': "Cartes de données PPLR", 'tab.wall-of-people-groups': "Mur des peuples", 'tab.country-posters': "Affiches par pays", 'sub.country-posters': "une affiche pour chaque pays", 'tab.poster-design': "Conception d’affiches", 'sub.poster-design': "tous les styles et formats d’affiche", 'tab.doxa-vision-card': "Carte de vision Doxa", }, de: { backToTop: 'Nach oben', @@ -97,7 +97,7 @@ export const STRINGS = { // (plugin studio's catalog) so both shells name the same buttons the same way. toggleList: "Liste ein-/ausblenden", openViews: "Ansichtsliste öffnen", expandList: "Liste ausklappen", collapseList: "Liste einklappen", collapse: "Einklappen", home: "Zurück zur Startseite", // Experimental bundles known today (rail-length names; a bundle not listed keeps its manifest title). - 'tab.prayer-walk-planner': "Gebetsspaziergänge", 'tab.upg-neighbor': "UPG-Nachbar", 'tab.key-cities': "Schlüsselstädte", 'tab.all-people-groups': "Alle Volksgruppen", 'tab.pplr-data-maps': "PPLR-Datenkarten", 'tab.wall-of-people-groups': "Wand der Volksgruppen", 'tab.country-posters': "Länderposter", 'sub.country-posters': "ein Poster für jedes Land", 'tab.doxa-vision-card': "Doxa-Visionskarte", + 'tab.prayer-walk-planner': "Gebetsspaziergänge", 'tab.upg-neighbor': "UPG-Nachbar", 'tab.key-cities': "Schlüsselstädte", 'tab.all-people-groups': "Alle Volksgruppen", 'tab.pplr-data-maps': "PPLR-Datenkarten", 'tab.wall-of-people-groups': "Wand der Volksgruppen", 'tab.country-posters': "Länderposter", 'sub.country-posters': "ein Poster für jedes Land", 'tab.poster-design': "Postergestaltung", 'sub.poster-design': "alle Posterstile und -größen", 'tab.doxa-vision-card': "Doxa-Visionskarte", }, pt: { backToTop: 'Voltar ao topo', @@ -118,7 +118,7 @@ export const STRINGS = { // (plugin studio's catalog) so both shells name the same buttons the same way. toggleList: "Mostrar ou ocultar a lista", openViews: "Abrir a lista de visualizações", expandList: "Expandir a lista", collapseList: "Recolher a lista", collapse: "Recolher", home: "Voltar à página inicial", // Experimental bundles known today (rail-length names; a bundle not listed keeps its manifest title). - 'tab.prayer-walk-planner': "Caminhadas de oração", 'tab.upg-neighbor': "Vizinho UPG", 'tab.key-cities': "Cidades-chave", 'tab.all-people-groups': "Todos os povos", 'tab.pplr-data-maps': "Mapas de dados PPLR", 'tab.wall-of-people-groups': "Mural dos povos", 'tab.country-posters': "Cartazes por país", 'sub.country-posters': "um cartaz para cada país", 'tab.doxa-vision-card': "Cartão de visão Doxa", + 'tab.prayer-walk-planner': "Caminhadas de oração", 'tab.upg-neighbor': "Vizinho UPG", 'tab.key-cities': "Cidades-chave", 'tab.all-people-groups': "Todos os povos", 'tab.pplr-data-maps': "Mapas de dados PPLR", 'tab.wall-of-people-groups': "Mural dos povos", 'tab.country-posters': "Cartazes por país", 'sub.country-posters': "um cartaz para cada país", 'tab.poster-design': "Design de cartazes", 'sub.poster-design': "todos os estilos e tamanhos de cartaz", 'tab.doxa-vision-card': "Cartão de visão Doxa", }, it: { backToTop: 'Torna su', @@ -141,7 +141,7 @@ export const STRINGS = { // (plugin studio's catalog) so both shells name the same buttons the same way. toggleList: "Mostra o nascondi l’elenco", openViews: "Apri l’elenco delle viste", expandList: "Espandi l’elenco", collapseList: "Comprimi l’elenco", collapse: "Comprimi", home: "Torna alla home page", // Experimental bundles known today (rail-length names; a bundle not listed keeps its manifest title). - 'tab.prayer-walk-planner': "Passeggiate di preghiera", 'tab.upg-neighbor': "Vicino UPG", 'tab.key-cities': "Città chiave", 'tab.all-people-groups': "Tutti i popoli", 'tab.pplr-data-maps': "Mappe dati PPLR", 'tab.wall-of-people-groups': "Muro dei popoli", 'tab.country-posters': "Poster per paese", 'sub.country-posters': "un poster per ogni paese", 'tab.doxa-vision-card': "Scheda visione Doxa", + 'tab.prayer-walk-planner': "Passeggiate di preghiera", 'tab.upg-neighbor': "Vicino UPG", 'tab.key-cities': "Città chiave", 'tab.all-people-groups': "Tutti i popoli", 'tab.pplr-data-maps': "Mappe dati PPLR", 'tab.wall-of-people-groups': "Muro dei popoli", 'tab.country-posters': "Poster per paese", 'sub.country-posters': "un poster per ogni paese", 'tab.poster-design': "Design dei poster", 'sub.poster-design': "tutti gli stili e i formati dei poster", 'tab.doxa-vision-card': "Scheda visione Doxa", }, ro: { backToTop: 'Sus', @@ -162,7 +162,7 @@ export const STRINGS = { // (plugin studio's catalog) so both shells name the same buttons the same way. toggleList: "Afișează sau ascunde lista", openViews: "Deschide lista de vizualizări", expandList: "Extinde lista", collapseList: "Restrânge lista", collapse: "Restrânge", home: "Înapoi la pagina principală", // Experimental bundles known today (rail-length names; a bundle not listed keeps its manifest title). - 'tab.prayer-walk-planner': "Plimbări de rugăciune", 'tab.upg-neighbor': "Vecin UPG", 'tab.key-cities': "Orașe-cheie", 'tab.all-people-groups': "Toate popoarele", 'tab.pplr-data-maps': "Hărți de date PPLR", 'tab.wall-of-people-groups': "Zidul popoarelor", 'tab.country-posters': "Afișe pe țări", 'sub.country-posters': "un afiș pentru fiecare țară", 'tab.doxa-vision-card': "Card de viziune Doxa", + 'tab.prayer-walk-planner': "Plimbări de rugăciune", 'tab.upg-neighbor': "Vecin UPG", 'tab.key-cities': "Orașe-cheie", 'tab.all-people-groups': "Toate popoarele", 'tab.pplr-data-maps': "Hărți de date PPLR", 'tab.wall-of-people-groups': "Zidul popoarelor", 'tab.country-posters': "Afișe pe țări", 'sub.country-posters': "un afiș pentru fiecare țară", 'tab.poster-design': "Design de afișe", 'sub.poster-design': "toate stilurile și dimensiunile de afiș", 'tab.doxa-vision-card': "Card de viziune Doxa", }, ru: { backToTop: 'Наверх', @@ -183,7 +183,7 @@ export const STRINGS = { // (plugin studio's catalog) so both shells name the same buttons the same way. toggleList: "Показать или скрыть список", openViews: "Открыть список представлений", expandList: "Развернуть список", collapseList: "Свернуть список", collapse: "Свернуть", home: "На главную страницу", // Experimental bundles known today (rail-length names; a bundle not listed keeps its manifest title). - 'tab.prayer-walk-planner': "Молитвенные прогулки", 'tab.upg-neighbor': "Сосед UPG", 'tab.key-cities': "Ключевые города", 'tab.all-people-groups': "Все народы", 'tab.pplr-data-maps': "Карты данных PPLR", 'tab.wall-of-people-groups': "Стена народов", 'tab.country-posters': "Плакаты по странам", 'sub.country-posters': "плакат для каждой страны", 'tab.doxa-vision-card': "Карточка видения Doxa", + 'tab.prayer-walk-planner': "Молитвенные прогулки", 'tab.upg-neighbor': "Сосед UPG", 'tab.key-cities': "Ключевые города", 'tab.all-people-groups': "Все народы", 'tab.pplr-data-maps': "Карты данных PPLR", 'tab.wall-of-people-groups': "Стена народов", 'tab.country-posters': "Плакаты по странам", 'sub.country-posters': "плакат для каждой страны", 'tab.poster-design': "Дизайн плакатов", 'sub.poster-design': "все стили и размеры плакатов", 'tab.doxa-vision-card': "Карточка видения Doxa", }, ar: { backToTop: 'إلى الأعلى', @@ -204,7 +204,7 @@ export const STRINGS = { // (plugin studio's catalog) so both shells name the same buttons the same way. toggleList: "إظهار القائمة أو إخفاؤها", openViews: "فتح قائمة العروض", expandList: "توسيع القائمة", collapseList: "طي القائمة", collapse: "طي", home: "العودة إلى الصفحة الرئيسية", // Experimental bundles known today (rail-length names; a bundle not listed keeps its manifest title). - 'tab.prayer-walk-planner': "جولات الصلاة", 'tab.upg-neighbor': "جار UPG", 'tab.key-cities': "المدن الرئيسية", 'tab.all-people-groups': "جميع الشعوب", 'tab.pplr-data-maps': "خرائط بيانات PPLR", 'tab.wall-of-people-groups': "جدار الشعوب", 'tab.country-posters': "ملصقات الدول", 'sub.country-posters': "ملصق لكل دولة", 'tab.doxa-vision-card': "بطاقة رؤية Doxa", + 'tab.prayer-walk-planner': "جولات الصلاة", 'tab.upg-neighbor': "جار UPG", 'tab.key-cities': "المدن الرئيسية", 'tab.all-people-groups': "جميع الشعوب", 'tab.pplr-data-maps': "خرائط بيانات PPLR", 'tab.wall-of-people-groups': "جدار الشعوب", 'tab.country-posters': "ملصقات الدول", 'sub.country-posters': "ملصق لكل دولة", 'tab.poster-design': "تصميم الملصقات", 'sub.poster-design': "كل أنماط الملصقات وأحجامها", 'tab.doxa-vision-card': "بطاقة رؤية Doxa", }, hi: { backToTop: 'ऊपर जाएँ', @@ -225,7 +225,7 @@ export const STRINGS = { // (plugin studio's catalog) so both shells name the same buttons the same way. toggleList: "सूची दिखाएँ या छिपाएँ", openViews: "दृश्यों की सूची खोलें", expandList: "सूची फैलाएँ", collapseList: "सूची संक्षिप्त करें", collapse: "संक्षिप्त करें", home: "होमपेज पर वापस जाएँ", // Experimental bundles known today (rail-length names; a bundle not listed keeps its manifest title). - 'tab.prayer-walk-planner': "प्रार्थना पदयात्रा", 'tab.upg-neighbor': "UPG पड़ोसी", 'tab.key-cities': "प्रमुख शहर", 'tab.all-people-groups': "सभी जनसमूह", 'tab.pplr-data-maps': "PPLR डेटा मानचित्र", 'tab.wall-of-people-groups': "जनसमूहों की दीवार", 'tab.country-posters': "देश पोस्टर", 'sub.country-posters': "हर देश के लिए एक पोस्टर", 'tab.doxa-vision-card': "Doxa दर्शन कार्ड", + 'tab.prayer-walk-planner': "प्रार्थना पदयात्रा", 'tab.upg-neighbor': "UPG पड़ोसी", 'tab.key-cities': "प्रमुख शहर", 'tab.all-people-groups': "सभी जनसमूह", 'tab.pplr-data-maps': "PPLR डेटा मानचित्र", 'tab.wall-of-people-groups': "जनसमूहों की दीवार", 'tab.country-posters': "देश पोस्टर", 'sub.country-posters': "हर देश के लिए एक पोस्टर", 'tab.poster-design': "पोस्टर डिज़ाइन", 'sub.poster-design': "हर पोस्टर शैली और आकार", 'tab.doxa-vision-card': "Doxa दर्शन कार्ड", }, zh: { backToTop: '回到顶部', @@ -246,7 +246,7 @@ export const STRINGS = { // (plugin studio's catalog) so both shells name the same buttons the same way. toggleList: "显示或隐藏列表", openViews: "打开视图列表", expandList: "展开列表", collapseList: "折叠列表", collapse: "折叠", home: "返回首页", // Experimental bundles known today (rail-length names; a bundle not listed keeps its manifest title). - 'tab.prayer-walk-planner': "祷告行走", 'tab.upg-neighbor': "UPG 邻居", 'tab.key-cities': "重点城市", 'tab.all-people-groups': "所有民族", 'tab.pplr-data-maps': "PPLR 数据地图", 'tab.wall-of-people-groups': "民族之墙", 'tab.country-posters': "国家海报", 'sub.country-posters': "每个国家一张海报", 'tab.doxa-vision-card': "Doxa 异象卡", + 'tab.prayer-walk-planner': "祷告行走", 'tab.upg-neighbor': "UPG 邻居", 'tab.key-cities': "重点城市", 'tab.all-people-groups': "所有民族", 'tab.pplr-data-maps': "PPLR 数据地图", 'tab.wall-of-people-groups': "民族之墙", 'tab.country-posters': "国家海报", 'sub.country-posters': "每个国家一张海报", 'tab.poster-design': "海报设计", 'sub.poster-design': "所有海报样式与尺寸", 'tab.doxa-vision-card': "Doxa 异象卡", } }