From 05b5a3e62b0be78fca2d88e1c67288e0ce9c89c8 Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Sun, 27 Sep 2026 05:12:46 +0000 Subject: [PATCH] Gallery: count the gospel-internet board as a heavy tab It owns up to two WebGL contexts (its map, plus the language-tree whiteboard once opened). Kept mounted by v-show, it spent the context budget that silently drops the oldest map. go-int's edit here was dropped at landing. --- plugin-designs/doxa-maps-spa/doxa-maps-spa.vue | 4 +++- public/dx-maps/doxa-maps-spa/doxa-maps-spa.js | 2 +- public/dx-maps/doxa-maps-spa/doxa-maps-spa/app/index.html | 2 +- public/dx-maps/doxa-maps-spa/doxa-maps-spa/index.html | 2 +- public/dx-maps/doxa-maps-spa/manifest.json | 4 ++-- public/dx-maps/manifest.json | 4 ++-- 6 files changed, 10 insertions(+), 8 deletions(-) diff --git a/plugin-designs/doxa-maps-spa/doxa-maps-spa.vue b/plugin-designs/doxa-maps-spa/doxa-maps-spa.vue index 3bccdb640..13ba9a59b 100644 --- a/plugin-designs/doxa-maps-spa/doxa-maps-spa.vue +++ b/plugin-designs/doxa-maps-spa/doxa-maps-spa.vue @@ -449,7 +449,9 @@ const HEAVY_ELEMENTS = new Set([ 'my-upg-100-list-map', 'doxa-map', 'doxa-maps-spa', // composites that NEST a map, so they own a context too (measured, see above) 'dashboard-plus-grid', 'research-dashboard-map', 'demo-map', 'all-people-groups', - 'country-posters-map', 'key-cities-map', 'research-map-plus-grid' + 'country-posters-map', 'key-cities-map', 'research-map-plus-grid', + // up to TWO contexts: its map, plus the language-tree whiteboard once that is opened + 'gospel-internet-board' ]) // SCROLL-STACK ELEMENTS — the rows this shell mounts WITHOUT the fixed-viewport inline style diff --git a/public/dx-maps/doxa-maps-spa/doxa-maps-spa.js b/public/dx-maps/doxa-maps-spa/doxa-maps-spa.js index d1d55654f..3bb380efa 100644 --- a/public/dx-maps/doxa-maps-spa/doxa-maps-spa.js +++ b/public/dx-maps/doxa-maps-spa/doxa-maps-spa.js @@ -280,4 +280,4 @@ .vtl.rail-collapsed:dir(rtl) .vtl-tab { padding-left:12px; padding-right:10px; } .vtl.rail-collapsed:dir(rtl) .vtl-tier { padding-left:8px; padding-right:8px; } } -`,yl=ss({name:"VerticalTabsLayout",props:{active:{type:String,default:""},title:{type:String,default:""},items:{type:Array,default:()=>[]},groups:{type:Array,default:()=>[]},navLabel:{type:String,default:"Sections"},labels:{type:Object,default:()=>({})},initialNavOpen:{type:Boolean,default:!0},header:{type:Boolean,default:!0},initialRailCollapsed:{type:Boolean,default:!1}},emits:["update:active"],setup(){return fl(vl,"vertical-tabs-layout"),{T:bl}},data(){return{navOpen:this.initialNavOpen,railCollapsed:this.initialRailCollapsed,_tabEls:{},folderOverride:{},narrow:!1,_mql:null,_onMedia:null,activatedKeys:{},hostState:{},hostError:{},_hostSlots:{},_hostMounted:{}}},computed:{railShown(){return this.narrow?this.navOpen:!0},allRows(){if(this.groups&&this.groups.length){const e=[];for(const t of this.groups)for(const o of t.rows||[])e.push(o);return e}return this.items},orderedKeys(){return this.allRows.map(e=>e.key)},elementRows(){return this.allRows.filter(e=>e&&e.element)},mountedElementRows(){return this.elementRows.filter(e=>this.activatedKeys[e.key])}},watch:{active:{immediate:!0,handler(e){this.activateElement(e)}}},mounted(){try{window.matchMedia&&(this._mql=window.matchMedia("(max-width: 760px)"),this.narrow=this._mql.matches,this.reconcileForWidth(),this._onMedia=e=>{this.narrow=e.matches,this.reconcileForWidth()},this._mql.addEventListener?this._mql.addEventListener("change",this._onMedia):this._mql.addListener&&this._mql.addListener(this._onMedia))}catch{}this.$nextTick(()=>this.activateElement(this.active))},beforeUnmount(){try{this._mql&&this._onMedia&&(this._mql.removeEventListener?this._mql.removeEventListener("change",this._onMedia):this._mql.removeListener&&this._mql.removeListener(this._onMedia))}catch{}this._mql=null,this._onMedia=null},methods:{registerTab(e,t){t&&(this._tabEls[e]=t)},isNarrow(){return this.narrow},reconcileForWidth(){this.narrow?(this.navOpen=!1,this.railCollapsed=!1):this.navOpen=!0},label(e){const t={toggleList:"Toggle list",openViews:"Open the list of views",expandList:"Expand list",collapseList:"Collapse list",collapse:"Collapse"};return this.labels&&this.labels[e]||t[e]},expandRail(){!this.narrow&&this.railCollapsed&&(this.railCollapsed=!1)},toggleRail(){this.narrow?this.navOpen=!this.navOpen:this.railCollapsed=!this.railCollapsed},setHostSlot(e,t){t&&(this._hostSlots[e]=t,this.$nextTick(()=>this.mountHostElement(e)))},activateElement(e){!e||!this.elementRows.find(o=>o.key===e)||(this.activatedKeys[e]||(this.activatedKeys={...this.activatedKeys,[e]:!0},this.hostState={...this.hostState,[e]:"loading"}),this.$nextTick(()=>this.mountHostElement(e)))},mountHostElement(e){if(this._hostMounted[e])return;const t=this.elementRows.find(s=>s.key===e),o=this._hostSlots[e];!t||!o||(this._hostMounted[e]=!0,this.hostState={...this.hostState,[e]:"loading"},_l(t.src).then(()=>$l(t.element)).then(()=>{o.innerHTML="";const s=document.createElement(t.element),n=t.attrs||{};for(const i in n){const a=n[i],r=a!=null&&typeof a=="object"?JSON.stringify(a):String(a);try{s[i]=a}catch{}try{s.setAttribute(i,r)}catch{}}s.style.cssText="display:block;position:absolute;inset:0;width:100%;height:100%;",o.appendChild(s),this.hostState={...this.hostState,[e]:"ready"}}).catch(s=>{this._hostMounted[e]=!1,this.hostState={...this.hostState,[e]:"error"},this.hostError={...this.hostError,[e]:s&&s.message||String(s)}}))},iconSvg(e){return e?hl(e):""},initial(e){const t=(e||"").trim();return t?t.charAt(0).toUpperCase():"•"},isFolderClosed(e){const t=this.folderOverride[e.key];return t!=null?!t:e.open!==!0},toggleFolder(e){const t=this.folderOverride[e],o=(this.groups||[]).find(n=>n.key===e),s=t??(o&&o.open===!0);this.folderOverride={...this.folderOverride,[e]:!s}},pick(e){this.$emit("update:active",e),this.narrow&&(this.navOpen=!1)},onKey(e){const t=this.orderedKeys;if(!t.length)return;const o=t.indexOf(this.active);let s=-1;if(e.key==="ArrowDown"||e.key==="ArrowRight")s=(o+1)%t.length;else if(e.key==="ArrowUp"||e.key==="ArrowLeft")s=(o-1+t.length)%t.length;else if(e.key==="Home")s=0;else if(e.key==="End")s=t.length-1;else return;e.preventDefault();const n=t[s];this.pick(n),this.$nextTick(()=>{const i=this._tabEls[n];i&&i.focus&&i.focus()})}}}),xl={key:0,class:"vtl-top"},wl=["aria-expanded","aria-label"],Pl={class:"vtl-brand"},kl={class:"vtl-title"},Ll={class:"vtl-meta"},Sl=["aria-expanded","aria-label"],Cl={class:"vtl-body"},El=["aria-label","aria-hidden","role","aria-orientation"],Tl=["aria-expanded","aria-label"],Nl=["innerHTML"],Rl={class:"vtl-collapse-tx"},Al=["aria-expanded","onClick"],Il={key:0,class:"vtl-cap"},Ol={class:"vtl-tl"},Fl={key:1,class:"vtl-td"},Ml=["innerHTML"],Wl={key:1,class:"vtl-tier"},Dl={key:0,class:"vtl-cap"},Hl={class:"vtl-tl"},Gl={key:1,class:"vtl-td"},jl={class:"vtl-rows"},Ul=["aria-selected","tabindex","onClick"],Vl=["innerHTML"],zl={key:1,class:"vtl-tab-emoji","aria-hidden":"true"},Bl={key:2,class:"vtl-tab-fallback","aria-hidden":"true"},Kl={class:"vtl-tab-text"},ql={class:"vtl-tab-label"},Zl={key:0,class:"vtl-tab-badge"},Xl={key:0,class:"vtl-tab-sub"},Jl=["innerHTML"],Yl=["aria-selected","tabindex","onClick"],Ql=["innerHTML"],ec={key:1,class:"vtl-tab-emoji","aria-hidden":"true"},tc={key:2,class:"vtl-tab-fallback","aria-hidden":"true"},oc={class:"vtl-tab-text"},sc={class:"vtl-tab-label"},nc={key:0,class:"vtl-tab-sub"},ic={class:"vtl-main"},ac={class:"vtl-content"},rc=["hidden"],lc={key:0,class:"vtl-host-hint"},cc={key:1,class:"vtl-host-hint err"};function pc(e,t,o,s,n,i){return A(),I("div",{class:Be(["vtl",{"nav-open":e.navOpen,"rail-collapsed":e.railCollapsed,"no-header":!e.header}])},[e.header?(A(),I("header",xl,[E("button",{class:"vtl-menu",type:"button","aria-expanded":String(e.navOpen),onClick:t[0]||(t[0]=a=>e.navOpen=!e.navOpen),"aria-label":e.label("toggleList")},"☰",8,wl),E("span",Pl,[St(e.$slots,"brand")]),E("b",kl,O(e.title),1),E("span",Ll,[St(e.$slots,"meta")])])):de("",!0),e.narrow&&!e.header&&!e.navOpen?(A(),I("button",{key:1,class:"vtl-fab",type:"button","aria-expanded":String(e.navOpen),onClick:t[1]||(t[1]=a=>e.navOpen=!0),"aria-label":e.label("openViews")},"☰",8,Sl)):de("",!0),E("div",Cl,[E("nav",{class:"vtl-nav","aria-label":e.navLabel,"aria-hidden":String(!e.railShown),role:e.$slots.rail?null:"tablist","aria-orientation":e.$slots.rail?null:"vertical"},[E("button",{type:"button",class:"vtl-collapse","aria-expanded":String(!e.railCollapsed),"aria-label":e.railCollapsed?e.label("expandList"):e.label("collapseList"),onClick:t[2]||(t[2]=(...a)=>e.toggleRail&&e.toggleRail(...a))},[E("span",{class:"vtl-collapse-ic","aria-hidden":"true",innerHTML:e.iconSvg("chevron")},null,8,Nl),E("span",Rl,O(e.label("collapse")),1)],8,Tl),e.$slots.rail?St(e.$slots,"rail",{collapsed:e.railCollapsed&&!e.narrow,expand:e.expandRail,pick:e.pick},void 0,void 0,0):e.groups&&e.groups.length?(A(!0),I(ee,{key:1},dt(e.groups,a=>(A(),I("div",{class:"vtl-grp",key:a.key},[a.folder?(A(),I("button",{key:0,type:"button",class:"vtl-tier vtl-tier-btn","aria-expanded":String(!e.isFolderClosed(a)),onClick:r=>e.toggleFolder(a.key)},[a.badge?(A(),I("span",Il,O(a.badge),1)):de("",!0),E("span",Ol,O(a.label),1),a.count!=null?(A(),I("span",Fl,O(a.count),1)):de("",!0),E("span",{class:Be(["vtl-chev",{open:!e.isFolderClosed(a)}]),"aria-hidden":"true",innerHTML:e.iconSvg("chevron")},null,10,Ml)],8,Al)):(A(),I("div",Wl,[a.badge?(A(),I("span",Dl,O(a.badge),1)):de("",!0),E("span",Hl,O(a.label),1),a.count!=null?(A(),I("span",Gl,O(a.count),1)):de("",!0)])),Qo(E("div",jl,[(A(!0),I(ee,null,dt(a.rows,r=>(A(),I("button",{key:r.key,type:"button",role:"tab",class:Be(["vtl-tab",{active:r.key===e.active}]),"aria-selected":String(r.key===e.active),tabindex:r.key===e.active?0:-1,ref_for:!0,ref:l=>e.registerTab(r.key,l),onClick:l=>e.pick(r.key),onKeydown:t[3]||(t[3]=l=>e.onKey(l))},[r.icon?(A(),I("span",{key:0,class:"vtl-tab-ic","aria-hidden":"true",innerHTML:e.iconSvg(r.icon)},null,8,Vl)):r.emoji?(A(),I("span",zl,O(r.emoji),1)):(A(),I("span",Bl,O(e.initial(r.label)),1)),E("span",Kl,[E("span",ql,[gt(O(r.label),1),r.badge?(A(),I("span",Zl,O(r.badge),1)):de("",!0)]),r.sub?(A(),I("span",Xl,[E("span",{innerHTML:r.sub},null,8,Jl)])):de("",!0)])],42,Ul))),128))],512),[[bs,!a.folder||!e.isFolderClosed(a)]])]))),128)):(A(!0),I(ee,{key:2},dt(e.items,a=>(A(),I("button",{key:a.key,type:"button",role:"tab",class:Be(["vtl-tab",{active:a.key===e.active}]),"aria-selected":String(a.key===e.active),tabindex:a.key===e.active?0:-1,ref_for:!0,ref:r=>e.registerTab(a.key,r),onClick:r=>e.pick(a.key),onKeydown:t[4]||(t[4]=r=>e.onKey(r))},[a.icon?(A(),I("span",{key:0,class:"vtl-tab-ic","aria-hidden":"true",innerHTML:e.iconSvg(a.icon)},null,8,Ql)):a.emoji?(A(),I("span",ec,O(a.emoji),1)):(A(),I("span",tc,O(e.initial(a.label)),1)),E("span",oc,[E("span",sc,O(a.label),1),a.sub?(A(),I("span",nc,O(a.sub),1)):de("",!0)])],42,Yl))),128))],8,El),E("main",ic,[e.header?St(e.$slots,"toolbar",{},void 0,void 0,0):de("",!0),E("div",ac,[(A(!0),I(ee,null,dt(e.mountedElementRows,a=>Qo((A(),I("section",{key:a.key,class:"vtl-host",hidden:a.key!==e.active},[E("div",{class:"vtl-host-slot",ref_for:!0,ref:r=>e.setHostSlot(a.key,r)},null,512),e.hostState[a.key]==="loading"?(A(),I("div",lc,O(e.T("messages.loadingNamed","Loading {name}…").replace("{name}",a.label)),1)):e.hostState[a.key]==="error"?(A(),I("div",cc,[gt(O(e.T("messages.couldNotLoadNamed","Could not load {name}.").replace("{name}",a.label)),1),t[5]||(t[5]=E("br",null,null,-1)),E("small",null,O(e.hostError[a.key]),1)])):de("",!0)],8,rc)),[[bs,a.key===e.active]])),128)),St(e.$slots,"default")])])])],2)}const dc=xi(yl,[["render",pc],["styles",[ml]]]),ys=[{code:"en",name:"English",nativeName:"English",flag:"🇺🇸"},{code:"es",name:"Spanish",nativeName:"Español",flag:"🇪🇸"},{code:"fr",name:"French",nativeName:"Français",flag:"🇫🇷"},{code:"pt",name:"Portuguese",nativeName:"Português",flag:"🇵🇹"},{code:"ar",name:"Arabic",nativeName:"العربية",flag:"🇸🇦",dir:"rtl"},{code:"ru",name:"Russian",nativeName:"Русский",flag:"🇷🇺"},{code:"de",name:"German",nativeName:"Deutsch",flag:"🇩🇪",hideFromSwitcher:!0},{code:"hi",name:"Hindi",nativeName:"हिन्दी",flag:"🇮🇳",hideFromSwitcher:!0},{code:"it",name:"Italian",nativeName:"Italiano",flag:"🇮🇹",hideFromSwitcher:!0},{code:"ro",name:"Romanian",nativeName:"Română",flag:"🇷🇴",hideFromSwitcher:!0},{code:"zh",name:"Chinese",nativeName:"中文",flag:"🇨🇳",hideFromSwitcher:!0}],uc=ys.filter(e=>!e.hideFromSwitcher);function fc(e){return ys.find(t=>t.code===e)}function wi(e){const t=String(e||"").split("-")[0].toLowerCase();return ys.some(o=>o.code===t)?t:"en"}const Pi="doxa-maps:locale";function gc(){try{const e=localStorage.getItem(Pi);if(e)return wi(e)}catch{}return wi(navigator==null?void 0:navigator.language)}function hc(e){try{localStorage.setItem(Pi,e)}catch{}}const Dt={en:{"sec.dashboards":"Dashboards","sec.prayer":"Prayer Mobilization","sec.gospel":"Gospel Research","sec.experimental":"Experimental","tab.dashboard-plus-grid":"Big Picture","sub.dashboard-plus-grid":"dashboard + people-groups grid, stacked","tab.research-map":"Research Map","sub.research-map":"prayer · engagement · regions","tab.research-map-plus-grid":"Simple Research","sub.research-map-plus-grid":"research map + people-groups grid","tab.prayer-map":"Prayer Progress","sub.prayer-map":"simple world prayer map","tab.cities-internet":"Cities with Internet","sub.cities-internet":"connectivity of key cities","tab.gospel-resources":"Gospel Resources","sub.gospel-resources":"resources by place","tab.regions-dashboard":"Regions","sub.regions-dashboard":"regions and their countries","tab.upg-100":"UPG-100 List","sub.upg-100":"my unreached list + posters",navLabel:"Research maps",meta:"{n} maps",loading:"Loading {label}…",loadFailed:"Could not load {label}.",manifestHint:"This tab is composed from manifest.json — build the tree, or serve the built tree, to load it.",desktopOnly:"desktop only",lab:"lab",experimentalSub:"experimental bundle",toggleList:"Toggle list",openViews:"Open the list of views",expandList:"Expand list",collapseList:"Collapse list",collapse:"Collapse","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","tab.doxa-vision-card":"Doxa Vision Card",desktopNotice:"Big Picture only supports desktop — open this page on a desktop to use it."},es:{"sec.dashboards":"Paneles","sec.prayer":"Movilización de oración","sec.gospel":"Investigación del Evangelio","sec.experimental":"Experimental","tab.dashboard-plus-grid":"Panorama general","sub.dashboard-plus-grid":"panel + cuadrícula de pueblos","tab.research-map":"Mapa de investigación","sub.research-map":"oración · compromiso · regiones","tab.research-map-plus-grid":"Investigación simple","sub.research-map-plus-grid":"mapa de investigación + cuadrícula de pueblos","tab.prayer-map":"Progreso de oración","sub.prayer-map":"mapa mundial de oración","tab.cities-internet":"Ciudades con Internet","sub.cities-internet":"conectividad de ciudades clave","tab.gospel-resources":"Recursos del Evangelio","sub.gospel-resources":"recursos por lugar","tab.regions-dashboard":"Regiones","sub.regions-dashboard":"regiones y sus países","tab.upg-100":"Lista UPG-100","sub.upg-100":"mi lista de no alcanzados + carteles",navLabel:"Mapas de investigación",meta:"{n} mapas",loading:"Cargando {label}…",loadFailed:"No se pudo cargar {label}.",manifestHint:"Esta pestaña se compone a partir de manifest.json: compila el árbol o sirve el árbol compilado para cargarla.",desktopOnly:"solo escritorio",lab:"beta",experimentalSub:"mapa experimental",toggleList:"Mostrar u ocultar la lista",openViews:"Abrir la lista de vistas",expandList:"Expandir la lista",collapseList:"Contraer la lista",collapse:"Contraer","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","tab.doxa-vision-card":"Tarjeta de visión Doxa",desktopNotice:"Panorama general solo funciona en escritorio: abre esta página en una computadora para usarlo."},fr:{"sec.dashboards":"Tableaux de bord","sec.prayer":"Mobilisation à la prière","sec.gospel":"Recherche sur l'Évangile","sec.experimental":"Expérimental","tab.dashboard-plus-grid":"Vue d'ensemble","sub.dashboard-plus-grid":"tableau de bord + grille des peuples","tab.research-map":"Carte de recherche","sub.research-map":"prière · engagement · régions","tab.research-map-plus-grid":"Recherche simple","sub.research-map-plus-grid":"carte de recherche + grille des peuples","tab.prayer-map":"Progression de la prière","sub.prayer-map":"carte mondiale de la prière","tab.cities-internet":"Villes avec Internet","sub.cities-internet":"connectivité des villes clés","tab.gospel-resources":"Ressources de l'Évangile","sub.gospel-resources":"ressources par lieu","tab.regions-dashboard":"Régions","sub.regions-dashboard":"régions et leurs pays","tab.upg-100":"Liste UPG-100","sub.upg-100":"ma liste des non atteints + affiches",navLabel:"Cartes de recherche",meta:"{n} cartes",loading:"Chargement de {label}…",loadFailed:"Impossible de charger {label}.",manifestHint:"Cet onglet est composé à partir de manifest.json : construisez l'arborescence ou servez l'arborescence construite pour le charger.",desktopOnly:"ordinateur uniquement",lab:"bêta",experimentalSub:"carte expérimentale",toggleList:"Afficher ou masquer la liste",openViews:"Ouvrir la liste des vues",expandList:"Déplier la liste",collapseList:"Replier la liste",collapse:"Replier","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","tab.doxa-vision-card":"Carte de vision Doxa",desktopNotice:"Vue d'ensemble ne fonctionne que sur ordinateur : ouvrez cette page sur un ordinateur pour l'utiliser."},de:{"sec.dashboards":"Dashboards","sec.prayer":"Gebetsmobilisierung","sec.gospel":"Evangeliumsforschung","sec.experimental":"Experimentell","tab.dashboard-plus-grid":"Gesamtbild","sub.dashboard-plus-grid":"Dashboard + Raster der Volksgruppen","tab.research-map":"Forschungskarte","sub.research-map":"Gebet · Engagement · Regionen","tab.research-map-plus-grid":"Einfache Recherche","sub.research-map-plus-grid":"Forschungskarte + Raster der Volksgruppen","tab.prayer-map":"Gebetsfortschritt","sub.prayer-map":"einfache Weltkarte des Gebets","tab.cities-internet":"Städte mit Internet","sub.cities-internet":"Konnektivität wichtiger Städte","tab.gospel-resources":"Evangeliumsressourcen","sub.gospel-resources":"Ressourcen nach Ort","tab.regions-dashboard":"Regionen","sub.regions-dashboard":"Regionen und ihre Länder","tab.upg-100":"UPG-100-Liste","sub.upg-100":"meine Liste der Unerreichten + Poster",navLabel:"Forschungskarten",meta:"{n} Karten",loading:"{label} wird geladen…",loadFailed:"{label} konnte nicht geladen werden.",manifestHint:"Dieser Tab wird aus manifest.json zusammengesetzt – bauen Sie den Baum oder stellen Sie den gebauten Baum bereit, um ihn zu laden.",desktopOnly:"nur Desktop",lab:"Beta",experimentalSub:"experimentelle Karte",toggleList:"Liste ein-/ausblenden",openViews:"Ansichtsliste öffnen",expandList:"Liste ausklappen",collapseList:"Liste einklappen",collapse:"Einklappen","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","tab.doxa-vision-card":"Doxa-Visionskarte",desktopNotice:"Gesamtbild funktioniert nur am Desktop – öffnen Sie diese Seite an einem Computer, um es zu nutzen."},pt:{"sec.dashboards":"Painéis","sec.prayer":"Mobilização de oração","sec.gospel":"Pesquisa do Evangelho","sec.experimental":"Experimental","tab.dashboard-plus-grid":"Visão geral","sub.dashboard-plus-grid":"painel + grade de povos","tab.research-map":"Mapa de pesquisa","sub.research-map":"oração · engajamento · regiões","tab.research-map-plus-grid":"Pesquisa simples","sub.research-map-plus-grid":"mapa de pesquisa + grade de povos","tab.prayer-map":"Progresso da oração","sub.prayer-map":"mapa mundial de oração","tab.cities-internet":"Cidades com Internet","sub.cities-internet":"conectividade das principais cidades","tab.gospel-resources":"Recursos do Evangelho","sub.gospel-resources":"recursos por lugar","tab.regions-dashboard":"Regiões","sub.regions-dashboard":"regiões e seus países","tab.upg-100":"Lista UPG-100","sub.upg-100":"minha lista de não alcançados + cartazes",navLabel:"Mapas de pesquisa",meta:"{n} mapas",loading:"Carregando {label}…",loadFailed:"Não foi possível carregar {label}.",manifestHint:"Esta aba é composta a partir do manifest.json — compile a árvore ou sirva a árvore compilada para carregá-la.",desktopOnly:"só no computador",lab:"beta",experimentalSub:"mapa experimental",toggleList:"Mostrar ou ocultar a lista",openViews:"Abrir a lista de visualizações",expandList:"Expandir a lista",collapseList:"Recolher a lista",collapse:"Recolher","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","tab.doxa-vision-card":"Cartão de visão Doxa",desktopNotice:"Visão geral só funciona no computador — abra esta página em um computador para usá-la."},it:{"sec.dashboards":"Dashboard","sec.prayer":"Mobilitazione alla preghiera","sec.gospel":"Ricerca sul Vangelo","sec.experimental":"Sperimentale","tab.dashboard-plus-grid":"Quadro d'insieme","sub.dashboard-plus-grid":"dashboard + griglia dei popoli","tab.research-map":"Mappa di ricerca","sub.research-map":"preghiera · impegno · regioni","tab.research-map-plus-grid":"Ricerca semplice","sub.research-map-plus-grid":"mappa di ricerca + griglia dei popoli","tab.prayer-map":"Avanzamento preghiera","sub.prayer-map":"mappa mondiale della preghiera","tab.cities-internet":"Città con Internet","sub.cities-internet":"connettività delle città chiave","tab.gospel-resources":"Risorse del Vangelo","sub.gospel-resources":"risorse per luogo","tab.regions-dashboard":"Regioni","sub.regions-dashboard":"regioni e i loro paesi","tab.upg-100":"Lista UPG-100","sub.upg-100":"la mia lista dei non raggiunti + poster",navLabel:"Mappe di ricerca",meta:"{n} mappe",loading:"Caricamento di {label}…",loadFailed:"Impossibile caricare {label}.",manifestHint:"Questa scheda è composta da manifest.json: compila l'albero o pubblica l'albero compilato per caricarla.",desktopOnly:"solo desktop",lab:"beta",experimentalSub:"mappa sperimentale",toggleList:"Mostra o nascondi l’elenco",openViews:"Apri l’elenco delle viste",expandList:"Espandi l’elenco",collapseList:"Comprimi l’elenco",collapse:"Comprimi","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","tab.doxa-vision-card":"Scheda visione Doxa",desktopNotice:"Quadro d'insieme funziona solo su desktop: apri questa pagina su un computer per usarlo."},ro:{"sec.dashboards":"Panouri","sec.prayer":"Mobilizare la rugăciune","sec.gospel":"Cercetarea Evangheliei","sec.experimental":"Experimental","tab.dashboard-plus-grid":"Imaginea de ansamblu","sub.dashboard-plus-grid":"panou + grila popoarelor","tab.research-map":"Hartă de cercetare","sub.research-map":"rugăciune · implicare · regiuni","tab.research-map-plus-grid":"Cercetare simplă","sub.research-map-plus-grid":"hartă de cercetare + grila popoarelor","tab.prayer-map":"Progresul rugăciunii","sub.prayer-map":"hartă mondială a rugăciunii","tab.cities-internet":"Orașe cu internet","sub.cities-internet":"conectivitatea orașelor-cheie","tab.gospel-resources":"Resurse ale Evangheliei","sub.gospel-resources":"resurse după loc","tab.regions-dashboard":"Regiuni","sub.regions-dashboard":"regiunile și țările lor","tab.upg-100":"Lista UPG-100","sub.upg-100":"lista mea de neatinși + afișe",navLabel:"Hărți de cercetare",meta:"{n} hărți",loading:"Se încarcă {label}…",loadFailed:"{label} nu a putut fi încărcat.",manifestHint:"Această filă este compusă din manifest.json — construiți arborele sau serviți arborele construit pentru a o încărca.",desktopOnly:"doar pe desktop",lab:"beta",experimentalSub:"hartă experimentală",toggleList:"Afișează sau ascunde lista",openViews:"Deschide lista de vizualizări",expandList:"Extinde lista",collapseList:"Restrânge lista",collapse:"Restrânge","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","tab.doxa-vision-card":"Card de viziune Doxa",desktopNotice:"Imaginea de ansamblu funcționează doar pe desktop — deschideți această pagină pe un computer pentru a o folosi."},ru:{"sec.dashboards":"Панели","sec.prayer":"Молитвенная мобилизация","sec.gospel":"Исследование Евангелия","sec.experimental":"Экспериментальное","tab.dashboard-plus-grid":"Общая картина","sub.dashboard-plus-grid":"панель + таблица народов","tab.research-map":"Исследовательская карта","sub.research-map":"молитва · вовлечённость · регионы","tab.research-map-plus-grid":"Простое исследование","sub.research-map-plus-grid":"исследовательская карта + таблица народов","tab.prayer-map":"Прогресс молитвы","sub.prayer-map":"простая карта молитвы мира","tab.cities-internet":"Города с интернетом","sub.cities-internet":"подключённость ключевых городов","tab.gospel-resources":"Евангельские ресурсы","sub.gospel-resources":"ресурсы по местам","tab.regions-dashboard":"Регионы","sub.regions-dashboard":"регионы и их страны","tab.upg-100":"Список UPG-100","sub.upg-100":"мой список недостигнутых + плакаты",navLabel:"Исследовательские карты",meta:"Карт: {n}",loading:"Загрузка: {label}…",loadFailed:"Не удалось загрузить: {label}.",manifestHint:"Эта вкладка собирается из manifest.json — соберите дерево или разместите собранное дерево, чтобы загрузить её.",desktopOnly:"только на компьютере",lab:"бета",experimentalSub:"экспериментальная карта",toggleList:"Показать или скрыть список",openViews:"Открыть список представлений",expandList:"Развернуть список",collapseList:"Свернуть список",collapse:"Свернуть","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":"Плакаты по странам","tab.doxa-vision-card":"Карточка видения Doxa",desktopNotice:"«Общая картина» работает только на компьютере — откройте эту страницу на компьютере."},ar:{"sec.dashboards":"لوحات المعلومات","sec.prayer":"التعبئة للصلاة","sec.gospel":"أبحاث الإنجيل","sec.experimental":"تجريبي","tab.dashboard-plus-grid":"الصورة الكاملة","sub.dashboard-plus-grid":"لوحة معلومات + شبكة الشعوب","tab.research-map":"خريطة البحث","sub.research-map":"الصلاة · الانخراط · المناطق","tab.research-map-plus-grid":"بحث مبسّط","sub.research-map-plus-grid":"خريطة البحث + شبكة الشعوب","tab.prayer-map":"تقدم الصلاة","sub.prayer-map":"خريطة عالمية مبسّطة للصلاة","tab.cities-internet":"مدن متصلة بالإنترنت","sub.cities-internet":"اتصال المدن الرئيسية","tab.gospel-resources":"موارد الإنجيل","sub.gospel-resources":"الموارد حسب المكان","tab.regions-dashboard":"المناطق","sub.regions-dashboard":"المناطق ودولها","tab.upg-100":"قائمة UPG-100","sub.upg-100":"قائمتي لغير المُبشَّرين + ملصقات",navLabel:"خرائط البحث",meta:"عدد الخرائط: {n}",loading:"جارٍ تحميل {label}…",loadFailed:"تعذّر تحميل {label}.",manifestHint:"تُبنى علامة التبويب هذه من manifest.json — ابنِ الشجرة أو قدّم الشجرة المبنية لتحميلها.",desktopOnly:"على الحاسوب فقط",lab:"تجريبي",experimentalSub:"خريطة تجريبية",toggleList:"إظهار القائمة أو إخفاؤها",openViews:"فتح قائمة العروض",expandList:"توسيع القائمة",collapseList:"طي القائمة",collapse:"طي","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":"ملصقات الدول","tab.doxa-vision-card":"بطاقة رؤية Doxa",desktopNotice:"تعمل «الصورة الكاملة» على الحاسوب فقط — افتح هذه الصفحة على حاسوب لاستخدامها."},hi:{"sec.dashboards":"डैशबोर्ड","sec.prayer":"प्रार्थना संचालन","sec.gospel":"सुसमाचार शोध","sec.experimental":"प्रायोगिक","tab.dashboard-plus-grid":"संपूर्ण चित्र","sub.dashboard-plus-grid":"डैशबोर्ड + जनसमूहों की ग्रिड","tab.research-map":"शोध मानचित्र","sub.research-map":"प्रार्थना · सहभागिता · क्षेत्र","tab.research-map-plus-grid":"सरल शोध","sub.research-map-plus-grid":"शोध मानचित्र + जनसमूहों की ग्रिड","tab.prayer-map":"प्रार्थना प्रगति","sub.prayer-map":"सरल विश्व प्रार्थना मानचित्र","tab.cities-internet":"इंटरनेट वाले शहर","sub.cities-internet":"प्रमुख शहरों की कनेक्टिविटी","tab.gospel-resources":"सुसमाचार संसाधन","sub.gospel-resources":"स्थान के अनुसार संसाधन","tab.regions-dashboard":"क्षेत्र","sub.regions-dashboard":"क्षेत्र और उनके देश","tab.upg-100":"UPG-100 सूची","sub.upg-100":"मेरी अप्राप्त सूची + पोस्टर",navLabel:"शोध मानचित्र",meta:"{n} मानचित्र",loading:"{label} लोड हो रहा है…",loadFailed:"{label} लोड नहीं हो सका।",manifestHint:"यह टैब manifest.json से बनता है — इसे लोड करने के लिए ट्री बनाएँ या बना हुआ ट्री सर्व करें।",desktopOnly:"केवल डेस्कटॉप",lab:"बीटा",experimentalSub:"प्रायोगिक मानचित्र",toggleList:"सूची दिखाएँ या छिपाएँ",openViews:"दृश्यों की सूची खोलें",expandList:"सूची फैलाएँ",collapseList:"सूची संक्षिप्त करें",collapse:"संक्षिप्त करें","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":"देश पोस्टर","tab.doxa-vision-card":"Doxa दर्शन कार्ड",desktopNotice:"संपूर्ण चित्र केवल डेस्कटॉप पर काम करता है — इसे उपयोग करने के लिए यह पेज कंप्यूटर पर खोलें।"},zh:{"sec.dashboards":"仪表板","sec.prayer":"祷告动员","sec.gospel":"福音研究","sec.experimental":"实验性","tab.dashboard-plus-grid":"全景","sub.dashboard-plus-grid":"仪表板 + 民族网格","tab.research-map":"研究地图","sub.research-map":"祷告 · 参与 · 区域","tab.research-map-plus-grid":"简易研究","sub.research-map-plus-grid":"研究地图 + 民族网格","tab.prayer-map":"祷告进度","sub.prayer-map":"简易世界祷告地图","tab.cities-internet":"有互联网的城市","sub.cities-internet":"主要城市的网络连接","tab.gospel-resources":"福音资源","sub.gospel-resources":"按地点划分的资源","tab.regions-dashboard":"区域","sub.regions-dashboard":"区域及其国家","tab.upg-100":"UPG-100 名单","sub.upg-100":"我的未得之民名单 + 海报",navLabel:"研究地图",meta:"{n} 张地图",loading:"正在加载{label}…",loadFailed:"无法加载{label}。",manifestHint:"此标签页由 manifest.json 组成——请构建目录树或提供已构建的目录树以加载它。",desktopOnly:"仅限桌面",lab:"测试版",experimentalSub:"实验性地图",toggleList:"显示或隐藏列表",openViews:"打开视图列表",expandList:"展开列表",collapseList:"折叠列表",collapse:"折叠","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":"国家海报","tab.doxa-vision-card":"Doxa 异象卡",desktopNotice:"全景仅支持桌面设备——请在电脑上打开此页面使用。"}},xs=Object.keys(Dt);function mc(e){return Object.prototype.hasOwnProperty.call(Dt.en,e)}function wo(e,t,o){let n=(Dt[e]||Dt.en)[t]??Dt.en[t]??t;if(o)for(const i in o)n=n.split("{"+i+"}").join(String(o[i]));return n}const bc=":host{display:block;position:relative;height:var(--doxa-maps-spa-height, 85vh);min-height:480px}:host{font-size:16px;line-height:normal;font-weight:400;font-style:normal;font-variant:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;text-align:start;text-indent:0;text-shadow:none;white-space:normal;-webkit-hyphens:manual;hyphens:manual;visibility:visible;cursor:auto}:host([hidden]){display:none}.dms-pane{position:absolute;top:0;right:0;bottom:0;left:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain}.dms-slot{position:relative;min-height:100%}.dms-hint{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;text-align:center;color:#6d766e;font-size:13px;padding:20px}.dms-hint.err{color:#f87171}.dms-hint small{color:var(--dx-muted, #6d766e)}.dms-notice{position:fixed;left:50%;bottom:24px;transform:translate(-50%);z-index:40;max-width:320px;text-align:center;font-size:13px;line-height:1.4;color:#3b463d;background:#fff;border:1px solid #d1d4cd;border-radius:10px;padding:10px 16px;box-shadow:0 8px 24px #0000001f}.dms-logo{display:inline-flex;align-items:center}.dms-logo svg{display:block}.dms-locale{position:relative;padding:8px 12px 0;display:flex;justify-content:flex-end}.dms-locale-btn{display:inline-flex;align-items:center;gap:8px;font:inherit;font-size:12px;padding:5px 10px;border:1px solid #d1d4cd;border-radius:8px;background:#d1d4cd;color:#3b463d;cursor:pointer}.dms-locale-btn:hover{background:#d1d4cd}.dms-flag{font-size:14px;line-height:1}.dms-locale-name{max-width:12ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dms-dots{color:#6d766e;margin-left:2px}.dms-locale-menu{position:absolute;top:100%;right:12px;margin-top:4px;z-index:30;min-width:180px;list-style:none;padding:6px;border:1px solid #d1d4cd;border-radius:10px;background:#fff;box-shadow:0 12px 32px #00000080;max-height:320px;overflow:auto}.dms-locale-opt{display:flex;align-items:center;gap:8px;width:100%;text-align:left;font:inherit;font-size:13px;padding:7px 9px;border:0;border-radius:7px;background:none;color:#3b463d;cursor:pointer}.dms-locale-opt:hover,.dms-locale-opt.active{background:#d1d4cd;color:#3b463d}.dms-locale-opt.active .dms-locale-name{color:#92b195}.dms-locale-en{margin-left:auto;font-size:11px;color:#6d766e}";function ki(){try{const e=new URLSearchParams(location.search),t=(e.get("lang")||e.get("locale")||"").split("-")[0].toLowerCase();if(xs.includes(t))return t}catch{}try{const e=(document.documentElement.lang||"").split("-")[0].toLowerCase();if(xs.includes(e))return e}catch{}return""}const ws=[{key:"dashboards",label:"Dashboards",i18n:"sec.dashboards",icon:"chart",tabs:[{id:"dashboard-plus-grid",icon:"chart"},{id:"research-map-plus-grid",icon:"map"},{id:"regions-dashboard",icon:"map"}]},{key:"prayer-mobilization",label:"Prayer Mobilization",i18n:"sec.prayer",icon:"heart",tabs:[{id:"upg-100",icon:"list"},{id:"prayer-map",icon:"embed"}]},{key:"gospel-research",label:"Gospel Research",i18n:"sec.gospel",icon:"search",tabs:[{id:"cities-internet",icon:"wifi"},{id:"gospel-resources",icon:"book"}]},{key:"experimental",label:"Experimental",i18n:"sec.experimental",icon:"flask",folder:!0,open:!1,tabs:[]}],_c=new Set(["doxa-maps-spa","plugin-studio","template-bundle","people-groups-grid","research-dashboard","big-picture","demo-map","golden-path-check","doxa-research-map","stack-demo"]),Li={"prayer-walk-planner":1,"upg-neighbor":2,"key-cities":3,"all-people-groups":4,"country-posters":5,"doxa-vision-card":6},Ps=[{id:"dashboard-plus-grid",label:"Big Picture",sub:"dashboard + people-groups grid, stacked",emoji:"🌍",bundle:"dashboard-plus-grid",profile:"dashboard-plus-grid"},{id:"research-map",label:"Research Map",sub:"prayer · engagement · regions",emoji:"🗺️",bundle:"doxa-research-map",profile:"research-map"},{id:"research-map-plus-grid",label:"Simple Research",sub:"research map + people-groups grid",emoji:"🗺️",bundle:"research-map-plus-grid",profile:"research-map-plus-grid"},{id:"prayer-map",label:"Prayer Progress",sub:"simple world prayer map",emoji:"🙏",bundle:"doxa-simple-map",profile:"doxa-simple-map",instance:"prayer"},{id:"cities-internet",label:"Cities with Internet",sub:"connectivity of key cities",emoji:"📡",bundle:"cities-internet",profile:"connectivity-map"},{id:"gospel-resources",label:"Gospel Resources",sub:"resources by place",emoji:"📖",bundle:"gospel-resources",profile:"resources-map"},{id:"regions-dashboard",label:"Regions",sub:"regions and their countries",emoji:"🌐",bundle:"regions-dashboard",profile:"regions-mfe"},{id:"upg-100",label:"UPG-100 List",sub:"my unreached list + posters",emoji:"📋",bundle:"my-upg-100-list",profile:"upg-100-mfe"}];vc(ws);const Po=new Set(["doxa-research-map","doxa-simple-map","cities-internet-map","gospel-resources-map","my-upg-100-list-map","doxa-map","doxa-maps-spa","dashboard-plus-grid","research-dashboard-map","demo-map","all-people-groups","country-posters-map","key-cities-map","research-map-plus-grid"]),ko=new Set(["dashboard-plus-grid","research-map-plus-grid"]);function $c(){const e=Object.fromEntries(Ps.map(o=>[o.id,o])),t=new Set;for(const o of ws)if(o.key!=="experimental")for(const s of o.tabs||[]){const n=e[s.id];n&&n.bundle&&t.add(n.bundle)}return t}function Si(e,t){const o=[];for(const s of e)!s||t.has(s.key)||(t.add(s.key),o.push(s));return o}function vc(e){const t=new Map,o=[];for(const s of e)if(s.key!=="experimental")for(const n of s.tabs||[]){if(!n||!n.id)continue;const i=t.get(n.id);if(i===void 0){t.set(n.id,s.key);continue}(i!==s.key||o.indexOf(n.id)===-1)&&o.push(n.id+" ("+i+" + "+s.key+")")}return o.length&&typeof console<"u"&&console.error("[doxa-maps-spa] duplicate tab key(s) across NAV_MODEL sections: "+o.join(", ")+" — VerticalTabsLayout keys its tab-ref map and `active` highlight by id, so a row declared in two sections paints twice and stalls keyboard nav. See the duplicate-key trap in SPEC-the-six-map-product-and-its-tab-order.md."),o}function yc(e){return String(e).split(/[-_]/).filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}function xc(e){const t=$c(),o=e&&Array.isArray(e.bundles)?e.bundles:[],s=[];for(const n of o){const i=n&&n.bundle;if(!i||t.has(i)||_c.has(i))continue;const a=Array.isArray(n.profiles)?n.profiles:[];if(!a.length)continue;const r=a.find(d=>d.isMap)||a.find(d=>d.profile===i)||a[0],l=r.element||Array.isArray(n.elements)&&n.elements[0]||i,u=n.scriptUrl||r.scriptUrl||"";u&&s.push({id:i,label:r.title||yc(i),sub:(r.description||"").trim().replace(/[,;]\s*$/,"")||"experimental bundle",emoji:"🧪",tag:l,bundle:i,profile:r.profile||i,scriptUrl:u,heavy:Po.has(l)||Po.has(i),scroll:ko.has(l)||ko.has(i),discovered:!0})}return s.sort((n,i)=>{const a=Li[n.id]||999,r=Li[i.id]||999;return a!==r?a-r:n.label.localeCompare(i.label)}),s}function wc(e,t){const o=e&&Array.isArray(e.bundles)?e.bundles:[],s=Object.fromEntries(o.map(i=>[i.bundle,i])),n={};for(const i of t){const a=s[i.bundle];if(!a)continue;const r=Array.isArray(a.profiles)?a.profiles:[],l=r.find(P=>P.profile===i.profile)||r[0],u=l&&l.element||Array.isArray(a.elements)&&a.elements[0]||i.bundle,d=a.scriptUrl||l&&l.scriptUrl||"";if(!d)continue;const g=l&&Array.isArray(l.instances)?l.instances:[],x=!!(i.instance&&g.some(P=>(P&&(P.id||P.instance))===i.instance));n[i.id]={tag:u,scriptUrl:d,profile:l&&l.profile||i.profile,instance:x?i.instance:"",heavy:Po.has(u)||Po.has(i.bundle),scroll:ko.has(u)||ko.has(i.bundle)}}return n}const Ht={};function Pc(e,t){return Ht[e]||(Ht[e]=new Promise((o,s)=>{const n=document.createElement("script");n.src=e,(/^\/plugin-designs\//.test(e)||/\/index\.js(\?|$)/.test(e))&&(n.type="module"),n.onload=()=>o(),n.onerror=()=>{delete Ht[e],s(new Error("failed to load "+e))},document.head.appendChild(n)})),Ht[e]}function kc(e,t){return typeof customElements>"u"||customElements.get(e)?Promise.resolve():Promise.race([customElements.whenDefined(e),new Promise((o,s)=>setTimeout(()=>{customElements.get(e)||s(new Error("<"+e+"> never registered (bundle loaded but defined no element)"))},15e3))])}const Lc=ss({name:"DoxaMapsSpa",inheritAttrs:!1,components:{VerticalTabsLayout:dc},props:{treeBase:{type:String,default:""},profileConfig:{type:[String,Object],default:""},heading:{type:String,default:"DX-Maps"},tokenUrl:{type:String,default:""},tk:{type:String,default:""},language:{type:String,default:""},apiBaseUrl:{type:String,default:""},provider:{type:String,default:""},tab:{type:String,default:""}},emits:["tab-change"],setup(){return{injectedBase:kt("dmsTreeBase","")}},data(){return{activeIndex:0,showHeader:!1,narrow:!1,_mql:null,_onMedia:null,disabledNotice:"",_noticeTimer:null,manifestError:"",manifestBase:"",runtime:{},locale:gc(),hostLang:ki(),localeOpen:!1,switcherLangs:uc,tabs:Ps.map(e=>({...e,tag:"",scriptUrl:"",heavy:!1,scroll:!1,resolved:!1,mounted:!1,state:"idle",error:""}))}},computed:{cfg(){let e=this.profileConfig;if(typeof e=="string")try{e=e?JSON.parse(e):{}}catch{e={}}return e&&typeof e=="object"?e:{}},base(){const e=(this.treeBase||this.cfg.treeBase||this.injectedBase||"").trim();return e?e.replace(/\/+$/,"")+"/":""},assetsBase(){const e=String(this.cfg.assetsBase||"").trim();return/^https?:\/\//i.test(e)||e.startsWith("/")?e.replace(/\/+$/,""):this.manifestBase?this.manifestBase.replace(/\/+$/,"")+"/assets":""},navGroups(){const e=Object.fromEntries(this.tabs.map(o=>[o.id,o])),t=new Set;return ws.map(o=>{let s=Si((o.tabs||[]).filter(n=>e[n.id]).map(n=>{const i=e[n.id],a=this.isBigPictureDisabled(i.id);return{key:i.id,label:this.tabLabel(i),sub:this.tabSub(i),icon:n.icon,badge:a?this.tr("desktopOnly"):n.badge,disabled:a}}),t);return o.key==="experimental"&&(s=s.concat(Si(this.tabs.filter(n=>n.discovered).map(n=>({key:n.id,label:this.tabLabel(n),sub:this.tabSub(n),icon:"flask",badge:this.tr("lab")})),t))),{key:o.key,label:o.i18n?this.tr(o.i18n):o.label,icon:o.icon,folder:!!o.folder,open:o.open,rows:s}}).filter(o=>o.rows.length)},showLocaleSwitcher(){return this.showHeader},activeLang(){return fc(this.locale)||{code:this.locale,flag:"🌐",nativeName:this.locale}},effectiveLocale(){const e=(this.language||this.cfg.language||this.cfg.locale||this.cfg.lang||"").trim(),t=this.showLocaleSwitcher?this.locale:"";return(e||t||this.hostLang||"en").split("-")[0].toLowerCase()},uiLocale(){return xs.includes(this.effectiveLocale)?this.effectiveLocale:"en"},uiDir(){return this.uiLocale==="ar"?"rtl":"ltr"},layoutLabels(){const e={};for(const t of["toggleList","openViews","expandList","collapseList","collapse"])e[t]=this.tr(t);return e},effectiveProvider(){const e=String(this.provider||this.cfg.provider||"").trim().toLowerCase();return e==="maplibre"||e==="mapbox"?e:""},activeKey(){const e=this.tabs[this.activeIndex];return e?e.id:""}},mounted(){this.watchWidth(),this.watchHostLang(),this.select(this.initialIndex()),this.loadManifest()},beforeUnmount(){this._langObs&&(this._langObs.disconnect(),this._langObs=null),!(!this._mql||!this._onMedia)&&(this._mql.removeEventListener?this._mql.removeEventListener("change",this._onMedia):this._mql.removeListener&&this._mql.removeListener(this._onMedia),this._mql=null,this._onMedia=null)},watch:{effectiveLocale(e){const t=this.tabs[this.activeIndex];if(!(!t||!t.mounted))try{const o=this._slots&&this._slots[this.activeIndex],s=o&&o.firstElementChild;s&&s.setAttribute&&s.setAttribute("profile-config",JSON.stringify(this.childConfig(t)))}catch{}},tab(e){e&&this.onSelect(e)}},methods:{setSlot(e,t){t&&(this._slots=Object.assign(this._slots||{},{[e]:t}))},tr(e,t){return wo(this.uiLocale,e,t)},t(e,t){return wo(this.uiLocale,e,t)},tabLabel(e){return!e.discovered||mc("tab."+e.id)?wo(this.uiLocale,"tab."+e.id):e.label},tabSub(e){return e.discovered?this.uiLocale==="en"?e.sub:this.tr("experimentalSub"):wo(this.uiLocale,"sub."+e.id)},watchHostLang(){typeof MutationObserver>"u"||typeof document>"u"||(this._langObs=new MutationObserver(()=>{this.hostLang=ki()}),this._langObs.observe(document.documentElement,{attributes:!0,attributeFilter:["lang"]}))},watchWidth(){typeof window>"u"||!window.matchMedia||(this._mql=window.matchMedia("(max-width: 760px)"),this.narrow=this._mql.matches,this._onMedia=e=>{const t=this.narrow;this.narrow=!!e.matches,t!==this.narrow&&this.isBigPictureDisabled(this.activeKey)&&this.select(this.firstVisibleIndex())},this._mql.addEventListener?this._mql.addEventListener("change",this._onMedia):this._mql.addListener&&this._mql.addListener(this._onMedia))},isBigPictureDisabled(e){return e==="dashboard-plus-grid"&&this.narrow},firstVisibleIndex(){let e=-1;for(const t of this.navGroups)for(const o of t.rows){const s=this.tabs.findIndex(n=>n.id===o.key);if(!(s<0)&&(e<0&&(e=s),!o.disabled))return s}return e>=0?e:0},loadManifest(){const e=this.resolve("manifest.json"),t=u=>{try{return new URL(u,location.href).href.replace(/[^/]*$/,"")}catch{return""}},o={url:e,root:t(e)},s={url:this.resolve("doxa-maps-spa/manifest.json"),root:o.root};let n=!1;try{n=new URL(e,location.href).origin!==location.origin}catch{}const i=n?[s,o]:[o,s],a="/public/dx-maps/manifest.json";i.some(u=>u.url===a)||i.push({url:a,root:t(a)});const r=[],l=u=>{if(u>=i.length){this.manifestError="manifest.json not found (tried "+r.join(", ")+")",console.error("[doxa-maps-spa] "+this.manifestError+" — every tab except Big Picture is composed from it, so their panes cannot mount.");return}const{url:d,root:g}=i[u];return r.push(d),fetch(d,{credentials:"same-origin"}).then(x=>{if(!x||!x.ok)throw new Error(d+" → HTTP "+(x?x.status:"?"));return x.json()}).then(x=>{if(!x)throw new Error(d+" → empty");this.manifestError="",this.manifestBase=g||"",this.applyManifest(x)}).catch(()=>l(u+1))};try{l(0)}catch{}},applyManifest(e){this.runtime=e&&e.runtime&&typeof e.runtime=="object"?e.runtime:{},this.applyPageGlobals();const t=wc(e,Ps),o=this.activeKey,s=[];for(const l of this.tabs){if(l.discovered){s.push(l);continue}const u=t[l.id];u&&(Object.assign(l,u,{resolved:!0}),s.push(l))}const n=new Set(s.map(l=>l.id));for(const l of xc(e))n.has(l.id)||s.push({...l,resolved:!0,mounted:!1,state:"idle",error:""});this.tabs=s;const i=this.requestedTab(),a=i?this.tabs.findIndex(l=>l.id===i):-1,r=this.tabs.findIndex(l=>l.id===o);a>=0&&!this.isBigPictureDisabled(i)&&!this._honouredTab?this.select(a):this.select(r>=0?r:this.firstVisibleIndex()),this._honouredTab=!0},requestedTab(){let e="";try{e=new URLSearchParams(location.search).get("tab")||""}catch{}return String(this.tab||this.cfg.tab||e||"").trim()},initialIndex(){const e=this.requestedTab(),t=e?this.tabs.findIndex(o=>o.id===e):-1;return t>=0&&(this._honouredTab=!0),t>=0&&!this.isBigPictureDisabled(e)?t:this.firstVisibleIndex()},setLocale(e){this.locale=e,this.localeOpen=!1,hc(e)},onSelect(e){if(this.isBigPictureDisabled(e)){this.disabledNotice=this.tr("desktopNotice"),clearTimeout(this._noticeTimer),this._noticeTimer=setTimeout(()=>{this.disabledNotice=""},4e3);return}const t=this.tabs.findIndex(o=>o.id===e);t!==-1&&this.select(t)},resolve(e){const t=String(e);if(/^(https?:)?\/\//.test(t)||t.startsWith("/"))return t;const o=t.replace(/^\.\//,"");return this.manifestBase?this.manifestBase.replace(/\/+$/,"")+"/"+o:this.base?this.base.replace(/\/+$/,"")+"/"+o:"../"+o},select(e){const t=this.activeIndex;if(this.activeIndex=e,t!==e&&t>=0){const s=this.tabs[t];s&&s.heavy&&s.mounted&&this.releaseTab(t,s)}const o=this.tabs[e];o&&((t!==e||!this._announced)&&(this._announced=!0,this.$emit("tab-change",{id:o.id,label:o.label})),o.scriptUrl&&(o.mounted||this.$nextTick(()=>{this.activeIndex===e&&this.mountElement(e)})))},releaseTab(e,t){try{const o=this._slots&&this._slots[e];o&&(o.innerHTML="")}catch{}this._slots&&delete this._slots[e],t.mounted=!1,t.state="idle",t.error=""},childConfig(e){const t={profile:e.profile||e.id,instanceId:e.instance||"dms-"+e.id};this.effectiveLocale&&(t.locale=this.effectiveLocale);const o=this.tk||this.cfg.tk||this.runtime.token;return o&&(t.tk=o),(this.tokenUrl||this.cfg.tokenUrl)&&(t.tokenUrl=this.tokenUrl||this.cfg.tokenUrl),this.effectiveProvider&&(t.provider=this.effectiveProvider),this.base&&(t.treeBase=this.base),this.assetsBase&&(t.assetsBase=this.assetsBase),t.urlSync=!1,t},applyPageGlobals(){if(typeof window>"u")return;const e=(this.apiBaseUrl||this.cfg.apiBaseUrl||this.runtime.apiBaseUrl||"").trim();e&&!window.MAP_APP_API_URL&&(window.MAP_APP_API_URL=e.replace(/\/+$/,""));const t=this.tk||this.cfg.tk||this.runtime.token;t&&!window.MAP_TOKEN&&(window.MAP_TOKEN=t),this.effectiveProvider&&!window.MAP_PROVIDER&&(window.MAP_PROVIDER=this.effectiveProvider)},mountElement(e){const t=this.tabs[e];t.mounted=!0,t.state="loading";const o=this.resolve(t.scriptUrl);Pc(o).then(()=>kc(t.tag)).then(()=>{try{if(t.heavy&&this.activeIndex!==e){t.mounted=!1,t.state="idle";return}const s=this._slots&&this._slots[e];if(!s){t.state="error",t.error="no slot";return}s.innerHTML="";const n=document.createElement(t.tag);n.setAttribute("profile-config",JSON.stringify(this.childConfig(t))),this.base&&n.setAttribute("tree-base",this.base.replace(/\/+$/,"")),n.style.cssText=t.scroll?"display:block;position:static;width:100%;height:auto;":"display:block;position:absolute;inset:0;width:100%;height:100%;",s.appendChild(n),t.state="ready"}catch(s){t.state="error",t.error="mount failed: "+(s&&s.message||String(s))}}).catch(s=>{t.state="error",t.error=s&&s.message||String(s)})}}}),Sc={class:"dms-locale"},Cc=["aria-expanded"],Ec={class:"dms-flag"},Tc={class:"dms-locale-name"},Nc={key:0,class:"dms-locale-menu",role:"listbox"},Rc=["aria-selected"],Ac=["onClick"],Ic={class:"dms-flag"},Oc={class:"dms-locale-name"},Fc={class:"dms-locale-en"},Mc=["hidden"],Wc={key:0,class:"dms-hint"},Dc={key:1,class:"dms-hint err"},Hc={key:2,class:"dms-hint err"},Gc={key:0,class:"dms-notice",role:"status"};function jc(e,t,o,s,n,i){const a=ja("VerticalTabsLayout");return A(),mo(a,{dir:e.uiDir,lang:e.uiLocale,labels:e.layoutLabels,title:e.heading,"nav-label":e.t("navLabel"),header:e.showHeader,groups:e.navGroups,active:e.activeKey,"onUpdate:active":e.onSelect},za({brand:Pt(()=>[t[1]||(t[1]=E("span",{class:"dms-logo","aria-hidden":"true"},[E("svg",{viewBox:"0 0 24 24",width:"22",height:"22",fill:"none",stroke:"#92b195","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[E("circle",{cx:"12",cy:"12",r:"9"}),E("polygon",{points:"12 6 14 12 12 18 10 12",fill:"#92b195",stroke:"none"}),E("polygon",{points:"6 12 12 10 18 12 12 14",fill:"#92b195",opacity:"0.55",stroke:"none"})])],-1))]),meta:Pt(()=>[gt(O(e.t("meta",{n:e.tabs.length})),1)]),default:Pt(()=>[(A(!0),I(ee,null,dt(e.tabs,(r,l)=>Qo((A(),I("section",{key:r.id,class:"dms-pane",hidden:l!==e.activeIndex},[!r.heavy||l===e.activeIndex?(A(),I(ee,{key:0},[E("div",{class:"dms-slot",ref_for:!0,ref:u=>e.setSlot(l,u)},null,512),r.state==="loading"?(A(),I("div",Wc,O(e.tr("loading",{label:e.tabLabel(r)})),1)):r.state==="error"?(A(),I("div",Dc,[gt(O(e.tr("loadFailed",{label:e.tabLabel(r)})),1),t[3]||(t[3]=E("br",null,null,-1)),E("small",null,O(r.error),1)])):r.state==="idle"&&!r.scriptUrl&&e.manifestError?(A(),I("div",Hc,[gt(O(e.tr("loadFailed",{label:e.tabLabel(r)})),1),t[4]||(t[4]=E("br",null,null,-1)),E("small",null,O(e.manifestError),1),t[5]||(t[5]=E("br",null,null,-1)),E("small",null,O(e.tr("manifestHint")),1)])):de("",!0)],64)):de("",!0)],8,Mc)),[[bs,l===e.activeIndex]])),128)),e.disabledNotice?(A(),I("div",Gc,O(e.disabledNotice),1)):de("",!0)]),_:2},[e.showLocaleSwitcher?{name:"toolbar",fn:Pt(()=>[E("div",Sc,[E("button",{type:"button",class:"dms-locale-btn","aria-expanded":String(e.localeOpen),"aria-label":"Change language",onClick:t[0]||(t[0]=r=>e.localeOpen=!e.localeOpen)},[E("span",Ec,O(e.activeLang.flag),1),E("span",Tc,O(e.activeLang.nativeName),1),t[2]||(t[2]=E("span",{class:"dms-dots","aria-hidden":"true"},"⋮",-1))],8,Cc),e.localeOpen?(A(),I("ul",Nc,[(A(!0),I(ee,null,dt(e.switcherLangs,r=>(A(),I("li",{key:r.code,role:"option","aria-selected":String(r.code===e.locale)},[E("button",{type:"button",class:Be(["dms-locale-opt",{active:r.code===e.locale}]),onClick:l=>e.setLocale(r.code)},[E("span",Ic,O(r.flag),1),E("span",Oc,O(r.nativeName),1),E("span",Fc,O(r.name),1)],10,Ac)],8,Rc))),128))])):de("",!0)])]),key:"0"}:void 0]),1032,["dir","lang","labels","title","nav-label","header","groups","active","onUpdate:active"])}const Uc=xi(Lc,[["render",jc],["styles",[bc]]]);function Vc(){try{const e=typeof document<"u"&&document.currentScript&&document.currentScript.src||"";return e?e.replace(/[^/]+\/[^/]+$/,"").replace(/\/+$/,"")+"/":""}catch{return""}}const zc=Vc(),Bc=tl(Uc,{configureApp(e){e.provide("dmsTreeBase",zc)}});typeof customElements<"u"&&!customElements.get("doxa-maps-spa")&&customElements.define("doxa-maps-spa",Bc)})(); +`,yl=ss({name:"VerticalTabsLayout",props:{active:{type:String,default:""},title:{type:String,default:""},items:{type:Array,default:()=>[]},groups:{type:Array,default:()=>[]},navLabel:{type:String,default:"Sections"},labels:{type:Object,default:()=>({})},initialNavOpen:{type:Boolean,default:!0},header:{type:Boolean,default:!0},initialRailCollapsed:{type:Boolean,default:!1}},emits:["update:active"],setup(){return fl(vl,"vertical-tabs-layout"),{T:bl}},data(){return{navOpen:this.initialNavOpen,railCollapsed:this.initialRailCollapsed,_tabEls:{},folderOverride:{},narrow:!1,_mql:null,_onMedia:null,activatedKeys:{},hostState:{},hostError:{},_hostSlots:{},_hostMounted:{}}},computed:{railShown(){return this.narrow?this.navOpen:!0},allRows(){if(this.groups&&this.groups.length){const e=[];for(const t of this.groups)for(const o of t.rows||[])e.push(o);return e}return this.items},orderedKeys(){return this.allRows.map(e=>e.key)},elementRows(){return this.allRows.filter(e=>e&&e.element)},mountedElementRows(){return this.elementRows.filter(e=>this.activatedKeys[e.key])}},watch:{active:{immediate:!0,handler(e){this.activateElement(e)}}},mounted(){try{window.matchMedia&&(this._mql=window.matchMedia("(max-width: 760px)"),this.narrow=this._mql.matches,this.reconcileForWidth(),this._onMedia=e=>{this.narrow=e.matches,this.reconcileForWidth()},this._mql.addEventListener?this._mql.addEventListener("change",this._onMedia):this._mql.addListener&&this._mql.addListener(this._onMedia))}catch{}this.$nextTick(()=>this.activateElement(this.active))},beforeUnmount(){try{this._mql&&this._onMedia&&(this._mql.removeEventListener?this._mql.removeEventListener("change",this._onMedia):this._mql.removeListener&&this._mql.removeListener(this._onMedia))}catch{}this._mql=null,this._onMedia=null},methods:{registerTab(e,t){t&&(this._tabEls[e]=t)},isNarrow(){return this.narrow},reconcileForWidth(){this.narrow?(this.navOpen=!1,this.railCollapsed=!1):this.navOpen=!0},label(e){const t={toggleList:"Toggle list",openViews:"Open the list of views",expandList:"Expand list",collapseList:"Collapse list",collapse:"Collapse"};return this.labels&&this.labels[e]||t[e]},expandRail(){!this.narrow&&this.railCollapsed&&(this.railCollapsed=!1)},toggleRail(){this.narrow?this.navOpen=!this.navOpen:this.railCollapsed=!this.railCollapsed},setHostSlot(e,t){t&&(this._hostSlots[e]=t,this.$nextTick(()=>this.mountHostElement(e)))},activateElement(e){!e||!this.elementRows.find(o=>o.key===e)||(this.activatedKeys[e]||(this.activatedKeys={...this.activatedKeys,[e]:!0},this.hostState={...this.hostState,[e]:"loading"}),this.$nextTick(()=>this.mountHostElement(e)))},mountHostElement(e){if(this._hostMounted[e])return;const t=this.elementRows.find(s=>s.key===e),o=this._hostSlots[e];!t||!o||(this._hostMounted[e]=!0,this.hostState={...this.hostState,[e]:"loading"},_l(t.src).then(()=>$l(t.element)).then(()=>{o.innerHTML="";const s=document.createElement(t.element),n=t.attrs||{};for(const i in n){const a=n[i],r=a!=null&&typeof a=="object"?JSON.stringify(a):String(a);try{s[i]=a}catch{}try{s.setAttribute(i,r)}catch{}}s.style.cssText="display:block;position:absolute;inset:0;width:100%;height:100%;",o.appendChild(s),this.hostState={...this.hostState,[e]:"ready"}}).catch(s=>{this._hostMounted[e]=!1,this.hostState={...this.hostState,[e]:"error"},this.hostError={...this.hostError,[e]:s&&s.message||String(s)}}))},iconSvg(e){return e?hl(e):""},initial(e){const t=(e||"").trim();return t?t.charAt(0).toUpperCase():"•"},isFolderClosed(e){const t=this.folderOverride[e.key];return t!=null?!t:e.open!==!0},toggleFolder(e){const t=this.folderOverride[e],o=(this.groups||[]).find(n=>n.key===e),s=t??(o&&o.open===!0);this.folderOverride={...this.folderOverride,[e]:!s}},pick(e){this.$emit("update:active",e),this.narrow&&(this.navOpen=!1)},onKey(e){const t=this.orderedKeys;if(!t.length)return;const o=t.indexOf(this.active);let s=-1;if(e.key==="ArrowDown"||e.key==="ArrowRight")s=(o+1)%t.length;else if(e.key==="ArrowUp"||e.key==="ArrowLeft")s=(o-1+t.length)%t.length;else if(e.key==="Home")s=0;else if(e.key==="End")s=t.length-1;else return;e.preventDefault();const n=t[s];this.pick(n),this.$nextTick(()=>{const i=this._tabEls[n];i&&i.focus&&i.focus()})}}}),xl={key:0,class:"vtl-top"},wl=["aria-expanded","aria-label"],Pl={class:"vtl-brand"},kl={class:"vtl-title"},Ll={class:"vtl-meta"},Sl=["aria-expanded","aria-label"],Cl={class:"vtl-body"},El=["aria-label","aria-hidden","role","aria-orientation"],Tl=["aria-expanded","aria-label"],Nl=["innerHTML"],Rl={class:"vtl-collapse-tx"},Al=["aria-expanded","onClick"],Il={key:0,class:"vtl-cap"},Ol={class:"vtl-tl"},Fl={key:1,class:"vtl-td"},Ml=["innerHTML"],Wl={key:1,class:"vtl-tier"},Dl={key:0,class:"vtl-cap"},Hl={class:"vtl-tl"},Gl={key:1,class:"vtl-td"},jl={class:"vtl-rows"},Ul=["aria-selected","tabindex","onClick"],Vl=["innerHTML"],zl={key:1,class:"vtl-tab-emoji","aria-hidden":"true"},Bl={key:2,class:"vtl-tab-fallback","aria-hidden":"true"},Kl={class:"vtl-tab-text"},ql={class:"vtl-tab-label"},Zl={key:0,class:"vtl-tab-badge"},Xl={key:0,class:"vtl-tab-sub"},Jl=["innerHTML"],Yl=["aria-selected","tabindex","onClick"],Ql=["innerHTML"],ec={key:1,class:"vtl-tab-emoji","aria-hidden":"true"},tc={key:2,class:"vtl-tab-fallback","aria-hidden":"true"},oc={class:"vtl-tab-text"},sc={class:"vtl-tab-label"},nc={key:0,class:"vtl-tab-sub"},ic={class:"vtl-main"},ac={class:"vtl-content"},rc=["hidden"],lc={key:0,class:"vtl-host-hint"},cc={key:1,class:"vtl-host-hint err"};function pc(e,t,o,s,n,i){return A(),I("div",{class:Be(["vtl",{"nav-open":e.navOpen,"rail-collapsed":e.railCollapsed,"no-header":!e.header}])},[e.header?(A(),I("header",xl,[E("button",{class:"vtl-menu",type:"button","aria-expanded":String(e.navOpen),onClick:t[0]||(t[0]=a=>e.navOpen=!e.navOpen),"aria-label":e.label("toggleList")},"☰",8,wl),E("span",Pl,[St(e.$slots,"brand")]),E("b",kl,O(e.title),1),E("span",Ll,[St(e.$slots,"meta")])])):de("",!0),e.narrow&&!e.header&&!e.navOpen?(A(),I("button",{key:1,class:"vtl-fab",type:"button","aria-expanded":String(e.navOpen),onClick:t[1]||(t[1]=a=>e.navOpen=!0),"aria-label":e.label("openViews")},"☰",8,Sl)):de("",!0),E("div",Cl,[E("nav",{class:"vtl-nav","aria-label":e.navLabel,"aria-hidden":String(!e.railShown),role:e.$slots.rail?null:"tablist","aria-orientation":e.$slots.rail?null:"vertical"},[E("button",{type:"button",class:"vtl-collapse","aria-expanded":String(!e.railCollapsed),"aria-label":e.railCollapsed?e.label("expandList"):e.label("collapseList"),onClick:t[2]||(t[2]=(...a)=>e.toggleRail&&e.toggleRail(...a))},[E("span",{class:"vtl-collapse-ic","aria-hidden":"true",innerHTML:e.iconSvg("chevron")},null,8,Nl),E("span",Rl,O(e.label("collapse")),1)],8,Tl),e.$slots.rail?St(e.$slots,"rail",{collapsed:e.railCollapsed&&!e.narrow,expand:e.expandRail,pick:e.pick},void 0,void 0,0):e.groups&&e.groups.length?(A(!0),I(ee,{key:1},dt(e.groups,a=>(A(),I("div",{class:"vtl-grp",key:a.key},[a.folder?(A(),I("button",{key:0,type:"button",class:"vtl-tier vtl-tier-btn","aria-expanded":String(!e.isFolderClosed(a)),onClick:r=>e.toggleFolder(a.key)},[a.badge?(A(),I("span",Il,O(a.badge),1)):de("",!0),E("span",Ol,O(a.label),1),a.count!=null?(A(),I("span",Fl,O(a.count),1)):de("",!0),E("span",{class:Be(["vtl-chev",{open:!e.isFolderClosed(a)}]),"aria-hidden":"true",innerHTML:e.iconSvg("chevron")},null,10,Ml)],8,Al)):(A(),I("div",Wl,[a.badge?(A(),I("span",Dl,O(a.badge),1)):de("",!0),E("span",Hl,O(a.label),1),a.count!=null?(A(),I("span",Gl,O(a.count),1)):de("",!0)])),Qo(E("div",jl,[(A(!0),I(ee,null,dt(a.rows,r=>(A(),I("button",{key:r.key,type:"button",role:"tab",class:Be(["vtl-tab",{active:r.key===e.active}]),"aria-selected":String(r.key===e.active),tabindex:r.key===e.active?0:-1,ref_for:!0,ref:l=>e.registerTab(r.key,l),onClick:l=>e.pick(r.key),onKeydown:t[3]||(t[3]=l=>e.onKey(l))},[r.icon?(A(),I("span",{key:0,class:"vtl-tab-ic","aria-hidden":"true",innerHTML:e.iconSvg(r.icon)},null,8,Vl)):r.emoji?(A(),I("span",zl,O(r.emoji),1)):(A(),I("span",Bl,O(e.initial(r.label)),1)),E("span",Kl,[E("span",ql,[gt(O(r.label),1),r.badge?(A(),I("span",Zl,O(r.badge),1)):de("",!0)]),r.sub?(A(),I("span",Xl,[E("span",{innerHTML:r.sub},null,8,Jl)])):de("",!0)])],42,Ul))),128))],512),[[bs,!a.folder||!e.isFolderClosed(a)]])]))),128)):(A(!0),I(ee,{key:2},dt(e.items,a=>(A(),I("button",{key:a.key,type:"button",role:"tab",class:Be(["vtl-tab",{active:a.key===e.active}]),"aria-selected":String(a.key===e.active),tabindex:a.key===e.active?0:-1,ref_for:!0,ref:r=>e.registerTab(a.key,r),onClick:r=>e.pick(a.key),onKeydown:t[4]||(t[4]=r=>e.onKey(r))},[a.icon?(A(),I("span",{key:0,class:"vtl-tab-ic","aria-hidden":"true",innerHTML:e.iconSvg(a.icon)},null,8,Ql)):a.emoji?(A(),I("span",ec,O(a.emoji),1)):(A(),I("span",tc,O(e.initial(a.label)),1)),E("span",oc,[E("span",sc,O(a.label),1),a.sub?(A(),I("span",nc,O(a.sub),1)):de("",!0)])],42,Yl))),128))],8,El),E("main",ic,[e.header?St(e.$slots,"toolbar",{},void 0,void 0,0):de("",!0),E("div",ac,[(A(!0),I(ee,null,dt(e.mountedElementRows,a=>Qo((A(),I("section",{key:a.key,class:"vtl-host",hidden:a.key!==e.active},[E("div",{class:"vtl-host-slot",ref_for:!0,ref:r=>e.setHostSlot(a.key,r)},null,512),e.hostState[a.key]==="loading"?(A(),I("div",lc,O(e.T("messages.loadingNamed","Loading {name}…").replace("{name}",a.label)),1)):e.hostState[a.key]==="error"?(A(),I("div",cc,[gt(O(e.T("messages.couldNotLoadNamed","Could not load {name}.").replace("{name}",a.label)),1),t[5]||(t[5]=E("br",null,null,-1)),E("small",null,O(e.hostError[a.key]),1)])):de("",!0)],8,rc)),[[bs,a.key===e.active]])),128)),St(e.$slots,"default")])])])],2)}const dc=xi(yl,[["render",pc],["styles",[ml]]]),ys=[{code:"en",name:"English",nativeName:"English",flag:"🇺🇸"},{code:"es",name:"Spanish",nativeName:"Español",flag:"🇪🇸"},{code:"fr",name:"French",nativeName:"Français",flag:"🇫🇷"},{code:"pt",name:"Portuguese",nativeName:"Português",flag:"🇵🇹"},{code:"ar",name:"Arabic",nativeName:"العربية",flag:"🇸🇦",dir:"rtl"},{code:"ru",name:"Russian",nativeName:"Русский",flag:"🇷🇺"},{code:"de",name:"German",nativeName:"Deutsch",flag:"🇩🇪",hideFromSwitcher:!0},{code:"hi",name:"Hindi",nativeName:"हिन्दी",flag:"🇮🇳",hideFromSwitcher:!0},{code:"it",name:"Italian",nativeName:"Italiano",flag:"🇮🇹",hideFromSwitcher:!0},{code:"ro",name:"Romanian",nativeName:"Română",flag:"🇷🇴",hideFromSwitcher:!0},{code:"zh",name:"Chinese",nativeName:"中文",flag:"🇨🇳",hideFromSwitcher:!0}],uc=ys.filter(e=>!e.hideFromSwitcher);function fc(e){return ys.find(t=>t.code===e)}function wi(e){const t=String(e||"").split("-")[0].toLowerCase();return ys.some(o=>o.code===t)?t:"en"}const Pi="doxa-maps:locale";function gc(){try{const e=localStorage.getItem(Pi);if(e)return wi(e)}catch{}return wi(navigator==null?void 0:navigator.language)}function hc(e){try{localStorage.setItem(Pi,e)}catch{}}const Dt={en:{"sec.dashboards":"Dashboards","sec.prayer":"Prayer Mobilization","sec.gospel":"Gospel Research","sec.experimental":"Experimental","tab.dashboard-plus-grid":"Big Picture","sub.dashboard-plus-grid":"dashboard + people-groups grid, stacked","tab.research-map":"Research Map","sub.research-map":"prayer · engagement · regions","tab.research-map-plus-grid":"Simple Research","sub.research-map-plus-grid":"research map + people-groups grid","tab.prayer-map":"Prayer Progress","sub.prayer-map":"simple world prayer map","tab.cities-internet":"Cities with Internet","sub.cities-internet":"connectivity of key cities","tab.gospel-resources":"Gospel Resources","sub.gospel-resources":"resources by place","tab.regions-dashboard":"Regions","sub.regions-dashboard":"regions and their countries","tab.upg-100":"UPG-100 List","sub.upg-100":"my unreached list + posters",navLabel:"Research maps",meta:"{n} maps",loading:"Loading {label}…",loadFailed:"Could not load {label}.",manifestHint:"This tab is composed from manifest.json — build the tree, or serve the built tree, to load it.",desktopOnly:"desktop only",lab:"lab",experimentalSub:"experimental bundle",toggleList:"Toggle list",openViews:"Open the list of views",expandList:"Expand list",collapseList:"Collapse list",collapse:"Collapse","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","tab.doxa-vision-card":"Doxa Vision Card",desktopNotice:"Big Picture only supports desktop — open this page on a desktop to use it."},es:{"sec.dashboards":"Paneles","sec.prayer":"Movilización de oración","sec.gospel":"Investigación del Evangelio","sec.experimental":"Experimental","tab.dashboard-plus-grid":"Panorama general","sub.dashboard-plus-grid":"panel + cuadrícula de pueblos","tab.research-map":"Mapa de investigación","sub.research-map":"oración · compromiso · regiones","tab.research-map-plus-grid":"Investigación simple","sub.research-map-plus-grid":"mapa de investigación + cuadrícula de pueblos","tab.prayer-map":"Progreso de oración","sub.prayer-map":"mapa mundial de oración","tab.cities-internet":"Ciudades con Internet","sub.cities-internet":"conectividad de ciudades clave","tab.gospel-resources":"Recursos del Evangelio","sub.gospel-resources":"recursos por lugar","tab.regions-dashboard":"Regiones","sub.regions-dashboard":"regiones y sus países","tab.upg-100":"Lista UPG-100","sub.upg-100":"mi lista de no alcanzados + carteles",navLabel:"Mapas de investigación",meta:"{n} mapas",loading:"Cargando {label}…",loadFailed:"No se pudo cargar {label}.",manifestHint:"Esta pestaña se compone a partir de manifest.json: compila el árbol o sirve el árbol compilado para cargarla.",desktopOnly:"solo escritorio",lab:"beta",experimentalSub:"mapa experimental",toggleList:"Mostrar u ocultar la lista",openViews:"Abrir la lista de vistas",expandList:"Expandir la lista",collapseList:"Contraer la lista",collapse:"Contraer","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","tab.doxa-vision-card":"Tarjeta de visión Doxa",desktopNotice:"Panorama general solo funciona en escritorio: abre esta página en una computadora para usarlo."},fr:{"sec.dashboards":"Tableaux de bord","sec.prayer":"Mobilisation à la prière","sec.gospel":"Recherche sur l'Évangile","sec.experimental":"Expérimental","tab.dashboard-plus-grid":"Vue d'ensemble","sub.dashboard-plus-grid":"tableau de bord + grille des peuples","tab.research-map":"Carte de recherche","sub.research-map":"prière · engagement · régions","tab.research-map-plus-grid":"Recherche simple","sub.research-map-plus-grid":"carte de recherche + grille des peuples","tab.prayer-map":"Progression de la prière","sub.prayer-map":"carte mondiale de la prière","tab.cities-internet":"Villes avec Internet","sub.cities-internet":"connectivité des villes clés","tab.gospel-resources":"Ressources de l'Évangile","sub.gospel-resources":"ressources par lieu","tab.regions-dashboard":"Régions","sub.regions-dashboard":"régions et leurs pays","tab.upg-100":"Liste UPG-100","sub.upg-100":"ma liste des non atteints + affiches",navLabel:"Cartes de recherche",meta:"{n} cartes",loading:"Chargement de {label}…",loadFailed:"Impossible de charger {label}.",manifestHint:"Cet onglet est composé à partir de manifest.json : construisez l'arborescence ou servez l'arborescence construite pour le charger.",desktopOnly:"ordinateur uniquement",lab:"bêta",experimentalSub:"carte expérimentale",toggleList:"Afficher ou masquer la liste",openViews:"Ouvrir la liste des vues",expandList:"Déplier la liste",collapseList:"Replier la liste",collapse:"Replier","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","tab.doxa-vision-card":"Carte de vision Doxa",desktopNotice:"Vue d'ensemble ne fonctionne que sur ordinateur : ouvrez cette page sur un ordinateur pour l'utiliser."},de:{"sec.dashboards":"Dashboards","sec.prayer":"Gebetsmobilisierung","sec.gospel":"Evangeliumsforschung","sec.experimental":"Experimentell","tab.dashboard-plus-grid":"Gesamtbild","sub.dashboard-plus-grid":"Dashboard + Raster der Volksgruppen","tab.research-map":"Forschungskarte","sub.research-map":"Gebet · Engagement · Regionen","tab.research-map-plus-grid":"Einfache Recherche","sub.research-map-plus-grid":"Forschungskarte + Raster der Volksgruppen","tab.prayer-map":"Gebetsfortschritt","sub.prayer-map":"einfache Weltkarte des Gebets","tab.cities-internet":"Städte mit Internet","sub.cities-internet":"Konnektivität wichtiger Städte","tab.gospel-resources":"Evangeliumsressourcen","sub.gospel-resources":"Ressourcen nach Ort","tab.regions-dashboard":"Regionen","sub.regions-dashboard":"Regionen und ihre Länder","tab.upg-100":"UPG-100-Liste","sub.upg-100":"meine Liste der Unerreichten + Poster",navLabel:"Forschungskarten",meta:"{n} Karten",loading:"{label} wird geladen…",loadFailed:"{label} konnte nicht geladen werden.",manifestHint:"Dieser Tab wird aus manifest.json zusammengesetzt – bauen Sie den Baum oder stellen Sie den gebauten Baum bereit, um ihn zu laden.",desktopOnly:"nur Desktop",lab:"Beta",experimentalSub:"experimentelle Karte",toggleList:"Liste ein-/ausblenden",openViews:"Ansichtsliste öffnen",expandList:"Liste ausklappen",collapseList:"Liste einklappen",collapse:"Einklappen","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","tab.doxa-vision-card":"Doxa-Visionskarte",desktopNotice:"Gesamtbild funktioniert nur am Desktop – öffnen Sie diese Seite an einem Computer, um es zu nutzen."},pt:{"sec.dashboards":"Painéis","sec.prayer":"Mobilização de oração","sec.gospel":"Pesquisa do Evangelho","sec.experimental":"Experimental","tab.dashboard-plus-grid":"Visão geral","sub.dashboard-plus-grid":"painel + grade de povos","tab.research-map":"Mapa de pesquisa","sub.research-map":"oração · engajamento · regiões","tab.research-map-plus-grid":"Pesquisa simples","sub.research-map-plus-grid":"mapa de pesquisa + grade de povos","tab.prayer-map":"Progresso da oração","sub.prayer-map":"mapa mundial de oração","tab.cities-internet":"Cidades com Internet","sub.cities-internet":"conectividade das principais cidades","tab.gospel-resources":"Recursos do Evangelho","sub.gospel-resources":"recursos por lugar","tab.regions-dashboard":"Regiões","sub.regions-dashboard":"regiões e seus países","tab.upg-100":"Lista UPG-100","sub.upg-100":"minha lista de não alcançados + cartazes",navLabel:"Mapas de pesquisa",meta:"{n} mapas",loading:"Carregando {label}…",loadFailed:"Não foi possível carregar {label}.",manifestHint:"Esta aba é composta a partir do manifest.json — compile a árvore ou sirva a árvore compilada para carregá-la.",desktopOnly:"só no computador",lab:"beta",experimentalSub:"mapa experimental",toggleList:"Mostrar ou ocultar a lista",openViews:"Abrir a lista de visualizações",expandList:"Expandir a lista",collapseList:"Recolher a lista",collapse:"Recolher","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","tab.doxa-vision-card":"Cartão de visão Doxa",desktopNotice:"Visão geral só funciona no computador — abra esta página em um computador para usá-la."},it:{"sec.dashboards":"Dashboard","sec.prayer":"Mobilitazione alla preghiera","sec.gospel":"Ricerca sul Vangelo","sec.experimental":"Sperimentale","tab.dashboard-plus-grid":"Quadro d'insieme","sub.dashboard-plus-grid":"dashboard + griglia dei popoli","tab.research-map":"Mappa di ricerca","sub.research-map":"preghiera · impegno · regioni","tab.research-map-plus-grid":"Ricerca semplice","sub.research-map-plus-grid":"mappa di ricerca + griglia dei popoli","tab.prayer-map":"Avanzamento preghiera","sub.prayer-map":"mappa mondiale della preghiera","tab.cities-internet":"Città con Internet","sub.cities-internet":"connettività delle città chiave","tab.gospel-resources":"Risorse del Vangelo","sub.gospel-resources":"risorse per luogo","tab.regions-dashboard":"Regioni","sub.regions-dashboard":"regioni e i loro paesi","tab.upg-100":"Lista UPG-100","sub.upg-100":"la mia lista dei non raggiunti + poster",navLabel:"Mappe di ricerca",meta:"{n} mappe",loading:"Caricamento di {label}…",loadFailed:"Impossibile caricare {label}.",manifestHint:"Questa scheda è composta da manifest.json: compila l'albero o pubblica l'albero compilato per caricarla.",desktopOnly:"solo desktop",lab:"beta",experimentalSub:"mappa sperimentale",toggleList:"Mostra o nascondi l’elenco",openViews:"Apri l’elenco delle viste",expandList:"Espandi l’elenco",collapseList:"Comprimi l’elenco",collapse:"Comprimi","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","tab.doxa-vision-card":"Scheda visione Doxa",desktopNotice:"Quadro d'insieme funziona solo su desktop: apri questa pagina su un computer per usarlo."},ro:{"sec.dashboards":"Panouri","sec.prayer":"Mobilizare la rugăciune","sec.gospel":"Cercetarea Evangheliei","sec.experimental":"Experimental","tab.dashboard-plus-grid":"Imaginea de ansamblu","sub.dashboard-plus-grid":"panou + grila popoarelor","tab.research-map":"Hartă de cercetare","sub.research-map":"rugăciune · implicare · regiuni","tab.research-map-plus-grid":"Cercetare simplă","sub.research-map-plus-grid":"hartă de cercetare + grila popoarelor","tab.prayer-map":"Progresul rugăciunii","sub.prayer-map":"hartă mondială a rugăciunii","tab.cities-internet":"Orașe cu internet","sub.cities-internet":"conectivitatea orașelor-cheie","tab.gospel-resources":"Resurse ale Evangheliei","sub.gospel-resources":"resurse după loc","tab.regions-dashboard":"Regiuni","sub.regions-dashboard":"regiunile și țările lor","tab.upg-100":"Lista UPG-100","sub.upg-100":"lista mea de neatinși + afișe",navLabel:"Hărți de cercetare",meta:"{n} hărți",loading:"Se încarcă {label}…",loadFailed:"{label} nu a putut fi încărcat.",manifestHint:"Această filă este compusă din manifest.json — construiți arborele sau serviți arborele construit pentru a o încărca.",desktopOnly:"doar pe desktop",lab:"beta",experimentalSub:"hartă experimentală",toggleList:"Afișează sau ascunde lista",openViews:"Deschide lista de vizualizări",expandList:"Extinde lista",collapseList:"Restrânge lista",collapse:"Restrânge","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","tab.doxa-vision-card":"Card de viziune Doxa",desktopNotice:"Imaginea de ansamblu funcționează doar pe desktop — deschideți această pagină pe un computer pentru a o folosi."},ru:{"sec.dashboards":"Панели","sec.prayer":"Молитвенная мобилизация","sec.gospel":"Исследование Евангелия","sec.experimental":"Экспериментальное","tab.dashboard-plus-grid":"Общая картина","sub.dashboard-plus-grid":"панель + таблица народов","tab.research-map":"Исследовательская карта","sub.research-map":"молитва · вовлечённость · регионы","tab.research-map-plus-grid":"Простое исследование","sub.research-map-plus-grid":"исследовательская карта + таблица народов","tab.prayer-map":"Прогресс молитвы","sub.prayer-map":"простая карта молитвы мира","tab.cities-internet":"Города с интернетом","sub.cities-internet":"подключённость ключевых городов","tab.gospel-resources":"Евангельские ресурсы","sub.gospel-resources":"ресурсы по местам","tab.regions-dashboard":"Регионы","sub.regions-dashboard":"регионы и их страны","tab.upg-100":"Список UPG-100","sub.upg-100":"мой список недостигнутых + плакаты",navLabel:"Исследовательские карты",meta:"Карт: {n}",loading:"Загрузка: {label}…",loadFailed:"Не удалось загрузить: {label}.",manifestHint:"Эта вкладка собирается из manifest.json — соберите дерево или разместите собранное дерево, чтобы загрузить её.",desktopOnly:"только на компьютере",lab:"бета",experimentalSub:"экспериментальная карта",toggleList:"Показать или скрыть список",openViews:"Открыть список представлений",expandList:"Развернуть список",collapseList:"Свернуть список",collapse:"Свернуть","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":"Плакаты по странам","tab.doxa-vision-card":"Карточка видения Doxa",desktopNotice:"«Общая картина» работает только на компьютере — откройте эту страницу на компьютере."},ar:{"sec.dashboards":"لوحات المعلومات","sec.prayer":"التعبئة للصلاة","sec.gospel":"أبحاث الإنجيل","sec.experimental":"تجريبي","tab.dashboard-plus-grid":"الصورة الكاملة","sub.dashboard-plus-grid":"لوحة معلومات + شبكة الشعوب","tab.research-map":"خريطة البحث","sub.research-map":"الصلاة · الانخراط · المناطق","tab.research-map-plus-grid":"بحث مبسّط","sub.research-map-plus-grid":"خريطة البحث + شبكة الشعوب","tab.prayer-map":"تقدم الصلاة","sub.prayer-map":"خريطة عالمية مبسّطة للصلاة","tab.cities-internet":"مدن متصلة بالإنترنت","sub.cities-internet":"اتصال المدن الرئيسية","tab.gospel-resources":"موارد الإنجيل","sub.gospel-resources":"الموارد حسب المكان","tab.regions-dashboard":"المناطق","sub.regions-dashboard":"المناطق ودولها","tab.upg-100":"قائمة UPG-100","sub.upg-100":"قائمتي لغير المُبشَّرين + ملصقات",navLabel:"خرائط البحث",meta:"عدد الخرائط: {n}",loading:"جارٍ تحميل {label}…",loadFailed:"تعذّر تحميل {label}.",manifestHint:"تُبنى علامة التبويب هذه من manifest.json — ابنِ الشجرة أو قدّم الشجرة المبنية لتحميلها.",desktopOnly:"على الحاسوب فقط",lab:"تجريبي",experimentalSub:"خريطة تجريبية",toggleList:"إظهار القائمة أو إخفاؤها",openViews:"فتح قائمة العروض",expandList:"توسيع القائمة",collapseList:"طي القائمة",collapse:"طي","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":"ملصقات الدول","tab.doxa-vision-card":"بطاقة رؤية Doxa",desktopNotice:"تعمل «الصورة الكاملة» على الحاسوب فقط — افتح هذه الصفحة على حاسوب لاستخدامها."},hi:{"sec.dashboards":"डैशबोर्ड","sec.prayer":"प्रार्थना संचालन","sec.gospel":"सुसमाचार शोध","sec.experimental":"प्रायोगिक","tab.dashboard-plus-grid":"संपूर्ण चित्र","sub.dashboard-plus-grid":"डैशबोर्ड + जनसमूहों की ग्रिड","tab.research-map":"शोध मानचित्र","sub.research-map":"प्रार्थना · सहभागिता · क्षेत्र","tab.research-map-plus-grid":"सरल शोध","sub.research-map-plus-grid":"शोध मानचित्र + जनसमूहों की ग्रिड","tab.prayer-map":"प्रार्थना प्रगति","sub.prayer-map":"सरल विश्व प्रार्थना मानचित्र","tab.cities-internet":"इंटरनेट वाले शहर","sub.cities-internet":"प्रमुख शहरों की कनेक्टिविटी","tab.gospel-resources":"सुसमाचार संसाधन","sub.gospel-resources":"स्थान के अनुसार संसाधन","tab.regions-dashboard":"क्षेत्र","sub.regions-dashboard":"क्षेत्र और उनके देश","tab.upg-100":"UPG-100 सूची","sub.upg-100":"मेरी अप्राप्त सूची + पोस्टर",navLabel:"शोध मानचित्र",meta:"{n} मानचित्र",loading:"{label} लोड हो रहा है…",loadFailed:"{label} लोड नहीं हो सका।",manifestHint:"यह टैब manifest.json से बनता है — इसे लोड करने के लिए ट्री बनाएँ या बना हुआ ट्री सर्व करें।",desktopOnly:"केवल डेस्कटॉप",lab:"बीटा",experimentalSub:"प्रायोगिक मानचित्र",toggleList:"सूची दिखाएँ या छिपाएँ",openViews:"दृश्यों की सूची खोलें",expandList:"सूची फैलाएँ",collapseList:"सूची संक्षिप्त करें",collapse:"संक्षिप्त करें","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":"देश पोस्टर","tab.doxa-vision-card":"Doxa दर्शन कार्ड",desktopNotice:"संपूर्ण चित्र केवल डेस्कटॉप पर काम करता है — इसे उपयोग करने के लिए यह पेज कंप्यूटर पर खोलें।"},zh:{"sec.dashboards":"仪表板","sec.prayer":"祷告动员","sec.gospel":"福音研究","sec.experimental":"实验性","tab.dashboard-plus-grid":"全景","sub.dashboard-plus-grid":"仪表板 + 民族网格","tab.research-map":"研究地图","sub.research-map":"祷告 · 参与 · 区域","tab.research-map-plus-grid":"简易研究","sub.research-map-plus-grid":"研究地图 + 民族网格","tab.prayer-map":"祷告进度","sub.prayer-map":"简易世界祷告地图","tab.cities-internet":"有互联网的城市","sub.cities-internet":"主要城市的网络连接","tab.gospel-resources":"福音资源","sub.gospel-resources":"按地点划分的资源","tab.regions-dashboard":"区域","sub.regions-dashboard":"区域及其国家","tab.upg-100":"UPG-100 名单","sub.upg-100":"我的未得之民名单 + 海报",navLabel:"研究地图",meta:"{n} 张地图",loading:"正在加载{label}…",loadFailed:"无法加载{label}。",manifestHint:"此标签页由 manifest.json 组成——请构建目录树或提供已构建的目录树以加载它。",desktopOnly:"仅限桌面",lab:"测试版",experimentalSub:"实验性地图",toggleList:"显示或隐藏列表",openViews:"打开视图列表",expandList:"展开列表",collapseList:"折叠列表",collapse:"折叠","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":"国家海报","tab.doxa-vision-card":"Doxa 异象卡",desktopNotice:"全景仅支持桌面设备——请在电脑上打开此页面使用。"}},xs=Object.keys(Dt);function mc(e){return Object.prototype.hasOwnProperty.call(Dt.en,e)}function wo(e,t,o){let n=(Dt[e]||Dt.en)[t]??Dt.en[t]??t;if(o)for(const i in o)n=n.split("{"+i+"}").join(String(o[i]));return n}const bc=":host{display:block;position:relative;height:var(--doxa-maps-spa-height, 85vh);min-height:480px}:host{font-size:16px;line-height:normal;font-weight:400;font-style:normal;font-variant:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;text-align:start;text-indent:0;text-shadow:none;white-space:normal;-webkit-hyphens:manual;hyphens:manual;visibility:visible;cursor:auto}:host([hidden]){display:none}.dms-pane{position:absolute;top:0;right:0;bottom:0;left:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain}.dms-slot{position:relative;min-height:100%}.dms-hint{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;text-align:center;color:#6d766e;font-size:13px;padding:20px}.dms-hint.err{color:#f87171}.dms-hint small{color:var(--dx-muted, #6d766e)}.dms-notice{position:fixed;left:50%;bottom:24px;transform:translate(-50%);z-index:40;max-width:320px;text-align:center;font-size:13px;line-height:1.4;color:#3b463d;background:#fff;border:1px solid #d1d4cd;border-radius:10px;padding:10px 16px;box-shadow:0 8px 24px #0000001f}.dms-logo{display:inline-flex;align-items:center}.dms-logo svg{display:block}.dms-locale{position:relative;padding:8px 12px 0;display:flex;justify-content:flex-end}.dms-locale-btn{display:inline-flex;align-items:center;gap:8px;font:inherit;font-size:12px;padding:5px 10px;border:1px solid #d1d4cd;border-radius:8px;background:#d1d4cd;color:#3b463d;cursor:pointer}.dms-locale-btn:hover{background:#d1d4cd}.dms-flag{font-size:14px;line-height:1}.dms-locale-name{max-width:12ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dms-dots{color:#6d766e;margin-left:2px}.dms-locale-menu{position:absolute;top:100%;right:12px;margin-top:4px;z-index:30;min-width:180px;list-style:none;padding:6px;border:1px solid #d1d4cd;border-radius:10px;background:#fff;box-shadow:0 12px 32px #00000080;max-height:320px;overflow:auto}.dms-locale-opt{display:flex;align-items:center;gap:8px;width:100%;text-align:left;font:inherit;font-size:13px;padding:7px 9px;border:0;border-radius:7px;background:none;color:#3b463d;cursor:pointer}.dms-locale-opt:hover,.dms-locale-opt.active{background:#d1d4cd;color:#3b463d}.dms-locale-opt.active .dms-locale-name{color:#92b195}.dms-locale-en{margin-left:auto;font-size:11px;color:#6d766e}";function ki(){try{const e=new URLSearchParams(location.search),t=(e.get("lang")||e.get("locale")||"").split("-")[0].toLowerCase();if(xs.includes(t))return t}catch{}try{const e=(document.documentElement.lang||"").split("-")[0].toLowerCase();if(xs.includes(e))return e}catch{}return""}const ws=[{key:"dashboards",label:"Dashboards",i18n:"sec.dashboards",icon:"chart",tabs:[{id:"dashboard-plus-grid",icon:"chart"},{id:"research-map-plus-grid",icon:"map"},{id:"regions-dashboard",icon:"map"}]},{key:"prayer-mobilization",label:"Prayer Mobilization",i18n:"sec.prayer",icon:"heart",tabs:[{id:"upg-100",icon:"list"},{id:"prayer-map",icon:"embed"}]},{key:"gospel-research",label:"Gospel Research",i18n:"sec.gospel",icon:"search",tabs:[{id:"cities-internet",icon:"wifi"},{id:"gospel-resources",icon:"book"}]},{key:"experimental",label:"Experimental",i18n:"sec.experimental",icon:"flask",folder:!0,open:!1,tabs:[]}],_c=new Set(["doxa-maps-spa","plugin-studio","template-bundle","people-groups-grid","research-dashboard","big-picture","demo-map","golden-path-check","doxa-research-map","stack-demo"]),Li={"prayer-walk-planner":1,"upg-neighbor":2,"key-cities":3,"all-people-groups":4,"country-posters":5,"doxa-vision-card":6},Ps=[{id:"dashboard-plus-grid",label:"Big Picture",sub:"dashboard + people-groups grid, stacked",emoji:"🌍",bundle:"dashboard-plus-grid",profile:"dashboard-plus-grid"},{id:"research-map",label:"Research Map",sub:"prayer · engagement · regions",emoji:"🗺️",bundle:"doxa-research-map",profile:"research-map"},{id:"research-map-plus-grid",label:"Simple Research",sub:"research map + people-groups grid",emoji:"🗺️",bundle:"research-map-plus-grid",profile:"research-map-plus-grid"},{id:"prayer-map",label:"Prayer Progress",sub:"simple world prayer map",emoji:"🙏",bundle:"doxa-simple-map",profile:"doxa-simple-map",instance:"prayer"},{id:"cities-internet",label:"Cities with Internet",sub:"connectivity of key cities",emoji:"📡",bundle:"cities-internet",profile:"connectivity-map"},{id:"gospel-resources",label:"Gospel Resources",sub:"resources by place",emoji:"📖",bundle:"gospel-resources",profile:"resources-map"},{id:"regions-dashboard",label:"Regions",sub:"regions and their countries",emoji:"🌐",bundle:"regions-dashboard",profile:"regions-mfe"},{id:"upg-100",label:"UPG-100 List",sub:"my unreached list + posters",emoji:"📋",bundle:"my-upg-100-list",profile:"upg-100-mfe"}];vc(ws);const Po=new Set(["doxa-research-map","doxa-simple-map","cities-internet-map","gospel-resources-map","my-upg-100-list-map","doxa-map","doxa-maps-spa","dashboard-plus-grid","research-dashboard-map","demo-map","all-people-groups","country-posters-map","key-cities-map","research-map-plus-grid","gospel-internet-board"]),ko=new Set(["dashboard-plus-grid","research-map-plus-grid"]);function $c(){const e=Object.fromEntries(Ps.map(o=>[o.id,o])),t=new Set;for(const o of ws)if(o.key!=="experimental")for(const s of o.tabs||[]){const n=e[s.id];n&&n.bundle&&t.add(n.bundle)}return t}function Si(e,t){const o=[];for(const s of e)!s||t.has(s.key)||(t.add(s.key),o.push(s));return o}function vc(e){const t=new Map,o=[];for(const s of e)if(s.key!=="experimental")for(const n of s.tabs||[]){if(!n||!n.id)continue;const i=t.get(n.id);if(i===void 0){t.set(n.id,s.key);continue}(i!==s.key||o.indexOf(n.id)===-1)&&o.push(n.id+" ("+i+" + "+s.key+")")}return o.length&&typeof console<"u"&&console.error("[doxa-maps-spa] duplicate tab key(s) across NAV_MODEL sections: "+o.join(", ")+" — VerticalTabsLayout keys its tab-ref map and `active` highlight by id, so a row declared in two sections paints twice and stalls keyboard nav. See the duplicate-key trap in SPEC-the-six-map-product-and-its-tab-order.md."),o}function yc(e){return String(e).split(/[-_]/).filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}function xc(e){const t=$c(),o=e&&Array.isArray(e.bundles)?e.bundles:[],s=[];for(const n of o){const i=n&&n.bundle;if(!i||t.has(i)||_c.has(i))continue;const a=Array.isArray(n.profiles)?n.profiles:[];if(!a.length)continue;const r=a.find(d=>d.isMap)||a.find(d=>d.profile===i)||a[0],l=r.element||Array.isArray(n.elements)&&n.elements[0]||i,u=n.scriptUrl||r.scriptUrl||"";u&&s.push({id:i,label:r.title||yc(i),sub:(r.description||"").trim().replace(/[,;]\s*$/,"")||"experimental bundle",emoji:"🧪",tag:l,bundle:i,profile:r.profile||i,scriptUrl:u,heavy:Po.has(l)||Po.has(i),scroll:ko.has(l)||ko.has(i),discovered:!0})}return s.sort((n,i)=>{const a=Li[n.id]||999,r=Li[i.id]||999;return a!==r?a-r:n.label.localeCompare(i.label)}),s}function wc(e,t){const o=e&&Array.isArray(e.bundles)?e.bundles:[],s=Object.fromEntries(o.map(i=>[i.bundle,i])),n={};for(const i of t){const a=s[i.bundle];if(!a)continue;const r=Array.isArray(a.profiles)?a.profiles:[],l=r.find(P=>P.profile===i.profile)||r[0],u=l&&l.element||Array.isArray(a.elements)&&a.elements[0]||i.bundle,d=a.scriptUrl||l&&l.scriptUrl||"";if(!d)continue;const g=l&&Array.isArray(l.instances)?l.instances:[],x=!!(i.instance&&g.some(P=>(P&&(P.id||P.instance))===i.instance));n[i.id]={tag:u,scriptUrl:d,profile:l&&l.profile||i.profile,instance:x?i.instance:"",heavy:Po.has(u)||Po.has(i.bundle),scroll:ko.has(u)||ko.has(i.bundle)}}return n}const Ht={};function Pc(e,t){return Ht[e]||(Ht[e]=new Promise((o,s)=>{const n=document.createElement("script");n.src=e,(/^\/plugin-designs\//.test(e)||/\/index\.js(\?|$)/.test(e))&&(n.type="module"),n.onload=()=>o(),n.onerror=()=>{delete Ht[e],s(new Error("failed to load "+e))},document.head.appendChild(n)})),Ht[e]}function kc(e,t){return typeof customElements>"u"||customElements.get(e)?Promise.resolve():Promise.race([customElements.whenDefined(e),new Promise((o,s)=>setTimeout(()=>{customElements.get(e)||s(new Error("<"+e+"> never registered (bundle loaded but defined no element)"))},15e3))])}const Lc=ss({name:"DoxaMapsSpa",inheritAttrs:!1,components:{VerticalTabsLayout:dc},props:{treeBase:{type:String,default:""},profileConfig:{type:[String,Object],default:""},heading:{type:String,default:"DX-Maps"},tokenUrl:{type:String,default:""},tk:{type:String,default:""},language:{type:String,default:""},apiBaseUrl:{type:String,default:""},provider:{type:String,default:""},tab:{type:String,default:""}},emits:["tab-change"],setup(){return{injectedBase:kt("dmsTreeBase","")}},data(){return{activeIndex:0,showHeader:!1,narrow:!1,_mql:null,_onMedia:null,disabledNotice:"",_noticeTimer:null,manifestError:"",manifestBase:"",runtime:{},locale:gc(),hostLang:ki(),localeOpen:!1,switcherLangs:uc,tabs:Ps.map(e=>({...e,tag:"",scriptUrl:"",heavy:!1,scroll:!1,resolved:!1,mounted:!1,state:"idle",error:""}))}},computed:{cfg(){let e=this.profileConfig;if(typeof e=="string")try{e=e?JSON.parse(e):{}}catch{e={}}return e&&typeof e=="object"?e:{}},base(){const e=(this.treeBase||this.cfg.treeBase||this.injectedBase||"").trim();return e?e.replace(/\/+$/,"")+"/":""},assetsBase(){const e=String(this.cfg.assetsBase||"").trim();return/^https?:\/\//i.test(e)||e.startsWith("/")?e.replace(/\/+$/,""):this.manifestBase?this.manifestBase.replace(/\/+$/,"")+"/assets":""},navGroups(){const e=Object.fromEntries(this.tabs.map(o=>[o.id,o])),t=new Set;return ws.map(o=>{let s=Si((o.tabs||[]).filter(n=>e[n.id]).map(n=>{const i=e[n.id],a=this.isBigPictureDisabled(i.id);return{key:i.id,label:this.tabLabel(i),sub:this.tabSub(i),icon:n.icon,badge:a?this.tr("desktopOnly"):n.badge,disabled:a}}),t);return o.key==="experimental"&&(s=s.concat(Si(this.tabs.filter(n=>n.discovered).map(n=>({key:n.id,label:this.tabLabel(n),sub:this.tabSub(n),icon:"flask",badge:this.tr("lab")})),t))),{key:o.key,label:o.i18n?this.tr(o.i18n):o.label,icon:o.icon,folder:!!o.folder,open:o.open,rows:s}}).filter(o=>o.rows.length)},showLocaleSwitcher(){return this.showHeader},activeLang(){return fc(this.locale)||{code:this.locale,flag:"🌐",nativeName:this.locale}},effectiveLocale(){const e=(this.language||this.cfg.language||this.cfg.locale||this.cfg.lang||"").trim(),t=this.showLocaleSwitcher?this.locale:"";return(e||t||this.hostLang||"en").split("-")[0].toLowerCase()},uiLocale(){return xs.includes(this.effectiveLocale)?this.effectiveLocale:"en"},uiDir(){return this.uiLocale==="ar"?"rtl":"ltr"},layoutLabels(){const e={};for(const t of["toggleList","openViews","expandList","collapseList","collapse"])e[t]=this.tr(t);return e},effectiveProvider(){const e=String(this.provider||this.cfg.provider||"").trim().toLowerCase();return e==="maplibre"||e==="mapbox"?e:""},activeKey(){const e=this.tabs[this.activeIndex];return e?e.id:""}},mounted(){this.watchWidth(),this.watchHostLang(),this.select(this.initialIndex()),this.loadManifest()},beforeUnmount(){this._langObs&&(this._langObs.disconnect(),this._langObs=null),!(!this._mql||!this._onMedia)&&(this._mql.removeEventListener?this._mql.removeEventListener("change",this._onMedia):this._mql.removeListener&&this._mql.removeListener(this._onMedia),this._mql=null,this._onMedia=null)},watch:{effectiveLocale(e){const t=this.tabs[this.activeIndex];if(!(!t||!t.mounted))try{const o=this._slots&&this._slots[this.activeIndex],s=o&&o.firstElementChild;s&&s.setAttribute&&s.setAttribute("profile-config",JSON.stringify(this.childConfig(t)))}catch{}},tab(e){e&&this.onSelect(e)}},methods:{setSlot(e,t){t&&(this._slots=Object.assign(this._slots||{},{[e]:t}))},tr(e,t){return wo(this.uiLocale,e,t)},t(e,t){return wo(this.uiLocale,e,t)},tabLabel(e){return!e.discovered||mc("tab."+e.id)?wo(this.uiLocale,"tab."+e.id):e.label},tabSub(e){return e.discovered?this.uiLocale==="en"?e.sub:this.tr("experimentalSub"):wo(this.uiLocale,"sub."+e.id)},watchHostLang(){typeof MutationObserver>"u"||typeof document>"u"||(this._langObs=new MutationObserver(()=>{this.hostLang=ki()}),this._langObs.observe(document.documentElement,{attributes:!0,attributeFilter:["lang"]}))},watchWidth(){typeof window>"u"||!window.matchMedia||(this._mql=window.matchMedia("(max-width: 760px)"),this.narrow=this._mql.matches,this._onMedia=e=>{const t=this.narrow;this.narrow=!!e.matches,t!==this.narrow&&this.isBigPictureDisabled(this.activeKey)&&this.select(this.firstVisibleIndex())},this._mql.addEventListener?this._mql.addEventListener("change",this._onMedia):this._mql.addListener&&this._mql.addListener(this._onMedia))},isBigPictureDisabled(e){return e==="dashboard-plus-grid"&&this.narrow},firstVisibleIndex(){let e=-1;for(const t of this.navGroups)for(const o of t.rows){const s=this.tabs.findIndex(n=>n.id===o.key);if(!(s<0)&&(e<0&&(e=s),!o.disabled))return s}return e>=0?e:0},loadManifest(){const e=this.resolve("manifest.json"),t=u=>{try{return new URL(u,location.href).href.replace(/[^/]*$/,"")}catch{return""}},o={url:e,root:t(e)},s={url:this.resolve("doxa-maps-spa/manifest.json"),root:o.root};let n=!1;try{n=new URL(e,location.href).origin!==location.origin}catch{}const i=n?[s,o]:[o,s],a="/public/dx-maps/manifest.json";i.some(u=>u.url===a)||i.push({url:a,root:t(a)});const r=[],l=u=>{if(u>=i.length){this.manifestError="manifest.json not found (tried "+r.join(", ")+")",console.error("[doxa-maps-spa] "+this.manifestError+" — every tab except Big Picture is composed from it, so their panes cannot mount.");return}const{url:d,root:g}=i[u];return r.push(d),fetch(d,{credentials:"same-origin"}).then(x=>{if(!x||!x.ok)throw new Error(d+" → HTTP "+(x?x.status:"?"));return x.json()}).then(x=>{if(!x)throw new Error(d+" → empty");this.manifestError="",this.manifestBase=g||"",this.applyManifest(x)}).catch(()=>l(u+1))};try{l(0)}catch{}},applyManifest(e){this.runtime=e&&e.runtime&&typeof e.runtime=="object"?e.runtime:{},this.applyPageGlobals();const t=wc(e,Ps),o=this.activeKey,s=[];for(const l of this.tabs){if(l.discovered){s.push(l);continue}const u=t[l.id];u&&(Object.assign(l,u,{resolved:!0}),s.push(l))}const n=new Set(s.map(l=>l.id));for(const l of xc(e))n.has(l.id)||s.push({...l,resolved:!0,mounted:!1,state:"idle",error:""});this.tabs=s;const i=this.requestedTab(),a=i?this.tabs.findIndex(l=>l.id===i):-1,r=this.tabs.findIndex(l=>l.id===o);a>=0&&!this.isBigPictureDisabled(i)&&!this._honouredTab?this.select(a):this.select(r>=0?r:this.firstVisibleIndex()),this._honouredTab=!0},requestedTab(){let e="";try{e=new URLSearchParams(location.search).get("tab")||""}catch{}return String(this.tab||this.cfg.tab||e||"").trim()},initialIndex(){const e=this.requestedTab(),t=e?this.tabs.findIndex(o=>o.id===e):-1;return t>=0&&(this._honouredTab=!0),t>=0&&!this.isBigPictureDisabled(e)?t:this.firstVisibleIndex()},setLocale(e){this.locale=e,this.localeOpen=!1,hc(e)},onSelect(e){if(this.isBigPictureDisabled(e)){this.disabledNotice=this.tr("desktopNotice"),clearTimeout(this._noticeTimer),this._noticeTimer=setTimeout(()=>{this.disabledNotice=""},4e3);return}const t=this.tabs.findIndex(o=>o.id===e);t!==-1&&this.select(t)},resolve(e){const t=String(e);if(/^(https?:)?\/\//.test(t)||t.startsWith("/"))return t;const o=t.replace(/^\.\//,"");return this.manifestBase?this.manifestBase.replace(/\/+$/,"")+"/"+o:this.base?this.base.replace(/\/+$/,"")+"/"+o:"../"+o},select(e){const t=this.activeIndex;if(this.activeIndex=e,t!==e&&t>=0){const s=this.tabs[t];s&&s.heavy&&s.mounted&&this.releaseTab(t,s)}const o=this.tabs[e];o&&((t!==e||!this._announced)&&(this._announced=!0,this.$emit("tab-change",{id:o.id,label:o.label})),o.scriptUrl&&(o.mounted||this.$nextTick(()=>{this.activeIndex===e&&this.mountElement(e)})))},releaseTab(e,t){try{const o=this._slots&&this._slots[e];o&&(o.innerHTML="")}catch{}this._slots&&delete this._slots[e],t.mounted=!1,t.state="idle",t.error=""},childConfig(e){const t={profile:e.profile||e.id,instanceId:e.instance||"dms-"+e.id};this.effectiveLocale&&(t.locale=this.effectiveLocale);const o=this.tk||this.cfg.tk||this.runtime.token;return o&&(t.tk=o),(this.tokenUrl||this.cfg.tokenUrl)&&(t.tokenUrl=this.tokenUrl||this.cfg.tokenUrl),this.effectiveProvider&&(t.provider=this.effectiveProvider),this.base&&(t.treeBase=this.base),this.assetsBase&&(t.assetsBase=this.assetsBase),t.urlSync=!1,t},applyPageGlobals(){if(typeof window>"u")return;const e=(this.apiBaseUrl||this.cfg.apiBaseUrl||this.runtime.apiBaseUrl||"").trim();e&&!window.MAP_APP_API_URL&&(window.MAP_APP_API_URL=e.replace(/\/+$/,""));const t=this.tk||this.cfg.tk||this.runtime.token;t&&!window.MAP_TOKEN&&(window.MAP_TOKEN=t),this.effectiveProvider&&!window.MAP_PROVIDER&&(window.MAP_PROVIDER=this.effectiveProvider)},mountElement(e){const t=this.tabs[e];t.mounted=!0,t.state="loading";const o=this.resolve(t.scriptUrl);Pc(o).then(()=>kc(t.tag)).then(()=>{try{if(t.heavy&&this.activeIndex!==e){t.mounted=!1,t.state="idle";return}const s=this._slots&&this._slots[e];if(!s){t.state="error",t.error="no slot";return}s.innerHTML="";const n=document.createElement(t.tag);n.setAttribute("profile-config",JSON.stringify(this.childConfig(t))),this.base&&n.setAttribute("tree-base",this.base.replace(/\/+$/,"")),n.style.cssText=t.scroll?"display:block;position:static;width:100%;height:auto;":"display:block;position:absolute;inset:0;width:100%;height:100%;",s.appendChild(n),t.state="ready"}catch(s){t.state="error",t.error="mount failed: "+(s&&s.message||String(s))}}).catch(s=>{t.state="error",t.error=s&&s.message||String(s)})}}}),Sc={class:"dms-locale"},Cc=["aria-expanded"],Ec={class:"dms-flag"},Tc={class:"dms-locale-name"},Nc={key:0,class:"dms-locale-menu",role:"listbox"},Rc=["aria-selected"],Ac=["onClick"],Ic={class:"dms-flag"},Oc={class:"dms-locale-name"},Fc={class:"dms-locale-en"},Mc=["hidden"],Wc={key:0,class:"dms-hint"},Dc={key:1,class:"dms-hint err"},Hc={key:2,class:"dms-hint err"},Gc={key:0,class:"dms-notice",role:"status"};function jc(e,t,o,s,n,i){const a=ja("VerticalTabsLayout");return A(),mo(a,{dir:e.uiDir,lang:e.uiLocale,labels:e.layoutLabels,title:e.heading,"nav-label":e.t("navLabel"),header:e.showHeader,groups:e.navGroups,active:e.activeKey,"onUpdate:active":e.onSelect},za({brand:Pt(()=>[t[1]||(t[1]=E("span",{class:"dms-logo","aria-hidden":"true"},[E("svg",{viewBox:"0 0 24 24",width:"22",height:"22",fill:"none",stroke:"#92b195","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[E("circle",{cx:"12",cy:"12",r:"9"}),E("polygon",{points:"12 6 14 12 12 18 10 12",fill:"#92b195",stroke:"none"}),E("polygon",{points:"6 12 12 10 18 12 12 14",fill:"#92b195",opacity:"0.55",stroke:"none"})])],-1))]),meta:Pt(()=>[gt(O(e.t("meta",{n:e.tabs.length})),1)]),default:Pt(()=>[(A(!0),I(ee,null,dt(e.tabs,(r,l)=>Qo((A(),I("section",{key:r.id,class:"dms-pane",hidden:l!==e.activeIndex},[!r.heavy||l===e.activeIndex?(A(),I(ee,{key:0},[E("div",{class:"dms-slot",ref_for:!0,ref:u=>e.setSlot(l,u)},null,512),r.state==="loading"?(A(),I("div",Wc,O(e.tr("loading",{label:e.tabLabel(r)})),1)):r.state==="error"?(A(),I("div",Dc,[gt(O(e.tr("loadFailed",{label:e.tabLabel(r)})),1),t[3]||(t[3]=E("br",null,null,-1)),E("small",null,O(r.error),1)])):r.state==="idle"&&!r.scriptUrl&&e.manifestError?(A(),I("div",Hc,[gt(O(e.tr("loadFailed",{label:e.tabLabel(r)})),1),t[4]||(t[4]=E("br",null,null,-1)),E("small",null,O(e.manifestError),1),t[5]||(t[5]=E("br",null,null,-1)),E("small",null,O(e.tr("manifestHint")),1)])):de("",!0)],64)):de("",!0)],8,Mc)),[[bs,l===e.activeIndex]])),128)),e.disabledNotice?(A(),I("div",Gc,O(e.disabledNotice),1)):de("",!0)]),_:2},[e.showLocaleSwitcher?{name:"toolbar",fn:Pt(()=>[E("div",Sc,[E("button",{type:"button",class:"dms-locale-btn","aria-expanded":String(e.localeOpen),"aria-label":"Change language",onClick:t[0]||(t[0]=r=>e.localeOpen=!e.localeOpen)},[E("span",Ec,O(e.activeLang.flag),1),E("span",Tc,O(e.activeLang.nativeName),1),t[2]||(t[2]=E("span",{class:"dms-dots","aria-hidden":"true"},"⋮",-1))],8,Cc),e.localeOpen?(A(),I("ul",Nc,[(A(!0),I(ee,null,dt(e.switcherLangs,r=>(A(),I("li",{key:r.code,role:"option","aria-selected":String(r.code===e.locale)},[E("button",{type:"button",class:Be(["dms-locale-opt",{active:r.code===e.locale}]),onClick:l=>e.setLocale(r.code)},[E("span",Ic,O(r.flag),1),E("span",Oc,O(r.nativeName),1),E("span",Fc,O(r.name),1)],10,Ac)],8,Rc))),128))])):de("",!0)])]),key:"0"}:void 0]),1032,["dir","lang","labels","title","nav-label","header","groups","active","onUpdate:active"])}const Uc=xi(Lc,[["render",jc],["styles",[bc]]]);function Vc(){try{const e=typeof document<"u"&&document.currentScript&&document.currentScript.src||"";return e?e.replace(/[^/]+\/[^/]+$/,"").replace(/\/+$/,"")+"/":""}catch{return""}}const zc=Vc(),Bc=tl(Uc,{configureApp(e){e.provide("dmsTreeBase",zc)}});typeof customElements<"u"&&!customElements.get("doxa-maps-spa")&&customElements.define("doxa-maps-spa",Bc)})(); diff --git a/public/dx-maps/doxa-maps-spa/doxa-maps-spa/app/index.html b/public/dx-maps/doxa-maps-spa/doxa-maps-spa/app/index.html index 60e9942ee..429f38bed 100644 --- a/public/dx-maps/doxa-maps-spa/doxa-maps-spa/app/index.html +++ b/public/dx-maps/doxa-maps-spa/doxa-maps-spa/app/index.html @@ -32,7 +32,7 @@ - + - + \n\n" + "script": "\n\n" }, "instances": [ { diff --git a/public/dx-maps/manifest.json b/public/dx-maps/manifest.json index bd40a15bd..eb00695df 100644 --- a/public/dx-maps/manifest.json +++ b/public/dx-maps/manifest.json @@ -301,7 +301,7 @@ "bundle": "doxa-maps-spa", "scriptUrl": "./doxa-maps-spa/doxa-maps-spa.js", "output": "dx-maps/doxa-maps-spa/doxa-maps-spa.js", - "integrity": "sha384-DVJYM1qfZV2newK3vbNFDh40HEJ6gtYIz9EKUE/wNEzCAq5KCImrTlhRh7rHOWV8", + "integrity": "sha384-E7HAxP05CmDnNI1E2zhALbGo6NFpvJIVileN1RtrxMaiI1jmNe0S5uIsdrshDAPU", "elements": [ "doxa-maps-spa" ], @@ -326,7 +326,7 @@ "scriptUrl": "./doxa-maps-spa/doxa-maps-spa.js", "embed": { "iframe": "", - "script": "\n\n" + "script": "\n\n" }, "instances": [ {