-
${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):""}
+`,"all-people-groups");const t=De("profileConfig"),o=De("mapboxToken"),n=De("dataSource"),a=De("dataStore"),s=De("mapStore"),i=he(()=>{var ee;return((ee=t.value)==null?void 0:ee.isDark)===!0}),r=Qc(t),l=he(()=>Vu((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=$o()}catch{}function g(ee,ne){const Z="allPeopleGroups."+ee;if(u&&u.te&&u.te(Z))return u.t(Z,ne||{});let ue=c[ee];if(ne)for(const X in ne)ue=String(ue).split("{"+X+"}").join(String(ne[X]));return ue}const h=he(()=>u&&u.locale&&u.locale.value||"en"),A=ee=>{try{return Number(ee).toLocaleString(h.value)}catch{return Number(ee).toLocaleString()}},k=[{id:"doxa",color:"#111827"},{id:"frontier",color:"#e0392b"},{id:"unreached",color:"#e6a800"},{id:"reached",color:"#23a45a"}],v=Object.fromEntries(k.map(ee=>[ee.id,ee.color])),N=de({doxa:0,frontier:0,unreached:0,reached:0}),E=de(!1);function w(ee,ne){if(ne.has(String(ee.ROP3Code||"")))return"doxa";const Z=Number(ee.GSEC);return!Number.isFinite(Z)||Z<=1?"frontier":Z<=3?"unreached":"reached"}function y(){var Z;let ee="";try{ee=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(ee||ne||"agwm"))}const m=de(null),T=de(!1),M=de(null),{map:b,initializeMap:P,destroy:_}=t$({containerRef:m,accessToken:o.value,provider:r,style:((Te=t==null?void 0:t.value)==null?void 0:Te.style)??"paper",center:[20,12],zoom:1.6}),G=new Zu,z=D$({mapId:"all-people-groups",dataSourceId:n.value,dataSourceManager:G,dataStore:a,markRaw:ee=>ee});let x=[],K=new Map;function J(ee){return String(ee??"").replace(/[&<>"']/g,ne=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[ne])}async function H(){const ee=l.value,ne=await fetch(`${ee}/people-groups/people-groups-points.json`);if(ne.ok){const X=await ne.json(),Se=X.dicts||{};return(X.rows||[]).map(te=>({lng:te[0],lat:te[1],gsec:te[2],rop3:te[3],name:te[4],country:(Se.country||[])[te[5]]||"",population:te[6],language:(Se.language||[])[te[7]]||"",religion:(Se.religion||[])[te[8]]||"",evangelical:(Se.evangelical||[])[te[9]]||""}))}const Z=await fetch(`${ee}/people-groups/people-groups-slim.json`);if(!Z.ok)throw new Error(`people-groups-points.json ${ne.status}`);return((await Z.json()).rows||[]).map(X=>({lng:Number(X.Long),lat:Number(X.Lat),gsec:X.GSEC,rop3:String(X.ROP3Code||""),name:X.Name||"",country:X.CountryName||"",population:Number(X.Population)||0,language:X.LanguageName||"",religion:X.ReligionName||"",evangelical:X.EvangelicalLevel||""}))}function B(ee,ne){const Z=[],ue={doxa:0,frontier:0,unreached:0,reached:0};for(const X of ee){const Se=Number(X.lat),te=Number(X.lng);if(!Number.isFinite(Se)||!Number.isFinite(te)||Se===0&&te===0)continue;const re=w({ROP3Code:X.rop3,GSEC:X.gsec},ne);ue[re]++,Z.push({type:"Feature",geometry:{type:"Point",coordinates:[te,Se]},properties:{name:X.name,country:X.country,population:Number(X.population)||0,gsec:X.gsec,evangelical:X.evangelical,language:X.language,religion:X.religion,rop3:String(X.rop3||""),category:re}})}return N.value=ue,x=Z,{type:"FeatureCollection",features:Z}}async function V(){let ee=[];try{await z.loadData(),ee=z.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 ee){const ue=String(Z.peopleGroupId||Z.rop3||Z.peopleGroupCountry||"");ue&&(ne.add(ue),K.has(ue)||K.set(ue,{slug:Z.slug||"",name:Z.name||""}))}return ne}function Q(ee){const ne=b.value;ne.addSource("apg",{type:"geojson",data:ee}),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",v.doxa,"frontier",v.frontier,"unreached",v.unreached,v.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 X=ue.properties,Se=X.category==="doxa"?K.get(X.rop3):null,te=k.find(f=>f.id===X.category),re=Se&&Se.slug?`
${J(g("pray"))}`:"",Me=wa(r);new Me.Popup({closeButton:!0,maxWidth:"290px"}).setLngLat(Z.lngLat).setHTML(`
+
${J(X.name)} ${J(g(te.id).split(" — ")[0])}
+
${J(X.country)} · ${J(g("population",{n:A(X.population)}))}
+
${J(X.evangelical||"GSEC "+X.gsec)}
+
${J(X.language)}${X.religion?" · "+J(X.religion):""}
${re}
-
`).addTo(ne)})}const Te=de(null);function je(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 re of R){if(re.properties.category!==Q)continue;const[Ee,f]=re.geometry.coordinates;Ee
J&&(J=Ee),fye&&(ye=f),ee++}ee&&ne.fitBounds([[Z,ue],[J,ye]],{padding:60,duration:900,maxZoom:6})}Eo(async()=>{const Q=j().catch(Z=>(M.value=String((Z==null?void 0:Z.message)||Z),null)),ne=Y();try{await E()}catch(Z){M.value=String((Z==null?void 0:Z.message)||Z);return}if(!b.value){$.value&&(M.value="Map failed to initialize — check token and container");return}b.value.once("style.load",async()=>{var Z;try{const ue=await Q;if(!ue||!b.value)return;v_(b.value,"mercator"),te(U(ue,new Set)),(Z=s==null?void 0:s.registerMap)==null||Z.call(s,"all-people-groups",b.value),T.value=!0;const J=await ne;J.size&&b.value&&b.value.getSource("apg")&&b.value.getSource("apg").setData(U(ue,J)),N.value=!0}catch(ue){M.value=String((ue==null?void 0:ue.message)||ue)}})}),an(()=>{var Q;(Q=s==null?void 0:s.unregisterMap)==null||Q.call(s,"all-people-groups"),h()});const Ne=he(()=>P.value.doxa+P.value.frontier+P.value.unreached+P.value.reached);return(Q,ne)=>($e(),Fe("div",X$,[!T.value&&!M.value?($e(),Fe("div",Z$,Re(g("loading")),1)):Ot("",!0),M.value?($e(),Fe("div",Q$,Re(g("loadError"))+" "+Re(M.value),1)):Ot("",!0),se("div",{ref_key:"mapContainer",ref:$,class:"apg-canvas"},null,512),Me(T$,{"has-geocoder":!1},{default:Wn(()=>[Me(J$,{"is-dark":i.value,"embed-path":iy},null,8,["is-dark"])]),_:1}),T.value?($e(),Fe("div",ey,[se("div",ty,Re(g("title")),1),se("div",oy,Re(g("locations",{n:w(Ne.value)})),1),($e(),Fe(Ue,null,es(k,Z=>se("div",{key:Z.id,class:tt(["apg-row",{active:Te.value===Z.id}]),onClick:ue=>je(Z.id)},[se("span",{class:"apg-dot",style:Uo({background:Z.color})},null,4),ht(" "+Re(g(Z.id))+" ",1),se("span",ay,Re(Z.id==="doxa"&&!N.value?"…":w(P.value[Z.id]||0)),1)],10,ny)),64)),se("div",sy,Re(g("hint")),1)])):Ot("",!0)]))}}},Symbol.toStringTag,{value:"Module"}))})();
+ `).addTo(ne)})}const _e=de(null);function we(ee){const ne=b.value;if(!ne||!ne.getLayer("apg-pins"))return;if(_e.value===ee){_e.value=null,ne.setFilter("apg-pins",null),ne.fitBounds([[-170,-55],[179,72]],{padding:20,duration:900});return}_e.value=ee,ne.setFilter("apg-pins",["==",["get","category"],ee]);let Z=180,ue=85,X=-180,Se=-85,te=0;for(const re of x){if(re.properties.category!==ee)continue;const[Me,f]=re.geometry.coordinates;Me