@phila/layerboard 3.0.0-beta.14 → 3.0.0-beta.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),G=require("@phila/phila-ui-map-core"),U=require("@phila/phila-ui-core");var he=typeof document<"u"?document.currentScript:null;function _e(t,a,o={}){const l={type:"Feature"};return(o.id===0||o.id)&&(l.id=o.id),o.bbox&&(l.bbox=o.bbox),l.properties=a||{},l.geometry=t,l}function ut(t,a,o={}){for(const r of t){if(r.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");if(r[r.length-1].length!==r[0].length)throw new Error("First and last Position are not equivalent.");for(let i=0;i<r[r.length-1].length;i++)if(r[r.length-1][i]!==r[0][i])throw new Error("First and last Position are not equivalent.")}return _e({type:"Polygon",coordinates:t},a,o)}function dt(t,a,o={}){if(t.length<2)throw new Error("coordinates must be an array of two or more positions");return _e({type:"LineString",coordinates:t},a,o)}function ft(t,a,o={}){return _e({type:"MultiLineString",coordinates:t},a,o)}function pt(t,a,o={}){return _e({type:"MultiPolygon",coordinates:t},a,o)}function mt(t){return t.type==="Feature"?t.geometry:t}function yt(t,a,o){var l=t.length,r=ve(t[0],a),i=[],u,k,m;let E,v;for(o||(o=[]),u=1;u<l;u++){for(E=t[u-1],v=t[u],k=m=ve(v,a);;)if(r|k){if(r&k)break;r?(E=Ge(E,v,r,a),r=ve(E,a)):(v=Ge(E,v,k,a),k=ve(v,a))}else{i.push(E),k!==m?(i.push(v),u<l-1&&(o.push(i),i=[])):u===l-1&&i.push(v);break}r=m}return i.length&&o.push(i),o}function gt(t,a){var o,l,r,i,u,k,m;for(l=1;l<=8;l*=2){for(o=[],r=t[t.length-1],i=!(ve(r,a)&l),u=0;u<t.length;u++)k=t[u],m=!(ve(k,a)&l),m!==i&&o.push(Ge(r,k,l,a)),m&&o.push(k),r=k,i=m;if(t=o,!t.length)break}return o}function Ge(t,a,o,l){return o&8?[t[0]+(a[0]-t[0])*(l[3]-t[1])/(a[1]-t[1]),l[3]]:o&4?[t[0]+(a[0]-t[0])*(l[1]-t[1])/(a[1]-t[1]),l[1]]:o&2?[l[2],t[1]+(a[1]-t[1])*(l[2]-t[0])/(a[0]-t[0])]:o&1?[l[0],t[1]+(a[1]-t[1])*(l[0]-t[0])/(a[0]-t[0])]:null}function ve(t,a){var o=0;return t[0]<a[0]?o|=1:t[0]>a[2]&&(o|=2),t[1]<a[1]?o|=4:t[1]>a[3]&&(o|=8),o}function ht(t,a){const o=mt(t),l=o.type,r=t.type==="Feature"?t.properties:{};let i=o.coordinates;switch(l){case"LineString":case"MultiLineString":{const u=[];return l==="LineString"&&(i=[i]),i.forEach(k=>{yt(k,a,u)}),u.length===1?dt(u[0],r):ft(u,r)}case"Polygon":return ut(Qe(i,a),r);case"MultiPolygon":return pt(i.map(u=>Qe(u,a)),r);default:throw new Error("geometry "+l+" not supported")}}function Qe(t,a){const o=[];for(const l of t){const r=gt(l,a);r.length>0&&((r[0][0]!==r[r.length-1][0]||r[0][1]!==r[r.length-1][1])&&r.push(r[0]),r.length>=4&&o.push(r))}return o}var vt=ht;const bt={class:"map-panel"},kt=e.defineComponent({__name:"MapPanel",props:{visibleLayers:{},layerOpacities:{},layerList:{},tiledLayers:{},visibleTiledLayers:{},tiledLayerOpacities:{},cyclomediaConfig:{},pictometryCredentials:{},basemapControlPosition:{default:"top-right"},navigationControlPosition:{default:"bottom-right"},geolocationControlPosition:{default:"bottom-right"},searchControlPosition:{default:"top-left"},drawControlPosition:{default:"bottom-left"},cyclomediaButtonPosition:{default:"top-right"},pictometryButtonPosition:{default:"top-right"},initialZoom:{},initialCenter:{}},emits:["zoom","layerLoading","layerError"],setup(t,{emit:a}){const o=t,l=a,r=e.ref(null),i=e.ref(null),u=e.ref(0);function k(n){l("zoom",n),i.value&&(u.value=m(i.value))}function m(n){const d=n.getZoom(),L=n.getCenter().lat,B=559082264028e-3,x=L*Math.PI/180;return B*Math.cos(x)/Math.pow(2,d)}const E=e.ref({}),v=e.ref(null),C=e.ref(new Set),c=["fema-100-year-floodplain","fema-500-year-floodplain"];async function h(n,d,s,L){const B=encodeURIComponent(L||"1=1"),x=JSON.stringify({xmin:d.west,ymin:d.south,xmax:d.east,ymax:d.north,spatialReference:{wkid:4326}}),M=2e3;let A=0,F=[],Z=!0;for(;Z;){const P=`${n}/query?where=${B}&geometry=${encodeURIComponent(x)}&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects&outFields=*&returnGeometry=true&resultRecordCount=${M}&resultOffset=${A}&f=geojson`,T=await fetch(P);if(!T.ok)throw new Error(`HTTP ${T.status}: ${T.statusText}`);const O=await T.json();O.features&&O.features.length>0?(F=F.concat(O.features),A+=O.features.length,Z=O.features.length===M):Z=!1}if(F=F.map(P=>{if(P.properties){const T={};for(const O of Object.keys(P.properties))T[O.toLowerCase()]=P.properties[O];return{...P,properties:T}}return P}),c.includes(s)){const P=[d.west,d.south,d.east,d.north];F=F.map(T=>{if(T.geometry&&(T.geometry.type==="Polygon"||T.geometry.type==="MultiPolygon"))try{return vt(T,P)}catch{return T}return T})}return{type:"FeatureCollection",features:F}}async function b(n,d){const s=d.map(async L=>{const B=o.layerList.find(x=>x.config.id===L)?.config;if(B){l("layerLoading",L,!0);try{const x=await h(B.url,n,L,B.where);E.value={...E.value,[L]:x},l("layerError",L,null)}catch(x){const M=x instanceof Error?x.message:"Failed to load";l("layerError",L,M)}finally{l("layerLoading",L,!1)}}});await Promise.all(s)}async function y(n){const d=[...o.visibleLayers];await b(n,d)}function f(n){v.value=n.bounds,y(n.bounds)}function p(n){i.value=n;const d=n.getBounds();v.value={west:d.getWest(),south:d.getSouth(),east:d.getEast(),north:d.getNorth()};const s=n.getZoom();l("zoom",s),u.value=m(n),y(v.value)}e.watch(()=>o.visibleLayers.size,async()=>{if(H.value.length>0&&j(),v.value){const n=new Set(o.visibleLayers),d=[...n].filter(s=>!C.value.has(s));C.value=new Set(n),d.length>0&&await b(v.value,d)}});function w(n){return o.visibleLayers.has(n)}function V(n){return!!E.value[n.id]}const N=e.computed(()=>o.layerList.filter(n=>n.config.type==="circle"&&w(n.config.id)&&V(n.config)).map(n=>n.config)),$=e.computed(()=>o.layerList.filter(n=>n.config.type==="fill"&&w(n.config.id)&&V(n.config)).map(n=>n.config)),_=e.computed(()=>o.layerList.filter(n=>n.config.type==="fill"&&n.config.outlinePaint&&w(n.config.id)&&V(n.config)).map(n=>n.config)),Q=e.computed(()=>o.layerList.filter(n=>n.config.type==="line"&&w(n.config.id)&&V(n.config)).map(n=>n.config));function X(n){return o.visibleTiledLayers?.has(n)??!1}function ue(n){return o.tiledLayerOpacities?.[n]??1}function Ie(n){return`${n.replace(/\/$/,"")}/tile/{z}/{y}/{x}`}function Oe(n){return{type:"raster",tiles:[Ie(n.url)],tileSize:256,attribution:n.attribution||""}}const ke=e.ref({}),Be=e.ref(new Set);async function we(n){if(!Be.value.has(n.id)){Be.value.add(n.id);try{const d=n.url.replace(/\/$/,""),s=await fetch(`${d}?f=json`);if(!s.ok)return;const L=await s.json(),B=L.minScale||0;let x=L.maxScale||0;if(L.layers&&L.layers.length>0)for(const M of L.layers)M.maxScale&&M.maxScale>0&&(x===0||M.maxScale<x)&&(x=M.maxScale);x===0&&(x=72e3),ke.value={...ke.value,[n.id]:{minScale:B,maxScale:x}}}catch{}}}e.onMounted(()=>{if(o.tiledLayers)for(const n of o.tiledLayers)n.scaleBasedRendering&&we(n)});function xe(n){if(!n.scaleBasedRendering)return"tiled";const d=ke.value[n.id];if(!d)return"tiled";const s=u.value;return s===0||s>d.maxScale?"tiled":"dynamic"}const De=e.computed(()=>o.tiledLayers?o.tiledLayers.filter(n=>X(n.id)?n.scaleBasedRendering?xe(n)==="tiled":!0:!1):[]),Re=e.computed(()=>o.tiledLayers?o.tiledLayers.filter(n=>X(n.id)&&n.scaleBasedRendering?xe(n)==="dynamic":!1):[]);function de(n){return{type:"raster",tiles:[`${n.url.replace(/\/$/,"")}/export?bbox={bbox-epsg-3857}&bboxSR=3857&imageSR=3857&size=256,256&format=png32&transparent=true&f=image`],tileSize:256,attribution:n.attribution||""}}function le(n){return{type:"geojson",data:E.value[n.id]}}function fe(n){return o.layerOpacities[n]??1}function ae(n){const d=fe(n.id),s=n.type==="circle"?"circle-opacity":n.type==="fill"?"fill-opacity":"line-opacity";if(n.type==="fill"&&n.paint["fill-opacity"]===0)return{...n.paint,"fill-opacity":0};const L=n.type==="circle"?"circle-color":n.type==="fill"?"fill-color":"line-color",B={...n.paint},x=B[L],M=B[s]===1,A=typeof x=="string"&&x.startsWith("rgba(");if(M&&A){if(d===1)return B;{const F=x.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/);if(F&&F[4]){const[,Z,P,T,O]=F,je=parseFloat(O)*d;B[L]=`rgba(${Z}, ${P}, ${T}, ${je})`,B[s]=1}return B}}if(A){const F=x.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/);if(F){const[,Z,P,T]=F;B[L]=`rgb(${Z}, ${P}, ${T})`}}return B[s]=d,B}function Ze(n){const d=fe(n.id);return{...n.outlinePaint,"line-opacity":d}}const H=e.ref([]),pe=e.ref(null),W=e.ref(0);function ie(n){const d=n.replace(/-outline$/,"");return o.layerList.find(L=>L.config.id===d)?.config}function Ae(n,d){return n.replace(/\{([^}]+)\}/g,(s,L)=>{const B=d[L];return B==null?"":String(B)})}function Y(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Le(n,d,s){if(n==null)return"-";if(d?.dateFormat&&typeof n=="number"){const L=new Date(n);if(s&&d.dateFormat==="shortDateShortTime")return L.toLocaleString(void 0,{dateStyle:"short",timeStyle:"short"});switch(d.dateFormat){case"shortDateShortTime":return L.toLocaleDateString();case"longMonthDayYear":return L.toLocaleDateString(void 0,{month:"long",day:"numeric",year:"numeric"});case"shortDate":return L.toLocaleDateString();case"longDate":return L.toLocaleDateString(void 0,{weekday:"long",month:"long",day:"numeric",year:"numeric"});default:return L.toLocaleDateString()}}if(typeof n=="number"){if(n>1e12&&!d)return new Date(n).toLocaleDateString();const L=d?.places,B=d?.digitSeparator??!0;if(L!==void 0){if(Number.isInteger(n)&&L>=0)return String(n);const x=n.toFixed(L);if(B){const M=x.split("."),A=M[0]||"0",F=M[1],Z=A.replace(/\B(?=(\d{3})+(?!\d))/g,",");return F?`${Z}.${F}`:Z}return x}return Number.isInteger(n)?String(n):B?n.toLocaleString():String(n)}return String(n)}function Ce(n){const d=new Set;return n.filter(s=>{const B=`${s.layer.id.replace(/-outline$/,"")}:${JSON.stringify(s.properties)}`;return d.has(B)?!1:(d.add(B),!0)})}function Ne(n,d){const s=E.value[n];if(!s?.features)return null;const L=d.objectid??d.OBJECTID??d.FID;if(L!=null){const B=s.features.find(x=>(x.properties?.objectid??x.properties?.OBJECTID??x.properties?.FID)===L);if(B)return B.geometry}return null}function ee(n,d){const s=new Map;return d.forEach((L,B)=>{s.set(L.id,B)}),n.sort((L,B)=>{const x=L.layer.id.replace(/-outline$/,""),M=B.layer.id.replace(/-outline$/,""),A=s.get(x)??-1;return(s.get(M)??-1)-A})}function me(n){const d=i.value;if(!d)return;const s=[];o.layerList.forEach(P=>{const T=P.config;o.visibleLayers.has(T.id)&&(s.push(T.id),T.outlinePaint&&s.push(`${T.id}-outline`))});const L=d.project([n.lngLat.lng,n.lngLat.lat]),B=d.queryRenderedFeatures(L,{layers:s});if(B.length===0)return;const x=Ce(B),M=o.layerList.map(P=>P.config),F=ee(x,M).map(P=>{const T=P.layer.id.replace(/-outline$/,""),O=ie(T);if(!O)return null;const je=Ne(O.id,P.properties||{});return{layerId:O.id,layerTitle:O.title,properties:P.properties||{},geometry:je||P.geometry,popupConfig:O.popup}}).filter(P=>P!==null);if(F.length===0)return;H.value=F,W.value=0,pe.value=[n.lngLat.lng,n.lngLat.lat];const Z=F[0];if(Z){const P=ie(Z.layerId);if(P){const T=S(Z.geometry),O=D(P.id,P.type);g.value={geometry:Z.geometry,geometryType:T,layerId:P.id,properties:Z.properties,originalStyle:O}}}}function j(){H.value=[],pe.value=null,W.value=0,g.value=null}function Ve(n){if(H.value.length===0)return;const d=n.target;if(!(d.tagName==="INPUT"||d.tagName==="TEXTAREA"||d.isContentEditable))switch(n.key){case"ArrowLeft":case"ArrowUp":n.preventDefault(),J();break;case"ArrowRight":case"ArrowDown":n.preventDefault(),se();break;case"Escape":n.preventDefault(),j();break}}e.onMounted(()=>{window.addEventListener("keydown",Ve)}),e.onUnmounted(()=>{window.removeEventListener("keydown",Ve)});function se(){const n=H.value.length;n<=1||W.value>=n-1||(W.value=W.value+1)}function J(){H.value.length<=1||W.value<=0||(W.value=W.value-1)}const ce=e.computed(()=>H.value.length===0?null:H.value[W.value]),K=e.computed(()=>{const n=ce.value;return!n||!n.popupConfig?n?.layerTitle||"":Ae(n.popupConfig.title,n.properties)}),Se=e.computed(()=>{const n=ce.value;if(!n)return"";let d='<div class="popup-content">';if(d+=`<h3 class="popup-title">${Y(K.value)}</h3>`,n.popupConfig?.fields?.length){d+=`<table class="popup-table" aria-label="${Y(K.value)}">`;for(const s of n.popupConfig.fields){const L=Le(n.properties[s.field],s.format,n.popupConfig.showTime),B=s.label.toLowerCase(),x=B.includes("url")||B.includes("website"),M=L.startsWith("http://")||L.startsWith("https://")||L.startsWith("www.")||x&&L.includes("."),A=L.startsWith("http://")||L.startsWith("https://")?L:`https://${L}`,F=M?`<a href="${Y(A)}" target="_blank" rel="noopener noreferrer">${Y(L)}</a>`:Y(L);d+=`<tr><th scope="row">${Y(s.label)}</th><td>${F}</td></tr>`}d+="</table>"}return d+="</div>",d}),te=e.ref({type:"FeatureCollection",features:[]}),q=e.ref({type:"FeatureCollection",features:[]}),ye=e.ref({type:"FeatureCollection",features:[]}),Ue={"circle-radius":["get","highlightRadius"],"circle-color":"#00FFFF","circle-opacity":.8,"circle-stroke-width":2,"circle-stroke-color":"#FFFFFF"},We={"line-width":["get","highlightWidth"],"line-color":"#00FFFF","line-opacity":.9},$e={"fill-color":"#808080","fill-opacity":.5},g=e.ref(null);function S(n){return n.type}function D(n,d){const s=ie(n);if(!s)return{radius:5,width:2};const L=s.paint||{};if(d==="circle"){const B=L["circle-radius"];return typeof B=="number"?{radius:B}:{radius:5}}if(d==="line"||d==="fill"){const B=L["line-width"];if(typeof B=="number")return{width:B};if(s.outlinePaint&&s.outlinePaint["line-width"]){const x=s.outlinePaint["line-width"];if(typeof x=="number")return{width:x}}return{width:2}}return{radius:5,width:2}}function I(n){return!n||n.length===0?[]:n[0]??[]}function R(n){const{geometry:d,geometryType:s,originalStyle:L}=n;if(s==="Point"||s==="MultiPoint"){const x=(L.radius||5)+3;return{type:"FeatureCollection",features:[{type:"Feature",geometry:d,properties:{highlightRadius:x}}]}}if(s==="LineString"||s==="MultiLineString"){const x=(L.width||2)+3;return{type:"FeatureCollection",features:[{type:"Feature",geometry:d,properties:{highlightWidth:x}}]}}if(s==="Polygon"){const B=d.coordinates,x=I(B),A=(L.width||2)+3;return{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"LineString",coordinates:x},properties:{highlightWidth:A}}]}}if(s==="MultiPolygon"){const B=d.coordinates,M=(L.width||2)+3;return{type:"FeatureCollection",features:B.map(F=>({type:"Feature",geometry:{type:"LineString",coordinates:I(F)},properties:{highlightWidth:M}}))}}return{type:"FeatureCollection",features:[]}}function oe(n){const{geometry:d,geometryType:s}=n;return s==="Polygon"||s==="MultiPolygon"?{type:"FeatureCollection",features:[{type:"Feature",geometry:d,properties:{}}]}:{type:"FeatureCollection",features:[]}}function ge(n){if(!n){st();return}const d=R(n);n.geometryType==="Point"||n.geometryType==="MultiPoint"?(te.value=d,q.value={type:"FeatureCollection",features:[]},ye.value={type:"FeatureCollection",features:[]}):(q.value=d,te.value={type:"FeatureCollection",features:[]},ye.value=oe(n))}function st(){te.value={type:"FeatureCollection",features:[]},q.value={type:"FeatureCollection",features:[]},ye.value={type:"FeatureCollection",features:[]}}e.watch(g,n=>{ge(n)}),e.watch(()=>o.visibleLayers,n=>{g.value&&!n.has(g.value.layerId)&&(g.value=null,j())},{deep:!0}),e.watch(W,()=>{const n=ce.value;if(!n){g.value=null;return}const d=ie(n.layerId);if(d){const s=S(n.geometry),L=D(d.id,d.type);g.value={geometry:n.geometry,geometryType:s,layerId:d.id,properties:n.properties,originalStyle:L}}});const Ke=e.ref(null);function ct(n){const[d,s]=n.geometry.coordinates;Ke.value=[d,s]}return(n,d)=>(e.openBlock(),e.createElementBlock("div",bt,[e.createVNode(e.unref(G.Map),{ref_key:"mapRef",ref:r,zoom:o.initialZoom,center:o.initialCenter,"navigation-controls":{position:o.navigationControlPosition},"geolocation-control":{position:o.geolocationControlPosition},"basemap-change-controls":{toggle:!0,dropdown:!0,position:o.basemapControlPosition},"map-search-control":{position:o.searchControlPosition},"enable-cyclomedia":!0,"cyclomedia-config":o.cyclomediaConfig,"cyclomedia-button-position":o.cyclomediaButtonPosition,"enable-pictometry":!0,"pictometry-credentials":o.pictometryCredentials,"pictometry-button-position":o.pictometryButtonPosition,"tool-panel-layout":"vertical","tool-panel-split-ratio":50,onZoom:k,onClick:j,onMoveend:f,onLoad:p,onSearchResult:ct},{default:e.withCtx(()=>[o.drawControlPosition!==null?(e.openBlock(),e.createBlock(e.unref(G.DrawTool),{key:0,position:o.drawControlPosition},null,8,["position"])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(De.value,s=>(e.openBlock(),e.createBlock(e.unref(G.RasterLayer),{id:"tiled-"+s.id,key:"tiled-"+s.id,source:Oe(s),paint:{"raster-opacity":ue(s.id)},minzoom:s.minZoom,maxzoom:s.maxZoom},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Re.value,s=>(e.openBlock(),e.createBlock(e.unref(G.RasterLayer),{id:"dynamic-"+s.id,key:"dynamic-"+s.id,source:de(s),paint:{"raster-opacity":ue(s.id)},minzoom:s.minZoom,maxzoom:s.maxZoom},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N.value,s=>(e.openBlock(),e.createBlock(e.unref(G.CircleLayer),{id:s.id,key:s.id,source:le(s),paint:ae(s),minzoom:s.minZoom,maxzoom:s.maxZoom,"before-id":"highlight-circles",onClick:me},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.value,s=>(e.openBlock(),e.createBlock(e.unref(G.FillLayer),{id:s.id,key:s.id,source:le(s),paint:ae(s),minzoom:s.minZoom,maxzoom:s.maxZoom,"before-id":"highlight-circles",onClick:me},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(_.value,s=>(e.openBlock(),e.createBlock(e.unref(G.LineLayer),{id:s.id+"-outline",key:s.id+"-outline",source:le(s),paint:Ze(s),minzoom:s.minZoom,maxzoom:s.maxZoom,"before-id":"highlight-lines",onClick:me},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Q.value,s=>(e.openBlock(),e.createBlock(e.unref(G.LineLayer),{id:s.id,key:s.id,source:le(s),paint:ae(s),minzoom:s.minZoom,maxzoom:s.maxZoom,"before-id":"highlight-lines",onClick:me},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),e.createVNode(e.unref(G.CircleLayer),{id:"highlight-circles",key:"highlight-circles-layer",source:{type:"geojson",data:te.value},paint:Ue},null,8,["source"]),e.createVNode(e.unref(G.FillLayer),{id:"highlight-fill",key:"highlight-fill-layer",source:{type:"geojson",data:ye.value},paint:$e},null,8,["source"]),e.createVNode(e.unref(G.LineLayer),{id:"highlight-lines",key:"highlight-lines-layer",source:{type:"geojson",data:q.value},paint:We},null,8,["source"]),e.createVNode(e.unref(G.MapMarker),{"lng-lat":Ke.value,color:"#2176d2"},null,8,["lng-lat"]),ce.value&&pe.value?(e.openBlock(),e.createBlock(e.unref(G.MapPopup),{key:1,"lng-lat":pe.value,html:Se.value,"close-on-click":!1,offset:[0,-15],"show-navigation":H.value.length>1,"current-feature-index":W.value,"total-features":H.value.length,"layer-name":ce.value.layerTitle,onClose:j,onNext:se,onPrevious:J},null,8,["lng-lat","html","show-navigation","current-feature-index","total-features","layer-name"])):e.createCommentVNode("",!0)]),_:1},8,["zoom","center","navigation-controls","geolocation-control","basemap-change-controls","map-search-control","cyclomedia-config","cyclomedia-button-position","pictometry-credentials","pictometry-button-position"])]))}}),be=(t,a)=>{const o=t.__vccOpts||t;for(const[l,r]of a)o[l]=r;return o},ot=be(kt,[["__scopeId","data-v-8ba101d1"]]),wt=["disabled"],Lt=e.defineComponent({inheritAttrs:!1,__name:"PhlButton",props:{href:{},to:{},target:{},rel:{},disabled:{type:Boolean,default:!1},clickTarget:{},variant:{default:"primary"},size:{default:"medium"},iconOnly:{type:Boolean,default:!1},iconRight:{type:Boolean},text:{},className:{},iconDefinition:{},iconClass:{},src:{},svgRaw:{}},setup(t){const a=t,o=u=>"href"in u&&u.href!==void 0||"to"in u&&u.to!==void 0,l=e.computed(()=>U.cn("phila-button",`phila-button--${a.variant}`,a.size&&`is-${a.size}`,a.iconOnly&&"icon-button",a.iconOnly&&a.variant==="standard"&&"icon-button--standard",a.className)),r=e.computed(()=>o(a)?"to"in a&&a.to!==void 0?{to:a.to,disabled:a.disabled,className:l.value}:{href:a.href,target:a.target,rel:a.rel,disabled:a.disabled,className:l.value}:{}),i=e.computed(()=>({iconDefinition:a.iconDefinition,iconClass:a.iconClass,src:a.src,iconRight:a.iconRight,iconOnly:a.iconOnly,text:a.text,size:a.size}));return(u,k)=>o(a)?(e.openBlock(),e.createBlock(e.unref(U.BaseLink),e.mergeProps({key:0},{...r.value,...u.$attrs},{role:"button"}),{default:e.withCtx(()=>[e.createVNode(e.unref(U.ActionContent),e.normalizeProps(e.guardReactiveProps(i.value)),{default:e.withCtx(()=>[e.renderSlot(u.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(a.text),1)])]),_:3},16)]),_:3},16)):(e.openBlock(),e.createElementBlock("button",e.mergeProps({key:1,type:"button",disabled:a.disabled,class:l.value},u.$attrs),[e.createVNode(e.unref(U.ActionContent),e.normalizeProps(e.guardReactiveProps(i.value)),{default:e.withCtx(()=>[e.renderSlot(u.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(a.text),1)])]),_:3},16)],16,wt))}});var Ct={prefix:"fas",iconName:"circle-exclamation",icon:[512,512,["exclamation-circle"],"f06a","M256 512a256 256 0 1 1 0-512 256 256 0 1 1 0 512zm0-192a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-192c-18.2 0-32.7 15.5-31.4 33.7l7.4 104c.9 12.6 11.4 22.3 23.9 22.3 12.6 0 23-9.7 23.9-22.3l7.4-104c1.3-18.2-13.1-33.7-31.4-33.7z"]},St=Ct,Et={prefix:"fas",iconName:"xmark",icon:[384,512,[128473,10005,10006,10060,215,"close","multiply","remove","times"],"f00d","M55.1 73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L147.2 256 9.9 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192.5 301.3 329.9 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.8 256 375.1 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192.5 210.7 55.1 73.4z"]},Bt=Et;const xt=["for"],Nt={class:"state-layer"},Vt={class:"content"},$t={class:"input-text-container"},Pt=["id","placeholder"],zt={key:1,class:"has-text-body-small phila-supporting-text"},Tt={key:2,class:"has-text-body-small phila-error-text"},_t=e.defineComponent({inheritAttrs:!1,__name:"TextField",props:{modelValue:{default:void 0},className:{default:""},label:{default:""},id:{default:`phila-text-field-${Math.random().toString(36).substring(2,9)}`},supportingText:{default:""},placeholder:{default:""},leadingIcon:{default:""},trailingIcon:{default:""},error:{default(){return[]}}},emits:["update:modelValue"],setup(t,{emit:a}){const o=e.useAttrs(),l=t,r=e.computed(()=>typeof l.error=="string"?l.error:l.error[0]),i=e.toRef(l,"id"),u=a,k=e.ref(""),m=e.computed({get:()=>l.modelValue!==void 0?l.modelValue:k.value,set:h=>{u("update:modelValue",h),k.value=h}}),E=e.computed(()=>{const h=["default-class"];return o.disabled!=null&&h.push("phila-input--disabled"),r.value&&h.push("phila-input--error"),o.required!=null&&h.push("phila-input--required"),U.cn(...h)}),v=e.computed(()=>{const h=[];return m.value!==""&&h.push("phila-text-field--filled"),l.className&&h.push(l.className),U.cn(...h)}),C=e.ref(null),c=h=>{h.target.closest("button")||C.value?.focus()};return(h,b)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["phila-input",E.value])},[l.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:i.value,class:"has-text-label-small phila-label"},e.toDisplayString(l.label),9,xt)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["phila-text-field",v.value]),onClick:c},[e.createElementVNode("div",Nt,[l.leadingIcon?(e.openBlock(),e.createBlock(e.unref(U.Icon),{key:0,"icon-class":l.leadingIcon,inline:"",decorative:""},null,8,["icon-class"])):e.createCommentVNode("",!0),e.createElementVNode("div",Vt,[e.createElementVNode("div",$t,[e.withDirectives(e.createElementVNode("input",e.mergeProps({id:i.value,ref_key:"inputRef",ref:C,"onUpdate:modelValue":b[0]||(b[0]=y=>m.value=y),class:"phila-text-field-input has-text-body-default",placeholder:l.placeholder},e.unref(o)),null,16,Pt),[[e.vModelDynamic,m.value]])])]),m.value!=""?(e.openBlock(),e.createBlock(e.unref(Lt),{key:1,variant:"standard",size:"small","icon-only":"","icon-definition":e.unref(Bt),onClick:b[1]||(b[1]=y=>m.value="")},null,8,["icon-definition"])):e.createCommentVNode("",!0),l.trailingIcon?(e.openBlock(),e.createBlock(e.unref(U.Icon),{key:2,size:"small","icon-class":l.trailingIcon,inline:"",decorative:""},null,8,["icon-class"])):e.createCommentVNode("",!0),e.renderSlot(h.$slots,"trailing-action")])],2),l.supportingText?(e.openBlock(),e.createElementBlock("div",zt,e.toDisplayString(l.supportingText),1)):e.createCommentVNode("",!0),r.value?(e.openBlock(),e.createElementBlock("div",Tt,[e.createVNode(e.unref(U.Icon),{"icon-definition":e.unref(St),size:"small",inline:"",decorative:""},null,8,["icon-definition"]),e.createTextVNode(" "+e.toDisplayString(r.value),1)])):e.createCommentVNode("",!0)],2))}});var Ft={prefix:"fas",iconName:"filter",icon:[512,512,[],"f0b0","M32 64C19.1 64 7.4 71.8 2.4 83.8S.2 109.5 9.4 118.6L192 301.3 192 416c0 8.5 3.4 16.6 9.4 22.6l64 64c9.2 9.2 22.9 11.9 34.9 6.9S320 492.9 320 480l0-178.7 182.6-182.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 64 480 64L32 64z"]},Mt={prefix:"fas",iconName:"caret-right",icon:[256,512,[],"f0da","M249.3 235.8c10.2 12.6 9.5 31.1-2.2 42.8l-128 128c-9.2 9.2-22.9 11.9-34.9 6.9S64.5 396.9 64.5 384l0-256c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l128 128 2.2 2.4z"]},It={prefix:"fas",iconName:"caret-left",icon:[256,512,[],"f0d9","M7.7 235.8c-10.3 12.6-9.5 31.1 2.2 42.8l128 128c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-256c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-128 128-2.2 2.4z"]},Xe={prefix:"fas",iconName:"xmark",icon:[384,512,[128473,10005,10006,10060,215,"close","multiply","remove","times"],"f00d","M55.1 73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L147.2 256 9.9 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192.5 301.3 329.9 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.8 256 375.1 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192.5 210.7 55.1 73.4z"]},Ot={prefix:"fas",iconName:"bars",icon:[448,512,["navicon"],"f0c9","M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"]},Dt={prefix:"fas",iconName:"circle-info",icon:[512,512,["info-circle"],"f05a","M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM224 160a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm-8 64l48 0c13.3 0 24 10.7 24 24l0 88 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l24 0 0-64-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z"]};const Rt={class:"layer-panel"},Zt={key:0,class:"search-box"},At={key:1,class:"topics-container"},Ut={class:"layer-row"},Wt=["href","aria-label"],jt={key:1,class:"metadata-placeholder"},qt=["checked","disabled","onChange"],Gt={class:"layer-title"},Ht={key:0,class:"loading-indicator",role:"status"},Jt=["aria-label"],Kt={key:2,class:"zoom-indicator"},Qt={key:0,class:"opacity-control"},Xt=["for"],Yt=["id","value","aria-label","onInput"],eo=["aria-label"],to={class:"legend-label"},oo={key:0,class:"no-results"},no=e.defineComponent({__name:"LayerPanel",props:{layerList:{},visibleLayers:{},layerOpacities:{},loadingLayers:{},layerErrors:{},currentZoom:{},searchQuery:{},layerMetadata:{},mode:{default:"flat"},showSearch:{type:Boolean,default:!0},showOpacity:{type:Boolean,default:!0},showLegend:{type:Boolean,default:!0},searchPlaceholder:{default:"Filter layers..."}},emits:["toggleLayer","setOpacity","updateSearch"],setup(t,{emit:a}){const o=t,l=a,r=e.computed(()=>{if(!o.searchQuery.trim())return o.layerList;const f=o.searchQuery.toLowerCase();return o.layerList.filter(p=>p.config.title.toLowerCase().includes(f))});function i(f){let p=f.split("?")[0]||f;return p=p.replace(/\/query$/,""),p=p.replace(/\/$/,""),p.toLowerCase()}function u(f){const p=i(f);return o.layerMetadata[p]||null}const k=e.computed(()=>o.layerList.some(f=>u(f.config.url)));function m(f){return o.visibleLayers.has(f)}function E(f){return o.layerOpacities[f]??1}function v(f){return o.loadingLayers.has(f)}function C(f){return o.layerErrors[f]||null}function c(f){const p=o.currentZoom,w=f.minZoom,V=f.maxZoom;return!(w!==void 0&&p<w||V!==void 0&&p>V)}const h=e.computed({get:()=>o.searchQuery,set:f=>l("updateSearch",f)});function b(f){l("toggleLayer",f)}function y(f,p){const w=p.target,V=parseFloat(w.value);l("setOpacity",f,V)}return(f,p)=>(e.openBlock(),e.createElementBlock("div",Rt,[t.showSearch?(e.openBlock(),e.createElementBlock("div",Zt,[e.createVNode(e.unref(_t),{modelValue:h.value,"onUpdate:modelValue":p[0]||(p[0]=w=>h.value=w),placeholder:t.searchPlaceholder,"class-name":"layer-search-field"},{"trailing-action":e.withCtx(()=>[e.createVNode(e.unref(U.Icon),{"icon-definition":e.unref(Ft),size:"small",inline:"",decorative:""},null,8,["icon-definition"])]),_:1},8,["modelValue","placeholder"])])):e.createCommentVNode("",!0),t.mode==="topics"?(e.openBlock(),e.createElementBlock("div",At,[e.renderSlot(f.$slots,"topics",{},()=>[p[2]||(p[2]=e.createElementVNode("div",{class:"no-topics"},' No topic components provided. Use the "topics" slot to add TopicAccordion components. ',-1))],!0)])):(e.openBlock(),e.createElementBlock("div",{key:2,class:e.normalizeClass(["layer-list",{"has-metadata":k.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,w=>(e.openBlock(),e.createElementBlock("div",{key:w.config.id,class:"layer-item"},[e.createElementVNode("div",Ut,[u(w.config.url)?(e.openBlock(),e.createElementBlock("a",{key:0,href:u(w.config.url)||"",target:"_blank",rel:"noopener noreferrer",class:"metadata-link","aria-label":"View metadata for "+w.config.title,onClick:p[1]||(p[1]=e.withModifiers(()=>{},["stop"]))},[e.createVNode(e.unref(U.Icon),{"icon-definition":e.unref(Dt),size:"small",inline:"",decorative:""},null,8,["icon-definition"])],8,Wt)):k.value?(e.openBlock(),e.createElementBlock("span",jt)):e.createCommentVNode("",!0),e.createElementVNode("label",{class:e.normalizeClass(["layer-checkbox",{"layer-unavailable":!c(w.config),"layer-error":C(w.config.id)}])},[e.createElementVNode("input",{type:"checkbox",checked:m(w.config.id),disabled:!c(w.config),onChange:V=>b(w.config.id)},null,40,qt),e.createElementVNode("span",Gt,[e.createTextVNode(e.toDisplayString(w.config.title)+" ",1),v(w.config.id)?(e.openBlock(),e.createElementBlock("span",Ht," Loading... ")):e.createCommentVNode("",!0),C(w.config.id)?(e.openBlock(),e.createElementBlock("span",{key:1,class:"error-indicator","aria-label":C(w.config.id)||"Error",role:"status"}," Error ",8,Jt)):e.createCommentVNode("",!0),c(w.config)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",Kt," (zoom in) "))])],2)]),t.showOpacity&&m(w.config.id)?(e.openBlock(),e.createElementBlock("div",Qt,[e.createElementVNode("label",{class:"opacity-label",for:"opacity-"+w.config.id}," Opacity: "+e.toDisplayString(Math.round(E(w.config.id)*100))+"% ",9,Xt),e.createElementVNode("input",{id:"opacity-"+w.config.id,type:"range",min:"0",max:"1",step:"0.05",value:E(w.config.id),"aria-label":"Opacity for "+w.config.title,class:"opacity-slider",onInput:V=>y(w.config.id,V)},null,40,Yt)])):e.createCommentVNode("",!0),t.showLegend&&m(w.config.id)&&w.config.legend?.length?(e.openBlock(),e.createElementBlock("ul",{key:1,class:"layer-legend","aria-label":"Legend for "+w.config.title},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(w.config.legend,(V,N)=>(e.openBlock(),e.createElementBlock("li",{key:N,class:"legend-item"},[V.type==="circle"?(e.openBlock(),e.createElementBlock("span",{key:0,class:"legend-symbol legend-circle",style:e.normalizeStyle({backgroundColor:V.color}),"aria-hidden":"true"},null,4)):V.type==="line"?(e.openBlock(),e.createElementBlock("span",{key:1,class:"legend-symbol legend-line",style:e.normalizeStyle({backgroundColor:V.color,height:`${V.width||2}px`}),"aria-hidden":"true"},null,4)):V.type==="fill"?(e.openBlock(),e.createElementBlock("span",{key:2,class:"legend-symbol legend-fill",style:e.normalizeStyle({backgroundColor:V.color}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),e.createElementVNode("span",to,e.toDisplayString(V.label),1)]))),128))],8,eo)):e.createCommentVNode("",!0)]))),128)),r.value.length===0?(e.openBlock(),e.createElementBlock("div",oo,'No layers match "'+e.toDisplayString(t.searchQuery)+'"',1)):e.createCommentVNode("",!0)],2))]))}}),nt=be(no,[["__scopeId","data-v-0a3d0d7e"]]);function z(t){if(!t||!Array.isArray(t)||t.length<3)return"#888888";const a=t[0],o=t[1],l=t[2],i=(t[3]??255)/255;return i===1?`#${a.toString(16).padStart(2,"0")}${o.toString(16).padStart(2,"0")}${l.toString(16).padStart(2,"0")}`:`rgba(${a}, ${o}, ${l}, ${i.toFixed(2)})`}function ne(t){return t!==void 0?t:1}const lo=559082264;function Ye(t){return!t||t<=0?null:Math.round(Math.log2(lo/t)*100)/100}function ao(t,a){const o={};if(t&&t>0){const l=Ye(t);l!==null&&(o.minZoom=l)}if(a&&a>0){const l=Ye(a);l!==null&&(o.maxZoom=l)}return o}function Fe(t){if(!t)return"fill";switch(t.type){case"esriSFS":return"fill";case"esriSLS":return"line";case"esriSMS":return"circle";case"esriPMS":return"circle";case"esriPFS":return"fill";default:return"fill"}}function re(t){return!(!t||t.style==="esriSLSNull"||t.color===null||t.width===0||t.color&&t.color[3]===0)}function qe(t){return String(t)}function lt(t,a,o){const l=t.symbol,r=Fe(l);let i={},u=[],k=null;if(r==="fill"&&l){const m=l.color===null?0:l.color?.[3]??255,E=m===0?"rgba(0, 0, 0, 0)":z(l.color),v=m===0?0:m<255?1:ne(a);if(i={"fill-color":E,"fill-opacity":v},re(l.outline)){const C=l.outline.width||1;k={"line-color":z(l.outline.color),"line-width":C}}u=[{type:"fill",color:z(l.color),label:t.label||"Feature"}]}else if(r==="line"&&l)i={"line-color":z(l.color),"line-width":l.width||1,"line-opacity":ne(a)},u=[{type:"line",color:z(l.color),width:l.width||1,label:t.label||"Feature"}];else if(r==="circle"&&l){const m=Math.round((l.size||6)*.71*100)/100;i={"circle-color":z(l.color),"circle-radius":m,"circle-opacity":ne(a)},re(l.outline)&&(i["circle-stroke-color"]=z(l.outline.color),i["circle-stroke-width"]=l.outline.width||1),u=[{type:"circle",color:z(l.color),label:t.label||"Feature"}]}return{paint:i,legend:u,geomType:r,outlinePaint:k}}function ro(t,a,o){const l=t.field1.toLowerCase(),r=t.uniqueValueInfos||[],i=t.defaultSymbol;if(r.length===0)return lt({...t,symbol:i},a);const u=r[0]?.symbol||i,k=Fe(u);let m={};const E=[];let v=null;if(k==="fill"){const C=["match",["to-string",["get",l]]];for(const c of r){C.push(qe(c.value)),C.push(z(c.symbol?.color));const h=String(c.value),y=o?.get(h)||c.label||h;E.push({type:"fill",color:z(c.symbol?.color),label:y})}if(C.push(i?z(i.color):"rgba(0, 0, 0, 0)"),m={"fill-color":C,"fill-opacity":ne(a)},re(u?.outline)){const c=Math.max(u.outline.width||1,1);v={"line-color":z(u.outline.color),"line-width":c}}}else if(k==="line"){const C=["match",["to-string",["get",l]]];for(const c of r){C.push(qe(c.value)),C.push(z(c.symbol?.color));const h=String(c.value),y=o?.get(h)||c.label||h;E.push({type:"line",color:z(c.symbol?.color),width:c.symbol?.width||1,label:y})}C.push(i?z(i.color):"rgba(0, 0, 0, 0)"),m={"line-color":C,"line-width":u?.width||2,"line-opacity":ne(a)}}else if(k==="circle"){const C=["match",["to-string",["get",l]]];for(const h of r){C.push(qe(h.value)),C.push(z(h.symbol?.color));const b=String(h.value),f=o?.get(b)||h.label||b;E.push({type:"circle",color:z(h.symbol?.color),label:f})}C.push(i?z(i.color):"rgba(0, 0, 0, 0)");const c=Math.round((u?.size||6)*.71*100)/100;m={"circle-color":C,"circle-radius":c,"circle-opacity":ne(a)},re(u?.outline)&&(m["circle-stroke-color"]=z(u.outline.color),m["circle-stroke-width"]=u.outline.width||1)}return{paint:m,legend:E,geomType:k,outlinePaint:v}}function io(t,a){const o=t.field.toLowerCase(),l=t.classBreakInfos||[],r=t.visualVariables?.find(v=>v.type==="colorInfo");if(r?.stops&&r.stops.length>0)return so(r,o,t,a);if(l.length===0)return{paint:{},legend:[],geomType:"fill",outlinePaint:null};const i=l[0]?.symbol,u=Fe(i);let k={};const m=[];let E=null;if(u==="fill"){const v=["step",["get",o]];v.push(z(l[0]?.symbol?.color));for(let C=0;C<l.length;C++){const c=l[C];C>0&&(v.push(l[C-1].classMaxValue),v.push(z(c.symbol?.color))),m.push({type:"fill",color:z(c.symbol?.color),label:c.label||`${c.classMaxValue}`})}if(k={"fill-color":v,"fill-opacity":ne(a)},re(i?.outline)){const C=i.outline.width||1;E={"line-color":z(i.outline.color),"line-width":C}}}else if(u==="line"){const v=["step",["get",o]];v.push(z(l[0]?.symbol?.color));let C=t.minValue??0;for(let h=0;h<l.length;h++){const b=l[h];h>0&&(v.push(l[h-1].classMaxValue),v.push(z(b.symbol?.color))),m.push({type:"line",color:z(b.symbol?.color),width:b.symbol?.width||i?.width||2,label:b.label||`${C} - ${b.classMaxValue}`}),C=b.classMaxValue+1}const c=i?.width||2;k={"line-color":v,"line-width":c,"line-opacity":ne(a)}}return{paint:k,legend:m,geomType:u,outlinePaint:E}}function so(t,a,o,l){const r=t.stops||[];if(r.length===0)return{paint:{},legend:[],geomType:"fill",outlinePaint:null};const i=o.classBreakInfos?.[0]?.symbol||o.defaultSymbol,u=Fe(i);let k={};const m=[];let E=null;if(u==="fill"){const v=["interpolate",["linear"],["get",a]];for(const c of r)v.push(c.value),v.push(z(c.color)),m.push({type:"fill",color:z(c.color),label:c.label||`${c.value}`});if(k={"fill-color":["case",["==",["get",a],null],"rgba(0, 0, 0, 0)",v],"fill-opacity":ne(l)},re(i?.outline)){const c=i.outline.width||1;E={"line-color":z(i.outline.color),"line-width":c}}}return{paint:k,legend:m,geomType:u,outlinePaint:E}}function co(t,a,o,l){if(!t?.renderer)return{paint:{},legend:[],geomType:"fill",outlinePaint:null};const r=t.renderer;switch(r.type){case"simple":return lt(r,a);case"uniqueValue":return ro(r,a,o);case"classBreaks":return io(r,a);default:return{paint:{},legend:[],geomType:"fill",outlinePaint:null}}}function uo(t){if(!t)return null;const a=(t.title||"").replace(/\{([^}]+)\}/g,(i,u)=>`{${u.toLowerCase()}}`),l=(t.fieldInfos||[]).filter(i=>i.visible===!0).map(i=>{const u={field:i.fieldName.toLowerCase(),label:i.label||i.fieldName};return i.format&&(u.format={},i.format.dateFormat&&(u.format.dateFormat=i.format.dateFormat),i.format.digitSeparator!==void 0&&(u.format.digitSeparator=i.format.digitSeparator),i.format.places!==void 0&&(u.format.places=i.format.places),Object.keys(u.format).length===0&&delete u.format),u}),r={title:a,fields:l};return t.showTime&&(r.showTime=!0),r}function fo(t){return t?.definitionExpression}function po(t){return(t.includes("_")?t.split("_").slice(1).join(" "):t).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function mo(t){return t.includes("_")?t.split("_").slice(1).join(" "):t}function yo(t){const a=new Map;if(!t)return a;const o=t.split(`
2
- `),l=/^(\d{1,3})\s+(.+)$/;for(const r of o){const i=r.trim().match(l);if(i){const[,u,k]=i;u&&k&&a.set(u,k.trim())}}return a}async function go(t){try{const a=await fetch(`${t}?f=json`);if(!a.ok)return null;const o=await a.json();return o.drawingInfo?{drawingInfo:o.drawingInfo,description:o.description}:null}catch{return null}}async function He(t){const a=t.operationalLayers||[],o=[],l=["Zoning and Planning_Land Use"];for(const r of a)if(r.url&&!r.title?.toLowerCase().includes("(under construction)"))try{let i=r.layerDefinition?.drawingInfo,u;const k=!i||!i.renderer,m=l.includes(r.title),E=i?.renderer?.uniqueValueInfos?.[0]?.symbol?.outline||i?.renderer?.defaultSymbol?.outline;if((k||m)&&r.url){const $=await go(r.url);if($){if(i=$.drawingInfo,E&&re(E)&&i?.renderer){const _=i.renderer,Q=_.uniqueValueInfos?.[0]?.symbol?.outline||_.defaultSymbol?.outline;if(!re(Q)){for(const X of _.uniqueValueInfos||[])X.symbol&&(X.symbol.outline=E);_.defaultSymbol&&(_.defaultSymbol.outline=E)}}$.description&&(u=yo($.description),u.size>0)}}const{paint:v,legend:C,geomType:c,outlinePaint:h}=co(i,r.opacity,u,r.title),b=uo(r.popupInfo),y=fo(r.layerDefinition),f=ao(r.layerDefinition?.minScale,r.layerDefinition?.maxScale),p=po(r.title),w=mo(r.title),V=r.opacity??1,N={id:p,title:w,type:c,url:r.url,opacity:V,paint:v,legend:C,popup:b};y&&(N.where=y),f.minZoom!==void 0&&(N.minZoom=f.minZoom),f.maxZoom!==void 0&&(N.maxZoom=f.maxZoom),h&&(N.outlinePaint=h),o.push(N)}catch{}return o.sort((r,i)=>r.title.localeCompare(i.title)),o}const et={},Je="376af635c84643cd816a8c5d017a53aa",ho=Je;function Me(t,a){let o=`https://www.arcgis.com/sharing/rest/content/items/${t}/data?f=json`;return a&&(o+=`&token=${a}`),o}function vo(){return Me(Je)}const ze=new Map,Ee=new Map;function at(t){t?(ze.delete(t),Ee.delete(t)):(ze.clear(),Ee.clear())}let Pe,tt=0;async function bo(){const t=typeof{url:typeof document>"u"?require("url").pathToFileURL(__filename).href:he&&he.tagName.toUpperCase()==="SCRIPT"&&he.src||new URL("index.js",document.baseURI).href}<"u"&&et?.VITE_AGO_USERNAME,a=typeof{url:typeof document>"u"?require("url").pathToFileURL(__filename).href:he&&he.tagName.toUpperCase()==="SCRIPT"&&he.src||new URL("index.js",document.baseURI).href}<"u"&&et?.VITE_AGO_PASSWORD;if(!(!t||!a)){if(Pe&&Date.now()<tt-3e5)return Pe;try{const l=await(await fetch("https://www.arcgis.com/sharing/rest/generateToken",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({f:"json",username:t,password:a,referer:window.location.origin||"https://localhost",expiration:"120"})})).json();return l.error?void 0:(Pe=l.token,tt=l.expires,Pe)}catch{return}}}async function ko(t,a){const o=Me(t,a),l=await fetch(o,{cache:"no-store"});if(!l.ok)throw new Error(`Failed to fetch WebMap: ${l.status} ${l.statusText}`);const r=await l.json();if(r.error)throw new Error(`ArcGIS error: ${r.error.message||r.error.code||"Unknown error"}`);return r}async function wo(t){try{const a=await bo(),o=await ko(t,a);return await He(o)}catch(a){throw new Error(`Failed to load dynamic layer configs: ${a instanceof Error?a.message:"Unknown error"}`)}}async function Te(t=Je){const a=ze.get(t);if(a)return a;const o=Ee.get(t);if(o)return o;const l=(async()=>{try{const r=await wo(t);return ze.set(t,r),r}finally{Ee.delete(t)}})();return Ee.set(t,l),l}function rt(t){const a=e.ref({}),o=new Map;for(const c of t)a.value[c.id]={data:null,loading:!1,error:null,lastFetched:null};async function l(c){const h=c.id;a.value={...a.value,[h]:{data:a.value[h]?.data??null,lastFetched:a.value[h]?.lastFetched??null,loading:!0,error:null}};try{let b;if(c.type==="http-get"){const y=await fetch(c.url,{method:"GET",...c.options});if(!y.ok)throw new Error(`HTTP ${y.status}: ${y.statusText}`);b=await y.json()}else if(c.type==="http-post"){const y=await fetch(c.url,{method:"POST",...c.options});if(!y.ok)throw new Error(`HTTP ${y.status}: ${y.statusText}`);b=await y.json()}else if(c.type==="esri"){const f=`${c.url.replace(/\/$/,"")}/query?where=1%3D1&outFields=*&returnGeometry=false&f=json`,p=await fetch(f,c.options);if(!p.ok)throw new Error(`HTTP ${p.status}: ${p.statusText}`);b=(await p.json()).features?.map(V=>V.attributes)||[]}else throw new Error(`Unknown data source type: ${c.type}`);c.transform&&(b=c.transform(b)),a.value={...a.value,[h]:{data:b,loading:!1,error:null,lastFetched:Date.now()}}}catch(b){const y=b instanceof Error?b.message:"Unknown error";a.value={...a.value,[h]:{data:a.value[h]?.data??null,lastFetched:a.value[h]?.lastFetched??null,loading:!1,error:y}}}}async function r(){await Promise.all(t.map(c=>l(c)))}async function i(c){const h=t.find(b=>b.id===c);h&&await l(h)}function u(c){return a.value[c]?.data??null}const k=e.computed(()=>Object.values(a.value).some(c=>c.loading));function m(c){return a.value[c]?.loading??!1}function E(c){return a.value[c]?.error??null}function v(){for(const c of t)if(c.pollInterval&&c.pollInterval>0){const h=window.setInterval(()=>{l(c)},c.pollInterval);o.set(c.id,h)}}function C(){for(const[,c]of o)window.clearInterval(c);o.clear()}return e.onMounted(()=>{r(),v()}),e.onUnmounted(()=>{C()}),{state:e.readonly(a),isLoading:k,fetchAll:r,refetch:i,getData:u,isSourceLoading:m,getError:E,stopPolling:C}}const Lo={class:"layerboard-layout"},Co=["aria-expanded"],So={key:0,class:"layerboard-subtitle"},Eo={class:"layerboard-mobile-menu-content"},Bo={class:"layerboard-main"},xo={key:0,class:"layerboard-loading",role:"status","aria-live":"polite"},No={key:1,class:"layerboard-error",role:"alert"},Vo=["aria-expanded","aria-label"],$o={key:0},Po={key:1},zo={class:"sr-only","aria-live":"polite"},To=e.defineComponent({__name:"Layerboard",props:{title:{},subtitle:{},webMapId:{},themeColor:{default:"#0f4d90"},cyclomediaConfig:{},pictometryCredentials:{},showDefaultSidebar:{type:Boolean,default:!0},sidebarWidth:{default:"30%"},sidebarLabel:{default:"Layers"},mapLabel:{default:"Map"},fetchMetadata:{type:Boolean,default:!1},tiledLayers:{default:()=>[]},dataSources:{default:()=>[]},layerStyleOverrides:{default:()=>({})},popupOverrides:{default:()=>({})},basemapControlPosition:{default:"top-right"},navigationControlPosition:{default:"bottom-right"},geolocationControlPosition:{default:"bottom-right"},searchControlPosition:{default:"top-left"},drawControlPosition:{default:"bottom-left"},cyclomediaButtonPosition:{default:"top-right"},pictometryButtonPosition:{default:"top-right"},initialZoom:{},initialCenter:{}},emits:["configs-loaded","load-error","zoom"],setup(t,{expose:a,emit:o}){const l=t,r=o,i=e.ref([]),u=e.ref(!0),k=e.ref(null),m=e.ref(12),E=e.ref(""),v=e.ref(new Set),C=e.ref({}),c=e.ref(new Set),h=e.ref({}),b=e.ref({}),y=e.ref(new Set),f=e.ref({});function p(){const g={};for(const S of l.tiledLayers)g[S.id]=S.opacity??1;f.value=g}function w(g){y.value.has(g)?y.value.delete(g):y.value.add(g),y.value=new Set(y.value)}function V(g,S){S?y.value.add(g):y.value.delete(g),y.value=new Set(y.value)}function N(g,S){f.value={...f.value,[g]:S}}const $=l.dataSources.length>0?rt(l.dataSources):null,_=e.computed(()=>$?.state.value??{}),Q=e.computed(()=>$?.isLoading.value??!1);function X(g){return $?.getData(g)??null}function ue(g){return $?.refetch(g)??Promise.resolve()}e.provide("layerboard-layers",e.readonly(i)),e.provide("layerboard-visible",v),e.provide("layerboard-opacities",C),e.provide("layerboard-loading",e.readonly(c)),e.provide("layerboard-errors",e.readonly(h)),e.provide("layerboard-zoom",e.readonly(m)),e.provide("layerboard-toggle-layer",de),e.provide("layerboard-set-layer-visible",le),e.provide("layerboard-set-layers-visible",fe),e.provide("layerboard-set-opacity",ae),e.provide("layerboard-tiled-layers",e.readonly(e.computed(()=>l.tiledLayers))),e.provide("layerboard-visible-tiled",y),e.provide("layerboard-tiled-opacities",f),e.provide("layerboard-toggle-tiled",w),e.provide("layerboard-set-tiled-opacity",N),e.provide("layerboard-set-tiled-visible",V),e.provide("layerboard-data-sources-state",_),e.provide("layerboard-data-sources-loading",Q),e.provide("layerboard-get-data-source",X),e.provide("layerboard-refetch-data-source",ue);const Ie=e.computed(()=>({backgroundColor:l.themeColor})),Oe=e.computed(()=>({backgroundColor:l.themeColor})),ke=e.computed(()=>({backgroundColor:l.themeColor})),Be=e.computed(()=>({width:J.value?"0":l.sidebarWidth}));async function we(){try{u.value=!0,k.value=null;const S=(await Te(l.webMapId)).map(I=>{let R=I;const oe=l.layerStyleOverrides[I.id];oe&&(R={...R,paint:oe.paint??R.paint,outlinePaint:oe.outlinePaint??R.outlinePaint,legend:oe.legend??R.legend,type:oe.type??R.type});const ge=l.popupOverrides[I.id];return ge&&R.popup&&(R={...R,popup:{...R.popup,...ge}}),R});i.value=S.map(I=>({config:I,component:I.type}));const D={};S.forEach(I=>{D[I.id]=I.opacity??1}),C.value=D,r("configs-loaded",S)}catch(g){const S=g instanceof Error?g.message:"Failed to load layer configurations";k.value=S,r("load-error",S)}finally{u.value=!1}}function xe(g){let S=g.split("?")[0]||g;return S=S.replace(/\/query$/,""),S=S.replace(/\/$/,""),S.toLowerCase()}async function De(){if(l.fetchMetadata)try{const g="https://phl.carto.com/api/v2/sql?q="+encodeURIComponent("select url_text, COALESCE(representation, '') as representation from phl.knack_metadata_reps_endpoints_join WHERE ( format = 'API' OR format = 'GeoService' ) AND url_text IS NOT null"),S=await fetch(g);if(!S.ok)return;const D=await S.json(),I={};for(const R of D.rows||[])if(R.url_text&&R.representation){const oe=xe(R.url_text),ge=`https://metadata.phila.gov/#home/representationdetails/${R.representation}/`;I[oe]=ge}b.value=I}catch{}}function Re(g){m.value=g,r("zoom",g)}function de(g){v.value.has(g)?v.value.delete(g):v.value.add(g),v.value=new Set(v.value)}function le(g,S){S?v.value.add(g):v.value.delete(g),v.value=new Set(v.value)}function fe(g,S){for(const D of g)S?v.value.add(D):v.value.delete(D);v.value=new Set(v.value)}function ae(g,S){C.value={...C.value,[g]:S}}function Ze(g,S){S?c.value.add(g):c.value.delete(g),c.value=new Set(c.value)}function H(g,S){if(S)h.value={...h.value,[g]:S};else{const D={...h.value};delete D[g],h.value=D}}function pe(g){E.value=g}const W=e.ref(null),ie=e.ref(null),Ae=e.ref(null),Y=e.ref(null),Le=e.ref(null),Ce=e.ref(null),Ne=e.ref(null),ee=e.ref("map");function me(){ee.value=ee.value==="sidebar"?"map":"sidebar",e.nextTick(()=>{ee.value==="sidebar"&&W.value?.focus()})}const j=e.ref(!1);function Ve(){j.value=!j.value,j.value&&e.nextTick(()=>{Y.value?.focus()})}function se(){j.value=!1,e.nextTick(()=>{ie.value?.focus()})}const J=e.ref(!1);function ce(){J.value=!J.value}const K=e.ref(!1),Se=e.ref(null);function te(){Se.value=document.activeElement,K.value=!0,e.nextTick(()=>{Ne.value?.focus()})}function q(){K.value=!1,e.nextTick(()=>{Se.value?.focus(),Se.value=null})}function ye(g){g.target.classList.contains("layerboard-modal-backdrop")&&q()}function Ue(g){if(g.key==="Escape"){se();return}if(g.key==="Tab"&&Le.value){const S=Array.from(Le.value.querySelectorAll('a[href], button:not([disabled]), textarea, input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])'));if(S.length===0)return;const D=S[0],I=S[S.length-1];g.shiftKey?document.activeElement===D&&(g.preventDefault(),I.focus()):document.activeElement===I&&(g.preventDefault(),D.focus())}}function We(g){if(g.key==="Escape"){q();return}if(g.key==="Tab"&&Ce.value){const S=Array.from(Ce.value.querySelectorAll('a[href], button:not([disabled]), textarea, input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])'));if(S.length===0)return;const D=S[0],I=S[S.length-1];g.shiftKey?document.activeElement===D&&(g.preventDefault(),I.focus()):document.activeElement===I&&(g.preventDefault(),D.focus())}}e.provide("layerboard-open-modal",te),e.provide("layerboard-close-modal",q),e.provide("layerboard-is-modal-open",e.readonly(K)),a({layerList:i,visibleLayers:v,layerOpacities:C,loadingLayers:c,layerErrors:h,currentZoom:m,toggleLayer:de,setLayerVisible:le,setLayersVisible:fe,setLayerOpacity:ae,reloadConfigs:we,clearCache:()=>at(l.webMapId),visibleTiledLayers:y,tiledLayerOpacities:f,toggleTiledLayer:w,setTiledLayerVisible:V,setTiledLayerOpacity:N,dataSourcesState:_,dataSourcesLoading:Q,getDataSourceData:X,refetchDataSource:ue,isModalOpen:K,openModal:te,closeModal:q});function $e(g){g.key==="Escape"&&j.value&&se()}return e.onMounted(()=>{we(),De(),p(),document.addEventListener("keydown",$e)}),e.onBeforeUnmount(()=>{document.removeEventListener("keydown",$e)}),(g,S)=>(e.openBlock(),e.createElementBlock("div",Lo,[S[5]||(S[5]=e.createElementVNode("a",{href:"#main-content",class:"skip-to-main-content-link"},"Skip to main content",-1)),e.createElementVNode("header",{class:"layerboard-header",style:e.normalizeStyle(Ie.value)},[S[1]||(S[1]=e.createElementVNode("a",{href:"https://www.phila.gov/",class:"layerboard-logo layerboard-desktop-only"},[e.createElementVNode("img",{src:"https://standards.phila.gov/img/logo/city-of-philadelphia-yellow-white.png",alt:"City of Philadelphia"})],-1)),S[2]||(S[2]=e.createElementVNode("span",{class:"layerboard-header-divider layerboard-desktop-only","aria-hidden":"true"},null,-1)),e.createElementVNode("button",{ref_key:"hamburgerRef",ref:ie,class:"layerboard-hamburger layerboard-mobile-only","aria-expanded":j.value,"aria-label":"Toggle menu",onClick:Ve},[e.createVNode(e.unref(U.Icon),{"icon-definition":e.unref(Ot),size:"medium",inline:"",decorative:""},null,8,["icon-definition"])],8,Co),e.renderSlot(g.$slots,"header",{},()=>[e.createElementVNode("h1",null,e.toDisplayString(t.title),1),t.subtitle?(e.openBlock(),e.createElementBlock("span",So,e.toDisplayString(t.subtitle),1)):e.createCommentVNode("",!0)],!0),j.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"mobileMenuRef",ref:Le,class:"layerboard-mobile-menu",role:"dialog","aria-modal":"true","aria-label":"Site menu",style:e.normalizeStyle({backgroundColor:t.themeColor}),onKeydown:Ue},[e.createElementVNode("div",Eo,[e.renderSlot(g.$slots,"footer",{openModal:te,closeModal:q,isModalOpen:K.value},()=>[S[0]||(S[0]=e.createTextVNode(" City of Philadelphia ",-1))],!0)]),e.createElementVNode("button",{ref_key:"mobileMenuCloseRef",ref:Y,class:"layerboard-mobile-menu-close","aria-label":"Close menu",onClick:se},[e.createVNode(e.unref(U.Icon),{"icon-definition":e.unref(Xe),size:"medium",decorative:""},null,8,["icon-definition"])],512)],36)):e.createCommentVNode("",!0),j.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:"layerboard-mobile-menu-backdrop",onClick:se})):e.createCommentVNode("",!0)],4),e.createElementVNode("div",Bo,[u.value?(e.openBlock(),e.createElementBlock("div",xo,[e.createElementVNode("div",{class:"layerboard-spinner",style:e.normalizeStyle({borderTopColor:t.themeColor})},null,4),e.createElementVNode("p",null,"Loading "+e.toDisplayString(t.title)+"...",1)])):k.value?(e.openBlock(),e.createElementBlock("div",No,[S[3]||(S[3]=e.createElementVNode("h2",null,"Error Loading Layers",-1)),e.createElementVNode("p",null,e.toDisplayString(k.value),1),e.createElementVNode("button",{class:"layerboard-retry-button",style:e.normalizeStyle({backgroundColor:t.themeColor}),onClick:we}," Retry ",4)])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("aside",{id:"main-content",ref_key:"sidebarRef",ref:W,class:e.normalizeClass(["layerboard-sidebar",{"is-active":ee.value==="sidebar"}]),style:e.normalizeStyle(Be.value),"aria-label":"Map layers",tabindex:"-1"},[e.renderSlot(g.$slots,"sidebar",{layers:i.value,visibleLayers:v.value,layerOpacities:C.value,loadingLayers:c.value,layerErrors:h.value,currentZoom:m.value,toggleLayer:de,setLayerVisible:le,setLayersVisible:fe,setOpacity:ae,tiledLayers:t.tiledLayers,visibleTiledLayers:y.value,tiledLayerOpacities:f.value,toggleTiledLayer:w,setTiledLayerVisible:V,setTiledLayerOpacity:N,dataSourcesState:_.value,dataSourcesLoading:Q.value,getDataSource:X,refetchDataSource:ue},()=>[t.showDefaultSidebar?(e.openBlock(),e.createBlock(nt,{key:0,"layer-list":i.value,"visible-layers":v.value,"layer-opacities":C.value,"loading-layers":c.value,"layer-errors":h.value,"current-zoom":m.value,"search-query":E.value,"layer-metadata":b.value,onToggleLayer:de,onSetOpacity:ae,onUpdateSearch:pe},null,8,["layer-list","visible-layers","layer-opacities","loading-layers","layer-errors","current-zoom","search-query","layer-metadata"])):e.createCommentVNode("",!0)],!0)],6),e.createElementVNode("div",{role:"main","aria-label":"Map",class:e.normalizeClass(["layerboard-map",{"is-active":ee.value==="map"}])},[e.createVNode(ot,{"visible-layers":v.value,"layer-opacities":C.value,"layer-list":i.value,"tiled-layers":t.tiledLayers,"visible-tiled-layers":y.value,"tiled-layer-opacities":f.value,"cyclomedia-config":t.cyclomediaConfig,"pictometry-credentials":t.pictometryCredentials,"basemap-control-position":t.basemapControlPosition,"navigation-control-position":t.navigationControlPosition,"geolocation-control-position":t.geolocationControlPosition,"search-control-position":t.searchControlPosition,"draw-control-position":t.drawControlPosition,"cyclomedia-button-position":t.cyclomediaButtonPosition,"pictometry-button-position":t.pictometryButtonPosition,"initial-zoom":t.initialZoom,"initial-center":t.initialCenter,onZoom:Re,onLayerLoading:Ze,onLayerError:H},null,8,["visible-layers","layer-opacities","layer-list","tiled-layers","visible-tiled-layers","tiled-layer-opacities","cyclomedia-config","pictometry-credentials","basemap-control-position","navigation-control-position","geolocation-control-position","search-control-position","draw-control-position","cyclomedia-button-position","pictometry-button-position","initial-zoom","initial-center"])],2),e.createElementVNode("button",{class:e.normalizeClass(["layerboard-sidebar-toggle",{"is-collapsed":J.value}]),style:e.normalizeStyle({left:J.value?"0":l.sidebarWidth}),"aria-expanded":!J.value,"aria-label":J.value?"Expand sidebar":"Collapse sidebar",onClick:ce},[e.createVNode(e.unref(U.Icon),{"icon-definition":J.value?e.unref(Mt):e.unref(It),size:"medium",decorative:""},null,8,["icon-definition"])],14,Vo)],64))]),e.createElementVNode("button",{ref_key:"mobileToggleRef",ref:Ae,class:"layerboard-mobile-toggle",style:e.normalizeStyle(ke.value),onClick:me},[ee.value==="map"?(e.openBlock(),e.createElementBlock("span",$o,e.toDisplayString(t.sidebarLabel),1)):(e.openBlock(),e.createElementBlock("span",Po,e.toDisplayString(t.mapLabel),1))],4),e.createElementVNode("footer",{class:"layerboard-footer",style:e.normalizeStyle(Oe.value)},[e.renderSlot(g.$slots,"footer",{openModal:te,closeModal:q,isModalOpen:K.value},()=>[S[4]||(S[4]=e.createTextVNode(" City of Philadelphia ",-1))],!0)],4),K.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"layerboard-modal-backdrop",onClick:ye,onKeydown:We},[e.createElementVNode("div",{ref_key:"modalRef",ref:Ce,class:"layerboard-modal",role:"dialog","aria-modal":"true","aria-label":"Application information"},[e.createElementVNode("button",{ref_key:"modalCloseRef",ref:Ne,class:"layerboard-modal-close","aria-label":"Close modal",onClick:q},[e.createVNode(e.unref(U.Icon),{"icon-definition":e.unref(Xe),size:"medium",decorative:""},null,8,["icon-definition"])],512),e.renderSlot(g.$slots,"modal",{closeModal:q},void 0,!0)],512)],32)):e.createCommentVNode("",!0),e.createElementVNode("span",zo,e.toDisplayString(ee.value==="sidebar"?"Showing layers panel":"Showing map"),1)]))}}),_o=be(To,[["__scopeId","data-v-7eda3d02"]]),Fo=["aria-expanded"],Mo={key:0,class:"topic-icon"},Io={class:"topic-title"},Oo=e.defineComponent({__name:"TopicAccordion",props:{title:{},icon:{},expanded:{type:Boolean,default:!1},layerIds:{default:()=>[]},headerClass:{}},emits:["toggle","layerChange"],setup(t,{emit:a}){const o=t,l=a,r=e.ref(o.expanded),i=`topic-panel-${e.useId()}`,u=`topic-header-${e.useId()}`;e.watch(()=>o.expanded,m=>{r.value=m});function k(){r.value=!r.value,l("toggle",r.value)}return(m,E)=>{const v=e.resolveComponent("font-awesome-icon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["topic-accordion",{"is-expanded":r.value}])},[e.createElementVNode("button",{id:u,class:e.normalizeClass(["topic-header",t.headerClass]),type:"button","aria-expanded":r.value,"aria-controls":i,onClick:k},[t.icon||m.$slots.icon?(e.openBlock(),e.createElementBlock("span",Mo,[e.renderSlot(m.$slots,"icon",{},()=>[t.icon?(e.openBlock(),e.createBlock(v,{key:0,icon:["fas",t.icon],"aria-hidden":"true"},null,8,["icon"])):e.createCommentVNode("",!0)],!0)])):e.createCommentVNode("",!0),e.createElementVNode("span",Io,e.toDisplayString(t.title),1),e.createElementVNode("span",{class:e.normalizeClass(["topic-chevron",{"is-rotated":r.value}])},[...E[0]||(E[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},[e.createElementVNode("polyline",{points:"6 9 12 15 18 9"})],-1)])],2)],10,Fo),e.withDirectives(e.createElementVNode("div",{id:i,role:"region","aria-labelledby":u,class:"topic-content"},[e.renderSlot(m.$slots,"default",{},()=>[E[1]||(E[1]=e.createElementVNode("p",{class:"topic-empty"},"No content provided for this topic.",-1))],!0)],512),[[e.vShow,r.value]])],2)}}}),Do=be(Oo,[["__scopeId","data-v-9af09394"]]),Ro=["aria-label"],Zo=["checked","disabled","onChange"],Ao={class:"layer-title"},Uo={key:0,class:"loading-indicator",role:"status"},Wo=["aria-label"],jo={key:2,class:"zoom-indicator"},qo={class:"layer-title"},Go={key:0,class:"loading-indicator",role:"status"},Ho=["aria-label"],Jo={key:2,class:"zoom-indicator"},Ko={key:2,class:"opacity-control"},Qo=["for"],Xo=["id","value","aria-label","onInput"],Yo=["aria-label"],en={class:"legend-label"},tn={key:0,class:"empty-state"},on=e.defineComponent({__name:"LayerCheckboxSet",props:{layers:{},visibleLayerIds:{},layerOpacities:{default:()=>({})},loadingLayerIds:{default:()=>new Set},layerErrors:{default:()=>({})},currentZoom:{default:12},showOpacity:{type:Boolean,default:!0},showLegend:{type:Boolean,default:!0},groupLabel:{}},emits:["toggleLayer","setOpacity"],setup(t,{emit:a}){const o=t,l=a;function r(y){return o.visibleLayerIds.has(y)}function i(y){return o.layerOpacities[y]??1}function u(y){return o.loadingLayerIds.has(y)}function k(y){return o.layerErrors[y]||null}function m(y){const f=o.currentZoom,p=y.minZoom,w=y.maxZoom;return!(p!==void 0&&f<p||w!==void 0&&f>w)}function E(y){return y.displayOptions?.shouldShowCheckbox!==!1}function v(y){return o.showOpacity?y.displayOptions?.shouldShowSlider!==!1:!1}function C(y){return o.showLegend?y.displayOptions?.shouldShowLegendBox!==!1:!1}function c(y){return y.displayOptions?.layerNameChange||y.title}function h(y){l("toggleLayer",y)}function b(y,f){const p=f.target;l("setOpacity",y,parseFloat(p.value))}return(y,f)=>(e.openBlock(),e.createElementBlock("fieldset",{class:"layer-checkbox-set",role:"group","aria-label":t.groupLabel},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.layers,p=>(e.openBlock(),e.createElementBlock("div",{key:p.id,class:"layer-item"},[E(p)?(e.openBlock(),e.createElementBlock("label",{key:0,class:e.normalizeClass(["layer-checkbox",{"layer-unavailable":!m(p),"layer-error":k(p.id)}])},[e.createElementVNode("input",{type:"checkbox",checked:r(p.id),disabled:!m(p),onChange:w=>h(p.id)},null,40,Zo),e.createElementVNode("span",Ao,[e.createTextVNode(e.toDisplayString(c(p))+" ",1),u(p.id)?(e.openBlock(),e.createElementBlock("span",Uo," Loading... ")):e.createCommentVNode("",!0),k(p.id)?(e.openBlock(),e.createElementBlock("span",{key:1,class:"error-indicator","aria-label":k(p.id)||"Error",role:"status"}," Error ",8,Wo)):e.createCommentVNode("",!0),m(p)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",jo," (zoom in) "))])],2)):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["layer-label-only",{"layer-unavailable":!m(p),"layer-error":k(p.id)}])},[e.createElementVNode("span",qo,[e.createTextVNode(e.toDisplayString(c(p))+" ",1),u(p.id)?(e.openBlock(),e.createElementBlock("span",Go," Loading... ")):e.createCommentVNode("",!0),k(p.id)?(e.openBlock(),e.createElementBlock("span",{key:1,class:"error-indicator","aria-label":k(p.id)||"Error",role:"status"}," Error ",8,Ho)):e.createCommentVNode("",!0),m(p)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",Jo," (zoom in) "))])],2)),v(p)&&r(p.id)?(e.openBlock(),e.createElementBlock("div",Ko,[e.createElementVNode("label",{class:"opacity-label",for:"opacity-"+p.id}," Opacity: "+e.toDisplayString(Math.round(i(p.id)*100))+"% ",9,Qo),e.createElementVNode("input",{id:"opacity-"+p.id,type:"range",min:"0",max:"1",step:"0.05",value:i(p.id),"aria-label":"Opacity for "+c(p),class:"opacity-slider",onInput:w=>b(p.id,w)},null,40,Xo)])):e.createCommentVNode("",!0),C(p)&&r(p.id)&&p.legend?.length?(e.openBlock(),e.createElementBlock("ul",{key:3,class:"layer-legend","aria-label":"Legend for "+c(p)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.legend,(w,V)=>(e.openBlock(),e.createElementBlock("li",{key:V,class:"legend-item"},[w.type==="circle"?(e.openBlock(),e.createElementBlock("span",{key:0,class:"legend-symbol legend-circle",style:e.normalizeStyle({backgroundColor:w.color}),"aria-hidden":"true"},null,4)):w.type==="line"?(e.openBlock(),e.createElementBlock("span",{key:1,class:"legend-symbol legend-line",style:e.normalizeStyle({backgroundColor:w.color,height:`${w.width||2}px`}),"aria-hidden":"true"},null,4)):w.type==="fill"?(e.openBlock(),e.createElementBlock("span",{key:2,class:"legend-symbol legend-fill",style:e.normalizeStyle({backgroundColor:w.color}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),e.createElementVNode("span",en,e.toDisplayString(w.label),1)]))),128))],8,Yo)):e.createCommentVNode("",!0)]))),128)),t.layers.length===0?(e.openBlock(),e.createElementBlock("div",tn,"No layers available")):e.createCommentVNode("",!0)],8,Ro))}}),nn=be(on,[["__scopeId","data-v-55505629"]]),ln=["aria-label"],an=["name","checked","disabled","onChange"],rn={class:"layer-title"},sn={key:0,class:"loading-indicator",role:"status"},cn=["aria-label"],un={key:2,class:"zoom-indicator"},dn={key:0,class:"opacity-control"},fn=["for"],pn=["id","value","aria-label","onInput"],mn=["aria-label"],yn={class:"legend-label"},gn={key:0,class:"empty-state"},hn=e.defineComponent({__name:"LayerRadioButtonSet",props:{layers:{},visibleLayerIds:{},layerOpacities:{default:()=>({})},loadingLayerIds:{default:()=>new Set},layerErrors:{default:()=>({})},currentZoom:{default:12},showOpacity:{type:Boolean,default:!0},showLegend:{type:Boolean,default:!0},groupName:{default:"layer-radio-group"},groupLabel:{}},emits:["selectLayer","setOpacity"],setup(t,{emit:a}){const o=t,l=a;function r(b){return o.visibleLayerIds.has(b)}function i(b){return o.layerOpacities[b]??1}function u(b){return o.loadingLayerIds.has(b)}function k(b){return o.layerErrors[b]||null}function m(b){const y=o.currentZoom,f=b.minZoom,p=b.maxZoom;return!(f!==void 0&&y<f||p!==void 0&&y>p)}function E(b){return o.showOpacity?b.displayOptions?.shouldShowSlider!==!1:!1}function v(b){return o.showLegend?b.displayOptions?.shouldShowLegendBox!==!1:!1}function C(b){return b.displayOptions?.layerNameChange||b.title}function c(b){const y=o.layers.filter(f=>o.visibleLayerIds.has(f.id)&&f.id!==b).map(f=>f.id);l("selectLayer",b,y)}function h(b,y){const f=y.target;l("setOpacity",b,parseFloat(f.value))}return(b,y)=>(e.openBlock(),e.createElementBlock("div",{class:"layer-radio-set",role:"radiogroup","aria-label":t.groupLabel},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.layers,f=>(e.openBlock(),e.createElementBlock("div",{key:f.id,class:"layer-item"},[e.createElementVNode("label",{class:e.normalizeClass(["layer-radio",{"layer-unavailable":!m(f),"layer-error":k(f.id)}])},[e.createElementVNode("input",{type:"radio",name:t.groupName,checked:r(f.id),disabled:!m(f),onChange:p=>c(f.id)},null,40,an),e.createElementVNode("span",rn,[e.createTextVNode(e.toDisplayString(C(f))+" ",1),u(f.id)?(e.openBlock(),e.createElementBlock("span",sn," Loading... ")):e.createCommentVNode("",!0),k(f.id)?(e.openBlock(),e.createElementBlock("span",{key:1,class:"error-indicator","aria-label":k(f.id)||"Error",role:"status"}," Error ",8,cn)):e.createCommentVNode("",!0),m(f)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",un," (zoom in) "))])],2),E(f)&&r(f.id)?(e.openBlock(),e.createElementBlock("div",dn,[e.createElementVNode("label",{class:"opacity-label",for:"opacity-"+f.id}," Opacity: "+e.toDisplayString(Math.round(i(f.id)*100))+"% ",9,fn),e.createElementVNode("input",{id:"opacity-"+f.id,type:"range",min:"0",max:"1",step:"0.05",value:i(f.id),"aria-label":"Opacity for "+C(f),class:"opacity-slider",onInput:p=>h(f.id,p)},null,40,pn)])):e.createCommentVNode("",!0),v(f)&&r(f.id)&&f.legend?.length?(e.openBlock(),e.createElementBlock("ul",{key:1,class:"layer-legend","aria-label":"Legend for "+C(f)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.legend,(p,w)=>(e.openBlock(),e.createElementBlock("li",{key:w,class:"legend-item"},[p.type==="circle"?(e.openBlock(),e.createElementBlock("span",{key:0,class:"legend-symbol legend-circle",style:e.normalizeStyle({backgroundColor:p.color}),"aria-hidden":"true"},null,4)):p.type==="line"?(e.openBlock(),e.createElementBlock("span",{key:1,class:"legend-symbol legend-line",style:e.normalizeStyle({backgroundColor:p.color,height:`${p.width||2}px`}),"aria-hidden":"true"},null,4)):p.type==="fill"?(e.openBlock(),e.createElementBlock("span",{key:2,class:"legend-symbol legend-fill",style:e.normalizeStyle({backgroundColor:p.color}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),e.createElementVNode("span",yn,e.toDisplayString(p.label),1)]))),128))],8,mn)):e.createCommentVNode("",!0)]))),128)),t.layers.length===0?(e.openBlock(),e.createElementBlock("div",gn,"No layers available")):e.createCommentVNode("",!0)],8,ln))}}),vn=be(hn,[["__scopeId","data-v-5e01b240"]]);function bn(t){const a=e.ref([]),o=e.ref(new Set),l=e.ref({}),r=e.ref(new Set),i=e.ref({}),u=e.ref(""),k=e.ref(!1),m=e.ref(!1),E=e.ref(null),v=e.computed(()=>{if(!u.value.trim())return a.value;const N=u.value.toLowerCase();return a.value.filter($=>$.title.toLowerCase().includes(N))}),C=e.computed(()=>a.value.map(N=>({config:N,component:N.type})));async function c(){if(!m.value){k.value=!0,E.value=null;try{let N;t.mode==="dynamic"||!t.mode?t.webMapId?N=await h(t.webMapId):N=await Te():N=await Te(),a.value=N;const $={};N.forEach(_=>{$[_.id]=_.opacity??1}),l.value=$,m.value=!0}catch(N){E.value=N instanceof Error?N:new Error("Failed to initialize layerboard")}finally{k.value=!1}}}async function h(N){const $=Me(N),_=await fetch($,{cache:"no-store"});if(!_.ok)throw new Error(`Failed to fetch WebMap: ${_.status} ${_.statusText}`);const Q=await _.json();return He(Q)}function b(N){const $=new Set(o.value);$.has(N)?$.delete(N):$.add(N),o.value=$}function y(N,$){l.value={...l.value,[N]:Math.max(0,Math.min(1,$))}}function f(N){u.value=N}function p(N,$){const _=new Set(r.value);$?_.add(N):_.delete(N),r.value=_}function w(N,$){if($)i.value={...i.value,[N]:$};else{const _={...i.value};delete _[N],i.value=_}}function V(){a.value=[],o.value=new Set,l.value={},r.value=new Set,i.value={},u.value="",k.value=!1,m.value=!1,E.value=null}return{layerConfigs:e.readonly(a),visibleLayers:e.readonly(o),layerOpacities:e.readonly(l),loadingLayers:e.readonly(r),layerErrors:e.readonly(i),searchQuery:e.readonly(u),isLoading:e.readonly(k),isInitialized:e.readonly(m),error:e.readonly(E),filteredLayerConfigs:v,layerList:C,config:t,initialize:c,toggleLayer:b,setLayerOpacity:y,filterLayers:f,setLayerLoading:p,setLayerError:w,reset:V}}function kn(){const t=e.ref([]),a=e.ref(new Set),o=e.ref(new Set);function l(i){a.value.has(i)?a.value.delete(i):a.value.add(i)}function r(i){t.value=i}return{layers:e.computed(()=>t.value),visibleLayerIds:e.computed(()=>a.value),loadingLayerIds:e.computed(()=>o.value),toggleLayer:l,setLayers:r}}function it(t){const a=e.ref(null),o=e.ref(!1),l=e.ref(null),r=e.ref(0);async function i(m={}){o.value=!0,l.value=null;const E=t.pageSize||2e3;let v=0,C=[],c=!0;try{for(;c;){const b=t.url.replace(/\/$/,""),y=encodeURIComponent(m.where||t.where||"1=1");let f=`${b}/query?where=${y}&outFields=*&returnGeometry=true&resultRecordCount=${E}&resultOffset=${v}&f=geojson`;if(m.bounds){const V=JSON.stringify({xmin:m.bounds.west,ymin:m.bounds.south,xmax:m.bounds.east,ymax:m.bounds.north,spatialReference:{wkid:4326}});f+=`&geometry=${encodeURIComponent(V)}&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects`}const p=await fetch(f);if(!p.ok)throw new Error(`HTTP ${p.status}: ${p.statusText}`);const w=await p.json();w.features&&w.features.length>0?(C=C.concat(w.features),v+=w.features.length,c=w.features.length===E):c=!1}const h={type:"FeatureCollection",features:C};return a.value=h,r.value=C.length,h}catch(h){const b=h instanceof Error?h:new Error("Failed to fetch features");throw l.value=b,b}finally{o.value=!1}}function u(){a.value=null,r.value=0,l.value=null}async function k(m={}){return i(m)}return{data:e.readonly(a),isLoading:e.readonly(o),error:e.readonly(l),totalFeatures:e.readonly(r),config:t,fetch:i,refetch:k,clear:u}}function wn(t,a,o){const l=it(t);return e.watch(a,async r=>{if(r){const i=o(r);await l.fetch(i)}},{immediate:!0}),l}exports.LayerCheckboxSet=nn;exports.LayerPanel=nt;exports.LayerRadioButtonSet=vn;exports.Layerboard=_o;exports.MapPanel=ot;exports.TopicAccordion=Do;exports.WEBMAP_ID=ho;exports.buildWebMapUrl=Me;exports.clearCache=at;exports.getLayerConfigs=Te;exports.getWebMapUrl=vo;exports.transformWebMapToLayerConfigs=He;exports.useApiDataSources=rt;exports.useDataSource=it;exports.useLayerConfig=kn;exports.useLayerboard=bn;exports.useReactiveDataSource=wn;
2
+ `),l=/^(\d{1,3})\s+(.+)$/;for(const r of o){const i=r.trim().match(l);if(i){const[,u,k]=i;u&&k&&a.set(u,k.trim())}}return a}async function go(t){try{const a=await fetch(`${t}?f=json`);if(!a.ok)return null;const o=await a.json();return o.drawingInfo?{drawingInfo:o.drawingInfo,description:o.description}:null}catch{return null}}async function He(t){const a=t.operationalLayers||[],o=[],l=["Zoning and Planning_Land Use"];for(const r of a)if(r.url&&!r.title?.toLowerCase().includes("(under construction)"))try{let i=r.layerDefinition?.drawingInfo,u;const k=!i||!i.renderer,m=l.includes(r.title),E=i?.renderer?.uniqueValueInfos?.[0]?.symbol?.outline||i?.renderer?.defaultSymbol?.outline;if((k||m)&&r.url){const $=await go(r.url);if($){if(i=$.drawingInfo,E&&re(E)&&i?.renderer){const _=i.renderer,Q=_.uniqueValueInfos?.[0]?.symbol?.outline||_.defaultSymbol?.outline;if(!re(Q)){for(const X of _.uniqueValueInfos||[])X.symbol&&(X.symbol.outline=E);_.defaultSymbol&&(_.defaultSymbol.outline=E)}}$.description&&(u=yo($.description),u.size>0)}}const{paint:v,legend:C,geomType:c,outlinePaint:h}=co(i,r.opacity,u,r.title),b=uo(r.popupInfo),y=fo(r.layerDefinition),f=ao(r.layerDefinition?.minScale,r.layerDefinition?.maxScale),p=po(r.title),w=mo(r.title),V=r.opacity??1,N={id:p,title:w,type:c,url:r.url,opacity:V,paint:v,legend:C,popup:b};y&&(N.where=y),f.minZoom!==void 0&&(N.minZoom=f.minZoom),f.maxZoom!==void 0&&(N.maxZoom=f.maxZoom),h&&(N.outlinePaint=h),o.push(N)}catch{}return o.sort((r,i)=>r.title.localeCompare(i.title)),o}const et={},Je="376af635c84643cd816a8c5d017a53aa",ho=Je;function Me(t,a){let o=`https://www.arcgis.com/sharing/rest/content/items/${t}/data?f=json`;return a&&(o+=`&token=${a}`),o}function vo(){return Me(Je)}const ze=new Map,Ee=new Map;function at(t){t?(ze.delete(t),Ee.delete(t)):(ze.clear(),Ee.clear())}let Pe,tt=0;async function bo(){const t=typeof{url:typeof document>"u"?require("url").pathToFileURL(__filename).href:he&&he.tagName.toUpperCase()==="SCRIPT"&&he.src||new URL("index.js",document.baseURI).href}<"u"&&et?.VITE_AGO_USERNAME,a=typeof{url:typeof document>"u"?require("url").pathToFileURL(__filename).href:he&&he.tagName.toUpperCase()==="SCRIPT"&&he.src||new URL("index.js",document.baseURI).href}<"u"&&et?.VITE_AGO_PASSWORD;if(!(!t||!a)){if(Pe&&Date.now()<tt-3e5)return Pe;try{const l=await(await fetch("https://www.arcgis.com/sharing/rest/generateToken",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({f:"json",username:t,password:a,referer:window.location.origin||"https://localhost",expiration:"120"})})).json();return l.error?void 0:(Pe=l.token,tt=l.expires,Pe)}catch{return}}}async function ko(t,a){const o=Me(t,a),l=await fetch(o,{cache:"no-store"});if(!l.ok)throw new Error(`Failed to fetch WebMap: ${l.status} ${l.statusText}`);const r=await l.json();if(r.error)throw new Error(`ArcGIS error: ${r.error.message||r.error.code||"Unknown error"}`);return r}async function wo(t){try{const a=await bo(),o=await ko(t,a);return await He(o)}catch(a){throw new Error(`Failed to load dynamic layer configs: ${a instanceof Error?a.message:"Unknown error"}`)}}async function Te(t=Je){const a=ze.get(t);if(a)return a;const o=Ee.get(t);if(o)return o;const l=(async()=>{try{const r=await wo(t);return ze.set(t,r),r}finally{Ee.delete(t)}})();return Ee.set(t,l),l}function rt(t){const a=e.ref({}),o=new Map;for(const c of t)a.value[c.id]={data:null,loading:!1,error:null,lastFetched:null};async function l(c){const h=c.id;a.value={...a.value,[h]:{data:a.value[h]?.data??null,lastFetched:a.value[h]?.lastFetched??null,loading:!0,error:null}};try{let b;if(c.type==="http-get"){const y=await fetch(c.url,{method:"GET",...c.options});if(!y.ok)throw new Error(`HTTP ${y.status}: ${y.statusText}`);b=await y.json()}else if(c.type==="http-post"){const y=await fetch(c.url,{method:"POST",...c.options});if(!y.ok)throw new Error(`HTTP ${y.status}: ${y.statusText}`);b=await y.json()}else if(c.type==="esri"){const f=`${c.url.replace(/\/$/,"")}/query?where=1%3D1&outFields=*&returnGeometry=false&f=json`,p=await fetch(f,c.options);if(!p.ok)throw new Error(`HTTP ${p.status}: ${p.statusText}`);b=(await p.json()).features?.map(V=>V.attributes)||[]}else throw new Error(`Unknown data source type: ${c.type}`);c.transform&&(b=c.transform(b)),a.value={...a.value,[h]:{data:b,loading:!1,error:null,lastFetched:Date.now()}}}catch(b){const y=b instanceof Error?b.message:"Unknown error";a.value={...a.value,[h]:{data:a.value[h]?.data??null,lastFetched:a.value[h]?.lastFetched??null,loading:!1,error:y}}}}async function r(){await Promise.all(t.map(c=>l(c)))}async function i(c){const h=t.find(b=>b.id===c);h&&await l(h)}function u(c){return a.value[c]?.data??null}const k=e.computed(()=>Object.values(a.value).some(c=>c.loading));function m(c){return a.value[c]?.loading??!1}function E(c){return a.value[c]?.error??null}function v(){for(const c of t)if(c.pollInterval&&c.pollInterval>0){const h=window.setInterval(()=>{l(c)},c.pollInterval);o.set(c.id,h)}}function C(){for(const[,c]of o)window.clearInterval(c);o.clear()}return e.onMounted(()=>{r(),v()}),e.onUnmounted(()=>{C()}),{state:e.readonly(a),isLoading:k,fetchAll:r,refetch:i,getData:u,isSourceLoading:m,getError:E,stopPolling:C}}const Lo={class:"layerboard-layout"},Co=["aria-expanded"],So={key:0,class:"layerboard-subtitle"},Eo={class:"layerboard-mobile-menu-content"},Bo={class:"layerboard-main"},xo={key:0,class:"layerboard-loading",role:"status","aria-live":"polite"},No={key:1,class:"layerboard-error",role:"alert"},Vo=["aria-expanded","aria-label"],$o={key:0},Po={key:1},zo={class:"sr-only","aria-live":"polite"},To=e.defineComponent({__name:"Layerboard",props:{title:{},subtitle:{},webMapId:{},themeColor:{default:"#0f4d90"},cyclomediaConfig:{},pictometryCredentials:{},showDefaultSidebar:{type:Boolean,default:!0},sidebarWidth:{default:"30%"},sidebarLabel:{default:"Layers"},mapLabel:{default:"Map"},fetchMetadata:{type:Boolean,default:!1},tiledLayers:{default:()=>[]},dataSources:{default:()=>[]},layerStyleOverrides:{default:()=>({})},popupOverrides:{default:()=>({})},basemapControlPosition:{default:"top-right"},navigationControlPosition:{default:"bottom-right"},geolocationControlPosition:{default:"bottom-right"},searchControlPosition:{default:"top-left"},drawControlPosition:{default:"bottom-left"},cyclomediaButtonPosition:{default:"top-right"},pictometryButtonPosition:{default:"top-right"},initialZoom:{},initialCenter:{}},emits:["configs-loaded","load-error","zoom"],setup(t,{expose:a,emit:o}){const l=t,r=o,i=e.ref([]),u=e.ref(!0),k=e.ref(null),m=e.ref(12),E=e.ref(""),v=e.ref(new Set),C=e.ref({}),c=e.ref(new Set),h=e.ref({}),b=e.ref({}),y=e.ref(new Set),f=e.ref({});function p(){const g={};for(const S of l.tiledLayers)g[S.id]=S.opacity??1;f.value=g}function w(g){y.value.has(g)?y.value.delete(g):y.value.add(g),y.value=new Set(y.value)}function V(g,S){S?y.value.add(g):y.value.delete(g),y.value=new Set(y.value)}function N(g,S){f.value={...f.value,[g]:S}}const $=l.dataSources.length>0?rt(l.dataSources):null,_=e.computed(()=>$?.state.value??{}),Q=e.computed(()=>$?.isLoading.value??!1);function X(g){return $?.getData(g)??null}function ue(g){return $?.refetch(g)??Promise.resolve()}e.provide("layerboard-layers",e.readonly(i)),e.provide("layerboard-visible",v),e.provide("layerboard-opacities",C),e.provide("layerboard-loading",e.readonly(c)),e.provide("layerboard-errors",e.readonly(h)),e.provide("layerboard-zoom",e.readonly(m)),e.provide("layerboard-toggle-layer",de),e.provide("layerboard-set-layer-visible",le),e.provide("layerboard-set-layers-visible",fe),e.provide("layerboard-set-opacity",ae),e.provide("layerboard-tiled-layers",e.readonly(e.computed(()=>l.tiledLayers))),e.provide("layerboard-visible-tiled",y),e.provide("layerboard-tiled-opacities",f),e.provide("layerboard-toggle-tiled",w),e.provide("layerboard-set-tiled-opacity",N),e.provide("layerboard-set-tiled-visible",V),e.provide("layerboard-data-sources-state",_),e.provide("layerboard-data-sources-loading",Q),e.provide("layerboard-get-data-source",X),e.provide("layerboard-refetch-data-source",ue);const Ie=e.computed(()=>({backgroundColor:l.themeColor})),Oe=e.computed(()=>({backgroundColor:l.themeColor})),ke=e.computed(()=>({backgroundColor:l.themeColor})),Be=e.computed(()=>({width:J.value?"0":l.sidebarWidth}));async function we(){try{u.value=!0,k.value=null;const S=(await Te(l.webMapId)).map(I=>{let R=I;const oe=l.layerStyleOverrides[I.id];oe&&(R={...R,paint:oe.paint??R.paint,outlinePaint:oe.outlinePaint??R.outlinePaint,legend:oe.legend??R.legend,type:oe.type??R.type});const ge=l.popupOverrides[I.id];return ge&&R.popup&&(R={...R,popup:{...R.popup,...ge}}),R});i.value=S.map(I=>({config:I,component:I.type}));const D={};S.forEach(I=>{D[I.id]=I.opacity??1}),C.value=D,r("configs-loaded",S)}catch(g){const S=g instanceof Error?g.message:"Failed to load layer configurations";k.value=S,r("load-error",S)}finally{u.value=!1}}function xe(g){let S=g.split("?")[0]||g;return S=S.replace(/\/query$/,""),S=S.replace(/\/$/,""),S.toLowerCase()}async function De(){if(l.fetchMetadata)try{const g="https://phl.carto.com/api/v2/sql?q="+encodeURIComponent("select url_text, COALESCE(representation, '') as representation from phl.knack_metadata_reps_endpoints_join WHERE ( format = 'API' OR format = 'GeoService' ) AND url_text IS NOT null"),S=await fetch(g);if(!S.ok)return;const D=await S.json(),I={};for(const R of D.rows||[])if(R.url_text&&R.representation){const oe=xe(R.url_text),ge=`https://metadata.phila.gov/#home/representationdetails/${R.representation}/`;I[oe]=ge}b.value=I}catch{}}function Re(g){m.value=g,r("zoom",g)}function de(g){v.value.has(g)?v.value.delete(g):v.value.add(g),v.value=new Set(v.value)}function le(g,S){S?v.value.add(g):v.value.delete(g),v.value=new Set(v.value)}function fe(g,S){for(const D of g)S?v.value.add(D):v.value.delete(D);v.value=new Set(v.value)}function ae(g,S){C.value={...C.value,[g]:S}}function Ze(g,S){S?c.value.add(g):c.value.delete(g),c.value=new Set(c.value)}function H(g,S){if(S)h.value={...h.value,[g]:S};else{const D={...h.value};delete D[g],h.value=D}}function pe(g){E.value=g}const W=e.ref(null),ie=e.ref(null),Ae=e.ref(null),Y=e.ref(null),Le=e.ref(null),Ce=e.ref(null),Ne=e.ref(null),ee=e.ref("map");function me(){ee.value=ee.value==="sidebar"?"map":"sidebar",e.nextTick(()=>{ee.value==="sidebar"&&W.value?.focus()})}const j=e.ref(!1);function Ve(){j.value=!j.value,j.value&&e.nextTick(()=>{Y.value?.focus()})}function se(){j.value=!1,e.nextTick(()=>{ie.value?.focus()})}const J=e.ref(!1);function ce(){J.value=!J.value}const K=e.ref(!1),Se=e.ref(null);function te(){Se.value=document.activeElement,K.value=!0,e.nextTick(()=>{Ne.value?.focus()})}function q(){K.value=!1,e.nextTick(()=>{Se.value?.focus(),Se.value=null})}function ye(g){g.target.classList.contains("layerboard-modal-backdrop")&&q()}function Ue(g){if(g.key==="Escape"){se();return}if(g.key==="Tab"&&Le.value){const S=Array.from(Le.value.querySelectorAll('a[href], button:not([disabled]), textarea, input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])'));if(S.length===0)return;const D=S[0],I=S[S.length-1];g.shiftKey?document.activeElement===D&&(g.preventDefault(),I.focus()):document.activeElement===I&&(g.preventDefault(),D.focus())}}function We(g){if(g.key==="Escape"){q();return}if(g.key==="Tab"&&Ce.value){const S=Array.from(Ce.value.querySelectorAll('a[href], button:not([disabled]), textarea, input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])'));if(S.length===0)return;const D=S[0],I=S[S.length-1];g.shiftKey?document.activeElement===D&&(g.preventDefault(),I.focus()):document.activeElement===I&&(g.preventDefault(),D.focus())}}e.provide("layerboard-open-modal",te),e.provide("layerboard-close-modal",q),e.provide("layerboard-is-modal-open",e.readonly(K)),a({layerList:i,visibleLayers:v,layerOpacities:C,loadingLayers:c,layerErrors:h,currentZoom:m,toggleLayer:de,setLayerVisible:le,setLayersVisible:fe,setLayerOpacity:ae,reloadConfigs:we,clearCache:()=>at(l.webMapId),visibleTiledLayers:y,tiledLayerOpacities:f,toggleTiledLayer:w,setTiledLayerVisible:V,setTiledLayerOpacity:N,dataSourcesState:_,dataSourcesLoading:Q,getDataSourceData:X,refetchDataSource:ue,isModalOpen:K,openModal:te,closeModal:q});function $e(g){g.key==="Escape"&&j.value&&se()}return e.onMounted(()=>{we(),De(),p(),document.addEventListener("keydown",$e)}),e.onBeforeUnmount(()=>{document.removeEventListener("keydown",$e)}),(g,S)=>(e.openBlock(),e.createElementBlock("div",Lo,[S[5]||(S[5]=e.createElementVNode("a",{href:"#main-content",class:"skip-to-main-content-link"},"Skip to main content",-1)),e.createElementVNode("header",{class:"layerboard-header",style:e.normalizeStyle(Ie.value)},[S[1]||(S[1]=e.createElementVNode("a",{href:"https://www.phila.gov/",class:"layerboard-logo layerboard-desktop-only"},[e.createElementVNode("img",{src:"https://standards.phila.gov/img/logo/city-of-philadelphia-yellow-white.png",alt:"City of Philadelphia"})],-1)),S[2]||(S[2]=e.createElementVNode("span",{class:"layerboard-header-divider layerboard-desktop-only","aria-hidden":"true"},null,-1)),e.createElementVNode("button",{ref_key:"hamburgerRef",ref:ie,class:"layerboard-hamburger layerboard-mobile-only","aria-expanded":j.value,"aria-label":"Toggle menu",onClick:Ve},[e.createVNode(e.unref(U.Icon),{"icon-definition":e.unref(Ot),size:"medium",inline:"",decorative:""},null,8,["icon-definition"])],8,Co),e.renderSlot(g.$slots,"header",{},()=>[e.createElementVNode("h1",null,e.toDisplayString(t.title),1),t.subtitle?(e.openBlock(),e.createElementBlock("span",So,e.toDisplayString(t.subtitle),1)):e.createCommentVNode("",!0)],!0),j.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"mobileMenuRef",ref:Le,class:"layerboard-mobile-menu",role:"dialog","aria-modal":"true","aria-label":"Site menu",style:e.normalizeStyle({backgroundColor:t.themeColor}),onKeydown:Ue},[e.createElementVNode("div",Eo,[e.renderSlot(g.$slots,"footer",{openModal:te,closeModal:q,isModalOpen:K.value},()=>[S[0]||(S[0]=e.createTextVNode(" City of Philadelphia ",-1))],!0)]),e.createElementVNode("button",{ref_key:"mobileMenuCloseRef",ref:Y,class:"layerboard-mobile-menu-close","aria-label":"Close menu",onClick:se},[e.createVNode(e.unref(U.Icon),{"icon-definition":e.unref(Xe),size:"medium",decorative:""},null,8,["icon-definition"])],512)],36)):e.createCommentVNode("",!0),j.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:"layerboard-mobile-menu-backdrop",onClick:se})):e.createCommentVNode("",!0)],4),e.createElementVNode("div",Bo,[u.value?(e.openBlock(),e.createElementBlock("div",xo,[e.createElementVNode("div",{class:"layerboard-spinner",style:e.normalizeStyle({borderTopColor:t.themeColor})},null,4),e.createElementVNode("p",null,"Loading "+e.toDisplayString(t.title)+"...",1)])):k.value?(e.openBlock(),e.createElementBlock("div",No,[S[3]||(S[3]=e.createElementVNode("h2",null,"Error Loading Layers",-1)),e.createElementVNode("p",null,e.toDisplayString(k.value),1),e.createElementVNode("button",{class:"layerboard-retry-button",style:e.normalizeStyle({backgroundColor:t.themeColor}),onClick:we}," Retry ",4)])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("aside",{id:"main-content",ref_key:"sidebarRef",ref:W,class:e.normalizeClass(["layerboard-sidebar",{"is-active":ee.value==="sidebar"}]),style:e.normalizeStyle(Be.value),"aria-label":"Map layers",tabindex:"-1"},[e.renderSlot(g.$slots,"sidebar",{layers:i.value,visibleLayers:v.value,layerOpacities:C.value,loadingLayers:c.value,layerErrors:h.value,currentZoom:m.value,toggleLayer:de,setLayerVisible:le,setLayersVisible:fe,setOpacity:ae,tiledLayers:t.tiledLayers,visibleTiledLayers:y.value,tiledLayerOpacities:f.value,toggleTiledLayer:w,setTiledLayerVisible:V,setTiledLayerOpacity:N,dataSourcesState:_.value,dataSourcesLoading:Q.value,getDataSource:X,refetchDataSource:ue},()=>[t.showDefaultSidebar?(e.openBlock(),e.createBlock(nt,{key:0,"layer-list":i.value,"visible-layers":v.value,"layer-opacities":C.value,"loading-layers":c.value,"layer-errors":h.value,"current-zoom":m.value,"search-query":E.value,"layer-metadata":b.value,onToggleLayer:de,onSetOpacity:ae,onUpdateSearch:pe},null,8,["layer-list","visible-layers","layer-opacities","loading-layers","layer-errors","current-zoom","search-query","layer-metadata"])):e.createCommentVNode("",!0)],!0)],6),e.createElementVNode("div",{role:"main","aria-label":"Map",class:e.normalizeClass(["layerboard-map",{"is-active":ee.value==="map"}])},[e.createVNode(ot,{"visible-layers":v.value,"layer-opacities":C.value,"layer-list":i.value,"tiled-layers":t.tiledLayers,"visible-tiled-layers":y.value,"tiled-layer-opacities":f.value,"cyclomedia-config":t.cyclomediaConfig,"pictometry-credentials":t.pictometryCredentials,"basemap-control-position":t.basemapControlPosition,"navigation-control-position":t.navigationControlPosition,"geolocation-control-position":t.geolocationControlPosition,"search-control-position":t.searchControlPosition,"draw-control-position":t.drawControlPosition,"cyclomedia-button-position":t.cyclomediaButtonPosition,"pictometry-button-position":t.pictometryButtonPosition,"initial-zoom":t.initialZoom,"initial-center":t.initialCenter,onZoom:Re,onLayerLoading:Ze,onLayerError:H},null,8,["visible-layers","layer-opacities","layer-list","tiled-layers","visible-tiled-layers","tiled-layer-opacities","cyclomedia-config","pictometry-credentials","basemap-control-position","navigation-control-position","geolocation-control-position","search-control-position","draw-control-position","cyclomedia-button-position","pictometry-button-position","initial-zoom","initial-center"])],2),e.createElementVNode("button",{class:e.normalizeClass(["layerboard-sidebar-toggle",{"is-collapsed":J.value}]),style:e.normalizeStyle({left:J.value?"0":l.sidebarWidth}),"aria-expanded":!J.value,"aria-label":J.value?"Expand sidebar":"Collapse sidebar",onClick:ce},[e.createVNode(e.unref(U.Icon),{"icon-definition":J.value?e.unref(Mt):e.unref(It),size:"medium",decorative:""},null,8,["icon-definition"])],14,Vo)],64))]),e.createElementVNode("button",{ref_key:"mobileToggleRef",ref:Ae,class:"layerboard-mobile-toggle",style:e.normalizeStyle(ke.value),onClick:me},[ee.value==="map"?(e.openBlock(),e.createElementBlock("span",$o,e.toDisplayString(t.sidebarLabel),1)):(e.openBlock(),e.createElementBlock("span",Po,e.toDisplayString(t.mapLabel),1))],4),e.createElementVNode("footer",{class:"layerboard-footer",style:e.normalizeStyle(Oe.value)},[e.renderSlot(g.$slots,"footer",{openModal:te,closeModal:q,isModalOpen:K.value},()=>[S[4]||(S[4]=e.createTextVNode(" City of Philadelphia ",-1))],!0)],4),K.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"layerboard-modal-backdrop",onClick:ye,onKeydown:We},[e.createElementVNode("div",{ref_key:"modalRef",ref:Ce,class:"layerboard-modal",role:"dialog","aria-modal":"true","aria-label":"Application information"},[e.createElementVNode("button",{ref_key:"modalCloseRef",ref:Ne,class:"layerboard-modal-close","aria-label":"Close modal",onClick:q},[e.createVNode(e.unref(U.Icon),{"icon-definition":e.unref(Xe),size:"medium",decorative:""},null,8,["icon-definition"])],512),e.renderSlot(g.$slots,"modal",{closeModal:q},void 0,!0)],512)],32)):e.createCommentVNode("",!0),e.createElementVNode("span",zo,e.toDisplayString(ee.value==="sidebar"?"Showing layers panel":"Showing map"),1)]))}}),_o=be(To,[["__scopeId","data-v-4304d46d"]]),Fo=["aria-expanded"],Mo={key:0,class:"topic-icon"},Io={class:"topic-title"},Oo=e.defineComponent({__name:"TopicAccordion",props:{title:{},icon:{},expanded:{type:Boolean,default:!1},layerIds:{default:()=>[]},headerClass:{}},emits:["toggle","layerChange"],setup(t,{emit:a}){const o=t,l=a,r=e.ref(o.expanded),i=`topic-panel-${e.useId()}`,u=`topic-header-${e.useId()}`;e.watch(()=>o.expanded,m=>{r.value=m});function k(){r.value=!r.value,l("toggle",r.value)}return(m,E)=>{const v=e.resolveComponent("font-awesome-icon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["topic-accordion",{"is-expanded":r.value}])},[e.createElementVNode("button",{id:u,class:e.normalizeClass(["topic-header",t.headerClass]),type:"button","aria-expanded":r.value,"aria-controls":i,onClick:k},[t.icon||m.$slots.icon?(e.openBlock(),e.createElementBlock("span",Mo,[e.renderSlot(m.$slots,"icon",{},()=>[t.icon?(e.openBlock(),e.createBlock(v,{key:0,icon:["fas",t.icon],"aria-hidden":"true"},null,8,["icon"])):e.createCommentVNode("",!0)],!0)])):e.createCommentVNode("",!0),e.createElementVNode("span",Io,e.toDisplayString(t.title),1),e.createElementVNode("span",{class:e.normalizeClass(["topic-chevron",{"is-rotated":r.value}])},[...E[0]||(E[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},[e.createElementVNode("polyline",{points:"6 9 12 15 18 9"})],-1)])],2)],10,Fo),e.withDirectives(e.createElementVNode("div",{id:i,role:"region","aria-labelledby":u,class:"topic-content"},[e.renderSlot(m.$slots,"default",{},()=>[E[1]||(E[1]=e.createElementVNode("p",{class:"topic-empty"},"No content provided for this topic.",-1))],!0)],512),[[e.vShow,r.value]])],2)}}}),Do=be(Oo,[["__scopeId","data-v-9af09394"]]),Ro=["aria-label"],Zo=["checked","disabled","onChange"],Ao={class:"layer-title"},Uo={key:0,class:"loading-indicator",role:"status"},Wo=["aria-label"],jo={key:2,class:"zoom-indicator"},qo={class:"layer-title"},Go={key:0,class:"loading-indicator",role:"status"},Ho=["aria-label"],Jo={key:2,class:"zoom-indicator"},Ko={key:2,class:"opacity-control"},Qo=["for"],Xo=["id","value","aria-label","onInput"],Yo=["aria-label"],en={class:"legend-label"},tn={key:0,class:"empty-state"},on=e.defineComponent({__name:"LayerCheckboxSet",props:{layers:{},visibleLayerIds:{},layerOpacities:{default:()=>({})},loadingLayerIds:{default:()=>new Set},layerErrors:{default:()=>({})},currentZoom:{default:12},showOpacity:{type:Boolean,default:!0},showLegend:{type:Boolean,default:!0},groupLabel:{}},emits:["toggleLayer","setOpacity"],setup(t,{emit:a}){const o=t,l=a;function r(y){return o.visibleLayerIds.has(y)}function i(y){return o.layerOpacities[y]??1}function u(y){return o.loadingLayerIds.has(y)}function k(y){return o.layerErrors[y]||null}function m(y){const f=o.currentZoom,p=y.minZoom,w=y.maxZoom;return!(p!==void 0&&f<p||w!==void 0&&f>w)}function E(y){return y.displayOptions?.shouldShowCheckbox!==!1}function v(y){return o.showOpacity?y.displayOptions?.shouldShowSlider!==!1:!1}function C(y){return o.showLegend?y.displayOptions?.shouldShowLegendBox!==!1:!1}function c(y){return y.displayOptions?.layerNameChange||y.title}function h(y){l("toggleLayer",y)}function b(y,f){const p=f.target;l("setOpacity",y,parseFloat(p.value))}return(y,f)=>(e.openBlock(),e.createElementBlock("fieldset",{class:"layer-checkbox-set",role:"group","aria-label":t.groupLabel},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.layers,p=>(e.openBlock(),e.createElementBlock("div",{key:p.id,class:"layer-item"},[E(p)?(e.openBlock(),e.createElementBlock("label",{key:0,class:e.normalizeClass(["layer-checkbox",{"layer-unavailable":!m(p),"layer-error":k(p.id)}])},[e.createElementVNode("input",{type:"checkbox",checked:r(p.id),disabled:!m(p),onChange:w=>h(p.id)},null,40,Zo),e.createElementVNode("span",Ao,[e.createTextVNode(e.toDisplayString(c(p))+" ",1),u(p.id)?(e.openBlock(),e.createElementBlock("span",Uo," Loading... ")):e.createCommentVNode("",!0),k(p.id)?(e.openBlock(),e.createElementBlock("span",{key:1,class:"error-indicator","aria-label":k(p.id)||"Error",role:"status"}," Error ",8,Wo)):e.createCommentVNode("",!0),m(p)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",jo," (zoom in) "))])],2)):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["layer-label-only",{"layer-unavailable":!m(p),"layer-error":k(p.id)}])},[e.createElementVNode("span",qo,[e.createTextVNode(e.toDisplayString(c(p))+" ",1),u(p.id)?(e.openBlock(),e.createElementBlock("span",Go," Loading... ")):e.createCommentVNode("",!0),k(p.id)?(e.openBlock(),e.createElementBlock("span",{key:1,class:"error-indicator","aria-label":k(p.id)||"Error",role:"status"}," Error ",8,Ho)):e.createCommentVNode("",!0),m(p)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",Jo," (zoom in) "))])],2)),v(p)&&r(p.id)?(e.openBlock(),e.createElementBlock("div",Ko,[e.createElementVNode("label",{class:"opacity-label",for:"opacity-"+p.id}," Opacity: "+e.toDisplayString(Math.round(i(p.id)*100))+"% ",9,Qo),e.createElementVNode("input",{id:"opacity-"+p.id,type:"range",min:"0",max:"1",step:"0.05",value:i(p.id),"aria-label":"Opacity for "+c(p),class:"opacity-slider",onInput:w=>b(p.id,w)},null,40,Xo)])):e.createCommentVNode("",!0),C(p)&&r(p.id)&&p.legend?.length?(e.openBlock(),e.createElementBlock("ul",{key:3,class:"layer-legend","aria-label":"Legend for "+c(p)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.legend,(w,V)=>(e.openBlock(),e.createElementBlock("li",{key:V,class:"legend-item"},[w.type==="circle"?(e.openBlock(),e.createElementBlock("span",{key:0,class:"legend-symbol legend-circle",style:e.normalizeStyle({backgroundColor:w.color}),"aria-hidden":"true"},null,4)):w.type==="line"?(e.openBlock(),e.createElementBlock("span",{key:1,class:"legend-symbol legend-line",style:e.normalizeStyle({backgroundColor:w.color,height:`${w.width||2}px`}),"aria-hidden":"true"},null,4)):w.type==="fill"?(e.openBlock(),e.createElementBlock("span",{key:2,class:"legend-symbol legend-fill",style:e.normalizeStyle({backgroundColor:w.color}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),e.createElementVNode("span",en,e.toDisplayString(w.label),1)]))),128))],8,Yo)):e.createCommentVNode("",!0)]))),128)),t.layers.length===0?(e.openBlock(),e.createElementBlock("div",tn,"No layers available")):e.createCommentVNode("",!0)],8,Ro))}}),nn=be(on,[["__scopeId","data-v-55505629"]]),ln=["aria-label"],an=["name","checked","disabled","onChange"],rn={class:"layer-title"},sn={key:0,class:"loading-indicator",role:"status"},cn=["aria-label"],un={key:2,class:"zoom-indicator"},dn={key:0,class:"opacity-control"},fn=["for"],pn=["id","value","aria-label","onInput"],mn=["aria-label"],yn={class:"legend-label"},gn={key:0,class:"empty-state"},hn=e.defineComponent({__name:"LayerRadioButtonSet",props:{layers:{},visibleLayerIds:{},layerOpacities:{default:()=>({})},loadingLayerIds:{default:()=>new Set},layerErrors:{default:()=>({})},currentZoom:{default:12},showOpacity:{type:Boolean,default:!0},showLegend:{type:Boolean,default:!0},groupName:{default:"layer-radio-group"},groupLabel:{}},emits:["selectLayer","setOpacity"],setup(t,{emit:a}){const o=t,l=a;function r(b){return o.visibleLayerIds.has(b)}function i(b){return o.layerOpacities[b]??1}function u(b){return o.loadingLayerIds.has(b)}function k(b){return o.layerErrors[b]||null}function m(b){const y=o.currentZoom,f=b.minZoom,p=b.maxZoom;return!(f!==void 0&&y<f||p!==void 0&&y>p)}function E(b){return o.showOpacity?b.displayOptions?.shouldShowSlider!==!1:!1}function v(b){return o.showLegend?b.displayOptions?.shouldShowLegendBox!==!1:!1}function C(b){return b.displayOptions?.layerNameChange||b.title}function c(b){const y=o.layers.filter(f=>o.visibleLayerIds.has(f.id)&&f.id!==b).map(f=>f.id);l("selectLayer",b,y)}function h(b,y){const f=y.target;l("setOpacity",b,parseFloat(f.value))}return(b,y)=>(e.openBlock(),e.createElementBlock("div",{class:"layer-radio-set",role:"radiogroup","aria-label":t.groupLabel},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.layers,f=>(e.openBlock(),e.createElementBlock("div",{key:f.id,class:"layer-item"},[e.createElementVNode("label",{class:e.normalizeClass(["layer-radio",{"layer-unavailable":!m(f),"layer-error":k(f.id)}])},[e.createElementVNode("input",{type:"radio",name:t.groupName,checked:r(f.id),disabled:!m(f),onChange:p=>c(f.id)},null,40,an),e.createElementVNode("span",rn,[e.createTextVNode(e.toDisplayString(C(f))+" ",1),u(f.id)?(e.openBlock(),e.createElementBlock("span",sn," Loading... ")):e.createCommentVNode("",!0),k(f.id)?(e.openBlock(),e.createElementBlock("span",{key:1,class:"error-indicator","aria-label":k(f.id)||"Error",role:"status"}," Error ",8,cn)):e.createCommentVNode("",!0),m(f)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",un," (zoom in) "))])],2),E(f)&&r(f.id)?(e.openBlock(),e.createElementBlock("div",dn,[e.createElementVNode("label",{class:"opacity-label",for:"opacity-"+f.id}," Opacity: "+e.toDisplayString(Math.round(i(f.id)*100))+"% ",9,fn),e.createElementVNode("input",{id:"opacity-"+f.id,type:"range",min:"0",max:"1",step:"0.05",value:i(f.id),"aria-label":"Opacity for "+C(f),class:"opacity-slider",onInput:p=>h(f.id,p)},null,40,pn)])):e.createCommentVNode("",!0),v(f)&&r(f.id)&&f.legend?.length?(e.openBlock(),e.createElementBlock("ul",{key:1,class:"layer-legend","aria-label":"Legend for "+C(f)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.legend,(p,w)=>(e.openBlock(),e.createElementBlock("li",{key:w,class:"legend-item"},[p.type==="circle"?(e.openBlock(),e.createElementBlock("span",{key:0,class:"legend-symbol legend-circle",style:e.normalizeStyle({backgroundColor:p.color}),"aria-hidden":"true"},null,4)):p.type==="line"?(e.openBlock(),e.createElementBlock("span",{key:1,class:"legend-symbol legend-line",style:e.normalizeStyle({backgroundColor:p.color,height:`${p.width||2}px`}),"aria-hidden":"true"},null,4)):p.type==="fill"?(e.openBlock(),e.createElementBlock("span",{key:2,class:"legend-symbol legend-fill",style:e.normalizeStyle({backgroundColor:p.color}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),e.createElementVNode("span",yn,e.toDisplayString(p.label),1)]))),128))],8,mn)):e.createCommentVNode("",!0)]))),128)),t.layers.length===0?(e.openBlock(),e.createElementBlock("div",gn,"No layers available")):e.createCommentVNode("",!0)],8,ln))}}),vn=be(hn,[["__scopeId","data-v-5e01b240"]]);function bn(t){const a=e.ref([]),o=e.ref(new Set),l=e.ref({}),r=e.ref(new Set),i=e.ref({}),u=e.ref(""),k=e.ref(!1),m=e.ref(!1),E=e.ref(null),v=e.computed(()=>{if(!u.value.trim())return a.value;const N=u.value.toLowerCase();return a.value.filter($=>$.title.toLowerCase().includes(N))}),C=e.computed(()=>a.value.map(N=>({config:N,component:N.type})));async function c(){if(!m.value){k.value=!0,E.value=null;try{let N;t.mode==="dynamic"||!t.mode?t.webMapId?N=await h(t.webMapId):N=await Te():N=await Te(),a.value=N;const $={};N.forEach(_=>{$[_.id]=_.opacity??1}),l.value=$,m.value=!0}catch(N){E.value=N instanceof Error?N:new Error("Failed to initialize layerboard")}finally{k.value=!1}}}async function h(N){const $=Me(N),_=await fetch($,{cache:"no-store"});if(!_.ok)throw new Error(`Failed to fetch WebMap: ${_.status} ${_.statusText}`);const Q=await _.json();return He(Q)}function b(N){const $=new Set(o.value);$.has(N)?$.delete(N):$.add(N),o.value=$}function y(N,$){l.value={...l.value,[N]:Math.max(0,Math.min(1,$))}}function f(N){u.value=N}function p(N,$){const _=new Set(r.value);$?_.add(N):_.delete(N),r.value=_}function w(N,$){if($)i.value={...i.value,[N]:$};else{const _={...i.value};delete _[N],i.value=_}}function V(){a.value=[],o.value=new Set,l.value={},r.value=new Set,i.value={},u.value="",k.value=!1,m.value=!1,E.value=null}return{layerConfigs:e.readonly(a),visibleLayers:e.readonly(o),layerOpacities:e.readonly(l),loadingLayers:e.readonly(r),layerErrors:e.readonly(i),searchQuery:e.readonly(u),isLoading:e.readonly(k),isInitialized:e.readonly(m),error:e.readonly(E),filteredLayerConfigs:v,layerList:C,config:t,initialize:c,toggleLayer:b,setLayerOpacity:y,filterLayers:f,setLayerLoading:p,setLayerError:w,reset:V}}function kn(){const t=e.ref([]),a=e.ref(new Set),o=e.ref(new Set);function l(i){a.value.has(i)?a.value.delete(i):a.value.add(i)}function r(i){t.value=i}return{layers:e.computed(()=>t.value),visibleLayerIds:e.computed(()=>a.value),loadingLayerIds:e.computed(()=>o.value),toggleLayer:l,setLayers:r}}function it(t){const a=e.ref(null),o=e.ref(!1),l=e.ref(null),r=e.ref(0);async function i(m={}){o.value=!0,l.value=null;const E=t.pageSize||2e3;let v=0,C=[],c=!0;try{for(;c;){const b=t.url.replace(/\/$/,""),y=encodeURIComponent(m.where||t.where||"1=1");let f=`${b}/query?where=${y}&outFields=*&returnGeometry=true&resultRecordCount=${E}&resultOffset=${v}&f=geojson`;if(m.bounds){const V=JSON.stringify({xmin:m.bounds.west,ymin:m.bounds.south,xmax:m.bounds.east,ymax:m.bounds.north,spatialReference:{wkid:4326}});f+=`&geometry=${encodeURIComponent(V)}&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects`}const p=await fetch(f);if(!p.ok)throw new Error(`HTTP ${p.status}: ${p.statusText}`);const w=await p.json();w.features&&w.features.length>0?(C=C.concat(w.features),v+=w.features.length,c=w.features.length===E):c=!1}const h={type:"FeatureCollection",features:C};return a.value=h,r.value=C.length,h}catch(h){const b=h instanceof Error?h:new Error("Failed to fetch features");throw l.value=b,b}finally{o.value=!1}}function u(){a.value=null,r.value=0,l.value=null}async function k(m={}){return i(m)}return{data:e.readonly(a),isLoading:e.readonly(o),error:e.readonly(l),totalFeatures:e.readonly(r),config:t,fetch:i,refetch:k,clear:u}}function wn(t,a,o){const l=it(t);return e.watch(a,async r=>{if(r){const i=o(r);await l.fetch(i)}},{immediate:!0}),l}exports.LayerCheckboxSet=nn;exports.LayerPanel=nt;exports.LayerRadioButtonSet=vn;exports.Layerboard=_o;exports.MapPanel=ot;exports.TopicAccordion=Do;exports.WEBMAP_ID=ho;exports.buildWebMapUrl=Me;exports.clearCache=at;exports.getLayerConfigs=Te;exports.getWebMapUrl=vo;exports.transformWebMapToLayerConfigs=He;exports.useApiDataSources=rt;exports.useDataSource=it;exports.useLayerConfig=kn;exports.useLayerboard=bn;exports.useReactiveDataSource=wn;
package/dist/index.mjs CHANGED
@@ -2328,7 +2328,7 @@ const un = { class: "layerboard-layout" }, dn = ["aria-expanded"], fn = {
2328
2328
  _("span", wn, U(ye.value === "sidebar" ? "Showing layers panel" : "Showing map"), 1)
2329
2329
  ]));
2330
2330
  }
2331
- }), si = /* @__PURE__ */ Re(Ln, [["__scopeId", "data-v-7eda3d02"]]), Sn = ["aria-expanded"], Cn = {
2331
+ }), si = /* @__PURE__ */ Re(Ln, [["__scopeId", "data-v-4304d46d"]]), Sn = ["aria-expanded"], Cn = {
2332
2332
  key: 0,
2333
2333
  class: "topic-icon"
2334
2334
  }, kn = { class: "topic-title" }, $n = /* @__PURE__ */ Ce({