diff --git a/plugin-designs/doxa-maps-spa/doxa-maps-spa.vue b/plugin-designs/doxa-maps-spa/doxa-maps-spa.vue
index bd676c404..d63b52cbc 100644
--- a/plugin-designs/doxa-maps-spa/doxa-maps-spa.vue
+++ b/plugin-designs/doxa-maps-spa/doxa-maps-spa.vue
@@ -1490,6 +1490,9 @@ export default defineComponent({
// #anchor and retitled the host's browser tab "Regions". A child that syncs its state into the
// URL standalone should read this and stand down; children that never write the URL ignore it.
pc.urlSync = false
+ // The MAP's own name for its print header (mapPrintTemplate.js): this tab's localized label. A plugin that
+ // does not print ignores it.
+ pc.mapTitle = this.tabLabel(t)
return pc
},
// The PAGE GLOBALS a generated leaf page bakes and a foreign host page does not โ set here, and
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 269cfa3ea..fb705e4a1 100644
--- a/public/dx-maps/doxa-maps-spa/doxa-maps-spa.js
+++ b/public/dx-maps/doxa-maps-spa/doxa-maps-spa.js
@@ -268,4 +268,4 @@
@media (prefers-reduced-motion: reduce){
.mi-pointer, .mi .mi-pointer.mi-ctl{ animation:none; }
}
-`,"map-info"),(w,X)=>(I(),F("div",{ref_key:"rootEl",ref:Oe,class:"mi",dir:j()?"rtl":"ltr",lang:n()},[za(A("button",{ref_key:"btnEl",ref:xe,type:"button",class:st(["mi-btn",e.placement==="top-left"?"mi-at-left":"mi-at-right"]),"aria-label":we(s)("mapInfo.open"),title:we(s)("mapInfo.open"),"aria-haspopup":"dialog","aria-expanded":String(J.value),onClick:ce},[...X[3]||(X[3]=[A("svg",{viewBox:"0 0 24 24","aria-hidden":"true",focusable:"false"},[A("circle",{cx:"12",cy:"12",r:"10",fill:"none",stroke:"currentColor","stroke-width":"2"}),A("path",{d:"M9.1 9a3 3 0 0 1 5.8 1c0 2-3 3-3 3",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),A("circle",{cx:"12",cy:"17",r:"1.3",fill:"currentColor"})],-1)])],10,Wm),[[Za,C()]]),T.value&&!J.value&&C()?(I(),F("div",{key:0,class:st(["mi-pointer",e.placement==="top-left"?"mi-at-left":"mi-at-right"]),"aria-hidden":"true"},[A("span",null,B(we(s)("mapInfo.pointer")),1),(I(),F("svg",qm,[e.placement==="top-left"?(I(),F("path",jm)):(I(),F("path",Um))]))],2)):oe("",!0),T.value&&!J.value&&!C()&&P.value?(I(),F("div",{key:1,class:st(["mi-pointer mi-ctl","mi-ctl-"+P.value.side]),style:pa(z()),"aria-hidden":"true"},[A("span",{dir:j()?"rtl":"ltr"},B(we(s)("mapInfo.pointer")),9,Hm),(I(),F("svg",Vm,[P.value.side==="left"?(I(),F("path",Bm)):(I(),F("path",Gm))]))],6)):oe("",!0),J.value?(I(),F("div",{key:2,class:"mi-scrim",onClick:jo(ne,["self"]),onKeydown:Y},[A("div",{ref_key:"dialogEl",ref:$,class:"mi-dialog",role:"dialog","aria-modal":"true","aria-labelledby":"mi-title-"+e.storageKey},[A("div",Xm,[A("h2",{id:"mi-title-"+e.storageKey,class:"mi-title"},B(we(s)("mapInfo.title")),9,Ym),A("button",{ref_key:"closeEl",ref:ct,type:"button",class:"mi-close","aria-label":we(s)("mapInfo.close"),onClick:ne},"ร",8,Jm)]),A("div",Zm,[e.leadKey||e.lead?(I(),F("p",Qm,B(r(e.leadKey,e.lead)),1)):oe("",!0),(e.takeawayKey||e.takeaway)&&!d()?(I(),F("p",eh,[A("b",null,B(we(s)("mapInfo.takeaway")),1),Kt(" "+B(r(e.takeawayKey,e.takeaway)),1)])):oe("",!0),m()?(I(),F("div",{key:2,class:"mi-tabs",role:"tablist",onKeydown:q},[A("button",{id:S().ex,type:"button",role:"tab",class:"mi-tab","aria-selected":String(b.value==="examples"),"aria-controls":S().panel,tabindex:b.value==="examples"?0:-1,onClick:X[0]||(X[0]=G=>b.value="examples")},B(we(s)("mapInfo.tabExamples")),9,th),A("button",{id:S().st,type:"button",role:"tab",class:"mi-tab","aria-selected":String(b.value==="strategy"),"aria-controls":S().panel,tabindex:b.value==="strategy"?0:-1,onClick:X[1]||(X[1]=G=>b.value="strategy")},B(we(s)("mapInfo.tabStrategy")),9,ah)],32)):oe("",!0),A("div",{id:m()?S().panel:null,role:m()?"tabpanel":null,"aria-labelledby":m()?b.value==="examples"?S().ex:S().st:null},[d()&&(!m()||b.value==="strategy")?(I(),F("section",nh,[m()?oe("",!0):(I(),F("h3",sh,B(we(s)("mapInfo.tabStrategy")),1)),A("p",rh,B(l()),1),c().length?(I(),F("ul",ih,[(I(!0),F(ae,null,Je(c(),(G,re)=>(I(),F("li",{key:re},B(G),1))),128))])):oe("",!0)])):oe("",!0),!m()||b.value==="examples"?(I(!0),F(ae,{key:1},Je(e.examples,(G,re)=>za((I(),F("section",{key:re,class:"mi-ex"},[A("h3",null,B(nt(G)),1),G.kind==="image"?(I(),F(ae,{key:0},[A("img",{class:"mi-img mi-poster",src:Te(G.src),alt:G.alt||nt(G),decoding:"async",onError:ge=>ue[re]=!0},null,40,lh),G.full?(I(),F("div",ch,[A("a",{class:"mi-full",href:Te(G.full),target:"_blank",rel:"noopener"},B(we(s)("mapInfo.openFull")),9,ph)])):oe("",!0)],64)):G.kind==="pages"&&(G.pages||[]).length?(I(),F(ae,{key:1},[ot[re]?(I(),F(ae,{key:1},[A("div",mh,[A("button",{type:"button",class:"mi-toggle","aria-expanded":"true",onClick:ge=>Z(re)},B(we(s)("mapInfo.collapsePages")),9,hh)]),A("div",bh,[(I(!0),F(ae,null,Je(G.pages,(ge,Me)=>(I(),F("button",{key:Me,type:"button",class:"mi-hit mi-open mi-page","aria-label":we(s)("mapInfo.collapsePages"),onClick:Ht=>Z(re)},[A("img",{class:"mi-img",src:Te(ge),alt:nt(G)+" "+E(Me+1),loading:"lazy",decoding:"async",onError:fe},null,40,$h)],8,vh))),128))]),A("div",yh,[A("button",{type:"button",class:"mi-toggle","aria-expanded":"true",onClick:ge=>Z(re)},B(we(s)("mapInfo.collapsePages")),9,_h)])],64)):(I(),F(ae,{key:0},[A("button",{type:"button",class:st(["mi-hit mi-page",{"mi-stack":G.pages.length>1}]),"aria-label":we(s)("mapInfo.expandPages",{n:E(G.pages.length)}),"aria-expanded":"false",onClick:ge=>Z(re)},[A("img",{class:"mi-img",src:Te(G.pages[0]),alt:nt(G),decoding:"async",onError:ge=>ue[re]=!0},null,40,dh)],10,uh),G.pages.length>1?(I(),F("div",fh,[A("button",{type:"button",class:"mi-toggle","aria-expanded":"false",onClick:ge=>Z(re)},B(we(s)("mapInfo.expandPages",{n:E(G.pages.length)})),9,gh)])):oe("",!0)],64))],64)):G.kind==="deck"&&(G.cards||[]).length?(I(),F(ae,{key:2},[ot[re]?(I(),F(ae,{key:1},[A("div",Lh,[A("button",{type:"button",class:"mi-toggle","aria-expanded":"true",onClick:ge=>Z(re)},B(we(s)("mapInfo.collapseDeck")),9,Th)]),A("div",Ph,[(I(!0),F(ae,null,Je(G.cards,(ge,Me)=>(I(),F("img",{key:Me,class:"mi-img",src:Te(ge),alt:nt(G)+" "+E(Me+1),loading:"lazy",decoding:"async",onError:fe},null,40,Eh))),128))]),A("div",Oh,[A("button",{type:"button",class:"mi-toggle","aria-expanded":"true",onClick:ge=>Z(re)},B(we(s)("mapInfo.collapseDeck")),9,Mh)])],64)):(I(),F(ae,{key:0},[A("button",{type:"button",class:"mi-hit mi-deck","aria-label":we(s)("mapInfo.expandDeck",{n:E(G.cards.length)}),"aria-expanded":"false",onClick:ge=>Z(re)},[(I(!0),F(ae,null,Je(lo(G),(ge,Me)=>(I(),F("img",{key:Me,class:"mi-card",src:Te(ge),alt:"",decoding:"async",onError:Ht=>Me===0?ue[re]=!0:fe(Ht),style:pa({insetInlineStart:Me*36+"px",transform:"rotate("+(Me-2)*4+"deg)",zIndex:10-Me})},null,44,kh))),128))],8,wh),A("div",xh,[A("button",{type:"button",class:"mi-toggle","aria-expanded":"false",onClick:ge=>Z(re)},B(we(s)("mapInfo.expandDeck",{n:E(G.cards.length)})),9,Sh)])],64))],64)):G.kind==="table"&&(G.columns||[]).length?(I(),F(ae,{key:3},[A("div",Ah,[A("table",Ch,[A("thead",null,[A("tr",null,[(I(!0),F(ae,null,Je(G.columns,(ge,Me)=>(I(),F("th",{key:Me,scope:"col"},B(Ye(ge)),1))),128))])]),A("tbody",null,[(I(!0),F(ae,null,Je(G.rows||[],(ge,Me)=>(I(),F("tr",{key:Me},[(I(!0),F(ae,null,Je(ge,(Ht,vb)=>(I(),F("td",{key:vb},B(typeof Ht=="number"?E(Ht):Ht),1))),128))]))),128))])])]),G.total&&G.total>(G.rows||[]).length?(I(),F("p",Ih,B(we(s)("mapInfo.moreRows",{n:E(G.total-(G.rows||[]).length)})),1)):oe("",!0)],64)):oe("",!0)])),[[Za,!ue[re]]])),128)):oe("",!0)],8,oh),e.noteKey||e.note?(I(),F("p",Nh,B(r(e.noteKey,e.note)),1)):oe("",!0)]),a()?oe("",!0):(I(),F("div",Fh,[A("label",null,[A("input",{type:"checkbox",checked:N.value,onChange:X[2]||(X[2]=G=>Ee(G.target.checked))},null,40,Dh),A("span",null,B(we(s)("mapInfo.pointerOff")),1)])]))],8,Km)],32)):oe("",!0)],8,zm))}},zh=":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;--profile-min-h: 0}.mi.dms-info-raise .mi-btn{z-index:60}.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-help-close:focus-visible{outline:2px solid #3f8f5a;outline-offset:2px}.dms-help-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;align-items:center;justify-content:center;background:#00000059;padding:16px}.dms-help{max-width:420px;width:100%;color:#3b463d;background:#fff;border-radius:12px;padding:18px 20px 14px;box-shadow:0 12px 32px #0003;font-size:14px;line-height:1.5}.dms-help-title{margin:0 0 8px;font-size:16px}.dms-help-what,.dms-help-how{margin:0 0 10px}.dms-help-close{float:right;font:inherit;padding:6px 14px;border-radius:8px;border:1px solid #d1d4cd;background:#f3f3f1;cursor:pointer}.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-mobile-notice{position:sticky;top:0;z-index:30;display:flex;align-items:flex-start;gap:8px;padding:10px 12px;font-size:13px;line-height:1.4;color:#3b463d;background:#fff8e6;border-bottom:1px solid #f0d58c}.dms-mobile-notice span{flex:1}.dms-mobile-notice-x{flex:none;min-width:32px;min-height:32px;border:0;border-radius:6px;background:transparent;color:inherit;font-size:18px;line-height:1;cursor:pointer}.dms-mobile-notice-x:focus-visible{outline:2px solid #3b463d;outline-offset:1px}.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 El(){try{const e=new URLSearchParams(location.search),t=(e.get("lang")||e.get("locale")||"").split("-")[0].toLowerCase();if(us.includes(t))return t}catch{}try{const e=(document.documentElement.lang||"").split("-")[0].toLowerCase();if(us.includes(e))return e}catch{}return""}const fs=[{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:"prayer-map",icon:"embed"},{id:"upg-100",icon:"list"}]},{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:[]}];function Wh(e){const t={},a=e&&Array.isArray(e.bundles)?e.bundles:[];for(const o of a)for(const n of Array.isArray(o&&o.profiles)?o.profiles:[])n&&(n.mobile==="desktop-only"||n.mobile==="larger-screens")&&(t[o.bundle+"/"+n.profile]=n.mobile);return t}const qh=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"]),Ol={"prayer-walk-planner":1,"gospel-internet":2,"upg-neighbor":3,"key-cities":4,"all-people-groups":5,"country-posters":6,"doxa-vision-card":7},gs=[{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"}];Uh(fs);const en=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"]),tn=new Set(["dashboard-plus-grid","research-map-plus-grid"]);function jh(){const e=Object.fromEntries(gs.map(a=>[a.id,a])),t=new Set;for(const a of fs)if(a.key!=="experimental")for(const o of a.tabs||[]){const n=e[o.id];n&&n.bundle&&t.add(n.bundle)}return t}function Ml(e,t){const a=[];for(const o of e)!o||t.has(o.key)||(t.add(o.key),a.push(o));return a}function Uh(e){const t=new Map,a=[];for(const o of e)if(o.key!=="experimental")for(const n of o.tabs||[]){if(!n||!n.id)continue;const s=t.get(n.id);if(s===void 0){t.set(n.id,o.key);continue}(s!==o.key||a.indexOf(n.id)===-1)&&a.push(n.id+" ("+s+" + "+o.key+")")}return a.length&&typeof console<"u"&&console.error("[doxa-maps-spa] duplicate tab key(s) across NAV_MODEL sections: "+a.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."),a}function Hh(e){return String(e).split(/[-_]/).filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}function Vh(e){const t=jh(),a=e&&Array.isArray(e.bundles)?e.bundles:[],o=[];for(const n of a){const s=n&&n.bundle;if(!s||t.has(s)||qh.has(s)||n.stage==="production")continue;const r=Array.isArray(n.profiles)?n.profiles:[];if(!r.length||r.every(d=>d.widget||Array.isArray(d.targets)&&!d.targets.includes("web")))continue;const i=r.find(d=>d.isMap)||r.find(d=>d.profile===s)||r[0],l=i.element||Array.isArray(n.elements)&&n.elements[0]||s,c=n.scriptUrl||i.scriptUrl||"";c&&o.push({id:s,label:i.title||Hh(s),sub:(i.description||"").trim().replace(/[,;]\s*$/,"")||"experimental bundle",emoji:"๐งช",tag:l,bundle:s,profile:i.profile||s,scriptUrl:c,heavy:en.has(l)||en.has(s),scroll:tn.has(l)||tn.has(s),discovered:!0})}return o.sort((n,s)=>{const r=Ol[n.id]||999,i=Ol[s.id]||999;return r!==i?r-i:n.label.localeCompare(s.label)}),o}function Bh(e,t){const a=e&&Array.isArray(e.bundles)?e.bundles:[],o=Object.fromEntries(a.map(s=>[s.bundle,s])),n={};for(const s of t){const r=o[s.bundle];if(!r)continue;const i=Array.isArray(r.profiles)?r.profiles:[],l=i.find(S=>S.profile===s.profile)||i[0],c=l&&l.element||Array.isArray(r.elements)&&r.elements[0]||s.bundle,d=r.scriptUrl||l&&l.scriptUrl||"";if(!d)continue;const m=l&&Array.isArray(l.instances)?l.instances:[],b=!!(s.instance&&m.some(S=>(S&&(S.id||S.instance))===s.instance));n[s.id]={tag:c,scriptUrl:d,profile:l&&l.profile||s.profile,instance:b?s.instance:"",heavy:en.has(c)||en.has(s.bundle),scroll:tn.has(c)||tn.has(s.bundle)}}return n}const Gh=ba({name:"DoxaMapsSpa",inheritAttrs:!1,components:{VerticalTabsLayout:Em,BackToTopButton:ri,MapInfo:Rh},props:{treeBase:{type:String,default:""},profileConfig:{type:[String,Object],default:""},heading:{type:String,default:"Deep Research"},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:ha("dmsTreeBase","")}},data(){return{paneEls:{},activeIndex:0,showHeader:!1,narrow:!1,_mql:null,_onMedia:null,disabledNotice:"",_noticeTimer:null,helpOpen:!1,mobileNoticeDismissed:{},mobileFlags:null,manifestError:"",manifestBase:"",runtime:{},locale:Am(),hostLang:El(),localeOpen:!1,switcherLangs:Om,tabs:gs.map(e=>({...e,tag:"",scriptUrl:"",heavy:!1,scroll:!1,resolved:!1,mounted:!1,state:"idle",error:""}))}},computed:{largerScreenText(){return ea("messages.largerScreenNotice",this.uiLocale)||"This experimental map is built for larger screens. It opens here, but parts of it may not fit or work well on a phone."},activePaneEl(){return this.paneEls[this.activeIndex]||null},activeHelp(){const e=this.tabs[this.activeIndex];return e&&e.discovered?Sl(e.id,this.uiLocale):null},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":""},showInfo(){const e=this.cfg.info;return!(e===!1||e==="false"||e==="off")},headingText(){return String(this.cfg.heading||this.heading||"").trim()||"Deep Research"},showExperimental(){const e=this.cfg.experimental;return!(e===!1||e==="false"||e==="hidden"||e==="off")},navGroups(){const e=Object.fromEntries(this.tabs.map(a=>[a.id,a])),t=new Set;return fs.map(a=>{let o=Ml((a.tabs||[]).filter(n=>e[n.id]).map(n=>{const s=e[n.id],r=this.isDesktopOnly(s.id),i=r||this.mobileFlagOf(s.id)==="desktop-only";return{key:s.id,label:this.tabLabel(s),sub:this.tabSub(s),icon:n.icon,badge:i?this.tr("desktopOnly"):n.badge,disabled:r}}),t);return a.key==="experimental"&&!this.showExperimental?{key:a.key,rows:[]}:(a.key==="experimental"&&(o=o.concat(Ml(this.tabs.filter(n=>n.discovered).map(n=>({key:n.id,label:this.tabLabel(n),sub:this.tabSub(n),icon:"flask",badge:this.narrow&&this.mobileFlagOf(n.id)==="larger-screens"?this.tr("mobileNotBuilt"):this.tr("lab")})),t))),{key:a.key,label:a.i18n?this.tr(a.i18n):a.label,icon:a.icon,folder:!!a.folder,open:a.open,rows:o})}).filter(a=>a.rows.length)},showLocaleSwitcher(){return this.showHeader},activeLang(){return Mm(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 us.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(),this._onHostedHelp=e=>this.onHostedHelp(e),this.$el.addEventListener("doxa:help",this._onHostedHelp)},beforeUnmount(){this._langObs&&(this._langObs.disconnect(),this._langObs=null),this._onHostedHelp&&(this.$el.removeEventListener("doxa:help",this._onHostedHelp),this._onHostedHelp=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:{activeIndex(){this.helpOpen=!1},effectiveLocale(){const e=(o,n)=>{try{const s=this._slots&&this._slots[o];s&&(s.innerHTML="")}catch{}n.mounted=!1,n.state="idle",n.error=""};this.tabs.forEach((o,n)=>{o.mounted&&n!==this.activeIndex&&e(n,o)});const t=this.activeIndex,a=this.tabs[t];!a||!a.mounted||(e(t,a),this.mountElement(t))},tab(e){e&&this.onSelect(e)}},methods:{openHelp(){this.helpOpen=!0,this.$nextTick(()=>this.$refs.helpClose&&this.$refs.helpClose.focus())},closeHelp(){this.helpOpen=!1;const e=this._helpReturn;this._helpReturn=null,this.$nextTick(()=>e&&e.focus&&e.focus())},infoProps(e){const{pos:t,...a}=this.infoFor(e)||{};return a},infoPos(e){const t=(this.infoFor(e)||{}).pos||{},{narrow:a,...o}=t;return this.narrow&&a?{...o,...a}:o},infoStyle(e){const t=this.infoPos(e),a={};return t.top&&(a["--map-info-top"]=t.top),t.side&&(a["--map-info-side"]=t.side),a},infoFor(e){const t=this.showInfo&&e&&Dm[e.id];return t&&(!t.leadKey||ea(t.leadKey,"en"))?t:null},tabHasHelp(e){return!!(e&&e.discovered&&Sl(e.id,this.uiLocale))},onHostedHelp(e){if(!this.activeHelp)return;e.stopPropagation();const t=e.composedPath?e.composedPath():[];this._helpReturn=t.find(a=>a&&a.tagName==="BUTTON")||null,this.openHelp()},setSlot(e,t){t&&(this._slots=Object.assign(this._slots||{},{[e]:t}))},tr(e,t){return Zo(this.uiLocale,e,t)},t(e,t){return Zo(this.uiLocale,e,t)},tabLabel(e){return!e.discovered||Im("tab."+e.id)?Zo(this.uiLocale,"tab."+e.id):e.label},tabSub(e){return e.discovered?this.uiLocale==="en"?e.sub:this.tr("experimentalSub"):Zo(this.uiLocale,"sub."+e.id)},watchHostLang(){typeof MutationObserver>"u"||typeof document>"u"||(this._langObs=new MutationObserver(()=>{this.hostLang=El()}),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.isDesktopOnly(this.activeKey)&&this.select(this.firstVisibleIndex())},this._mql.addEventListener?this._mql.addEventListener("change",this._onMedia):this._mql.addListener&&this._mql.addListener(this._onMedia))},mobileFlagOf(e){const t=this.tabs.find(a=>a.id===e);return t&&this.mobileFlags&&this.mobileFlags[t.bundle+"/"+t.profile]||null},isDesktopOnly(e){return this.narrow&&this.mobileFlagOf(e)==="desktop-only"},showsMobileNotice(e){return this.narrow&&this.mobileFlagOf(e)==="larger-screens"&&!this.mobileNoticeDismissed[e]},dismissMobileNotice(e){this.mobileNoticeDismissed={...this.mobileNoticeDismissed,[e]:!0}},firstVisibleIndex(){let e=-1;for(const t of this.navGroups)for(const a of t.rows){const o=this.tabs.findIndex(n=>n.id===a.key);if(!(o<0)&&(e<0&&(e=o),!a.disabled))return o}return e>=0?e:0},loadManifest(){const e=this.resolve("manifest.json"),t=c=>{try{return new URL(c,location.href).href.replace(/[^/]*$/,"")}catch{return""}},a={url:e,root:t(e)},o={url:this.resolve("doxa-maps-spa/manifest.json"),root:a.root};let n=!1;try{n=new URL(e,location.href).origin!==location.origin}catch{}const s=n?[o,a]:[a,o],r="/public/dx-maps/manifest.json";s.some(c=>c.url===r)||s.push({url:r,root:t(r)});const i=[],l=c=>{if(c>=s.length){this.manifestError="manifest.json not found (tried "+i.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:m}=s[c];return i.push(d),fetch(d,{credentials:"same-origin"}).then(b=>{if(!b||!b.ok)throw new Error(d+" โ HTTP "+(b?b.status:"?"));return b.json()}).then(b=>{if(!b)throw new Error(d+" โ empty");this.manifestError="",this.manifestBase=m||"",this.applyManifest(b)}).catch(()=>l(c+1))};try{l(0)}catch{}},applyManifest(e){this.runtime=e&&e.runtime&&typeof e.runtime=="object"?e.runtime:{},this.mobileFlags=Wh(e),this.applyPageGlobals();const t=Bh(e,gs),a=this.activeKey,o=[];for(const l of this.tabs){if(l.discovered){o.push(l);continue}const c=t[l.id];c&&(Object.assign(l,c,{resolved:!0}),o.push(l))}const n=new Set(o.map(l=>l.id));if(this.showExperimental)for(const l of Vh(e))n.has(l.id)||o.push({...l,resolved:!0,mounted:!1,state:"idle",error:""});this.tabs=o;const s=this.requestedTab(),r=s?this.tabs.findIndex(l=>l.id===s):-1,i=this.tabs.findIndex(l=>l.id===a);r>=0&&!this.isDesktopOnly(s)&&!this._honouredTab?this.select(r):this.select(i>=0&&!this.isDesktopOnly(a)?i: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(a=>a.id===e):-1;return t>=0&&(this._honouredTab=!0),t>=0&&!this.isDesktopOnly(e)?t:this.firstVisibleIndex()},setLocale(e){this.locale=e,this.localeOpen=!1,Cm(e)},onSelect(e){if(this.isDesktopOnly(e)){const a=this.tabs.find(o=>o.id===e);this.disabledNotice=(ea("messages.desktopOnlyNotice",this.uiLocale)||"{label} only supports desktop โ open this page on a desktop to use it.").replace("{label}",a?this.tabLabel(a):e),clearTimeout(this._noticeTimer),this._noticeTimer=setTimeout(()=>{this.disabledNotice=""},4e3);return}const t=this.tabs.findIndex(a=>a.id===e);t!==-1&&this.select(t)},resolve(e){const t=String(e);if(/^(https?:)?\/\//.test(t)||t.startsWith("/"))return t;const a=t.replace(/^\.\//,"");return this.manifestBase?this.manifestBase.replace(/\/+$/,"")+"/"+a:this.base?this.base.replace(/\/+$/,"")+"/"+a:"../"+a},select(e){const t=this.activeIndex;if(this.activeIndex=e,t!==e&&t>=0){const o=this.tabs[t];o&&o.heavy&&o.mounted&&this.releaseTab(t,o)}const a=this.tabs[e];a&&((t!==e||!this._announced)&&(this._announced=!0,this.$emit("tab-change",{id:a.id,label:a.label})),a.scriptUrl&&(this.narrow&&this.mobileFlags===null||this.isDesktopOnly(a.id)||a.mounted||this.$nextTick(()=>{this.activeIndex===e&&this.mountElement(e)})))},releaseTab(e,t){try{const a=this._slots&&this._slots[e];a&&(a.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 a=this.tk||this.cfg.tk||this.runtime.token;return a&&(t.tk=a),(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 a=this.resolve(t.scriptUrl);_l(a).then(()=>Og(t.tag)).then(()=>{try{if(t.heavy&&this.activeIndex!==e){t.mounted=!1,t.state="idle";return}const o=this._slots&&this._slots[e];if(!o){t.state="error",t.error="no slot";return}o.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%;min-height:0;",o.appendChild(n),t.state="ready"}catch(o){t.state="error",t.error="mount failed: "+(o&&o.message||String(o))}}).catch(o=>{t.state="error",t.error=o&&o.message||String(o)})}}}),Kh={class:"dms-locale"},Xh=["aria-expanded"],Yh={class:"dms-flag"},Jh={class:"dms-locale-name"},Zh={key:0,class:"dms-locale-menu",role:"listbox"},Qh=["aria-selected"],eb=["onClick"],tb={class:"dms-flag"},ab={class:"dms-locale-name"},ob={class:"dms-locale-en"},nb=["hidden","data-doxa-help"],sb={key:0,class:"dms-mobile-notice",role:"status"},rb=["aria-label","onClick"],ib={key:2,class:"dms-hint"},lb={key:3,class:"dms-hint err"},cb={key:4,class:"dms-hint err"},pb={key:0,class:"dms-notice",role:"status"},ub={id:"dms-help-title",class:"dms-help-title"},db={class:"dms-help-what"},fb={class:"dms-help-how"};function gb(e,t,a,o,n,s){const r=Ao("MapInfo"),i=Ao("BackToTopButton"),l=Ao("VerticalTabsLayout");return I(),_a(l,{dir:e.uiDir,lang:e.uiLocale,labels:e.layoutLabels,title:e.headingText,"nav-label":e.t("navLabel"),header:e.showHeader,groups:e.navGroups,active:e.activeKey,"onUpdate:active":e.onSelect},qc({brand:Ra(()=>[t[5]||(t[5]=A("span",{class:"dms-logo","aria-hidden":"true"},[A("svg",{viewBox:"0 0 24 24",width:"22",height:"22",fill:"none",stroke:"#92b195","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[A("circle",{cx:"12",cy:"12",r:"9"}),A("polygon",{points:"12 6 14 12 12 18 10 12",fill:"#92b195",stroke:"none"}),A("polygon",{points:"6 12 12 10 18 12 12 14",fill:"#92b195",opacity:"0.55",stroke:"none"})])],-1))]),meta:Ra(()=>[Kt(B(e.t("meta",{n:e.tabs.length})),1)]),default:Ra(()=>[(I(!0),F(ae,null,Je(e.tabs,(c,d)=>za((I(),F("section",{key:c.id,class:"dms-pane",ref_for:!0,ref:m=>{m?e.paneEls[d]=m:delete e.paneEls[d]},hidden:d!==e.activeIndex,"data-doxa-help":e.tabHasHelp(c)?"":null,"data-doxa-gallery":""},[!c.heavy||d===e.activeIndex?(I(),F(ae,{key:0},[e.showsMobileNotice(c.id)?(I(),F("div",sb,[A("span",null,B(e.largerScreenText),1),A("button",{type:"button",class:"dms-mobile-notice-x","aria-label":e.tr("dismiss"),onClick:m=>e.dismissMobileNotice(c.id)},"ร",8,rb)])):oe("",!0),A("div",{class:"dms-slot",ref_for:!0,ref:m=>e.setSlot(d,m)},null,512),e.infoFor(c)?(I(),_a(r,Dr({key:"info-"+c.id},{ref_for:!0},e.infoProps(c),{style:e.infoStyle(c),placement:e.infoPos(c).placement||"top-right",class:{"dms-info-raise":e.infoPos(c).raise},"assets-base":e.assetsBase,locale:e.effectiveLocale}),null,16,["style","placement","class","assets-base","locale"])):oe("",!0),c.state==="loading"?(I(),F("div",ib,B(e.tr("loading",{label:e.tabLabel(c)})),1)):c.state==="error"?(I(),F("div",lb,[Kt(B(e.tr("loadFailed",{label:e.tabLabel(c)})),1),t[7]||(t[7]=A("br",null,null,-1)),A("small",null,B(c.error),1)])):c.state==="idle"&&!c.scriptUrl&&e.manifestError?(I(),F("div",cb,[Kt(B(e.tr("loadFailed",{label:e.tabLabel(c)})),1),t[8]||(t[8]=A("br",null,null,-1)),A("small",null,B(e.manifestError),1),t[9]||(t[9]=A("br",null,null,-1)),A("small",null,B(e.tr("manifestHint")),1)])):oe("",!0)],64)):oe("",!0)],8,nb)),[[Za,d===e.activeIndex]])),128)),e.disabledNotice?(I(),F("div",pb,B(e.disabledNotice),1)):oe("",!0),e.helpOpen&&e.activeHelp?(I(),F("div",{key:1,class:"dms-help-scrim",onClick:t[3]||(t[3]=jo((...c)=>e.closeHelp&&e.closeHelp(...c),["self"])),onKeydown:t[4]||(t[4]=ai(jo((...c)=>e.closeHelp&&e.closeHelp(...c),["stop","prevent"]),["esc"]))},[A("div",{class:"dms-help",role:"dialog","aria-modal":"true","aria-labelledby":"dms-help-title",onKeydown:t[2]||(t[2]=ai(jo(c=>e.$refs.helpClose&&e.$refs.helpClose.focus(),["prevent"]),["tab"]))},[A("h2",ub,B(e.tabLabel(e.tabs[e.activeIndex])),1),A("p",db,[A("strong",null,B(e.activeHelp.what),1)]),A("p",fb,B(e.activeHelp.how),1),A("button",{ref:"helpClose",type:"button",class:"dms-help-close",onClick:t[1]||(t[1]=(...c)=>e.closeHelp&&e.closeHelp(...c))},B(e.tr("close")),513)],32)],32)):oe("",!0),Ue(i,{target:e.activePaneEl,labels:{backToTop:e.tr("backToTop")}},null,8,["target","labels"])]),_:2},[e.showLocaleSwitcher?{name:"toolbar",fn:Ra(()=>[A("div",Kh,[A("button",{type:"button",class:"dms-locale-btn","aria-expanded":String(e.localeOpen),"aria-label":"Change language",onClick:t[0]||(t[0]=c=>e.localeOpen=!e.localeOpen)},[A("span",Yh,B(e.activeLang.flag),1),A("span",Jh,B(e.activeLang.nativeName),1),t[6]||(t[6]=A("span",{class:"dms-dots","aria-hidden":"true"},"โฎ",-1))],8,Xh),e.localeOpen?(I(),F("ul",Zh,[(I(!0),F(ae,null,Je(e.switcherLangs,c=>(I(),F("li",{key:c.code,role:"option","aria-selected":String(c.code===e.locale)},[A("button",{type:"button",class:st(["dms-locale-opt",{active:c.code===e.locale}]),onClick:d=>e.setLocale(c.code)},[A("span",tb,B(c.flag),1),A("span",ab,B(c.nativeName),1),A("span",ob,B(c.name),1)],10,eb)],8,Qh))),128))])):oe("",!0)])]),key:"0"}:void 0]),1032,["dir","lang","labels","title","nav-label","header","groups","active","onUpdate:active"])}const mb=jn(Gh,[["render",gb],["styles",[zh]]]),hb=Mg(),bb=Xp(mb,{configureApp(e){e.provide("dmsTreeBase",hb)}});typeof customElements<"u"&&!customElements.get("doxa-maps-spa")&&customElements.define("doxa-maps-spa",bb)})();
+`,"map-info"),(w,X)=>(I(),F("div",{ref_key:"rootEl",ref:Oe,class:"mi",dir:j()?"rtl":"ltr",lang:n()},[za(A("button",{ref_key:"btnEl",ref:xe,type:"button",class:st(["mi-btn",e.placement==="top-left"?"mi-at-left":"mi-at-right"]),"aria-label":we(s)("mapInfo.open"),title:we(s)("mapInfo.open"),"aria-haspopup":"dialog","aria-expanded":String(J.value),onClick:ce},[...X[3]||(X[3]=[A("svg",{viewBox:"0 0 24 24","aria-hidden":"true",focusable:"false"},[A("circle",{cx:"12",cy:"12",r:"10",fill:"none",stroke:"currentColor","stroke-width":"2"}),A("path",{d:"M9.1 9a3 3 0 0 1 5.8 1c0 2-3 3-3 3",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),A("circle",{cx:"12",cy:"17",r:"1.3",fill:"currentColor"})],-1)])],10,Wm),[[Za,C()]]),T.value&&!J.value&&C()?(I(),F("div",{key:0,class:st(["mi-pointer",e.placement==="top-left"?"mi-at-left":"mi-at-right"]),"aria-hidden":"true"},[A("span",null,B(we(s)("mapInfo.pointer")),1),(I(),F("svg",qm,[e.placement==="top-left"?(I(),F("path",jm)):(I(),F("path",Um))]))],2)):oe("",!0),T.value&&!J.value&&!C()&&P.value?(I(),F("div",{key:1,class:st(["mi-pointer mi-ctl","mi-ctl-"+P.value.side]),style:pa(z()),"aria-hidden":"true"},[A("span",{dir:j()?"rtl":"ltr"},B(we(s)("mapInfo.pointer")),9,Hm),(I(),F("svg",Vm,[P.value.side==="left"?(I(),F("path",Bm)):(I(),F("path",Gm))]))],6)):oe("",!0),J.value?(I(),F("div",{key:2,class:"mi-scrim",onClick:jo(ne,["self"]),onKeydown:Y},[A("div",{ref_key:"dialogEl",ref:$,class:"mi-dialog",role:"dialog","aria-modal":"true","aria-labelledby":"mi-title-"+e.storageKey},[A("div",Xm,[A("h2",{id:"mi-title-"+e.storageKey,class:"mi-title"},B(we(s)("mapInfo.title")),9,Ym),A("button",{ref_key:"closeEl",ref:ct,type:"button",class:"mi-close","aria-label":we(s)("mapInfo.close"),onClick:ne},"ร",8,Jm)]),A("div",Zm,[e.leadKey||e.lead?(I(),F("p",Qm,B(r(e.leadKey,e.lead)),1)):oe("",!0),(e.takeawayKey||e.takeaway)&&!d()?(I(),F("p",eh,[A("b",null,B(we(s)("mapInfo.takeaway")),1),Kt(" "+B(r(e.takeawayKey,e.takeaway)),1)])):oe("",!0),m()?(I(),F("div",{key:2,class:"mi-tabs",role:"tablist",onKeydown:q},[A("button",{id:S().ex,type:"button",role:"tab",class:"mi-tab","aria-selected":String(b.value==="examples"),"aria-controls":S().panel,tabindex:b.value==="examples"?0:-1,onClick:X[0]||(X[0]=G=>b.value="examples")},B(we(s)("mapInfo.tabExamples")),9,th),A("button",{id:S().st,type:"button",role:"tab",class:"mi-tab","aria-selected":String(b.value==="strategy"),"aria-controls":S().panel,tabindex:b.value==="strategy"?0:-1,onClick:X[1]||(X[1]=G=>b.value="strategy")},B(we(s)("mapInfo.tabStrategy")),9,ah)],32)):oe("",!0),A("div",{id:m()?S().panel:null,role:m()?"tabpanel":null,"aria-labelledby":m()?b.value==="examples"?S().ex:S().st:null},[d()&&(!m()||b.value==="strategy")?(I(),F("section",nh,[m()?oe("",!0):(I(),F("h3",sh,B(we(s)("mapInfo.tabStrategy")),1)),A("p",rh,B(l()),1),c().length?(I(),F("ul",ih,[(I(!0),F(ae,null,Je(c(),(G,re)=>(I(),F("li",{key:re},B(G),1))),128))])):oe("",!0)])):oe("",!0),!m()||b.value==="examples"?(I(!0),F(ae,{key:1},Je(e.examples,(G,re)=>za((I(),F("section",{key:re,class:"mi-ex"},[A("h3",null,B(nt(G)),1),G.kind==="image"?(I(),F(ae,{key:0},[A("img",{class:"mi-img mi-poster",src:Te(G.src),alt:G.alt||nt(G),decoding:"async",onError:ge=>ue[re]=!0},null,40,lh),G.full?(I(),F("div",ch,[A("a",{class:"mi-full",href:Te(G.full),target:"_blank",rel:"noopener"},B(we(s)("mapInfo.openFull")),9,ph)])):oe("",!0)],64)):G.kind==="pages"&&(G.pages||[]).length?(I(),F(ae,{key:1},[ot[re]?(I(),F(ae,{key:1},[A("div",mh,[A("button",{type:"button",class:"mi-toggle","aria-expanded":"true",onClick:ge=>Z(re)},B(we(s)("mapInfo.collapsePages")),9,hh)]),A("div",bh,[(I(!0),F(ae,null,Je(G.pages,(ge,Me)=>(I(),F("button",{key:Me,type:"button",class:"mi-hit mi-open mi-page","aria-label":we(s)("mapInfo.collapsePages"),onClick:Ht=>Z(re)},[A("img",{class:"mi-img",src:Te(ge),alt:nt(G)+" "+E(Me+1),loading:"lazy",decoding:"async",onError:fe},null,40,$h)],8,vh))),128))]),A("div",yh,[A("button",{type:"button",class:"mi-toggle","aria-expanded":"true",onClick:ge=>Z(re)},B(we(s)("mapInfo.collapsePages")),9,_h)])],64)):(I(),F(ae,{key:0},[A("button",{type:"button",class:st(["mi-hit mi-page",{"mi-stack":G.pages.length>1}]),"aria-label":we(s)("mapInfo.expandPages",{n:E(G.pages.length)}),"aria-expanded":"false",onClick:ge=>Z(re)},[A("img",{class:"mi-img",src:Te(G.pages[0]),alt:nt(G),decoding:"async",onError:ge=>ue[re]=!0},null,40,dh)],10,uh),G.pages.length>1?(I(),F("div",fh,[A("button",{type:"button",class:"mi-toggle","aria-expanded":"false",onClick:ge=>Z(re)},B(we(s)("mapInfo.expandPages",{n:E(G.pages.length)})),9,gh)])):oe("",!0)],64))],64)):G.kind==="deck"&&(G.cards||[]).length?(I(),F(ae,{key:2},[ot[re]?(I(),F(ae,{key:1},[A("div",Lh,[A("button",{type:"button",class:"mi-toggle","aria-expanded":"true",onClick:ge=>Z(re)},B(we(s)("mapInfo.collapseDeck")),9,Th)]),A("div",Ph,[(I(!0),F(ae,null,Je(G.cards,(ge,Me)=>(I(),F("img",{key:Me,class:"mi-img",src:Te(ge),alt:nt(G)+" "+E(Me+1),loading:"lazy",decoding:"async",onError:fe},null,40,Eh))),128))]),A("div",Oh,[A("button",{type:"button",class:"mi-toggle","aria-expanded":"true",onClick:ge=>Z(re)},B(we(s)("mapInfo.collapseDeck")),9,Mh)])],64)):(I(),F(ae,{key:0},[A("button",{type:"button",class:"mi-hit mi-deck","aria-label":we(s)("mapInfo.expandDeck",{n:E(G.cards.length)}),"aria-expanded":"false",onClick:ge=>Z(re)},[(I(!0),F(ae,null,Je(lo(G),(ge,Me)=>(I(),F("img",{key:Me,class:"mi-card",src:Te(ge),alt:"",decoding:"async",onError:Ht=>Me===0?ue[re]=!0:fe(Ht),style:pa({insetInlineStart:Me*36+"px",transform:"rotate("+(Me-2)*4+"deg)",zIndex:10-Me})},null,44,kh))),128))],8,wh),A("div",xh,[A("button",{type:"button",class:"mi-toggle","aria-expanded":"false",onClick:ge=>Z(re)},B(we(s)("mapInfo.expandDeck",{n:E(G.cards.length)})),9,Sh)])],64))],64)):G.kind==="table"&&(G.columns||[]).length?(I(),F(ae,{key:3},[A("div",Ah,[A("table",Ch,[A("thead",null,[A("tr",null,[(I(!0),F(ae,null,Je(G.columns,(ge,Me)=>(I(),F("th",{key:Me,scope:"col"},B(Ye(ge)),1))),128))])]),A("tbody",null,[(I(!0),F(ae,null,Je(G.rows||[],(ge,Me)=>(I(),F("tr",{key:Me},[(I(!0),F(ae,null,Je(ge,(Ht,vb)=>(I(),F("td",{key:vb},B(typeof Ht=="number"?E(Ht):Ht),1))),128))]))),128))])])]),G.total&&G.total>(G.rows||[]).length?(I(),F("p",Ih,B(we(s)("mapInfo.moreRows",{n:E(G.total-(G.rows||[]).length)})),1)):oe("",!0)],64)):oe("",!0)])),[[Za,!ue[re]]])),128)):oe("",!0)],8,oh),e.noteKey||e.note?(I(),F("p",Nh,B(r(e.noteKey,e.note)),1)):oe("",!0)]),a()?oe("",!0):(I(),F("div",Fh,[A("label",null,[A("input",{type:"checkbox",checked:N.value,onChange:X[2]||(X[2]=G=>Ee(G.target.checked))},null,40,Dh),A("span",null,B(we(s)("mapInfo.pointerOff")),1)])]))],8,Km)],32)):oe("",!0)],8,zm))}},zh=":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;--profile-min-h: 0}.mi.dms-info-raise .mi-btn{z-index:60}.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-help-close:focus-visible{outline:2px solid #3f8f5a;outline-offset:2px}.dms-help-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;align-items:center;justify-content:center;background:#00000059;padding:16px}.dms-help{max-width:420px;width:100%;color:#3b463d;background:#fff;border-radius:12px;padding:18px 20px 14px;box-shadow:0 12px 32px #0003;font-size:14px;line-height:1.5}.dms-help-title{margin:0 0 8px;font-size:16px}.dms-help-what,.dms-help-how{margin:0 0 10px}.dms-help-close{float:right;font:inherit;padding:6px 14px;border-radius:8px;border:1px solid #d1d4cd;background:#f3f3f1;cursor:pointer}.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-mobile-notice{position:sticky;top:0;z-index:30;display:flex;align-items:flex-start;gap:8px;padding:10px 12px;font-size:13px;line-height:1.4;color:#3b463d;background:#fff8e6;border-bottom:1px solid #f0d58c}.dms-mobile-notice span{flex:1}.dms-mobile-notice-x{flex:none;min-width:32px;min-height:32px;border:0;border-radius:6px;background:transparent;color:inherit;font-size:18px;line-height:1;cursor:pointer}.dms-mobile-notice-x:focus-visible{outline:2px solid #3b463d;outline-offset:1px}.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 El(){try{const e=new URLSearchParams(location.search),t=(e.get("lang")||e.get("locale")||"").split("-")[0].toLowerCase();if(us.includes(t))return t}catch{}try{const e=(document.documentElement.lang||"").split("-")[0].toLowerCase();if(us.includes(e))return e}catch{}return""}const fs=[{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:"prayer-map",icon:"embed"},{id:"upg-100",icon:"list"}]},{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:[]}];function Wh(e){const t={},a=e&&Array.isArray(e.bundles)?e.bundles:[];for(const o of a)for(const n of Array.isArray(o&&o.profiles)?o.profiles:[])n&&(n.mobile==="desktop-only"||n.mobile==="larger-screens")&&(t[o.bundle+"/"+n.profile]=n.mobile);return t}const qh=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"]),Ol={"prayer-walk-planner":1,"gospel-internet":2,"upg-neighbor":3,"key-cities":4,"all-people-groups":5,"country-posters":6,"doxa-vision-card":7},gs=[{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"}];Uh(fs);const en=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"]),tn=new Set(["dashboard-plus-grid","research-map-plus-grid"]);function jh(){const e=Object.fromEntries(gs.map(a=>[a.id,a])),t=new Set;for(const a of fs)if(a.key!=="experimental")for(const o of a.tabs||[]){const n=e[o.id];n&&n.bundle&&t.add(n.bundle)}return t}function Ml(e,t){const a=[];for(const o of e)!o||t.has(o.key)||(t.add(o.key),a.push(o));return a}function Uh(e){const t=new Map,a=[];for(const o of e)if(o.key!=="experimental")for(const n of o.tabs||[]){if(!n||!n.id)continue;const s=t.get(n.id);if(s===void 0){t.set(n.id,o.key);continue}(s!==o.key||a.indexOf(n.id)===-1)&&a.push(n.id+" ("+s+" + "+o.key+")")}return a.length&&typeof console<"u"&&console.error("[doxa-maps-spa] duplicate tab key(s) across NAV_MODEL sections: "+a.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."),a}function Hh(e){return String(e).split(/[-_]/).filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}function Vh(e){const t=jh(),a=e&&Array.isArray(e.bundles)?e.bundles:[],o=[];for(const n of a){const s=n&&n.bundle;if(!s||t.has(s)||qh.has(s)||n.stage==="production")continue;const r=Array.isArray(n.profiles)?n.profiles:[];if(!r.length||r.every(d=>d.widget||Array.isArray(d.targets)&&!d.targets.includes("web")))continue;const i=r.find(d=>d.isMap)||r.find(d=>d.profile===s)||r[0],l=i.element||Array.isArray(n.elements)&&n.elements[0]||s,c=n.scriptUrl||i.scriptUrl||"";c&&o.push({id:s,label:i.title||Hh(s),sub:(i.description||"").trim().replace(/[,;]\s*$/,"")||"experimental bundle",emoji:"๐งช",tag:l,bundle:s,profile:i.profile||s,scriptUrl:c,heavy:en.has(l)||en.has(s),scroll:tn.has(l)||tn.has(s),discovered:!0})}return o.sort((n,s)=>{const r=Ol[n.id]||999,i=Ol[s.id]||999;return r!==i?r-i:n.label.localeCompare(s.label)}),o}function Bh(e,t){const a=e&&Array.isArray(e.bundles)?e.bundles:[],o=Object.fromEntries(a.map(s=>[s.bundle,s])),n={};for(const s of t){const r=o[s.bundle];if(!r)continue;const i=Array.isArray(r.profiles)?r.profiles:[],l=i.find(S=>S.profile===s.profile)||i[0],c=l&&l.element||Array.isArray(r.elements)&&r.elements[0]||s.bundle,d=r.scriptUrl||l&&l.scriptUrl||"";if(!d)continue;const m=l&&Array.isArray(l.instances)?l.instances:[],b=!!(s.instance&&m.some(S=>(S&&(S.id||S.instance))===s.instance));n[s.id]={tag:c,scriptUrl:d,profile:l&&l.profile||s.profile,instance:b?s.instance:"",heavy:en.has(c)||en.has(s.bundle),scroll:tn.has(c)||tn.has(s.bundle)}}return n}const Gh=ba({name:"DoxaMapsSpa",inheritAttrs:!1,components:{VerticalTabsLayout:Em,BackToTopButton:ri,MapInfo:Rh},props:{treeBase:{type:String,default:""},profileConfig:{type:[String,Object],default:""},heading:{type:String,default:"Deep Research"},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:ha("dmsTreeBase","")}},data(){return{paneEls:{},activeIndex:0,showHeader:!1,narrow:!1,_mql:null,_onMedia:null,disabledNotice:"",_noticeTimer:null,helpOpen:!1,mobileNoticeDismissed:{},mobileFlags:null,manifestError:"",manifestBase:"",runtime:{},locale:Am(),hostLang:El(),localeOpen:!1,switcherLangs:Om,tabs:gs.map(e=>({...e,tag:"",scriptUrl:"",heavy:!1,scroll:!1,resolved:!1,mounted:!1,state:"idle",error:""}))}},computed:{largerScreenText(){return ea("messages.largerScreenNotice",this.uiLocale)||"This experimental map is built for larger screens. It opens here, but parts of it may not fit or work well on a phone."},activePaneEl(){return this.paneEls[this.activeIndex]||null},activeHelp(){const e=this.tabs[this.activeIndex];return e&&e.discovered?Sl(e.id,this.uiLocale):null},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":""},showInfo(){const e=this.cfg.info;return!(e===!1||e==="false"||e==="off")},headingText(){return String(this.cfg.heading||this.heading||"").trim()||"Deep Research"},showExperimental(){const e=this.cfg.experimental;return!(e===!1||e==="false"||e==="hidden"||e==="off")},navGroups(){const e=Object.fromEntries(this.tabs.map(a=>[a.id,a])),t=new Set;return fs.map(a=>{let o=Ml((a.tabs||[]).filter(n=>e[n.id]).map(n=>{const s=e[n.id],r=this.isDesktopOnly(s.id),i=r||this.mobileFlagOf(s.id)==="desktop-only";return{key:s.id,label:this.tabLabel(s),sub:this.tabSub(s),icon:n.icon,badge:i?this.tr("desktopOnly"):n.badge,disabled:r}}),t);return a.key==="experimental"&&!this.showExperimental?{key:a.key,rows:[]}:(a.key==="experimental"&&(o=o.concat(Ml(this.tabs.filter(n=>n.discovered).map(n=>({key:n.id,label:this.tabLabel(n),sub:this.tabSub(n),icon:"flask",badge:this.narrow&&this.mobileFlagOf(n.id)==="larger-screens"?this.tr("mobileNotBuilt"):this.tr("lab")})),t))),{key:a.key,label:a.i18n?this.tr(a.i18n):a.label,icon:a.icon,folder:!!a.folder,open:a.open,rows:o})}).filter(a=>a.rows.length)},showLocaleSwitcher(){return this.showHeader},activeLang(){return Mm(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 us.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(),this._onHostedHelp=e=>this.onHostedHelp(e),this.$el.addEventListener("doxa:help",this._onHostedHelp)},beforeUnmount(){this._langObs&&(this._langObs.disconnect(),this._langObs=null),this._onHostedHelp&&(this.$el.removeEventListener("doxa:help",this._onHostedHelp),this._onHostedHelp=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:{activeIndex(){this.helpOpen=!1},effectiveLocale(){const e=(o,n)=>{try{const s=this._slots&&this._slots[o];s&&(s.innerHTML="")}catch{}n.mounted=!1,n.state="idle",n.error=""};this.tabs.forEach((o,n)=>{o.mounted&&n!==this.activeIndex&&e(n,o)});const t=this.activeIndex,a=this.tabs[t];!a||!a.mounted||(e(t,a),this.mountElement(t))},tab(e){e&&this.onSelect(e)}},methods:{openHelp(){this.helpOpen=!0,this.$nextTick(()=>this.$refs.helpClose&&this.$refs.helpClose.focus())},closeHelp(){this.helpOpen=!1;const e=this._helpReturn;this._helpReturn=null,this.$nextTick(()=>e&&e.focus&&e.focus())},infoProps(e){const{pos:t,...a}=this.infoFor(e)||{};return a},infoPos(e){const t=(this.infoFor(e)||{}).pos||{},{narrow:a,...o}=t;return this.narrow&&a?{...o,...a}:o},infoStyle(e){const t=this.infoPos(e),a={};return t.top&&(a["--map-info-top"]=t.top),t.side&&(a["--map-info-side"]=t.side),a},infoFor(e){const t=this.showInfo&&e&&Dm[e.id];return t&&(!t.leadKey||ea(t.leadKey,"en"))?t:null},tabHasHelp(e){return!!(e&&e.discovered&&Sl(e.id,this.uiLocale))},onHostedHelp(e){if(!this.activeHelp)return;e.stopPropagation();const t=e.composedPath?e.composedPath():[];this._helpReturn=t.find(a=>a&&a.tagName==="BUTTON")||null,this.openHelp()},setSlot(e,t){t&&(this._slots=Object.assign(this._slots||{},{[e]:t}))},tr(e,t){return Zo(this.uiLocale,e,t)},t(e,t){return Zo(this.uiLocale,e,t)},tabLabel(e){return!e.discovered||Im("tab."+e.id)?Zo(this.uiLocale,"tab."+e.id):e.label},tabSub(e){return e.discovered?this.uiLocale==="en"?e.sub:this.tr("experimentalSub"):Zo(this.uiLocale,"sub."+e.id)},watchHostLang(){typeof MutationObserver>"u"||typeof document>"u"||(this._langObs=new MutationObserver(()=>{this.hostLang=El()}),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.isDesktopOnly(this.activeKey)&&this.select(this.firstVisibleIndex())},this._mql.addEventListener?this._mql.addEventListener("change",this._onMedia):this._mql.addListener&&this._mql.addListener(this._onMedia))},mobileFlagOf(e){const t=this.tabs.find(a=>a.id===e);return t&&this.mobileFlags&&this.mobileFlags[t.bundle+"/"+t.profile]||null},isDesktopOnly(e){return this.narrow&&this.mobileFlagOf(e)==="desktop-only"},showsMobileNotice(e){return this.narrow&&this.mobileFlagOf(e)==="larger-screens"&&!this.mobileNoticeDismissed[e]},dismissMobileNotice(e){this.mobileNoticeDismissed={...this.mobileNoticeDismissed,[e]:!0}},firstVisibleIndex(){let e=-1;for(const t of this.navGroups)for(const a of t.rows){const o=this.tabs.findIndex(n=>n.id===a.key);if(!(o<0)&&(e<0&&(e=o),!a.disabled))return o}return e>=0?e:0},loadManifest(){const e=this.resolve("manifest.json"),t=c=>{try{return new URL(c,location.href).href.replace(/[^/]*$/,"")}catch{return""}},a={url:e,root:t(e)},o={url:this.resolve("doxa-maps-spa/manifest.json"),root:a.root};let n=!1;try{n=new URL(e,location.href).origin!==location.origin}catch{}const s=n?[o,a]:[a,o],r="/public/dx-maps/manifest.json";s.some(c=>c.url===r)||s.push({url:r,root:t(r)});const i=[],l=c=>{if(c>=s.length){this.manifestError="manifest.json not found (tried "+i.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:m}=s[c];return i.push(d),fetch(d,{credentials:"same-origin"}).then(b=>{if(!b||!b.ok)throw new Error(d+" โ HTTP "+(b?b.status:"?"));return b.json()}).then(b=>{if(!b)throw new Error(d+" โ empty");this.manifestError="",this.manifestBase=m||"",this.applyManifest(b)}).catch(()=>l(c+1))};try{l(0)}catch{}},applyManifest(e){this.runtime=e&&e.runtime&&typeof e.runtime=="object"?e.runtime:{},this.mobileFlags=Wh(e),this.applyPageGlobals();const t=Bh(e,gs),a=this.activeKey,o=[];for(const l of this.tabs){if(l.discovered){o.push(l);continue}const c=t[l.id];c&&(Object.assign(l,c,{resolved:!0}),o.push(l))}const n=new Set(o.map(l=>l.id));if(this.showExperimental)for(const l of Vh(e))n.has(l.id)||o.push({...l,resolved:!0,mounted:!1,state:"idle",error:""});this.tabs=o;const s=this.requestedTab(),r=s?this.tabs.findIndex(l=>l.id===s):-1,i=this.tabs.findIndex(l=>l.id===a);r>=0&&!this.isDesktopOnly(s)&&!this._honouredTab?this.select(r):this.select(i>=0&&!this.isDesktopOnly(a)?i: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(a=>a.id===e):-1;return t>=0&&(this._honouredTab=!0),t>=0&&!this.isDesktopOnly(e)?t:this.firstVisibleIndex()},setLocale(e){this.locale=e,this.localeOpen=!1,Cm(e)},onSelect(e){if(this.isDesktopOnly(e)){const a=this.tabs.find(o=>o.id===e);this.disabledNotice=(ea("messages.desktopOnlyNotice",this.uiLocale)||"{label} only supports desktop โ open this page on a desktop to use it.").replace("{label}",a?this.tabLabel(a):e),clearTimeout(this._noticeTimer),this._noticeTimer=setTimeout(()=>{this.disabledNotice=""},4e3);return}const t=this.tabs.findIndex(a=>a.id===e);t!==-1&&this.select(t)},resolve(e){const t=String(e);if(/^(https?:)?\/\//.test(t)||t.startsWith("/"))return t;const a=t.replace(/^\.\//,"");return this.manifestBase?this.manifestBase.replace(/\/+$/,"")+"/"+a:this.base?this.base.replace(/\/+$/,"")+"/"+a:"../"+a},select(e){const t=this.activeIndex;if(this.activeIndex=e,t!==e&&t>=0){const o=this.tabs[t];o&&o.heavy&&o.mounted&&this.releaseTab(t,o)}const a=this.tabs[e];a&&((t!==e||!this._announced)&&(this._announced=!0,this.$emit("tab-change",{id:a.id,label:a.label})),a.scriptUrl&&(this.narrow&&this.mobileFlags===null||this.isDesktopOnly(a.id)||a.mounted||this.$nextTick(()=>{this.activeIndex===e&&this.mountElement(e)})))},releaseTab(e,t){try{const a=this._slots&&this._slots[e];a&&(a.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 a=this.tk||this.cfg.tk||this.runtime.token;return a&&(t.tk=a),(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.mapTitle=this.tabLabel(e),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 a=this.resolve(t.scriptUrl);_l(a).then(()=>Og(t.tag)).then(()=>{try{if(t.heavy&&this.activeIndex!==e){t.mounted=!1,t.state="idle";return}const o=this._slots&&this._slots[e];if(!o){t.state="error",t.error="no slot";return}o.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%;min-height:0;",o.appendChild(n),t.state="ready"}catch(o){t.state="error",t.error="mount failed: "+(o&&o.message||String(o))}}).catch(o=>{t.state="error",t.error=o&&o.message||String(o)})}}}),Kh={class:"dms-locale"},Xh=["aria-expanded"],Yh={class:"dms-flag"},Jh={class:"dms-locale-name"},Zh={key:0,class:"dms-locale-menu",role:"listbox"},Qh=["aria-selected"],eb=["onClick"],tb={class:"dms-flag"},ab={class:"dms-locale-name"},ob={class:"dms-locale-en"},nb=["hidden","data-doxa-help"],sb={key:0,class:"dms-mobile-notice",role:"status"},rb=["aria-label","onClick"],ib={key:2,class:"dms-hint"},lb={key:3,class:"dms-hint err"},cb={key:4,class:"dms-hint err"},pb={key:0,class:"dms-notice",role:"status"},ub={id:"dms-help-title",class:"dms-help-title"},db={class:"dms-help-what"},fb={class:"dms-help-how"};function gb(e,t,a,o,n,s){const r=Ao("MapInfo"),i=Ao("BackToTopButton"),l=Ao("VerticalTabsLayout");return I(),_a(l,{dir:e.uiDir,lang:e.uiLocale,labels:e.layoutLabels,title:e.headingText,"nav-label":e.t("navLabel"),header:e.showHeader,groups:e.navGroups,active:e.activeKey,"onUpdate:active":e.onSelect},qc({brand:Ra(()=>[t[5]||(t[5]=A("span",{class:"dms-logo","aria-hidden":"true"},[A("svg",{viewBox:"0 0 24 24",width:"22",height:"22",fill:"none",stroke:"#92b195","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[A("circle",{cx:"12",cy:"12",r:"9"}),A("polygon",{points:"12 6 14 12 12 18 10 12",fill:"#92b195",stroke:"none"}),A("polygon",{points:"6 12 12 10 18 12 12 14",fill:"#92b195",opacity:"0.55",stroke:"none"})])],-1))]),meta:Ra(()=>[Kt(B(e.t("meta",{n:e.tabs.length})),1)]),default:Ra(()=>[(I(!0),F(ae,null,Je(e.tabs,(c,d)=>za((I(),F("section",{key:c.id,class:"dms-pane",ref_for:!0,ref:m=>{m?e.paneEls[d]=m:delete e.paneEls[d]},hidden:d!==e.activeIndex,"data-doxa-help":e.tabHasHelp(c)?"":null,"data-doxa-gallery":""},[!c.heavy||d===e.activeIndex?(I(),F(ae,{key:0},[e.showsMobileNotice(c.id)?(I(),F("div",sb,[A("span",null,B(e.largerScreenText),1),A("button",{type:"button",class:"dms-mobile-notice-x","aria-label":e.tr("dismiss"),onClick:m=>e.dismissMobileNotice(c.id)},"ร",8,rb)])):oe("",!0),A("div",{class:"dms-slot",ref_for:!0,ref:m=>e.setSlot(d,m)},null,512),e.infoFor(c)?(I(),_a(r,Dr({key:"info-"+c.id},{ref_for:!0},e.infoProps(c),{style:e.infoStyle(c),placement:e.infoPos(c).placement||"top-right",class:{"dms-info-raise":e.infoPos(c).raise},"assets-base":e.assetsBase,locale:e.effectiveLocale}),null,16,["style","placement","class","assets-base","locale"])):oe("",!0),c.state==="loading"?(I(),F("div",ib,B(e.tr("loading",{label:e.tabLabel(c)})),1)):c.state==="error"?(I(),F("div",lb,[Kt(B(e.tr("loadFailed",{label:e.tabLabel(c)})),1),t[7]||(t[7]=A("br",null,null,-1)),A("small",null,B(c.error),1)])):c.state==="idle"&&!c.scriptUrl&&e.manifestError?(I(),F("div",cb,[Kt(B(e.tr("loadFailed",{label:e.tabLabel(c)})),1),t[8]||(t[8]=A("br",null,null,-1)),A("small",null,B(e.manifestError),1),t[9]||(t[9]=A("br",null,null,-1)),A("small",null,B(e.tr("manifestHint")),1)])):oe("",!0)],64)):oe("",!0)],8,nb)),[[Za,d===e.activeIndex]])),128)),e.disabledNotice?(I(),F("div",pb,B(e.disabledNotice),1)):oe("",!0),e.helpOpen&&e.activeHelp?(I(),F("div",{key:1,class:"dms-help-scrim",onClick:t[3]||(t[3]=jo((...c)=>e.closeHelp&&e.closeHelp(...c),["self"])),onKeydown:t[4]||(t[4]=ai(jo((...c)=>e.closeHelp&&e.closeHelp(...c),["stop","prevent"]),["esc"]))},[A("div",{class:"dms-help",role:"dialog","aria-modal":"true","aria-labelledby":"dms-help-title",onKeydown:t[2]||(t[2]=ai(jo(c=>e.$refs.helpClose&&e.$refs.helpClose.focus(),["prevent"]),["tab"]))},[A("h2",ub,B(e.tabLabel(e.tabs[e.activeIndex])),1),A("p",db,[A("strong",null,B(e.activeHelp.what),1)]),A("p",fb,B(e.activeHelp.how),1),A("button",{ref:"helpClose",type:"button",class:"dms-help-close",onClick:t[1]||(t[1]=(...c)=>e.closeHelp&&e.closeHelp(...c))},B(e.tr("close")),513)],32)],32)):oe("",!0),Ue(i,{target:e.activePaneEl,labels:{backToTop:e.tr("backToTop")}},null,8,["target","labels"])]),_:2},[e.showLocaleSwitcher?{name:"toolbar",fn:Ra(()=>[A("div",Kh,[A("button",{type:"button",class:"dms-locale-btn","aria-expanded":String(e.localeOpen),"aria-label":"Change language",onClick:t[0]||(t[0]=c=>e.localeOpen=!e.localeOpen)},[A("span",Yh,B(e.activeLang.flag),1),A("span",Jh,B(e.activeLang.nativeName),1),t[6]||(t[6]=A("span",{class:"dms-dots","aria-hidden":"true"},"โฎ",-1))],8,Xh),e.localeOpen?(I(),F("ul",Zh,[(I(!0),F(ae,null,Je(e.switcherLangs,c=>(I(),F("li",{key:c.code,role:"option","aria-selected":String(c.code===e.locale)},[A("button",{type:"button",class:st(["dms-locale-opt",{active:c.code===e.locale}]),onClick:d=>e.setLocale(c.code)},[A("span",tb,B(c.flag),1),A("span",ab,B(c.nativeName),1),A("span",ob,B(c.name),1)],10,eb)],8,Qh))),128))])):oe("",!0)])]),key:"0"}:void 0]),1032,["dir","lang","labels","title","nav-label","header","groups","active","onUpdate:active"])}const mb=jn(Gh,[["render",gb],["styles",[zh]]]),hb=Mg(),bb=Xp(mb,{configureApp(e){e.provide("dmsTreeBase",hb)}});typeof customElements<"u"&&!customElements.get("doxa-maps-spa")&&customElements.define("doxa-maps-spa",bb)})();
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 4539874bc..d1e2a069d 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
@@ -61,7 +61,7 @@
-
+
-
+
\n\n\n"
+ "script": "\n\n\n"
},
"instances": [
{
diff --git a/public/dx-maps/manifest.json b/public/dx-maps/manifest.json
index c678a3508..fb293388a 100644
--- a/public/dx-maps/manifest.json
+++ b/public/dx-maps/manifest.json
@@ -361,7 +361,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-sW6vaNdZBtWMZXTy4zyVRAij2cYKLTdC3T/Yqnettso/4u4CmAm0uqtzWMlm3etp",
+ "integrity": "sha384-wbxEugyxYQihhEudGHoltvDdr091K3gN5EmaWUA2pN15ZM2JaDhm22kOTAJmGUv6",
"elements": [
"doxa-maps-spa"
],
@@ -389,7 +389,7 @@
"scriptUrl": "./doxa-maps-spa/doxa-maps-spa.js",
"embed": {
"iframe": "",
- "script": "\n\n\n"
+ "script": "\n\n\n"
},
"instances": [
{