-
${ee(Y.name)} ${ee(g(Q.id).split(" — ")[0])}
-
${ee(Y.country)} · ${ee(g("population",{n:y(Y.population)}))}
-
${ee(Y.evangelical||"GSEC "+Y.gsec)}
-
${ee(Y.language)}${Y.religion?" · "+ee(Y.religion):""}
+`,"all-people-groups");const t=Re("profileConfig"),o=Re("mapboxToken"),n=Re("dataSource"),a=Re("dataStore"),s=Re("mapStore"),r=he(()=>{var Q;return((Q=t.value)==null?void 0:Q.isDark)===!0}),i=Yc(t),l=he(()=>Uu((t==null?void 0:t.value)||{})),c={title:"All People Groups",locations:"{n} group–country locations",doxa:"DOXA people groups",frontier:"Frontier — nothing started",unreached:"Unreached — work beginning",reached:"Reached — church is there",hint:"Click a row to see all of them · click again for everything",loading:"Loading every people group…",loadError:"The map could not be loaded.",pray:"Pray for them →",population:"pop {n}"};let u=null;try{u=Do()}catch{}function g(Q,ne){const Z="allPeopleGroups."+Q;if(u&&u.te&&u.te(Z))return u.t(Z,ne||{});let ue=c[Q];if(ne)for(const J in ne)ue=String(ue).split("{"+J+"}").join(String(ne[J]));return ue}const m=he(()=>u&&u.locale&&u.locale.value||"en"),w=Q=>{try{return Number(Q).toLocaleString(m.value)}catch{return Number(Q).toLocaleString()}},k=[{id:"doxa",color:"#111827"},{id:"frontier",color:"#e0392b"},{id:"unreached",color:"#e6a800"},{id:"reached",color:"#23a45a"}],y=Object.fromEntries(k.map(Q=>[Q.id,Q.color])),P=de({doxa:0,frontier:0,unreached:0,reached:0}),M=de(!1);function S(Q,ne){if(ne.has(String(Q.ROP3Code||"")))return"doxa";const Z=Number(Q.GSEC);return!Number.isFinite(Z)||Z<=1?"frontier":Z<=3?"unreached":"reached"}function A(){var Z;let Q="";try{Q=new URLSearchParams(window.location.search).get("utm_source")||""}catch{}const ne=(Z=t==null?void 0:t.value)==null?void 0:Z.utmSource;return encodeURIComponent(String(Q||ne||"agwm"))}const $=de(null),T=de(!1),N=de(null),{map:b,initializeMap:C,destroy:h}=R_({containerRef:$,accessToken:o.value,provider:i,style:((xe=t==null?void 0:t.value)==null?void 0:xe.style)??"paper",center:[20,12],zoom:1.6}),R=new Vu,G=_$({mapId:"all-people-groups",dataSourceId:n.value,dataSourceManager:R,dataStore:a,markRaw:Q=>Q});let F=[],W=new Map;function X(Q){return String(Q??"").replace(/[&<>"']/g,ne=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[ne])}async function z(){const Q=l.value,ne=await fetch(`${Q}/people-groups/people-groups-points.json`);if(ne.ok){const J=await ne.json(),ye=J.dicts||{};return(J.rows||[]).map(ee=>({lng:ee[0],lat:ee[1],gsec:ee[2],rop3:ee[3],name:ee[4],country:(ye.country||[])[ee[5]]||"",population:ee[6],language:(ye.language||[])[ee[7]]||"",religion:(ye.religion||[])[ee[8]]||"",evangelical:(ye.evangelical||[])[ee[9]]||""}))}const Z=await fetch(`${Q}/people-groups/people-groups-slim.json`);if(!Z.ok)throw new Error(`people-groups-points.json ${ne.status}`);return((await Z.json()).rows||[]).map(J=>({lng:Number(J.Long),lat:Number(J.Lat),gsec:J.GSEC,rop3:String(J.ROP3Code||""),name:J.Name||"",country:J.CountryName||"",population:Number(J.Population)||0,language:J.LanguageName||"",religion:J.ReligionName||"",evangelical:J.EvangelicalLevel||""}))}function U(Q,ne){const Z=[],ue={doxa:0,frontier:0,unreached:0,reached:0};for(const J of Q){const ye=Number(J.lat),ee=Number(J.lng);if(!Number.isFinite(ye)||!Number.isFinite(ee)||ye===0&&ee===0)continue;const ie=S({ROP3Code:J.rop3,GSEC:J.gsec},ne);ue[ie]++,Z.push({type:"Feature",geometry:{type:"Point",coordinates:[ee,ye]},properties:{name:J.name,country:J.country,population:Number(J.population)||0,gsec:J.gsec,evangelical:J.evangelical,language:J.language,religion:J.religion,rop3:String(J.rop3||""),category:ie}})}return P.value=ue,F=Z,{type:"FeatureCollection",features:Z}}async function Y(){let Q=[];try{await G.loadData(),Q=G.normalizedPeopleGroups.value||[]}catch(Z){console.warn("[all-people-groups] DOXA overlay unavailable (map still renders by GSEC):",Z)}const ne=new Set;for(const Z of Q){const ue=String(Z.peopleGroupId||Z.rop3||Z.peopleGroupCountry||"");ue&&(ne.add(ue),W.has(ue)||W.set(ue,{slug:Z.slug||"",name:Z.name||""}))}return ne}function te(Q){const ne=b.value;ne.addSource("apg",{type:"geojson",data:Q}),ne.addLayer({id:"apg-pins",type:"circle",source:"apg",layout:{"circle-sort-key":["match",["get","category"],"doxa",4,"frontier",3,"unreached",2,1]},paint:{"circle-color":["match",["get","category"],"doxa",y.doxa,"frontier",y.frontier,"unreached",y.unreached,y.reached],"circle-stroke-color":"#1f2937","circle-stroke-width":["interpolate",["linear"],["zoom"],0,.3,6,.6,12,1],"circle-stroke-opacity":.55,"circle-radius":["interpolate",["linear"],["zoom"],0,2.2,4,3.4,8,6,12,9],"circle-opacity":.92}}),ne.on("mouseenter","apg-pins",()=>{ne.getCanvas().style.cursor="pointer"}),ne.on("mouseleave","apg-pins",()=>{ne.getCanvas().style.cursor=""}),ne.on("click","apg-pins",Z=>{const ue=Z.features&&Z.features[0];if(!ue)return;const J=ue.properties,ye=J.category==="doxa"?W.get(J.rop3):null,ee=k.find(f=>f.id===J.category),ie=ye&&ye.slug?`
${X(g("pray"))}`:"",Ce=i==="maplibre"?window.maplibregl:window.mapboxgl;new Ce.Popup({closeButton:!0,maxWidth:"290px"}).setLngLat(Z.lngLat).setHTML(`
+
${X(J.name)} ${X(g(ee.id).split(" — ")[0])}
+
${X(J.country)} · ${X(g("population",{n:w(J.population)}))}
+
${X(J.evangelical||"GSEC "+J.gsec)}
+
${X(J.language)}${J.religion?" · "+X(J.religion):""}
${ie}
-
`).addTo(ne)})}const Ce=de(null);function Be(Z){const ne=b.value;if(!ne||!ne.getLayer("apg-pins"))return;if(Ce.value===Z){Ce.value=null,ne.setFilter("apg-pins",null),ne.fitBounds([[-170,-55],[179,72]],{padding:20,duration:900});return}Ce.value=Z,ne.setFilter("apg-pins",["==",["get","category"],Z]);let X=180,ue=85,Y=-180,$e=-85,Q=0;for(const ie of B){if(ie.properties.category!==Z)continue;const[Le,f]=ie.geometry.coordinates;Le
Y&&(Y=Le),f$e&&($e=f),Q++}Q&&ne.fitBounds([[X,ue],[Y,$e]],{padding:60,duration:900,maxZoom:6})}Lo(async()=>{const Z=K().catch(X=>(P.value=String((X==null?void 0:X.message)||X),null)),ne=V();try{await k()}catch(X){P.value=String((X==null?void 0:X.message)||X);return}if(!b.value){$.value&&(P.value="Map failed to initialize — check token and container");return}b.value.once("style.load",async()=>{var X;try{const ue=await Z;if(!ue||!b.value)return;Zb(b.value,"mercator"),oe(H(ue,new Set)),(X=s==null?void 0:s.registerMap)==null||X.call(s,"all-people-groups",b.value),C.value=!0;const Y=await ne;Y.size&&b.value&&b.value.getSource("apg")&&b.value.getSource("apg").setData(H(ue,Y)),M.value=!0}catch(ue){P.value=String((ue==null?void 0:ue.message)||ue)}})}),an(()=>{var Z;(Z=s==null?void 0:s.unregisterMap)==null||Z.call(s,"all-people-groups"),h()});const Ne=he(()=>N.value.doxa+N.value.frontier+N.value.unreached+N.value.reached);return(Z,ne)=>(ye(),Ie("div",Ty,[!C.value&&!P.value?(ye(),Ie("div",Ey,Ke(g("loading")),1)):Rt("",!0),P.value?(ye(),Ie("div",Cy,Ke(g("loadError"))+" "+Ke(P.value),1)):Rt("",!0),se("div",{ref_key:"mapContainer",ref:$,class:"apg-canvas"},null,512),Me(ny,{"has-geocoder":!1},{default:qn(()=>[Me(wy,{"is-dark":r.value,"embed-path":Oy},null,8,["is-dark"])]),_:1}),C.value?(ye(),Ie("div",Ly,[se("div",Py,Ke(g("title")),1),se("div",Ny,Ke(g("locations",{n:y(Ne.value)})),1),(ye(),Ie(Ge,null,Za(T,X=>se("div",{key:X.id,class:tt(["apg-row",{active:Ce.value===X.id}]),onClick:ue=>Be(X.id)},[se("span",{class:"apg-dot",style:Go({background:X.color})},null,4),ht(" "+Ke(g(X.id))+" ",1),se("span",xy,Ke(X.id==="doxa"&&!M.value?"…":y(N.value[X.id]||0)),1)],10,My)),64)),se("div",Iy,Ke(g("hint")),1)])):Rt("",!0)]))}}},Symbol.toStringTag,{value:"Module"}))})();
+ `).addTo(ne)})}const Te=de(null);function ze(Q){const ne=b.value;if(!ne||!ne.getLayer("apg-pins"))return;if(Te.value===Q){Te.value=null,ne.setFilter("apg-pins",null),ne.fitBounds([[-170,-55],[179,72]],{padding:20,duration:900});return}Te.value=Q,ne.setFilter("apg-pins",["==",["get","category"],Q]);let Z=180,ue=85,J=-180,ye=-85,ee=0;for(const ie of F){if(ie.properties.category!==Q)continue;const[Ce,f]=ie.geometry.coordinates;Ce