@phila/layerboard 3.0.0-beta.30 → 3.0.0-beta.31

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
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),Q=require("@phila/phila-ui-map-core"),G=require("@phila/phila-ui-core");var Ce=typeof document<"u"?document.currentScript:null;const bt={class:"map-panel"},kt=e.defineComponent({__name:"MapPanel",props:{visibleLayers:{},layerOpacities:{},layerList:{},tiledLayers:{default:void 0},visibleTiledLayers:{default:void 0},tiledLayerOpacities:{default:void 0},cyclomediaConfig:{default:void 0},pictometryCredentials:{default:void 0},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:{default:void 0},initialCenter:{default:void 0}},emits:["zoom","layerLoading","layerError"],setup(t,{emit:l}){const r=t,n=l,s=e.ref(null),i=e.ref(null),u=e.ref(0);function b(o){n("zoom",o),i.value&&(u.value=p(i.value))}function p(o){const d=o.getZoom(),v=o.getCenter().lat,w=559082264028e-3,E=v*Math.PI/180;return w*Math.cos(E)/Math.pow(2,d)}const S=e.ref({}),y=e.ref(null),g=e.ref(new Set);async function a(o,d,c,v,w){const E=encodeURIComponent(v||"1=1"),P=JSON.stringify({xmin:d.west,ymin:d.south,xmax:d.east,ymax:d.north,spatialReference:{wkid:4326}}),Z=w!==void 0&&w<14?`&maxAllowableOffset=${360/(Math.pow(2,w)*512)}`:"",F=2e3;let j=0,T=[],R=!0;for(;R;){const I=`${o}/query?where=${E}&geometry=${encodeURIComponent(P)}&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects&outFields=*&returnGeometry=true&resultRecordCount=${F}&resultOffset=${j}${Z}&f=geojson`,q=await fetch(I);if(!q.ok)throw new Error(`HTTP ${q.status}: ${q.statusText}`);const Y=await q.json();Y.features&&Y.features.length>0?(T=T.concat(Y.features),j+=Y.features.length,R=Y.features.length===F):R=!1}return T=T.map(I=>{if(I.properties){const q={};for(const Y of Object.keys(I.properties))q[Y.toLowerCase()]=I.properties[Y];return{...I,properties:q}}return I}),{type:"FeatureCollection",features:T}}async function h(o,d,c){const v=d.map(async w=>{const E=r.layerList.find(P=>P.config.id===w)?.config;if(E&&!(c!==void 0&&E.minZoom!==void 0&&c<E.minZoom)){n("layerLoading",w,!0);try{const P=await a(E.url,o,w,E.where,c);S.value={...S.value,[w]:P},n("layerError",w,null)}catch(P){const Z=P instanceof Error?P.message:"Failed to load";n("layerError",w,Z)}finally{n("layerLoading",w,!1)}}});await Promise.all(v)}async function f(o,d){const c=[...r.visibleLayers];await h(o,c,d)}function k(o){y.value=o.bounds,f(o.bounds,o.zoom)}function L(o){i.value=o;const d=o.getBounds();y.value={west:d.getWest(),south:d.getSouth(),east:d.getEast(),north:d.getNorth()};const c=o.getZoom();n("zoom",c),u.value=p(o),f(y.value,c)}e.watch(()=>r.visibleLayers,async()=>{if(X.value.length>0&&J(),y.value){const o=new Set(r.visibleLayers),d=[...o].filter(c=>!g.value.has(c));if(g.value=new Set(o),d.length>0){const c=i.value?.getZoom();await h(y.value,d,c)}}});function x(o){return r.visibleLayers.has(o)}function N(o){return!!S.value[o.id]}const A=e.computed(()=>r.layerList.filter(o=>o.config.type==="circle"&&x(o.config.id)&&N(o.config)).map(o=>o.config)),B=e.computed(()=>r.layerList.filter(o=>o.config.type==="fill"&&x(o.config.id)&&N(o.config)).map(o=>o.config)),V=e.computed(()=>r.layerList.filter(o=>o.config.type==="fill"&&o.config.outlinePaint&&x(o.config.id)&&N(o.config)).map(o=>o.config)),M=e.computed(()=>r.layerList.filter(o=>o.config.type==="line"&&x(o.config.id)&&N(o.config)).map(o=>o.config));e.watch(M,async o=>{if(o.length<2)return;await e.nextTick();const d=i.value;if(d)for(let c=o.length-1;c>=0;c--){const v=c<o.length-1?o[c+1].id:"highlight-lines";try{d.getLayer(o[c].id)&&d.moveLayer(o[c].id,v)}catch{}}});function W(o){return r.visibleTiledLayers?.has(o)??!1}function z(o){return r.tiledLayerOpacities?.[o]??1}function te(o){return`${o.replace(/\/$/,"")}/tile/{z}/{y}/{x}`}function oe(o){return{type:"raster",tiles:[te(o.url)],tileSize:256,attribution:o.attribution||""}}const Be=e.ref({}),Ne=e.ref(new Set);async function Ae(o){if(!Ne.value.has(o.id)){Ne.value.add(o.id);try{const d=o.url.replace(/\/$/,""),c=await fetch(`${d}?f=json`);if(!c.ok)return;const v=await c.json(),w=v.minScale||0;let E=v.maxScale||0;if(v.layers&&v.layers.length>0)for(const P of v.layers)P.maxScale&&P.maxScale>0&&(E===0||P.maxScale<E)&&(E=P.maxScale);E===0&&(E=72e3),Be.value={...Be.value,[o.id]:{minScale:w,maxScale:E}}}catch{}}}e.onMounted(()=>{if(r.tiledLayers)for(const o of r.tiledLayers)o.scaleBasedRendering&&Ae(o)});function he(o){if(!o.scaleBasedRendering)return"tiled";const d=Be.value[o.id];if(!d)return"tiled";const c=u.value;return c===0||c>d.maxScale?"tiled":"dynamic"}const Ze=e.computed(()=>r.tiledLayers?r.tiledLayers.filter(o=>W(o.id)?o.scaleBasedRendering?he(o)==="tiled":!0:!1):[]),Ue=e.computed(()=>r.tiledLayers?r.tiledLayers.filter(o=>W(o.id)&&o.scaleBasedRendering?he(o)==="dynamic":!1):[]);function ve(o){return{type:"raster",tiles:[`${o.url.replace(/\/$/,"")}/export?bbox={bbox-epsg-3857}&bboxSR=3857&imageSR=3857&size=256,256&format=png32&transparent=true&f=image`],tileSize:256,attribution:o.attribution||""}}function ue(o){return{type:"geojson",data:S.value[o.id],tolerance:0}}function be(o){return r.layerOpacities[o]??1}function de(o){const d=be(o.id),c=o.type==="circle"?"circle-opacity":o.type==="fill"?"fill-opacity":"line-opacity";if(o.type==="fill"&&o.paint["fill-opacity"]===0)return{...o.paint,"fill-opacity":0};const v=o.type==="circle"?"circle-color":o.type==="fill"?"fill-color":"line-color",w={...o.paint},E=w[v],P=w[c]===1,Z=typeof E=="string"&&E.startsWith("rgba(");if(P&&Z){if(d===1)return w;{const F=E.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/);if(F&&F[4]){const[,j,T,R,I]=F,q=parseFloat(I)*d;w[v]=`rgba(${j}, ${T}, ${R}, ${q})`,w[c]=1}return w}}if(Z){const F=E.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/);if(F){const[,j,T,R]=F;w[v]=`rgb(${j}, ${T}, ${R})`}}return w[c]=d,w}function We(o){const d=be(o.id);return{...o.outlinePaint,"line-opacity":d}}const X=e.ref([]),ke=e.ref(null),H=e.ref(0);function me(o){const d=o.replace(/-outline$/,"");return r.layerList.find(v=>v.config.id===d)?.config}function je(o,d){return o.replace(/\{([^}]+)\}/g,(c,v)=>{const w=d[v];return w==null?"":String(w)})}function le(o){return o.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Ee(o,d,c){if(o==null)return"-";if(d?.dateFormat&&typeof o=="number"){const v=new Date(o);if(c&&d.dateFormat==="shortDateShortTime")return v.toLocaleString(void 0,{dateStyle:"short",timeStyle:"short"});switch(d.dateFormat){case"shortDateShortTime":return v.toLocaleDateString();case"longMonthDayYear":return v.toLocaleDateString(void 0,{month:"long",day:"numeric",year:"numeric"});case"shortDate":return v.toLocaleDateString();case"longDate":return v.toLocaleDateString(void 0,{weekday:"long",month:"long",day:"numeric",year:"numeric"});default:return v.toLocaleDateString()}}if(typeof o=="number"){if(o>1e12&&!d)return new Date(o).toLocaleDateString();const v=d?.places,w=d?.digitSeparator??!0;if(v!==void 0){if(Number.isInteger(o)&&v>=0)return String(o);const E=o.toFixed(v);if(w){const P=E.split("."),Z=P[0]||"0",F=P[1],j=Z.replace(/\B(?=(\d{3})+(?!\d))/g,",");return F?`${j}.${F}`:j}return E}return Number.isInteger(o)?String(o):w?o.toLocaleString():String(o)}return String(o)}function xe(o){const d=new Set;return o.filter(c=>{const w=`${c.layer.id.replace(/-outline$/,"")}:${JSON.stringify(c.properties)}`;return d.has(w)?!1:(d.add(w),!0)})}function Me(o,d){const c=S.value[o];if(!c?.features)return null;const v=d.objectid??d.OBJECTID??d.FID;if(v!=null){const w=c.features.find(E=>(E.properties?.objectid??E.properties?.OBJECTID??E.properties?.FID)===v);if(w)return w.geometry}return null}function re(o,d){const c=new Map;return d.forEach((v,w)=>{c.set(v.id,w)}),o.sort((v,w)=>{const E=v.layer.id.replace(/-outline$/,""),P=w.layer.id.replace(/-outline$/,""),Z=c.get(E)??-1;return(c.get(P)??-1)-Z})}function Le(o){const d=i.value;if(!d)return;const c=[];r.layerList.forEach(T=>{const R=T.config;r.visibleLayers.has(R.id)&&(c.push(R.id),R.outlinePaint&&c.push(`${R.id}-outline`))});const v=d.project([o.lngLat.lng,o.lngLat.lat]),w=d.queryRenderedFeatures(v,{layers:c});if(w.length===0)return;const E=xe(w),P=r.layerList.map(T=>T.config),F=re(E,P).map(T=>{const R=T.layer.id.replace(/-outline$/,""),I=me(R);if(!I)return null;const q=Me(I.id,T.properties||{});return{layerId:I.id,layerTitle:I.title,properties:T.properties||{},geometry:q||T.geometry,popupConfig:I.popup}}).filter(T=>T!==null);if(F.length===0)return;F.sort((T,R)=>{if(T.layerId!==R.layerId)return 0;const I=T.popupConfig?.popupSortField;if(!I)return 0;const q=T.properties[I],Y=R.properties[I];if(q==null||Y==null)return 0;const at=T.popupConfig?.popupSortOrder!=="asc";return q<Y?at?1:-1:q>Y?at?-1:1:0}),X.value=F,H.value=0,ke.value=[o.lngLat.lng,o.lngLat.lat];const j=F[0];if(j){const T=me(j.layerId);if(T){const R=C(j.geometry),I=O(T.id,T.type);m.value={geometry:j.geometry,geometryType:R,layerId:T.id,properties:j.properties,originalStyle:I}}}}function J(){X.value=[],ke.value=null,H.value=0,m.value=null}function Te(o){if(X.value.length===0)return;const d=o.target;if(!(d.tagName==="INPUT"||d.tagName==="TEXTAREA"||d.isContentEditable))switch(o.key){case"ArrowLeft":case"ArrowUp":o.preventDefault(),ee();break;case"ArrowRight":case"ArrowDown":o.preventDefault(),ye();break;case"Escape":o.preventDefault(),J();break}}e.onMounted(()=>{window.addEventListener("keydown",Te)}),e.onUnmounted(()=>{window.removeEventListener("keydown",Te)});function ye(){const o=X.value.length;o<=1||H.value>=o-1||(H.value=H.value+1)}function ee(){X.value.length<=1||H.value<=0||(H.value=H.value-1)}const ge=e.computed(()=>X.value.length===0?null:X.value[H.value]),ne=e.computed(()=>{const o=ge.value;return!o||!o.popupConfig?o?.layerTitle||"":je(o.popupConfig.title,o.properties)}),Ve=e.computed(()=>{const o=ge.value;if(!o)return"";let d='<div class="popup-content">';if(d+=`<h3 class="popup-title">${le(ne.value)}</h3>`,o.popupConfig?.fields?.length){d+=`<table class="popup-table" aria-label="${le(ne.value)}">`;for(const c of o.popupConfig.fields){const v=Ee(o.properties[c.field],c.format,o.popupConfig.showTime),w=c.label.toLowerCase(),E=w.includes("url")||w.includes("website"),P=v.startsWith("http://")||v.startsWith("https://")||v.startsWith("www.")||E&&v.includes("."),Z=v.startsWith("http://")||v.startsWith("https://")?v:`https://${v}`,F=P?`<a href="${le(Z)}" target="_blank" rel="noopener noreferrer">${le(v)}</a>`:le(v);d+=`<tr><th scope="row">${le(c.label)}</th><td>${F}</td></tr>`}d+="</table>"}return d+="</div>",d}),ie=e.ref({type:"FeatureCollection",features:[]}),K=e.ref({type:"FeatureCollection",features:[]}),we=e.ref({type:"FeatureCollection",features:[]}),qe={"circle-radius":["get","highlightRadius"],"circle-color":"#00FFFF","circle-opacity":.8,"circle-stroke-width":2,"circle-stroke-color":"#FFFFFF"},Ge={"line-width":["get","highlightWidth"],"line-color":"#00FFFF","line-opacity":.9},Pe={"fill-color":"#808080","fill-opacity":.5},m=e.ref(null);function C(o){return o.type}function O(o,d){const c=me(o);if(!c)return{radius:5,width:2};const v=c.paint||{};if(d==="circle"){const w=v["circle-radius"];return typeof w=="number"?{radius:w}:{radius:5}}if(d==="line"||d==="fill"){const w=v["line-width"];if(typeof w=="number")return{width:w};if(c.outlinePaint&&c.outlinePaint["line-width"]){const E=c.outlinePaint["line-width"];if(typeof E=="number")return{width:E}}return{width:2}}return{radius:5,width:2}}function D(o){return!o||o.length===0?[]:o[0]??[]}function _(o){const{geometry:d,geometryType:c,originalStyle:v}=o;if(c==="Point"||c==="MultiPoint"){const E=(v.radius||5)+3;return{type:"FeatureCollection",features:[{type:"Feature",geometry:d,properties:{highlightRadius:E}}]}}if(c==="LineString"||c==="MultiLineString"){const E=(v.width||2)+3;return{type:"FeatureCollection",features:[{type:"Feature",geometry:d,properties:{highlightWidth:E}}]}}if(c==="Polygon"){const w=d.coordinates,E=D(w),Z=(v.width||2)+3;return{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"LineString",coordinates:E},properties:{highlightWidth:Z}}]}}if(c==="MultiPolygon"){const w=d.coordinates,P=(v.width||2)+3;return{type:"FeatureCollection",features:w.map(F=>({type:"Feature",geometry:{type:"LineString",coordinates:D(F)},properties:{highlightWidth:P}}))}}return{type:"FeatureCollection",features:[]}}function se(o){const{geometry:d,geometryType:c}=o;return c==="Polygon"||c==="MultiPolygon"?{type:"FeatureCollection",features:[{type:"Feature",geometry:d,properties:{}}]}:{type:"FeatureCollection",features:[]}}function Se(o){if(!o){ht();return}const d=_(o);o.geometryType==="Point"||o.geometryType==="MultiPoint"?(ie.value=d,K.value={type:"FeatureCollection",features:[]},we.value={type:"FeatureCollection",features:[]}):(K.value=d,ie.value={type:"FeatureCollection",features:[]},we.value=se(o))}function ht(){ie.value={type:"FeatureCollection",features:[]},K.value={type:"FeatureCollection",features:[]},we.value={type:"FeatureCollection",features:[]}}e.watch(m,o=>{Se(o)}),e.watch(()=>r.visibleLayers,o=>{m.value&&!o.has(m.value.layerId)&&(m.value=null,J())},{deep:!0}),e.watch(H,()=>{const o=ge.value;if(!o){m.value=null;return}const d=me(o.layerId);if(d){const c=C(o.geometry),v=O(d.id,d.type);m.value={geometry:o.geometry,geometryType:c,layerId:d.id,properties:o.properties,originalStyle:v}}});const nt=e.ref(null);function vt(o){const[d,c]=o.geometry.coordinates;nt.value=[d,c]}return(o,d)=>(e.openBlock(),e.createElementBlock("div",bt,[e.createVNode(e.unref(Q.Map),{ref_key:"mapRef",ref:s,zoom:r.initialZoom,center:r.initialCenter,"navigation-controls":{position:r.navigationControlPosition},"geolocation-control":{position:r.geolocationControlPosition},"basemap-change-controls":{toggle:!0,dropdown:!0,position:r.basemapControlPosition},"map-search-control":{position:r.searchControlPosition},"enable-cyclomedia":!0,"cyclomedia-config":r.cyclomediaConfig,"cyclomedia-button-position":r.cyclomediaButtonPosition,"enable-pictometry":!0,"pictometry-credentials":r.pictometryCredentials,"pictometry-button-position":r.pictometryButtonPosition,"tool-panel-layout":"vertical","tool-panel-split-ratio":50,onZoom:b,onClick:J,onMoveend:k,onLoad:L,onSearchResult:vt},{default:e.withCtx(()=>[r.drawControlPosition!==null?(e.openBlock(),e.createBlock(e.unref(Q.DrawTool),{key:0,position:r.drawControlPosition},null,8,["position"])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ze.value,c=>(e.openBlock(),e.createBlock(e.unref(Q.RasterLayer),{id:"tiled-"+c.id,key:"tiled-"+c.id,source:oe(c),paint:{"raster-opacity":z(c.id)},minzoom:c.minZoom,maxzoom:c.maxZoom},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ue.value,c=>(e.openBlock(),e.createBlock(e.unref(Q.RasterLayer),{id:"dynamic-"+c.id,key:"dynamic-"+c.id,source:ve(c),paint:{"raster-opacity":z(c.id)},minzoom:c.minZoom,maxzoom:c.maxZoom},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.value,c=>(e.openBlock(),e.createBlock(e.unref(Q.CircleLayer),{id:c.id,key:c.id,source:ue(c),paint:de(c),minzoom:c.minZoom,maxzoom:c.maxZoom,"before-id":"highlight-circles",onClick:Le},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(B.value,c=>(e.openBlock(),e.createBlock(e.unref(Q.FillLayer),{id:c.id,key:c.id,source:ue(c),paint:de(c),minzoom:c.minZoom,maxzoom:c.maxZoom,"before-id":"highlight-circles",onClick:Le},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,c=>(e.openBlock(),e.createBlock(e.unref(Q.LineLayer),{id:c.id+"-outline",key:c.id+"-outline",source:ue(c),paint:We(c),minzoom:c.minZoom,maxzoom:c.maxZoom,"before-id":"highlight-lines",onClick:Le},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(M.value,c=>(e.openBlock(),e.createBlock(e.unref(Q.LineLayer),{id:c.id,key:c.id,source:ue(c),paint:de(c),minzoom:c.minZoom,maxzoom:c.maxZoom,"before-id":"highlight-lines",onClick:Le},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),e.createVNode(e.unref(Q.CircleLayer),{id:"highlight-circles",key:"highlight-circles-layer",source:{type:"geojson",data:ie.value},paint:qe},null,8,["source"]),e.createVNode(e.unref(Q.FillLayer),{id:"highlight-fill",key:"highlight-fill-layer",source:{type:"geojson",data:we.value},paint:Pe},null,8,["source"]),e.createVNode(e.unref(Q.LineLayer),{id:"highlight-lines",key:"highlight-lines-layer",source:{type:"geojson",data:K.value},paint:Ge},null,8,["source"]),e.createVNode(e.unref(Q.MapMarker),{"lng-lat":nt.value,color:"#2176d2"},null,8,["lng-lat"]),ge.value&&ke.value?(e.openBlock(),e.createBlock(e.unref(Q.MapPopup),{key:1,"lng-lat":ke.value,html:Ve.value,"close-on-click":!1,offset:[0,-15],"show-navigation":X.value.length>1,"current-feature-index":H.value,"total-features":X.value.length,"layer-name":ge.value.layerTitle,onClose:J,onNext:ye,onPrevious:ee},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"])]))}}),ce=(t,l)=>{const r=t.__vccOpts||t;for(const[n,s]of l)r[n]=s;return r},ut=ce(kt,[["__scopeId","data-v-92158e58"]]);function Je(t){let l=t.split("?")[0]||t;return l=l.replace(/\/query$/,""),l=l.replace(/\/$/,""),l.toLowerCase()}const Lt=["disabled"],wt=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 l=t,r=u=>"href"in u&&u.href!==void 0||"to"in u&&u.to!==void 0,n=e.computed(()=>G.cn("phila-button",`phila-button--${l.variant}`,l.size&&`is-${l.size}`,l.iconOnly&&"icon-button",l.iconOnly&&l.variant==="standard"&&"icon-button--standard",l.className)),s=e.computed(()=>r(l)?"to"in l&&l.to!==void 0?{to:l.to,disabled:l.disabled,className:n.value}:{href:l.href,target:l.target,rel:l.rel,disabled:l.disabled,className:n.value}:{}),i=e.computed(()=>({iconDefinition:l.iconDefinition,iconClass:l.iconClass,src:l.src,iconRight:l.iconRight,iconOnly:l.iconOnly,text:l.text,size:l.size}));return(u,b)=>r(l)?(e.openBlock(),e.createBlock(e.unref(G.BaseLink),e.mergeProps({key:0},{...s.value,...u.$attrs},{role:"button"}),{default:e.withCtx(()=>[e.createVNode(e.unref(G.ActionContent),e.normalizeProps(e.guardReactiveProps(i.value)),{default:e.withCtx(()=>[e.renderSlot(u.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(l.text),1)])]),_:3},16)]),_:3},16)):(e.openBlock(),e.createElementBlock("button",e.mergeProps({key:1,type:"button",disabled:l.disabled,class:n.value},u.$attrs),[e.createVNode(e.unref(G.ActionContent),e.normalizeProps(e.guardReactiveProps(i.value)),{default:e.withCtx(()=>[e.renderSlot(u.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(l.text),1)])]),_:3},16)],16,Lt))}});var St={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"]},Ct=St,Bt={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"]},Et=Bt;const xt=["for"],Vt={class:"state-layer"},$t={class:"content"},Nt={class:"input-text-container"},Mt=["id","placeholder","aria-label"],Tt={key:1,class:"has-text-body-small phila-supporting-text"},Pt={key:2,class:"has-text-body-small phila-error-text"},Ft=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:l}){const r=e.useAttrs(),n=t,s=e.computed(()=>typeof n.error=="string"?n.error:n.error[0]),i=e.toRef(n,"id"),u=l,b=e.ref(""),p=e.computed({get:()=>n.modelValue!==void 0?n.modelValue:b.value,set:f=>{u("update:modelValue",f),b.value=f}}),S=e.computed(()=>{const f=["default-class"];return r.disabled!=null&&f.push("phila-input--disabled"),s.value&&f.push("phila-input--error"),r.required!=null&&f.push("phila-input--required"),G.cn(...f)}),y=e.computed(()=>{const f=[];return p.value!==""&&f.push("phila-text-field--filled"),n.className&&f.push(n.className),G.cn(...f)}),g=e.computed(()=>{if(!(n.label||r["aria-label"]))return n.placeholder||void 0}),a=e.ref(null),h=f=>{f.target.closest("button")||a.value?.focus()};return(f,k)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["phila-input",S.value])},[n.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:i.value,class:"has-text-label-small phila-label"},e.toDisplayString(n.label),9,xt)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["phila-text-field",y.value]),onClick:h},[e.createElementVNode("div",Vt,[n.leadingIcon?(e.openBlock(),e.createBlock(e.unref(G.Icon),{key:0,"icon-class":n.leadingIcon,inline:"",decorative:""},null,8,["icon-class"])):e.createCommentVNode("",!0),e.createElementVNode("div",$t,[e.createElementVNode("div",Nt,[e.withDirectives(e.createElementVNode("input",e.mergeProps({id:i.value,ref_key:"inputRef",ref:a,"onUpdate:modelValue":k[0]||(k[0]=L=>p.value=L),class:"phila-text-field-input has-text-body-default",placeholder:n.placeholder,"aria-label":g.value},e.unref(r)),null,16,Mt),[[e.vModelDynamic,p.value]])])]),p.value!=""?(e.openBlock(),e.createBlock(e.unref(wt),{key:1,variant:"standard",size:"small","icon-only":"","icon-definition":e.unref(Et),onClick:k[1]||(k[1]=L=>p.value="")},null,8,["icon-definition"])):e.createCommentVNode("",!0),n.trailingIcon?(e.openBlock(),e.createBlock(e.unref(G.Icon),{key:2,size:"small","icon-class":n.trailingIcon,inline:"",decorative:""},null,8,["icon-class"])):e.createCommentVNode("",!0),e.renderSlot(f.$slots,"trailing-action")])],2),n.supportingText?(e.openBlock(),e.createElementBlock("div",Tt,e.toDisplayString(n.supportingText),1)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("div",Pt,[e.createVNode(e.unref(G.Icon),{"icon-definition":e.unref(Ct),size:"small",inline:"",decorative:""},null,8,["icon-definition"]),e.createTextVNode(" "+e.toDisplayString(s.value),1)])):e.createCommentVNode("",!0)],2))}});var zt={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"]},Dt={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"]},lt={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"]},Rt={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 _t={key:0,class:"loading-indicator",role:"status"},At=["aria-label"],Zt={key:2,class:"zoom-indicator"},Ut=e.defineComponent({__name:"LayerStatusIndicators",props:{loading:{type:Boolean},error:{},unavailable:{type:Boolean}},setup(t){return(l,r)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[t.loading&&!t.unavailable?(e.openBlock(),e.createElementBlock("span",_t," Loading... ")):e.createCommentVNode("",!0),t.error?(e.openBlock(),e.createElementBlock("span",{key:1,class:"error-indicator","aria-label":t.error,role:"status"}," Error ",8,At)):e.createCommentVNode("",!0),t.unavailable?(e.openBlock(),e.createElementBlock("span",Zt," (zoom in) ")):e.createCommentVNode("",!0)],64))}}),ze=ce(Ut,[["__scopeId","data-v-19b1b402"]]),Wt={class:"opacity-control"},jt=["for"],qt=["id","value","aria-label"],Gt=e.defineComponent({__name:"LayerOpacitySlider",props:{layerId:{},layerName:{},opacity:{}},emits:["update:opacity"],setup(t,{emit:l}){const r=l;function n(s){const i=s.target;r("update:opacity",parseFloat(i.value))}return(s,i)=>(e.openBlock(),e.createElementBlock("div",Wt,[e.createElementVNode("label",{class:"opacity-label",for:"opacity-"+t.layerId}," Opacity: "+e.toDisplayString(Math.round(t.opacity*100))+"% ",9,jt),e.createElementVNode("input",{id:"opacity-"+t.layerId,type:"range",min:"0",max:"1",step:"0.05",value:t.opacity,"aria-label":"Opacity for "+t.layerName,class:"opacity-slider",onInput:n},null,40,qt)]))}}),Ke=ce(Gt,[["__scopeId","data-v-1a025f6a"]]),Ht=["aria-label"],Jt={class:"legend-label"},Kt=e.defineComponent({__name:"LayerLegend",props:{items:{},label:{}},setup(t){return(l,r)=>(e.openBlock(),e.createElementBlock("ul",{class:"layer-legend","aria-label":t.label},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(n,s)=>(e.openBlock(),e.createElementBlock("li",{key:s,class:"legend-item"},[n.type==="circle"?(e.openBlock(),e.createElementBlock("span",{key:0,class:"legend-symbol legend-circle",style:e.normalizeStyle({backgroundColor:n.color}),"aria-hidden":"true"},null,4)):n.type==="line"?(e.openBlock(),e.createElementBlock("span",{key:1,class:"legend-symbol legend-line",style:e.normalizeStyle({backgroundColor:n.color,height:`${n.width||2}px`}),"aria-hidden":"true"},null,4)):n.type==="fill"?(e.openBlock(),e.createElementBlock("span",{key:2,class:"legend-symbol legend-fill",style:e.normalizeStyle({backgroundColor:n.color}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),e.createElementVNode("span",Jt,e.toDisplayString(n.label),1)]))),128))],8,Ht))}}),Qe=ce(Kt,[["__scopeId","data-v-62e210e3"]]);function Xe(t){function l(u){return t().visibleLayerIds.has(u)}function r(u){return t().layerOpacities[u]??1}function n(u){return t().loadingLayerIds.has(u)}function s(u){return t().layerErrors[u]||null}function i(u){const b=t().currentZoom,p=u.minZoom,S=u.maxZoom;return!(p!==void 0&&b<p||S!==void 0&&b>S)}return{isVisible:l,getLayerOpacity:r,isLayerLoading:n,getLayerError:s,isLayerAvailableAtZoom:i}}const Qt={class:"layer-panel"},Xt={key:0,class:"search-box"},Yt={key:1,class:"topics-container"},eo={class:"layer-row"},to=["href","aria-label"],oo={key:1,class:"metadata-placeholder"},no=["checked","disabled","onChange"],ao={class:"layer-title"},lo={key:0,class:"no-results"},ro=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:l}){const r=t,n=l,s=e.computed(()=>{if(!r.searchQuery.trim())return r.layerList;const f=r.searchQuery.toLowerCase();return r.layerList.filter(k=>k.config.title.toLowerCase().includes(f))});function i(f){const k=Je(f);return r.layerMetadata[k]||null}const u=e.computed(()=>r.layerList.some(f=>i(f.config.url))),{isVisible:b,getLayerOpacity:p,isLayerLoading:S,getLayerError:y,isLayerAvailableAtZoom:g}=Xe(()=>({visibleLayerIds:r.visibleLayers,layerOpacities:r.layerOpacities,loadingLayerIds:r.loadingLayers,layerErrors:r.layerErrors,currentZoom:r.currentZoom})),a=e.computed({get:()=>r.searchQuery,set:f=>n("updateSearch",f)});function h(f){n("toggleLayer",f)}return(f,k)=>(e.openBlock(),e.createElementBlock("div",Qt,[t.showSearch?(e.openBlock(),e.createElementBlock("div",Xt,[e.createVNode(e.unref(Ft),{modelValue:a.value,"onUpdate:modelValue":k[0]||(k[0]=L=>a.value=L),placeholder:t.searchPlaceholder,"class-name":"layer-search-field"},{"trailing-action":e.withCtx(()=>[e.createVNode(e.unref(G.Icon),{"icon-definition":e.unref(zt),size:"small",inline:"",decorative:""},null,8,["icon-definition"])]),_:1},8,["modelValue","placeholder"])])):e.createCommentVNode("",!0),t.mode==="topics"?(e.openBlock(),e.createElementBlock("div",Yt,[e.renderSlot(f.$slots,"topics",{},()=>[k[2]||(k[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":u.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,L=>(e.openBlock(),e.createElementBlock("div",{key:L.config.id,class:"layer-item"},[e.createElementVNode("div",eo,[i(L.config.url)?(e.openBlock(),e.createElementBlock("a",{key:0,href:i(L.config.url)||"",target:"_blank",rel:"noopener noreferrer",class:"metadata-link","aria-label":"View metadata for "+L.config.title,onClick:k[1]||(k[1]=e.withModifiers(()=>{},["stop"]))},[e.createVNode(e.unref(G.Icon),{"icon-definition":e.unref(Rt),size:"small",inline:"",decorative:""},null,8,["icon-definition"])],8,to)):u.value?(e.openBlock(),e.createElementBlock("span",oo)):e.createCommentVNode("",!0),e.createElementVNode("label",{class:e.normalizeClass(["layer-checkbox",{"layer-unavailable":!e.unref(g)(L.config),"layer-error":e.unref(y)(L.config.id)}])},[e.createElementVNode("input",{type:"checkbox",checked:e.unref(b)(L.config.id),disabled:!e.unref(g)(L.config),onChange:x=>h(L.config.id)},null,40,no),e.createElementVNode("span",ao,[e.createTextVNode(e.toDisplayString(L.config.title)+" ",1),e.createVNode(ze,{loading:e.unref(S)(L.config.id),error:e.unref(y)(L.config.id),unavailable:!e.unref(g)(L.config)},null,8,["loading","error","unavailable"])])],2)]),t.showOpacity&&e.unref(b)(L.config.id)&&e.unref(g)(L.config)?(e.openBlock(),e.createBlock(Ke,{key:0,"layer-id":L.config.id,"layer-name":L.config.title,opacity:e.unref(p)(L.config.id),"onUpdate:opacity":x=>n("setOpacity",L.config.id,x)},null,8,["layer-id","layer-name","opacity","onUpdate:opacity"])):e.createCommentVNode("",!0),t.showLegend&&e.unref(b)(L.config.id)&&e.unref(g)(L.config)&&L.config.legend?.length?(e.openBlock(),e.createBlock(Qe,{key:1,items:L.config.legend,label:"Legend for "+L.config.title},null,8,["items","label"])):e.createCommentVNode("",!0)]))),128)),s.value.length===0?(e.openBlock(),e.createElementBlock("div",lo,'No layers match "'+e.toDisplayString(t.searchQuery)+'"',1)):e.createCommentVNode("",!0)],2))]))}}),dt=ce(ro,[["__scopeId","data-v-e48bb978"]]),io={esriSLSSolid:null,esriSLSDash:[4,3],esriSLSDot:[1,3],esriSLSDashDot:[4,3,1,3],esriSLSDashDotDot:[4,3,1,3,1,3],esriSLSNull:null};function Oe(t){if(t)return io[t]??void 0}function so(t,l,r,n,s){const i=[];let u=l[0],b=[t[0]],p=0;for(let a=1;a<t.length;a++)l[a]===u?b.push(t[a]):(i.push({style:u,breaks:b,startIndex:p}),u=l[a],b=[t[a]],p=a);i.push({style:u,breaks:b,startIndex:p});const S=[],y=new Set;let g=n.minValue??0;for(let a=0;a<i.length;a++){const h=i[a],f=h.breaks,k=Oe(h.style),L=a===0?null:i[a-1].breaks[i[a-1].breaks.length-1].classMaxValue,x=f[f.length-1].classMaxValue;let N;const A=!!n.defaultSymbol;L===null?N=`${!A&&n.minValue!=null?`${r} >= ${n.minValue} AND `:""}${r} <= ${x}`:a===i.length-1&&A?N=`${r} > ${L}`:N=`${r} > ${L} AND ${r} <= ${x}`;const B={"line-opacity":ae(s)};if(k&&(B["line-dasharray"]=k),f.length===1)B["line-color"]=$(f[0].symbol?.color),B["line-width"]=U(f[0].symbol?.width||2);else{const z=["step",["get",r]],te=["step",["get",r]];z.push($(f[0].symbol?.color)),te.push(U(f[0].symbol?.width||2));for(let oe=1;oe<f.length;oe++)z.push(f[oe-1].classMaxValue),z.push($(f[oe].symbol?.color)),te.push(f[oe-1].classMaxValue),te.push(U(f[oe].symbol?.width||2));B["line-color"]=z,B["line-width"]=te}const V=[];for(const z of f)V.push({type:"line",color:$(z.symbol?.color),width:U(z.symbol?.width||2),label:z.label||`${g} - ${z.classMaxValue}`}),g=z.classMaxValue+1;const M=h.style.replace("esriSLS","").toLowerCase();let W;a===0?W="":y.has(M)?W=`-${M}-${a}`:W=`-${M}`,y.add(M),S.push({suffix:W,where:N,paint:B,legend:V})}return S}function $(t){if(!t||!Array.isArray(t)||t.length<3)return"#888888";const l=t[0],r=t[1],n=t[2],i=(t[3]??255)/255;return i===1?`#${l.toString(16).padStart(2,"0")}${r.toString(16).padStart(2,"0")}${n.toString(16).padStart(2,"0")}`:`rgba(${l}, ${r}, ${n}, ${i.toFixed(2)})`}function ae(t){return t!==void 0?t:1}function U(t){return Math.round(t*(96/72)*10)/10}const co=559082264;function rt(t){return!t||t<=0?null:Math.round(Math.log2(co/t)*100)/100}function uo(t,l){const r={};if(t&&t>0){const n=rt(t);n!==null&&(r.minZoom=n)}if(l&&l>0){const n=rt(l);n!==null&&(r.maxZoom=n)}return r}function Re(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 pe(t){return!(!t||t.style==="esriSLSNull"||t.color===null||t.width===0||t.color&&t.color[3]===0)}function He(t){return String(t)}function ft(t,l,r){const n=t.symbol,s=Re(n);let i={},u=[],b=null;if(s==="fill"&&n){const p=n.color===null?0:n.color?.[3]??255,S=p===0?"rgba(0, 0, 0, 0)":$(n.color),y=p===0?0:p<255?1:ae(l);if(i={"fill-color":S,"fill-opacity":y},pe(n.outline)){const g=U(n.outline.width||1);b={"line-color":$(n.outline.color),"line-width":g}}u=[{type:"fill",color:$(n.color),label:t.label||"Feature"}]}else if(s==="line"&&n){i={"line-color":$(n.color),"line-width":U(n.width||1),"line-opacity":ae(l)};const p=Oe(n.style);p&&(i["line-dasharray"]=p),u=[{type:"line",color:$(n.color),width:U(n.width||1),label:t.label||"Feature"}]}else if(s==="circle"&&n){const p=Math.round((n.size||6)*.71*100)/100;i={"circle-color":$(n.color),"circle-radius":p,"circle-opacity":ae(l)},pe(n.outline)&&(i["circle-stroke-color"]=$(n.outline.color),i["circle-stroke-width"]=U(n.outline.width||1)),u=[{type:"circle",color:$(n.color),label:t.label||"Feature"}]}return{paint:i,legend:u,geomType:s,outlinePaint:b}}function fo(t,l,r){const n=t.field1.toLowerCase(),s=t.uniqueValueInfos||[],i=t.defaultSymbol;if(s.length===0)return ft({...t,symbol:i},l);const u=s[0]?.symbol||i,b=Re(u);let p={};const S=[];let y=null;if(b==="fill"){const g=["match",["to-string",["get",n]]];for(const a of s){g.push(He(a.value)),g.push($(a.symbol?.color));const h=String(a.value),k=r?.get(h)||a.label||h;S.push({type:"fill",color:$(a.symbol?.color),label:k})}if(g.push(i?$(i.color):"rgba(0, 0, 0, 0)"),p={"fill-color":g,"fill-opacity":ae(l)},pe(u?.outline)){const a=U(Math.max(u.outline.width||1,1));y={"line-color":$(u.outline.color),"line-width":a}}}else if(b==="line"){const g=["match",["to-string",["get",n]]];for(const f of s){g.push(He(f.value)),g.push($(f.symbol?.color));const k=String(f.value),x=r?.get(k)||f.label||k;S.push({type:"line",color:$(f.symbol?.color),width:U(f.symbol?.width||1),label:x})}g.push(i?$(i.color):"rgba(0, 0, 0, 0)"),p={"line-color":g,"line-width":U(u?.width||2),"line-opacity":ae(l)};const a=s.map(f=>f.symbol?.style).filter(Boolean),h=[...new Set(a)];if(h.length===1){const f=Oe(h[0]);f&&(p["line-dasharray"]=f)}}else if(b==="circle"){const g=["match",["to-string",["get",n]]];for(const h of s){g.push(He(h.value)),g.push($(h.symbol?.color));const f=String(h.value),L=r?.get(f)||h.label||f;S.push({type:"circle",color:$(h.symbol?.color),label:L})}g.push(i?$(i.color):"rgba(0, 0, 0, 0)");const a=Math.round((u?.size||6)*.71*100)/100;p={"circle-color":g,"circle-radius":a,"circle-opacity":ae(l)},pe(u?.outline)&&(p["circle-stroke-color"]=$(u.outline.color),p["circle-stroke-width"]=U(u.outline.width||1))}return{paint:p,legend:S,geomType:b,outlinePaint:y}}function po(t,l){const r=t.field.toLowerCase(),n=t.classBreakInfos||[],s=t.visualVariables?.find(y=>y.type==="colorInfo");if(s?.stops&&s.stops.length>0)return mo(s,r,t,l);if(n.length===0)return{paint:{},legend:[],geomType:"fill",outlinePaint:null};const i=n[0]?.symbol,u=Re(i);let b={};const p=[];let S=null;if(u==="fill"){const y=["step",["get",r]];y.push($(n[0]?.symbol?.color));for(let g=0;g<n.length;g++){const a=n[g];g>0&&(y.push(n[g-1].classMaxValue),y.push($(a.symbol?.color))),p.push({type:"fill",color:$(a.symbol?.color),label:a.label||`${a.classMaxValue}`})}if(b={"fill-color":y,"fill-opacity":ae(l)},pe(i?.outline)){const g=U(i.outline.width||1);S={"line-color":$(i.outline.color),"line-width":g}}}else if(u==="line"){const y=n.map(x=>x.symbol?.style||"esriSLSSolid"),g=[...new Set(y)];if(g.length>1){const x=so(n,y,r,t,l);return{paint:{},legend:[],geomType:u,outlinePaint:S,splitLayers:x}}const h=["step",["get",r]];h.push($(n[0]?.symbol?.color));let f=t.minValue??0;for(let x=0;x<n.length;x++){const N=n[x];x>0&&(h.push(n[x-1].classMaxValue),h.push($(N.symbol?.color))),p.push({type:"line",color:$(N.symbol?.color),width:U(N.symbol?.width||i?.width||2),label:N.label||`${f} - ${N.classMaxValue}`}),f=N.classMaxValue+1}const k=U(i?.width||2);b={"line-color":h,"line-width":k,"line-opacity":ae(l)};const L=Oe(g[0]);L&&(b["line-dasharray"]=L)}return{paint:b,legend:p,geomType:u,outlinePaint:S}}function mo(t,l,r,n){const s=t.stops||[];if(s.length===0)return{paint:{},legend:[],geomType:"fill",outlinePaint:null};const i=r.classBreakInfos?.[0]?.symbol||r.defaultSymbol,u=Re(i);let b={};const p=[];let S=null;if(u==="fill"){const y=["interpolate",["linear"],["get",l]];for(const a of s)y.push(a.value),y.push($(a.color)),p.push({type:"fill",color:$(a.color),label:a.label||`${a.value}`});if(b={"fill-color":["case",["==",["get",l],null],"rgba(0, 0, 0, 0)",y],"fill-opacity":ae(n)},pe(i?.outline)){const a=U(i.outline.width||1);S={"line-color":$(i.outline.color),"line-width":a}}}return{paint:b,legend:p,geomType:u,outlinePaint:S}}function yo(t,l,r,n){if(!t?.renderer)return{paint:{},legend:[],geomType:"fill",outlinePaint:null};const s=t.renderer;switch(s.type){case"simple":return ft(s,l);case"uniqueValue":return fo(s,l,r);case"classBreaks":return po(s,l);default:return{paint:{},legend:[],geomType:"fill",outlinePaint:null}}}function go(t){if(!t)return null;const l=(t.title||"").replace(/\{([^}]+)\}/g,(i,u)=>`{${u.toLowerCase()}}`),n=(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}),s={title:l,fields:n};return t.showTime&&(s.showTime=!0),s}function ho(t){return t?.definitionExpression}function vo(t){return(t.includes("_")?t.split("_").slice(1).join(" "):t).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function bo(t){return t.includes("_")?t.split("_").slice(1).join(" "):t}function ko(t){const l=new Map;if(!t)return l;const r=t.split(`
2
- `),n=/^(\d{1,3})\s+(.+)$/;for(const s of r){const i=s.trim().match(n);if(i){const[,u,b]=i;u&&b&&l.set(u,b.trim())}}return l}async function Lo(t){try{const l=await fetch(`${t}?f=json`);if(!l.ok)return null;const r=await l.json();return r.drawingInfo?{drawingInfo:r.drawingInfo,description:r.description}:null}catch{return null}}function it(t){const l={id:t.id,title:t.title,type:t.type,url:t.url,opacity:t.opacity,paint:t.paint,legend:t.legend,popup:t.popup};return t.where&&(l.where=t.where),t.minZoom!==void 0&&(l.minZoom=t.minZoom),t.maxZoom!==void 0&&(l.maxZoom=t.maxZoom),t.outlinePaint&&(l.outlinePaint=t.outlinePaint),l}async function Ye(t){const l=t.operationalLayers||[],r=[],n=["Zoning and Planning_Land Use"];for(const s of l)if(s.url&&!s.title?.toLowerCase().includes("(under construction)")&&!(s.url&&/\/MapServer(\/\d+)?$/i.test(s.url)))try{let i=s.layerDefinition?.drawingInfo,u;const b=!i||!i.renderer,p=n.includes(s.title),S=i?.renderer?.uniqueValueInfos?.[0]?.symbol?.outline||i?.renderer?.defaultSymbol?.outline;if((b||p)&&s.url){const V=await Lo(s.url);if(V){if(i=V.drawingInfo,S&&pe(S)&&i?.renderer){const M=i.renderer,W=M.uniqueValueInfos?.[0]?.symbol?.outline||M.defaultSymbol?.outline;if(!pe(W)){for(const z of M.uniqueValueInfos||[])z.symbol&&(z.symbol.outline=S);M.defaultSymbol&&(M.defaultSymbol.outline=S)}}V.description&&(u=ko(V.description),u.size>0)}}const{paint:y,legend:g,geomType:a,outlinePaint:h,splitLayers:f}=yo(i,s.opacity,u,s.title),k=go(s.popupInfo),L=ho(s.layerDefinition),x=uo(s.layerDefinition?.minScale,s.layerDefinition?.maxScale),N=vo(s.title),A=bo(s.title),B=s.opacity??1;if(f&&f.length>0)for(const V of f)r.push(it({id:`${N}${V.suffix}`,title:A,type:a,url:s.url,opacity:B,paint:V.paint,legend:V.legend,popup:k,where:L?`(${L}) AND (${V.where})`:V.where,minZoom:x.minZoom,maxZoom:x.maxZoom}));else r.push(it({id:N,title:A,type:a,url:s.url,opacity:B,paint:y,legend:g,popup:k,where:L,minZoom:x.minZoom,maxZoom:x.maxZoom,outlinePaint:h}))}catch{}return r.sort((s,i)=>s.title.localeCompare(i.title)),r}const st={},et="376af635c84643cd816a8c5d017a53aa",wo=et;function _e(t,l){let r=`https://www.arcgis.com/sharing/rest/content/items/${t}/data?f=json`;return l&&(r+=`&token=${l}`),r}function So(){return _e(et)}const De=new Map,$e=new Map;function pt(t){t?(De.delete(t),$e.delete(t)):(De.clear(),$e.clear())}let Fe,ct=0;async function Co(){const t=typeof{url:typeof document>"u"?require("url").pathToFileURL(__filename).href:Ce&&Ce.tagName.toUpperCase()==="SCRIPT"&&Ce.src||new URL("index.js",document.baseURI).href}<"u"&&st?.VITE_AGO_USERNAME,l=typeof{url:typeof document>"u"?require("url").pathToFileURL(__filename).href:Ce&&Ce.tagName.toUpperCase()==="SCRIPT"&&Ce.src||new URL("index.js",document.baseURI).href}<"u"&&st?.VITE_AGO_PASSWORD;if(!(!t||!l)){if(Fe&&Date.now()<ct-3e5)return Fe;try{const n=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:l,referer:window.location.origin||"https://localhost",expiration:"120"})})).json();return n.error?void 0:(Fe=n.token,ct=n.expires,Fe)}catch{return}}}async function Bo(t,l){const r=_e(t,l),n=await fetch(r,{cache:"no-store"});if(!n.ok)throw new Error(`Failed to fetch WebMap: ${n.status} ${n.statusText}`);const s=await n.json();if(s.error)throw new Error(`ArcGIS error: ${s.error.message||s.error.code||"Unknown error"}`);return s}async function Eo(t){try{const l=await Co(),r=await Bo(t,l);return await Ye(r)}catch(l){throw new Error(`Failed to load dynamic layer configs: ${l instanceof Error?l.message:"Unknown error"}`)}}async function Ie(t=et){const l=De.get(t);if(l)return l;const r=$e.get(t);if(r)return r;const n=(async()=>{try{const s=await Eo(t);return De.set(t,s),s}finally{$e.delete(t)}})();return $e.set(t,n),n}function mt(t){const l=e.ref({}),r=new Map;for(const a of t)l.value[a.id]={data:null,loading:!1,error:null,lastFetched:null};async function n(a){const h=a.id;l.value={...l.value,[h]:{data:l.value[h]?.data??null,lastFetched:l.value[h]?.lastFetched??null,loading:!0,error:null}};try{let f;if(a.type==="http-get"){const k=await fetch(a.url,{method:"GET",...a.options});if(!k.ok)throw new Error(`HTTP ${k.status}: ${k.statusText}`);f=await k.json()}else if(a.type==="http-post"){const k=await fetch(a.url,{method:"POST",...a.options});if(!k.ok)throw new Error(`HTTP ${k.status}: ${k.statusText}`);f=await k.json()}else if(a.type==="esri"){const L=`${a.url.replace(/\/$/,"")}/query?where=1%3D1&outFields=*&returnGeometry=false&f=json`,x=await fetch(L,a.options);if(!x.ok)throw new Error(`HTTP ${x.status}: ${x.statusText}`);f=(await x.json()).features?.map(A=>A.attributes)||[]}else throw new Error(`Unknown data source type: ${a.type}`);a.transform&&(f=a.transform(f)),l.value={...l.value,[h]:{data:f,loading:!1,error:null,lastFetched:Date.now()}}}catch(f){const k=f instanceof Error?f.message:"Unknown error";l.value={...l.value,[h]:{data:l.value[h]?.data??null,lastFetched:l.value[h]?.lastFetched??null,loading:!1,error:k}}}}async function s(){await Promise.all(t.map(a=>n(a)))}async function i(a){const h=t.find(f=>f.id===a);h&&await n(h)}function u(a){return l.value[a]?.data??null}const b=e.computed(()=>Object.values(l.value).some(a=>a.loading));function p(a){return l.value[a]?.loading??!1}function S(a){return l.value[a]?.error??null}function y(){for(const a of t)if(a.pollInterval&&a.pollInterval>0){const h=window.setInterval(()=>{n(a)},a.pollInterval);r.set(a.id,h)}}function g(){for(const[,a]of r)window.clearInterval(a);r.clear()}return e.onMounted(()=>{s(),y()}),e.onUnmounted(()=>{g()}),{state:e.readonly(l),isLoading:b,fetchAll:s,refetch:i,getData:u,isSourceLoading:p,getError:S,stopPolling:g}}const xo={class:"layerboard-layout"},Vo=["aria-expanded"],$o={key:0,class:"layerboard-subtitle"},No={class:"layerboard-mobile-menu-content"},Mo={class:"layerboard-main"},To={key:0,class:"layerboard-loading",role:"status","aria-live":"polite"},Po={key:1,class:"layerboard-error",role:"alert"},Fo=["aria-expanded","aria-label"],zo={key:0},Do={key:1},Io={class:"sr-only","aria-live":"polite"},Oo=e.defineComponent({__name:"Layerboard",props:{title:{},subtitle:{default:void 0},webMapId:{},themeColor:{default:"#0f4d90"},cyclomediaConfig:{default:void 0},pictometryCredentials:{default:void 0},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:{default:void 0},initialCenter:{default:void 0}},emits:["configs-loaded","load-error","zoom"],setup(t,{expose:l,emit:r}){const n=t,s=r,i=e.ref([]),u=e.ref(!0),b=e.ref(null),p=e.ref(12),S=e.ref(""),y=e.ref(new Set),g=e.ref({}),a=e.ref(new Set),h=e.ref({}),f=e.ref({}),k=e.ref(new Set),L=e.ref({});function x(){const m={};for(const C of n.tiledLayers)m[C.id]=C.opacity??1;L.value=m}function N(m){k.value.has(m)?k.value.delete(m):k.value.add(m),k.value=new Set(k.value)}function A(m,C){C?k.value.add(m):k.value.delete(m),k.value=new Set(k.value)}function B(m,C){L.value={...L.value,[m]:C}}const V=n.dataSources.length>0?mt(n.dataSources):null,M=e.computed(()=>V?.state.value??{}),W=e.computed(()=>V?.isLoading.value??!1);function z(m){return V?.getData(m)??null}function te(m){return V?.refetch(m)??Promise.resolve()}e.provide("layerboard-layers",e.readonly(i)),e.provide("layerboard-visible",y),e.provide("layerboard-opacities",g),e.provide("layerboard-loading",e.readonly(a)),e.provide("layerboard-errors",e.readonly(h)),e.provide("layerboard-zoom",e.readonly(p)),e.provide("layerboard-toggle-layer",ve),e.provide("layerboard-set-layer-visible",ue),e.provide("layerboard-set-layers-visible",be),e.provide("layerboard-set-opacity",de),e.provide("layerboard-tiled-layers",e.readonly(e.computed(()=>n.tiledLayers))),e.provide("layerboard-visible-tiled",k),e.provide("layerboard-tiled-opacities",L),e.provide("layerboard-toggle-tiled",N),e.provide("layerboard-set-tiled-opacity",B),e.provide("layerboard-set-tiled-visible",A),e.provide("layerboard-data-sources-state",M),e.provide("layerboard-data-sources-loading",W),e.provide("layerboard-get-data-source",z),e.provide("layerboard-refetch-data-source",te);const oe=e.computed(()=>({backgroundColor:n.themeColor})),Be=e.computed(()=>({backgroundColor:n.themeColor})),Ne=e.computed(()=>({backgroundColor:n.themeColor})),Ae=e.computed(()=>({width:ee.value?"0":n.sidebarWidth}));async function he(){try{u.value=!0,b.value=null;const C=(await Ie(n.webMapId)).map(D=>{let _=D;const se=n.layerStyleOverrides[D.id];se&&(_={..._,paint:se.paint??_.paint,outlinePaint:se.outlinePaint??_.outlinePaint,legend:se.legend??_.legend,type:se.type??_.type});const Se=n.popupOverrides[D.id];return Se&&_.popup&&(_={..._,popup:{..._.popup,...Se}}),_});i.value=C.map(D=>({config:D,component:D.type}));const O={};C.forEach(D=>{O[D.id]=D.opacity??1}),g.value=O,s("configs-loaded",C)}catch(m){const C=m instanceof Error?m.message:"Failed to load layer configurations";b.value=C,s("load-error",C)}finally{u.value=!1}}async function Ze(){if(n.fetchMetadata)try{const m="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"),C=await fetch(m);if(!C.ok)return;const O=await C.json(),D={};for(const _ of O.rows||[])if(_.url_text&&_.representation){const se=Je(_.url_text),Se=`https://metadata.phila.gov/#home/representationdetails/${_.representation}/`;D[se]=Se}f.value=D}catch{}}function Ue(m){p.value=m,s("zoom",m)}function ve(m){y.value.has(m)?y.value.delete(m):y.value.add(m),y.value=new Set(y.value)}function ue(m,C){C?y.value.add(m):y.value.delete(m),y.value=new Set(y.value)}function be(m,C){for(const O of m)C?y.value.add(O):y.value.delete(O);y.value=new Set(y.value)}function de(m,C){g.value={...g.value,[m]:C}}function We(m,C){C?a.value.add(m):a.value.delete(m),a.value=new Set(a.value)}function X(m,C){if(C)h.value={...h.value,[m]:C};else{const O={...h.value};delete O[m],h.value=O}}function ke(m){S.value=m}const H=e.ref(null),me=e.ref(null),je=e.ref(null),le=e.ref(null),Ee=e.ref(null),xe=e.ref(null),Me=e.ref(null),re=e.ref("map");function Le(){re.value=re.value==="sidebar"?"map":"sidebar",e.nextTick(()=>{re.value==="sidebar"&&H.value?.focus()})}const J=e.ref(!1);function Te(){J.value=!J.value,J.value&&e.nextTick(()=>{le.value?.focus()})}function ye(){J.value=!1,e.nextTick(()=>{me.value?.focus()})}const ee=e.ref(!1);function ge(){ee.value=!ee.value}const ne=e.ref(!1),Ve=e.ref(null);function ie(){Ve.value=document.activeElement,ne.value=!0,e.nextTick(()=>{Me.value?.focus()})}function K(){ne.value=!1,e.nextTick(()=>{Ve.value?.focus(),Ve.value=null})}function we(m){m.target.classList.contains("layerboard-modal-backdrop")&&K()}function qe(m){if(m.key==="Escape"){ye();return}if(m.key==="Tab"&&Ee.value){const C=Array.from(Ee.value.querySelectorAll('a[href], button:not([disabled]), textarea, input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])'));if(C.length===0)return;const O=C[0],D=C[C.length-1];m.shiftKey?document.activeElement===O&&(m.preventDefault(),D.focus()):document.activeElement===D&&(m.preventDefault(),O.focus())}}function Ge(m){if(m.key==="Escape"){K();return}if(m.key==="Tab"&&xe.value){const C=Array.from(xe.value.querySelectorAll('a[href], button:not([disabled]), textarea, input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])'));if(C.length===0)return;const O=C[0],D=C[C.length-1];m.shiftKey?document.activeElement===O&&(m.preventDefault(),D.focus()):document.activeElement===D&&(m.preventDefault(),O.focus())}}e.provide("layerboard-open-modal",ie),e.provide("layerboard-close-modal",K),e.provide("layerboard-is-modal-open",e.readonly(ne)),l({layerList:i,visibleLayers:y,layerOpacities:g,loadingLayers:a,layerErrors:h,currentZoom:p,toggleLayer:ve,setLayerVisible:ue,setLayersVisible:be,setLayerOpacity:de,reloadConfigs:he,clearCache:()=>pt(n.webMapId),visibleTiledLayers:k,tiledLayerOpacities:L,toggleTiledLayer:N,setTiledLayerVisible:A,setTiledLayerOpacity:B,dataSourcesState:M,dataSourcesLoading:W,getDataSourceData:z,refetchDataSource:te,isModalOpen:ne,openModal:ie,closeModal:K});function Pe(m){m.key==="Escape"&&J.value&&ye()}return e.onMounted(()=>{he(),Ze(),x(),document.addEventListener("keydown",Pe)}),e.onBeforeUnmount(()=>{document.removeEventListener("keydown",Pe)}),(m,C)=>(e.openBlock(),e.createElementBlock("div",xo,[C[5]||(C[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(oe.value)},[C[1]||(C[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)),C[2]||(C[2]=e.createElementVNode("span",{class:"layerboard-header-divider layerboard-desktop-only","aria-hidden":"true"},null,-1)),e.createElementVNode("button",{ref_key:"hamburgerRef",ref:me,class:"layerboard-hamburger layerboard-mobile-only","aria-expanded":J.value,"aria-label":"Toggle menu",onClick:Te},[e.createVNode(e.unref(G.Icon),{"icon-definition":e.unref(Ot),size:"medium",inline:"",decorative:""},null,8,["icon-definition"])],8,Vo),e.renderSlot(m.$slots,"header",{},()=>[e.createElementVNode("h1",null,e.toDisplayString(t.title),1),t.subtitle?(e.openBlock(),e.createElementBlock("span",$o,e.toDisplayString(t.subtitle),1)):e.createCommentVNode("",!0)],!0),J.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"mobileMenuRef",ref:Ee,class:"layerboard-mobile-menu",role:"dialog","aria-modal":"true","aria-label":"Site menu",style:e.normalizeStyle({backgroundColor:t.themeColor}),onKeydown:qe},[e.createElementVNode("div",No,[e.renderSlot(m.$slots,"footer",{openModal:ie,closeModal:K,isModalOpen:ne.value},()=>[C[0]||(C[0]=e.createTextVNode(" City of Philadelphia ",-1))],!0)]),e.createElementVNode("button",{ref_key:"mobileMenuCloseRef",ref:le,class:"layerboard-mobile-menu-close","aria-label":"Close menu",onClick:ye},[e.createVNode(e.unref(G.Icon),{"icon-definition":e.unref(lt),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:ye})):e.createCommentVNode("",!0)],4),e.createElementVNode("div",Mo,[u.value?(e.openBlock(),e.createElementBlock("div",To,[e.createElementVNode("div",{class:"layerboard-spinner",style:e.normalizeStyle({borderTopColor:t.themeColor})},null,4),e.createElementVNode("p",null,"Loading "+e.toDisplayString(t.title)+"...",1)])):b.value?(e.openBlock(),e.createElementBlock("div",Po,[C[3]||(C[3]=e.createElementVNode("h2",null,"Error Loading Layers",-1)),e.createElementVNode("p",null,e.toDisplayString(b.value),1),e.createElementVNode("button",{class:"layerboard-retry-button",style:e.normalizeStyle({backgroundColor:t.themeColor}),onClick:he}," Retry ",4)])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("aside",{id:"main-content",ref_key:"sidebarRef",ref:H,class:e.normalizeClass(["layerboard-sidebar",{"is-active":re.value==="sidebar"}]),style:e.normalizeStyle(Ae.value),"aria-label":"Map layers",tabindex:"-1"},[e.renderSlot(m.$slots,"sidebar",{layers:i.value,visibleLayers:y.value,layerOpacities:g.value,loadingLayers:a.value,layerErrors:h.value,currentZoom:p.value,toggleLayer:ve,setLayerVisible:ue,setLayersVisible:be,setOpacity:de,tiledLayers:t.tiledLayers,visibleTiledLayers:k.value,tiledLayerOpacities:L.value,toggleTiledLayer:N,setTiledLayerVisible:A,setTiledLayerOpacity:B,dataSourcesState:M.value,dataSourcesLoading:W.value,getDataSource:z,refetchDataSource:te},()=>[t.showDefaultSidebar?(e.openBlock(),e.createBlock(dt,{key:0,"layer-list":i.value,"visible-layers":y.value,"layer-opacities":g.value,"loading-layers":a.value,"layer-errors":h.value,"current-zoom":p.value,"search-query":S.value,"layer-metadata":f.value,onToggleLayer:ve,onSetOpacity:de,onUpdateSearch:ke},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":re.value==="map"}])},[e.createVNode(ut,{"visible-layers":y.value,"layer-opacities":g.value,"layer-list":i.value,"tiled-layers":t.tiledLayers,"visible-tiled-layers":k.value,"tiled-layer-opacities":L.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:Ue,onLayerLoading:We,onLayerError:X},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":ee.value}]),style:e.normalizeStyle({left:ee.value?"0":n.sidebarWidth}),"aria-expanded":!ee.value,"aria-label":ee.value?"Expand sidebar":"Collapse sidebar",onClick:ge},[e.createVNode(e.unref(G.Icon),{"icon-definition":ee.value?e.unref(Dt):e.unref(It),size:"medium",decorative:""},null,8,["icon-definition"])],14,Fo)],64))]),e.createElementVNode("button",{ref_key:"mobileToggleRef",ref:je,class:"layerboard-mobile-toggle",style:e.normalizeStyle(Ne.value),onClick:Le},[re.value==="map"?(e.openBlock(),e.createElementBlock("span",zo,e.toDisplayString(t.sidebarLabel),1)):(e.openBlock(),e.createElementBlock("span",Do,e.toDisplayString(t.mapLabel),1))],4),e.createElementVNode("footer",{class:"layerboard-footer",style:e.normalizeStyle(Be.value)},[e.renderSlot(m.$slots,"footer",{openModal:ie,closeModal:K,isModalOpen:ne.value},()=>[C[4]||(C[4]=e.createTextVNode(" City of Philadelphia ",-1))],!0)],4),ne.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"layerboard-modal-backdrop",onClick:we,onKeydown:Ge},[e.createElementVNode("div",{ref_key:"modalRef",ref:xe,class:"layerboard-modal",role:"dialog","aria-modal":"true","aria-label":"Application information"},[e.createElementVNode("button",{ref_key:"modalCloseRef",ref:Me,class:"layerboard-modal-close","aria-label":"Close modal",onClick:K},[e.createVNode(e.unref(G.Icon),{"icon-definition":e.unref(lt),size:"medium",decorative:""},null,8,["icon-definition"])],512),e.renderSlot(m.$slots,"modal",{closeModal:K},void 0,!0)],512)],32)):e.createCommentVNode("",!0),e.createElementVNode("span",Io,e.toDisplayString(re.value==="sidebar"?"Showing layers panel":"Showing map"),1)]))}}),Ro=ce(Oo,[["__scopeId","data-v-67021805"]]),_o=["aria-expanded"],Ao={key:0,class:"topic-icon"},Zo={class:"topic-title"},Uo=e.defineComponent({__name:"TopicAccordion",props:{title:{},icon:{default:void 0},expanded:{type:Boolean,default:!1},layerIds:{default:()=>[]},headerClass:{default:void 0}},emits:["toggle","layerChange"],setup(t,{emit:l}){const r=t,n=l,s=e.ref(r.expanded),i=`topic-panel-${e.useId()}`,u=`topic-header-${e.useId()}`;e.watch(()=>r.expanded,p=>{s.value=p});function b(){s.value=!s.value,n("toggle",s.value)}return(p,S)=>{const y=e.resolveComponent("font-awesome-icon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["topic-accordion",{"is-expanded":s.value}])},[e.createElementVNode("button",{id:u,class:e.normalizeClass(["topic-header",t.headerClass]),type:"button","aria-expanded":s.value,"aria-controls":i,onClick:b},[t.icon||p.$slots.icon?(e.openBlock(),e.createElementBlock("span",Ao,[e.renderSlot(p.$slots,"icon",{},()=>[t.icon?(e.openBlock(),e.createBlock(y,{key:0,icon:["fas",t.icon],"aria-hidden":"true"},null,8,["icon"])):e.createCommentVNode("",!0)],!0)])):e.createCommentVNode("",!0),e.createElementVNode("span",Zo,e.toDisplayString(t.title),1),e.createElementVNode("span",{class:e.normalizeClass(["topic-chevron",{"is-rotated":s.value}])},[...S[0]||(S[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,_o),e.withDirectives(e.createElementVNode("div",{id:i,role:"region","aria-labelledby":u,class:"topic-content"},[e.renderSlot(p.$slots,"default",{},()=>[S[1]||(S[1]=e.createElementVNode("p",{class:"topic-empty"},"No content provided for this topic.",-1))],!0)],512),[[e.vShow,s.value]])],2)}}}),Wo=ce(Uo,[["__scopeId","data-v-a2023afa"]]);function yt(t){return t.displayOptions?.shouldShowCheckbox!==!1}function tt(t,l){return l?t.displayOptions?.shouldShowSlider!==!1:!1}function ot(t,l){return l?t.displayOptions?.shouldShowLegendBox!==!1:!1}function fe(t){return t.displayOptions?.layerNameChange||t.title}const jo=["aria-label"],qo=["checked","disabled","onChange"],Go={class:"layer-title"},Ho={class:"layer-title"},Jo={key:0,class:"empty-state"},Ko=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:{default:void 0}},emits:["toggleLayer","setOpacity"],setup(t,{emit:l}){const r=t,n=l,{isVisible:s,getLayerOpacity:i,isLayerLoading:u,getLayerError:b,isLayerAvailableAtZoom:p}=Xe(()=>r);function S(y){n("toggleLayer",y)}return(y,g)=>(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,a=>(e.openBlock(),e.createElementBlock("div",{key:a.id,class:"layer-item"},[e.unref(yt)(a)?(e.openBlock(),e.createElementBlock("label",{key:0,class:e.normalizeClass(["layer-checkbox",{"layer-unavailable":!e.unref(p)(a),"layer-error":e.unref(b)(a.id)}])},[e.createElementVNode("input",{type:"checkbox",checked:e.unref(s)(a.id),disabled:!e.unref(p)(a),onChange:h=>S(a.id)},null,40,qo),e.createElementVNode("span",Go,[e.createTextVNode(e.toDisplayString(e.unref(fe)(a))+" ",1),e.createVNode(ze,{loading:e.unref(u)(a.id),error:e.unref(b)(a.id),unavailable:!e.unref(p)(a)},null,8,["loading","error","unavailable"])])],2)):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["layer-label-only",{"layer-unavailable":!e.unref(p)(a),"layer-error":e.unref(b)(a.id)}])},[e.createElementVNode("span",Ho,[e.createTextVNode(e.toDisplayString(e.unref(fe)(a))+" ",1),e.createVNode(ze,{loading:e.unref(u)(a.id),error:e.unref(b)(a.id),unavailable:!e.unref(p)(a)},null,8,["loading","error","unavailable"])])],2)),e.unref(tt)(a,t.showOpacity)&&e.unref(s)(a.id)&&e.unref(p)(a)?(e.openBlock(),e.createBlock(Ke,{key:2,"layer-id":a.id,"layer-name":e.unref(fe)(a),opacity:e.unref(i)(a.id),"onUpdate:opacity":h=>n("setOpacity",a.id,h)},null,8,["layer-id","layer-name","opacity","onUpdate:opacity"])):e.createCommentVNode("",!0),e.unref(ot)(a,t.showLegend)&&e.unref(s)(a.id)&&e.unref(p)(a)&&a.legend?.length?(e.openBlock(),e.createBlock(Qe,{key:3,items:a.legend,label:"Legend for "+e.unref(fe)(a)},null,8,["items","label"])):e.createCommentVNode("",!0)]))),128)),t.layers.length===0?(e.openBlock(),e.createElementBlock("div",Jo,"No layers available")):e.createCommentVNode("",!0)],8,jo))}}),Qo=ce(Ko,[["__scopeId","data-v-bfcd7855"]]),Xo=["aria-label"],Yo=["name","checked","disabled","onChange"],en={class:"layer-title"},tn={key:0,class:"empty-state"},on=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:{default:void 0}},emits:["selectLayer","setOpacity"],setup(t,{emit:l}){const r=t,n=l,{isVisible:s,getLayerOpacity:i,isLayerLoading:u,getLayerError:b,isLayerAvailableAtZoom:p}=Xe(()=>r);function S(y){const g=r.layers.filter(a=>r.visibleLayerIds.has(a.id)&&a.id!==y).map(a=>a.id);n("selectLayer",y,g)}return(y,g)=>(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,a=>(e.openBlock(),e.createElementBlock("div",{key:a.id,class:"layer-item"},[e.createElementVNode("label",{class:e.normalizeClass(["layer-radio",{"layer-unavailable":!e.unref(p)(a),"layer-error":e.unref(b)(a.id)}])},[e.createElementVNode("input",{type:"radio",name:t.groupName,checked:e.unref(s)(a.id),disabled:!e.unref(p)(a),onChange:h=>S(a.id)},null,40,Yo),e.createElementVNode("span",en,[e.createTextVNode(e.toDisplayString(e.unref(fe)(a))+" ",1),e.createVNode(ze,{loading:e.unref(u)(a.id),error:e.unref(b)(a.id),unavailable:!e.unref(p)(a)},null,8,["loading","error","unavailable"])])],2),e.unref(tt)(a,t.showOpacity)&&e.unref(s)(a.id)&&e.unref(p)(a)?(e.openBlock(),e.createBlock(Ke,{key:0,"layer-id":a.id,"layer-name":e.unref(fe)(a),opacity:e.unref(i)(a.id),"onUpdate:opacity":h=>n("setOpacity",a.id,h)},null,8,["layer-id","layer-name","opacity","onUpdate:opacity"])):e.createCommentVNode("",!0),e.unref(ot)(a,t.showLegend)&&e.unref(s)(a.id)&&e.unref(p)(a)&&a.legend?.length?(e.openBlock(),e.createBlock(Qe,{key:1,items:a.legend,label:"Legend for "+e.unref(fe)(a)},null,8,["items","label"])):e.createCommentVNode("",!0)]))),128)),t.layers.length===0?(e.openBlock(),e.createElementBlock("div",tn,"No layers available")):e.createCommentVNode("",!0)],8,Xo))}}),nn=ce(on,[["__scopeId","data-v-c368d815"]]);function an(t){const l=e.ref([]),r=e.ref(new Set),n=e.ref({}),s=e.ref(new Set),i=e.ref({}),u=e.ref(""),b=e.ref(!1),p=e.ref(!1),S=e.ref(null),y=e.computed(()=>{if(!u.value.trim())return l.value;const B=u.value.toLowerCase();return l.value.filter(V=>V.title.toLowerCase().includes(B))}),g=e.computed(()=>l.value.map(B=>({config:B,component:B.type})));async function a(){if(!p.value){b.value=!0,S.value=null;try{let B;t.mode==="dynamic"||!t.mode?t.webMapId?B=await h(t.webMapId):B=await Ie():B=await Ie(),l.value=B;const V={};B.forEach(M=>{V[M.id]=M.opacity??1}),n.value=V,p.value=!0}catch(B){S.value=B instanceof Error?B:new Error("Failed to initialize layerboard")}finally{b.value=!1}}}async function h(B){const V=_e(B),M=await fetch(V,{cache:"no-store"});if(!M.ok)throw new Error(`Failed to fetch WebMap: ${M.status} ${M.statusText}`);const W=await M.json();return Ye(W)}function f(B){const V=new Set(r.value);V.has(B)?V.delete(B):V.add(B),r.value=V}function k(B,V){n.value={...n.value,[B]:Math.max(0,Math.min(1,V))}}function L(B){u.value=B}function x(B,V){const M=new Set(s.value);V?M.add(B):M.delete(B),s.value=M}function N(B,V){if(V)i.value={...i.value,[B]:V};else{const M={...i.value};delete M[B],i.value=M}}function A(){l.value=[],r.value=new Set,n.value={},s.value=new Set,i.value={},u.value="",b.value=!1,p.value=!1,S.value=null}return{layerConfigs:e.readonly(l),visibleLayers:e.readonly(r),layerOpacities:e.readonly(n),loadingLayers:e.readonly(s),layerErrors:e.readonly(i),searchQuery:e.readonly(u),isLoading:e.readonly(b),isInitialized:e.readonly(p),error:e.readonly(S),filteredLayerConfigs:y,layerList:g,config:t,initialize:a,toggleLayer:f,setLayerOpacity:k,filterLayers:L,setLayerLoading:x,setLayerError:N,reset:A}}function ln(){const t=e.ref([]),l=e.ref(new Set),r=e.ref(new Set);function n(i){l.value.has(i)?l.value.delete(i):l.value.add(i)}function s(i){t.value=i}return{layers:e.computed(()=>t.value),visibleLayerIds:e.computed(()=>l.value),loadingLayerIds:e.computed(()=>r.value),toggleLayer:n,setLayers:s}}function gt(t){const l=e.ref(null),r=e.ref(!1),n=e.ref(null),s=e.ref(0);async function i(p={}){r.value=!0,n.value=null;const S=t.pageSize||2e3;let y=0,g=[],a=!0;try{for(;a;){const f=t.url.replace(/\/$/,""),k=encodeURIComponent(p.where||t.where||"1=1");let L=`${f}/query?where=${k}&outFields=*&returnGeometry=true&resultRecordCount=${S}&resultOffset=${y}&f=geojson`;if(p.bounds){const A=JSON.stringify({xmin:p.bounds.west,ymin:p.bounds.south,xmax:p.bounds.east,ymax:p.bounds.north,spatialReference:{wkid:4326}});L+=`&geometry=${encodeURIComponent(A)}&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects`}const x=await fetch(L);if(!x.ok)throw new Error(`HTTP ${x.status}: ${x.statusText}`);const N=await x.json();N.features&&N.features.length>0?(g=g.concat(N.features),y+=N.features.length,a=N.features.length===S):a=!1}const h={type:"FeatureCollection",features:g};return l.value=h,s.value=g.length,h}catch(h){const f=h instanceof Error?h:new Error("Failed to fetch features");throw n.value=f,f}finally{r.value=!1}}function u(){l.value=null,s.value=0,n.value=null}async function b(p={}){return i(p)}return{data:e.readonly(l),isLoading:e.readonly(r),error:e.readonly(n),totalFeatures:e.readonly(s),config:t,fetch:i,refetch:b,clear:u}}function rn(t,l,r){const n=gt(t);return e.watch(l,async s=>{if(s){const i=r(s);await n.fetch(i)}},{immediate:!0}),n}exports.LayerCheckboxSet=Qo;exports.LayerPanel=dt;exports.LayerRadioButtonSet=nn;exports.Layerboard=Ro;exports.MapPanel=ut;exports.TopicAccordion=Wo;exports.WEBMAP_ID=wo;exports.buildWebMapUrl=_e;exports.clearCache=pt;exports.getLayerConfigs=Ie;exports.getLayerDisplayName=fe;exports.getWebMapUrl=So;exports.normalizeUrl=Je;exports.shouldShowCheckbox=yt;exports.shouldShowLegendBox=ot;exports.shouldShowSlider=tt;exports.transformWebMapToLayerConfigs=Ye;exports.useApiDataSources=mt;exports.useDataSource=gt;exports.useLayerConfig=ln;exports.useLayerboard=an;exports.useReactiveDataSource=rn;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),Q=require("@phila/phila-ui-map-core"),q=require("@phila/phila-ui-core");var Ce=typeof document<"u"?document.currentScript:null;const kt={class:"map-panel"},Lt=e.defineComponent({__name:"MapPanel",props:{visibleLayers:{},layerOpacities:{},layerList:{},tiledLayers:{default:void 0},visibleTiledLayers:{default:void 0},tiledLayerOpacities:{default:void 0},cyclomediaConfig:{default:void 0},pictometryCredentials:{default:void 0},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:{default:void 0},initialCenter:{default:void 0}},emits:["zoom","layerLoading","layerError"],setup(t,{emit:l}){const r=t,n=l,s=e.ref(null),i=e.ref(null),u=e.ref(0);function b(o){n("zoom",o),i.value&&(u.value=p(i.value))}function p(o){const d=o.getZoom(),v=o.getCenter().lat,w=559082264028e-3,E=v*Math.PI/180;return w*Math.cos(E)/Math.pow(2,d)}const S=e.ref({}),y=e.ref(null),g=e.ref(new Set);async function a(o,d,c,v,w){const E=encodeURIComponent(v||"1=1"),P=JSON.stringify({xmin:d.west,ymin:d.south,xmax:d.east,ymax:d.north,spatialReference:{wkid:4326}}),Z=w!==void 0&&w<14?`&maxAllowableOffset=${360/(Math.pow(2,w)*512)}`:"",F=2e3;let j=0,T=[],R=!0;for(;R;){const z=`${o}/query?where=${E}&geometry=${encodeURIComponent(P)}&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects&outFields=*&returnGeometry=true&resultRecordCount=${F}&resultOffset=${j}${Z}&f=geojson`,K=await fetch(z);if(!K.ok)throw new Error(`HTTP ${K.status}: ${K.statusText}`);const Y=await K.json();Y.features&&Y.features.length>0?(T=T.concat(Y.features),j+=Y.features.length,R=Y.features.length===F):R=!1}return T=T.map(z=>{if(z.properties){const K={};for(const Y of Object.keys(z.properties))K[Y.toLowerCase()]=z.properties[Y];return{...z,properties:K}}return z}),{type:"FeatureCollection",features:T}}async function h(o,d,c){const v=d.map(async w=>{const E=r.layerList.find(P=>P.config.id===w)?.config;if(E&&!(c!==void 0&&E.minZoom!==void 0&&c<E.minZoom)){n("layerLoading",w,!0);try{const P=await a(E.url,o,w,E.where,c);S.value={...S.value,[w]:P},n("layerError",w,null)}catch(P){const Z=P instanceof Error?P.message:"Failed to load";n("layerError",w,Z)}finally{n("layerLoading",w,!1)}}});await Promise.all(v)}async function f(o,d){const c=[...r.visibleLayers];await h(o,c,d)}function k(o){y.value=o.bounds,f(o.bounds,o.zoom)}function L(o){i.value=o;const d=o.getBounds();y.value={west:d.getWest(),south:d.getSouth(),east:d.getEast(),north:d.getNorth()};const c=o.getZoom();n("zoom",c),u.value=p(o),f(y.value,c)}e.watch(()=>r.visibleLayers,async()=>{if(X.value.length>0&&H(),y.value){const o=new Set(r.visibleLayers),d=[...o].filter(c=>!g.value.has(c));if(g.value=new Set(o),d.length>0){const c=i.value?.getZoom();await h(y.value,d,c)}}});function x(o){return r.visibleLayers.has(o)}function N(o){return!!S.value[o.id]}const A=e.computed(()=>r.layerList.filter(o=>o.config.type==="circle"&&x(o.config.id)&&N(o.config)).map(o=>o.config)),B=e.computed(()=>r.layerList.filter(o=>o.config.type==="fill"&&x(o.config.id)&&N(o.config)).map(o=>o.config)),V=e.computed(()=>r.layerList.filter(o=>o.config.type==="fill"&&o.config.outlinePaint&&x(o.config.id)&&N(o.config)).map(o=>o.config)),M=e.computed(()=>r.layerList.filter(o=>o.config.type==="line"&&x(o.config.id)&&N(o.config)).map(o=>o.config));e.watch(M,async o=>{if(o.length<2)return;await e.nextTick();const d=i.value;if(d)for(let c=o.length-1;c>=0;c--){const v=c<o.length-1?o[c+1].id:"highlight-lines";try{d.getLayer(o[c].id)&&d.moveLayer(o[c].id,v)}catch{}}});function W(o){return r.visibleTiledLayers?.has(o)??!1}function D(o){return r.tiledLayerOpacities?.[o]??1}function te(o){return`${o.replace(/\/$/,"")}/tile/{z}/{y}/{x}`}function oe(o){return{type:"raster",tiles:[te(o.url)],tileSize:256,attribution:o.attribution||""}}const Be=e.ref({}),Ne=e.ref(new Set);async function Ae(o){if(!Ne.value.has(o.id)){Ne.value.add(o.id);try{const d=o.url.replace(/\/$/,""),c=await fetch(`${d}?f=json`);if(!c.ok)return;const v=await c.json(),w=v.minScale||0;let E=v.maxScale||0;if(v.layers&&v.layers.length>0)for(const P of v.layers)P.maxScale&&P.maxScale>0&&(E===0||P.maxScale<E)&&(E=P.maxScale);E===0&&(E=72e3),Be.value={...Be.value,[o.id]:{minScale:w,maxScale:E}}}catch{}}}e.onMounted(()=>{if(r.tiledLayers)for(const o of r.tiledLayers)o.scaleBasedRendering&&Ae(o)});function he(o){if(!o.scaleBasedRendering)return"tiled";const d=Be.value[o.id];if(!d)return"tiled";const c=u.value;return c===0||c>d.maxScale?"tiled":"dynamic"}const Ze=e.computed(()=>r.tiledLayers?r.tiledLayers.filter(o=>W(o.id)?o.scaleBasedRendering?he(o)==="tiled":!0:!1):[]),Ue=e.computed(()=>r.tiledLayers?r.tiledLayers.filter(o=>W(o.id)&&o.scaleBasedRendering?he(o)==="dynamic":!1):[]);function ve(o){return{type:"raster",tiles:[`${o.url.replace(/\/$/,"")}/export?bbox={bbox-epsg-3857}&bboxSR=3857&imageSR=3857&size=256,256&format=png32&transparent=true&f=image`],tileSize:256,attribution:o.attribution||""}}function ue(o){return{type:"geojson",data:S.value[o.id],tolerance:0}}function be(o){return r.layerOpacities[o]??1}function de(o){const d=be(o.id),c=o.type==="circle"?"circle-opacity":o.type==="fill"?"fill-opacity":"line-opacity";if(o.type==="fill"&&o.paint["fill-opacity"]===0)return{...o.paint,"fill-opacity":0};const v=o.type==="circle"?"circle-color":o.type==="fill"?"fill-color":"line-color",w={...o.paint},E=w[v],P=w[c]===1,Z=typeof E=="string"&&E.startsWith("rgba(");if(P&&Z){if(d===1)return w;{const F=E.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/);if(F&&F[4]){const[,j,T,R,z]=F,K=parseFloat(z)*d;w[v]=`rgba(${j}, ${T}, ${R}, ${K})`,w[c]=1}return w}}if(Z){const F=E.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/);if(F){const[,j,T,R]=F;w[v]=`rgb(${j}, ${T}, ${R})`}}return w[c]=d,w}function We(o){const d=be(o.id);return{...o.outlinePaint,"line-opacity":d}}const X=e.ref([]),ke=e.ref(null),G=e.ref(0);function me(o){const d=o.replace(/-outline$/,"");return r.layerList.find(v=>v.config.id===d)?.config}function je(o,d){return o.replace(/\{([^}]+)\}/g,(c,v)=>{const w=d[v];return w==null?"":String(w)})}function le(o){return o.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Ee(o,d,c){if(o==null)return"-";if(d?.dateFormat&&typeof o=="number"){const v=new Date(o);if(c&&d.dateFormat==="shortDateShortTime")return v.toLocaleString(void 0,{dateStyle:"short",timeStyle:"short"});switch(d.dateFormat){case"shortDateShortTime":return v.toLocaleDateString();case"longMonthDayYear":return v.toLocaleDateString(void 0,{month:"long",day:"numeric",year:"numeric"});case"shortDate":return v.toLocaleDateString();case"longDate":return v.toLocaleDateString(void 0,{weekday:"long",month:"long",day:"numeric",year:"numeric"});default:return v.toLocaleDateString()}}if(typeof o=="number"){if(o>1e12&&!d)return new Date(o).toLocaleDateString();const v=d?.places,w=d?.digitSeparator??!0;if(v!==void 0){if(Number.isInteger(o)&&v>=0)return String(o);const E=o.toFixed(v);if(w){const P=E.split("."),Z=P[0]||"0",F=P[1],j=Z.replace(/\B(?=(\d{3})+(?!\d))/g,",");return F?`${j}.${F}`:j}return E}return Number.isInteger(o)?String(o):w?o.toLocaleString():String(o)}return String(o)}function xe(o){const d=new Set;return o.filter(c=>{const w=`${c.layer.id.replace(/-outline$/,"")}:${JSON.stringify(c.properties)}`;return d.has(w)?!1:(d.add(w),!0)})}function Me(o,d){const c=S.value[o];if(!c?.features)return null;const v=d.objectid??d.OBJECTID??d.FID;if(v!=null){const w=c.features.find(E=>(E.properties?.objectid??E.properties?.OBJECTID??E.properties?.FID)===v);if(w)return w.geometry}return null}function re(o,d){const c=new Map;return d.forEach((v,w)=>{c.set(v.id,w)}),o.sort((v,w)=>{const E=v.layer.id.replace(/-outline$/,""),P=w.layer.id.replace(/-outline$/,""),Z=c.get(E)??-1;return(c.get(P)??-1)-Z})}function Le(o){const d=i.value;if(!d)return;const c=[];r.layerList.forEach(T=>{const R=T.config;r.visibleLayers.has(R.id)&&(c.push(R.id),R.outlinePaint&&c.push(`${R.id}-outline`))});const v=d.project([o.lngLat.lng,o.lngLat.lat]),w=d.queryRenderedFeatures(v,{layers:c});if(w.length===0)return;const E=xe(w),P=r.layerList.map(T=>T.config),F=re(E,P).map(T=>{const R=T.layer.id.replace(/-outline$/,""),z=me(R);if(!z)return null;const K=Me(z.id,T.properties||{});return{layerId:z.id,layerTitle:z.title,properties:T.properties||{},geometry:K||T.geometry,popupConfig:z.popup}}).filter(T=>T!==null);if(F.length===0)return;F.sort((T,R)=>{const z=T.popupConfig?.popupSortField,K=R.popupConfig?.popupSortField;if(!z||z!==K)return 0;const Y=T.properties[z],He=R.properties[z];if(Y==null||He==null)return 0;const lt=T.popupConfig?.popupSortOrder!=="asc";return Y<He?lt?1:-1:Y>He?lt?-1:1:0}),X.value=F,G.value=0,ke.value=[o.lngLat.lng,o.lngLat.lat];const j=F[0];if(j){const T=me(j.layerId);if(T){const R=C(j.geometry),z=O(T.id,T.type);m.value={geometry:j.geometry,geometryType:R,layerId:T.id,properties:j.properties,originalStyle:z}}}}function H(){X.value=[],ke.value=null,G.value=0,m.value=null}function Te(o){if(X.value.length===0)return;const d=o.target;if(!(d.tagName==="INPUT"||d.tagName==="TEXTAREA"||d.isContentEditable))switch(o.key){case"ArrowLeft":case"ArrowUp":o.preventDefault(),ee();break;case"ArrowRight":case"ArrowDown":o.preventDefault(),ye();break;case"Escape":o.preventDefault(),H();break}}e.onMounted(()=>{window.addEventListener("keydown",Te)}),e.onUnmounted(()=>{window.removeEventListener("keydown",Te)});function ye(){const o=X.value.length;o<=1||G.value>=o-1||(G.value=G.value+1)}function ee(){X.value.length<=1||G.value<=0||(G.value=G.value-1)}const ge=e.computed(()=>X.value.length===0?null:X.value[G.value]),ne=e.computed(()=>{const o=ge.value;return!o||!o.popupConfig?o?.layerTitle||"":je(o.popupConfig.title,o.properties)}),Ve=e.computed(()=>{const o=ge.value;if(!o)return"";let d='<div class="popup-content">';if(d+=`<h3 class="popup-title">${le(ne.value)}</h3>`,o.popupConfig?.fields?.length){d+=`<table class="popup-table" aria-label="${le(ne.value)}">`;for(const c of o.popupConfig.fields){const v=Ee(o.properties[c.field],c.format,o.popupConfig.showTime),w=c.label.toLowerCase(),E=w.includes("url")||w.includes("website"),P=v.startsWith("http://")||v.startsWith("https://")||v.startsWith("www.")||E&&v.includes("."),Z=v.startsWith("http://")||v.startsWith("https://")?v:`https://${v}`,F=P?`<a href="${le(Z)}" target="_blank" rel="noopener noreferrer">${le(v)}</a>`:le(v);d+=`<tr><th scope="row">${le(c.label)}</th><td>${F}</td></tr>`}d+="</table>"}return d+="</div>",d}),ie=e.ref({type:"FeatureCollection",features:[]}),J=e.ref({type:"FeatureCollection",features:[]}),we=e.ref({type:"FeatureCollection",features:[]}),qe={"circle-radius":["get","highlightRadius"],"circle-color":"#00FFFF","circle-opacity":.8,"circle-stroke-width":2,"circle-stroke-color":"#FFFFFF"},Ge={"line-width":["get","highlightWidth"],"line-color":"#00FFFF","line-opacity":.9},Pe={"fill-color":"#808080","fill-opacity":.5},m=e.ref(null);function C(o){return o.type}function O(o,d){const c=me(o);if(!c)return{radius:5,width:2};const v=c.paint||{};if(d==="circle"){const w=v["circle-radius"];return typeof w=="number"?{radius:w}:{radius:5}}if(d==="line"||d==="fill"){const w=v["line-width"];if(typeof w=="number")return{width:w};if(c.outlinePaint&&c.outlinePaint["line-width"]){const E=c.outlinePaint["line-width"];if(typeof E=="number")return{width:E}}return{width:2}}return{radius:5,width:2}}function I(o){return!o||o.length===0?[]:o[0]??[]}function _(o){const{geometry:d,geometryType:c,originalStyle:v}=o;if(c==="Point"||c==="MultiPoint"){const E=(v.radius||5)+3;return{type:"FeatureCollection",features:[{type:"Feature",geometry:d,properties:{highlightRadius:E}}]}}if(c==="LineString"||c==="MultiLineString"){const E=(v.width||2)+3;return{type:"FeatureCollection",features:[{type:"Feature",geometry:d,properties:{highlightWidth:E}}]}}if(c==="Polygon"){const w=d.coordinates,E=I(w),Z=(v.width||2)+3;return{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"LineString",coordinates:E},properties:{highlightWidth:Z}}]}}if(c==="MultiPolygon"){const w=d.coordinates,P=(v.width||2)+3;return{type:"FeatureCollection",features:w.map(F=>({type:"Feature",geometry:{type:"LineString",coordinates:I(F)},properties:{highlightWidth:P}}))}}return{type:"FeatureCollection",features:[]}}function se(o){const{geometry:d,geometryType:c}=o;return c==="Polygon"||c==="MultiPolygon"?{type:"FeatureCollection",features:[{type:"Feature",geometry:d,properties:{}}]}:{type:"FeatureCollection",features:[]}}function Se(o){if(!o){vt();return}const d=_(o);o.geometryType==="Point"||o.geometryType==="MultiPoint"?(ie.value=d,J.value={type:"FeatureCollection",features:[]},we.value={type:"FeatureCollection",features:[]}):(J.value=d,ie.value={type:"FeatureCollection",features:[]},we.value=se(o))}function vt(){ie.value={type:"FeatureCollection",features:[]},J.value={type:"FeatureCollection",features:[]},we.value={type:"FeatureCollection",features:[]}}e.watch(m,o=>{Se(o)}),e.watch(()=>r.visibleLayers,o=>{m.value&&!o.has(m.value.layerId)&&(m.value=null,H())},{deep:!0}),e.watch(G,()=>{const o=ge.value;if(!o){m.value=null;return}const d=me(o.layerId);if(d){const c=C(o.geometry),v=O(d.id,d.type);m.value={geometry:o.geometry,geometryType:c,layerId:d.id,properties:o.properties,originalStyle:v}}});const at=e.ref(null);function bt(o){const[d,c]=o.geometry.coordinates;at.value=[d,c]}return(o,d)=>(e.openBlock(),e.createElementBlock("div",kt,[e.createVNode(e.unref(Q.Map),{ref_key:"mapRef",ref:s,zoom:r.initialZoom,center:r.initialCenter,"navigation-controls":{position:r.navigationControlPosition},"geolocation-control":{position:r.geolocationControlPosition},"basemap-change-controls":{toggle:!0,dropdown:!0,position:r.basemapControlPosition},"map-search-control":{position:r.searchControlPosition},"enable-cyclomedia":!0,"cyclomedia-config":r.cyclomediaConfig,"cyclomedia-button-position":r.cyclomediaButtonPosition,"enable-pictometry":!0,"pictometry-credentials":r.pictometryCredentials,"pictometry-button-position":r.pictometryButtonPosition,"tool-panel-layout":"vertical","tool-panel-split-ratio":50,onZoom:b,onClick:H,onMoveend:k,onLoad:L,onSearchResult:bt},{default:e.withCtx(()=>[r.drawControlPosition!==null?(e.openBlock(),e.createBlock(e.unref(Q.DrawTool),{key:0,position:r.drawControlPosition},null,8,["position"])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ze.value,c=>(e.openBlock(),e.createBlock(e.unref(Q.RasterLayer),{id:"tiled-"+c.id,key:"tiled-"+c.id,source:oe(c),paint:{"raster-opacity":D(c.id)},minzoom:c.minZoom,maxzoom:c.maxZoom},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ue.value,c=>(e.openBlock(),e.createBlock(e.unref(Q.RasterLayer),{id:"dynamic-"+c.id,key:"dynamic-"+c.id,source:ve(c),paint:{"raster-opacity":D(c.id)},minzoom:c.minZoom,maxzoom:c.maxZoom},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.value,c=>(e.openBlock(),e.createBlock(e.unref(Q.CircleLayer),{id:c.id,key:c.id,source:ue(c),paint:de(c),minzoom:c.minZoom,maxzoom:c.maxZoom,"before-id":"highlight-circles",onClick:Le},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(B.value,c=>(e.openBlock(),e.createBlock(e.unref(Q.FillLayer),{id:c.id,key:c.id,source:ue(c),paint:de(c),minzoom:c.minZoom,maxzoom:c.maxZoom,"before-id":"highlight-circles",onClick:Le},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,c=>(e.openBlock(),e.createBlock(e.unref(Q.LineLayer),{id:c.id+"-outline",key:c.id+"-outline",source:ue(c),paint:We(c),minzoom:c.minZoom,maxzoom:c.maxZoom,"before-id":"highlight-lines",onClick:Le},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(M.value,c=>(e.openBlock(),e.createBlock(e.unref(Q.LineLayer),{id:c.id,key:c.id,source:ue(c),paint:de(c),minzoom:c.minZoom,maxzoom:c.maxZoom,"before-id":"highlight-lines",onClick:Le},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),e.createVNode(e.unref(Q.CircleLayer),{id:"highlight-circles",key:"highlight-circles-layer",source:{type:"geojson",data:ie.value},paint:qe},null,8,["source"]),e.createVNode(e.unref(Q.FillLayer),{id:"highlight-fill",key:"highlight-fill-layer",source:{type:"geojson",data:we.value},paint:Pe},null,8,["source"]),e.createVNode(e.unref(Q.LineLayer),{id:"highlight-lines",key:"highlight-lines-layer",source:{type:"geojson",data:J.value},paint:Ge},null,8,["source"]),e.createVNode(e.unref(Q.MapMarker),{"lng-lat":at.value,color:"#2176d2"},null,8,["lng-lat"]),ge.value&&ke.value?(e.openBlock(),e.createBlock(e.unref(Q.MapPopup),{key:1,"lng-lat":ke.value,html:Ve.value,"close-on-click":!1,offset:[0,-15],"show-navigation":X.value.length>1,"current-feature-index":G.value,"total-features":X.value.length,"layer-name":ge.value.layerTitle,onClose:H,onNext:ye,onPrevious:ee},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"])]))}}),ce=(t,l)=>{const r=t.__vccOpts||t;for(const[n,s]of l)r[n]=s;return r},dt=ce(Lt,[["__scopeId","data-v-d0169cac"]]);function Ke(t){let l=t.split("?")[0]||t;return l=l.replace(/\/query$/,""),l=l.replace(/\/$/,""),l.toLowerCase()}const wt=["disabled"],St=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 l=t,r=u=>"href"in u&&u.href!==void 0||"to"in u&&u.to!==void 0,n=e.computed(()=>q.cn("phila-button",`phila-button--${l.variant}`,l.size&&`is-${l.size}`,l.iconOnly&&"icon-button",l.iconOnly&&l.variant==="standard"&&"icon-button--standard",l.className)),s=e.computed(()=>r(l)?"to"in l&&l.to!==void 0?{to:l.to,disabled:l.disabled,className:n.value}:{href:l.href,target:l.target,rel:l.rel,disabled:l.disabled,className:n.value}:{}),i=e.computed(()=>({iconDefinition:l.iconDefinition,iconClass:l.iconClass,src:l.src,iconRight:l.iconRight,iconOnly:l.iconOnly,text:l.text,size:l.size}));return(u,b)=>r(l)?(e.openBlock(),e.createBlock(e.unref(q.BaseLink),e.mergeProps({key:0},{...s.value,...u.$attrs},{role:"button"}),{default:e.withCtx(()=>[e.createVNode(e.unref(q.ActionContent),e.normalizeProps(e.guardReactiveProps(i.value)),{default:e.withCtx(()=>[e.renderSlot(u.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(l.text),1)])]),_:3},16)]),_:3},16)):(e.openBlock(),e.createElementBlock("button",e.mergeProps({key:1,type:"button",disabled:l.disabled,class:n.value},u.$attrs),[e.createVNode(e.unref(q.ActionContent),e.normalizeProps(e.guardReactiveProps(i.value)),{default:e.withCtx(()=>[e.renderSlot(u.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(l.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"]},Bt=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"]},xt=Et;const Vt=["for"],$t={class:"state-layer"},Nt={class:"content"},Mt={class:"input-text-container"},Tt=["id","placeholder","aria-label"],Pt={key:1,class:"has-text-body-small phila-supporting-text"},Ft={key:2,class:"has-text-body-small phila-error-text"},zt=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:l}){const r=e.useAttrs(),n=t,s=e.computed(()=>typeof n.error=="string"?n.error:n.error[0]),i=e.toRef(n,"id"),u=l,b=e.ref(""),p=e.computed({get:()=>n.modelValue!==void 0?n.modelValue:b.value,set:f=>{u("update:modelValue",f),b.value=f}}),S=e.computed(()=>{const f=["default-class"];return r.disabled!=null&&f.push("phila-input--disabled"),s.value&&f.push("phila-input--error"),r.required!=null&&f.push("phila-input--required"),q.cn(...f)}),y=e.computed(()=>{const f=[];return p.value!==""&&f.push("phila-text-field--filled"),n.className&&f.push(n.className),q.cn(...f)}),g=e.computed(()=>{if(!(n.label||r["aria-label"]))return n.placeholder||void 0}),a=e.ref(null),h=f=>{f.target.closest("button")||a.value?.focus()};return(f,k)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["phila-input",S.value])},[n.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:i.value,class:"has-text-label-small phila-label"},e.toDisplayString(n.label),9,Vt)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["phila-text-field",y.value]),onClick:h},[e.createElementVNode("div",$t,[n.leadingIcon?(e.openBlock(),e.createBlock(e.unref(q.Icon),{key:0,"icon-class":n.leadingIcon,inline:"",decorative:""},null,8,["icon-class"])):e.createCommentVNode("",!0),e.createElementVNode("div",Nt,[e.createElementVNode("div",Mt,[e.withDirectives(e.createElementVNode("input",e.mergeProps({id:i.value,ref_key:"inputRef",ref:a,"onUpdate:modelValue":k[0]||(k[0]=L=>p.value=L),class:"phila-text-field-input has-text-body-default",placeholder:n.placeholder,"aria-label":g.value},e.unref(r)),null,16,Tt),[[e.vModelDynamic,p.value]])])]),p.value!=""?(e.openBlock(),e.createBlock(e.unref(St),{key:1,variant:"standard",size:"small","icon-only":"","icon-definition":e.unref(xt),onClick:k[1]||(k[1]=L=>p.value="")},null,8,["icon-definition"])):e.createCommentVNode("",!0),n.trailingIcon?(e.openBlock(),e.createBlock(e.unref(q.Icon),{key:2,size:"small","icon-class":n.trailingIcon,inline:"",decorative:""},null,8,["icon-class"])):e.createCommentVNode("",!0),e.renderSlot(f.$slots,"trailing-action")])],2),n.supportingText?(e.openBlock(),e.createElementBlock("div",Pt,e.toDisplayString(n.supportingText),1)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("div",Ft,[e.createVNode(e.unref(q.Icon),{"icon-definition":e.unref(Bt),size:"small",inline:"",decorative:""},null,8,["icon-definition"]),e.createTextVNode(" "+e.toDisplayString(s.value),1)])):e.createCommentVNode("",!0)],2))}});var Dt={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"]},It={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"]},Ot={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"]},rt={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"]},Rt={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"]},_t={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 At={key:0,class:"loading-indicator",role:"status"},Zt=["aria-label"],Ut={key:2,class:"zoom-indicator"},Wt=e.defineComponent({__name:"LayerStatusIndicators",props:{loading:{type:Boolean},error:{},unavailable:{type:Boolean}},setup(t){return(l,r)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[t.loading&&!t.unavailable?(e.openBlock(),e.createElementBlock("span",At," Loading... ")):e.createCommentVNode("",!0),t.error?(e.openBlock(),e.createElementBlock("span",{key:1,class:"error-indicator","aria-label":t.error,role:"status"}," Error ",8,Zt)):e.createCommentVNode("",!0),t.unavailable?(e.openBlock(),e.createElementBlock("span",Ut," (zoom in) ")):e.createCommentVNode("",!0)],64))}}),ze=ce(Wt,[["__scopeId","data-v-19b1b402"]]),jt={class:"opacity-control"},qt=["for"],Gt=["id","value","aria-label"],Ht=e.defineComponent({__name:"LayerOpacitySlider",props:{layerId:{},layerName:{},opacity:{}},emits:["update:opacity"],setup(t,{emit:l}){const r=l;function n(s){const i=s.target;r("update:opacity",parseFloat(i.value))}return(s,i)=>(e.openBlock(),e.createElementBlock("div",jt,[e.createElementVNode("label",{class:"opacity-label",for:"opacity-"+t.layerId}," Opacity: "+e.toDisplayString(Math.round(t.opacity*100))+"% ",9,qt),e.createElementVNode("input",{id:"opacity-"+t.layerId,type:"range",min:"0",max:"1",step:"0.05",value:t.opacity,"aria-label":"Opacity for "+t.layerName,class:"opacity-slider",onInput:n},null,40,Gt)]))}}),Qe=ce(Ht,[["__scopeId","data-v-1a025f6a"]]),Jt=["aria-label"],Kt={class:"legend-label"},Qt=e.defineComponent({__name:"LayerLegend",props:{items:{},label:{}},setup(t){return(l,r)=>(e.openBlock(),e.createElementBlock("ul",{class:"layer-legend","aria-label":t.label},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(n,s)=>(e.openBlock(),e.createElementBlock("li",{key:s,class:"legend-item"},[n.type==="circle"?(e.openBlock(),e.createElementBlock("span",{key:0,class:"legend-symbol legend-circle",style:e.normalizeStyle({backgroundColor:n.color}),"aria-hidden":"true"},null,4)):n.type==="line"?(e.openBlock(),e.createElementBlock("span",{key:1,class:"legend-symbol legend-line",style:e.normalizeStyle({backgroundColor:n.color,height:`${n.width||2}px`}),"aria-hidden":"true"},null,4)):n.type==="fill"?(e.openBlock(),e.createElementBlock("span",{key:2,class:"legend-symbol legend-fill",style:e.normalizeStyle({backgroundColor:n.color}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),e.createElementVNode("span",Kt,e.toDisplayString(n.label),1)]))),128))],8,Jt))}}),Xe=ce(Qt,[["__scopeId","data-v-62e210e3"]]);function Ye(t){function l(u){return t().visibleLayerIds.has(u)}function r(u){return t().layerOpacities[u]??1}function n(u){return t().loadingLayerIds.has(u)}function s(u){return t().layerErrors[u]||null}function i(u){const b=t().currentZoom,p=u.minZoom,S=u.maxZoom;return!(p!==void 0&&b<p||S!==void 0&&b>S)}return{isVisible:l,getLayerOpacity:r,isLayerLoading:n,getLayerError:s,isLayerAvailableAtZoom:i}}const Xt={class:"layer-panel"},Yt={key:0,class:"search-box"},eo={key:1,class:"topics-container"},to={class:"layer-row"},oo=["href","aria-label"],no={key:1,class:"metadata-placeholder"},ao=["checked","disabled","onChange"],lo={class:"layer-title"},ro={key:0,class:"no-results"},io=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:l}){const r=t,n=l,s=e.computed(()=>{if(!r.searchQuery.trim())return r.layerList;const f=r.searchQuery.toLowerCase();return r.layerList.filter(k=>k.config.title.toLowerCase().includes(f))});function i(f){const k=Ke(f);return r.layerMetadata[k]||null}const u=e.computed(()=>r.layerList.some(f=>i(f.config.url))),{isVisible:b,getLayerOpacity:p,isLayerLoading:S,getLayerError:y,isLayerAvailableAtZoom:g}=Ye(()=>({visibleLayerIds:r.visibleLayers,layerOpacities:r.layerOpacities,loadingLayerIds:r.loadingLayers,layerErrors:r.layerErrors,currentZoom:r.currentZoom})),a=e.computed({get:()=>r.searchQuery,set:f=>n("updateSearch",f)});function h(f){n("toggleLayer",f)}return(f,k)=>(e.openBlock(),e.createElementBlock("div",Xt,[t.showSearch?(e.openBlock(),e.createElementBlock("div",Yt,[e.createVNode(e.unref(zt),{modelValue:a.value,"onUpdate:modelValue":k[0]||(k[0]=L=>a.value=L),placeholder:t.searchPlaceholder,"class-name":"layer-search-field"},{"trailing-action":e.withCtx(()=>[e.createVNode(e.unref(q.Icon),{"icon-definition":e.unref(Dt),size:"small",inline:"",decorative:""},null,8,["icon-definition"])]),_:1},8,["modelValue","placeholder"])])):e.createCommentVNode("",!0),t.mode==="topics"?(e.openBlock(),e.createElementBlock("div",eo,[e.renderSlot(f.$slots,"topics",{},()=>[k[2]||(k[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":u.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,L=>(e.openBlock(),e.createElementBlock("div",{key:L.config.id,class:"layer-item"},[e.createElementVNode("div",to,[i(L.config.url)?(e.openBlock(),e.createElementBlock("a",{key:0,href:i(L.config.url)||"",target:"_blank",rel:"noopener noreferrer",class:"metadata-link","aria-label":"View metadata for "+L.config.title,onClick:k[1]||(k[1]=e.withModifiers(()=>{},["stop"]))},[e.createVNode(e.unref(q.Icon),{"icon-definition":e.unref(_t),size:"small",inline:"",decorative:""},null,8,["icon-definition"])],8,oo)):u.value?(e.openBlock(),e.createElementBlock("span",no)):e.createCommentVNode("",!0),e.createElementVNode("label",{class:e.normalizeClass(["layer-checkbox",{"layer-unavailable":!e.unref(g)(L.config),"layer-error":e.unref(y)(L.config.id)}])},[e.createElementVNode("input",{type:"checkbox",checked:e.unref(b)(L.config.id),disabled:!e.unref(g)(L.config),onChange:x=>h(L.config.id)},null,40,ao),e.createElementVNode("span",lo,[e.createTextVNode(e.toDisplayString(L.config.title)+" ",1),e.createVNode(ze,{loading:e.unref(S)(L.config.id),error:e.unref(y)(L.config.id),unavailable:!e.unref(g)(L.config)},null,8,["loading","error","unavailable"])])],2)]),t.showOpacity&&e.unref(b)(L.config.id)&&e.unref(g)(L.config)?(e.openBlock(),e.createBlock(Qe,{key:0,"layer-id":L.config.id,"layer-name":L.config.title,opacity:e.unref(p)(L.config.id),"onUpdate:opacity":x=>n("setOpacity",L.config.id,x)},null,8,["layer-id","layer-name","opacity","onUpdate:opacity"])):e.createCommentVNode("",!0),t.showLegend&&e.unref(b)(L.config.id)&&e.unref(g)(L.config)&&L.config.legend?.length?(e.openBlock(),e.createBlock(Xe,{key:1,items:L.config.legend,label:"Legend for "+L.config.title},null,8,["items","label"])):e.createCommentVNode("",!0)]))),128)),s.value.length===0?(e.openBlock(),e.createElementBlock("div",ro,'No layers match "'+e.toDisplayString(t.searchQuery)+'"',1)):e.createCommentVNode("",!0)],2))]))}}),ft=ce(io,[["__scopeId","data-v-e48bb978"]]),so={esriSLSSolid:null,esriSLSDash:[4,3],esriSLSDot:[1,3],esriSLSDashDot:[4,3,1,3],esriSLSDashDotDot:[4,3,1,3,1,3],esriSLSNull:null};function Oe(t){if(t)return so[t]??void 0}function co(t,l,r,n,s){const i=[];let u=l[0],b=[t[0]],p=0;for(let a=1;a<t.length;a++)l[a]===u?b.push(t[a]):(i.push({style:u,breaks:b,startIndex:p}),u=l[a],b=[t[a]],p=a);i.push({style:u,breaks:b,startIndex:p});const S=[],y=new Set;let g=n.minValue??0;for(let a=0;a<i.length;a++){const h=i[a],f=h.breaks,k=Oe(h.style),L=a===0?null:i[a-1].breaks[i[a-1].breaks.length-1].classMaxValue,x=f[f.length-1].classMaxValue;let N;const A=!!n.defaultSymbol;L===null?N=`${!A&&n.minValue!=null?`${r} >= ${n.minValue} AND `:""}${r} <= ${x}`:a===i.length-1&&A?N=`${r} > ${L}`:N=`${r} > ${L} AND ${r} <= ${x}`;const B={"line-opacity":ae(s)};if(k&&(B["line-dasharray"]=k),f.length===1)B["line-color"]=$(f[0].symbol?.color),B["line-width"]=U(f[0].symbol?.width||2);else{const D=["step",["get",r]],te=["step",["get",r]];D.push($(f[0].symbol?.color)),te.push(U(f[0].symbol?.width||2));for(let oe=1;oe<f.length;oe++)D.push(f[oe-1].classMaxValue),D.push($(f[oe].symbol?.color)),te.push(f[oe-1].classMaxValue),te.push(U(f[oe].symbol?.width||2));B["line-color"]=D,B["line-width"]=te}const V=[];for(const D of f)V.push({type:"line",color:$(D.symbol?.color),width:U(D.symbol?.width||2),label:D.label||`${g} - ${D.classMaxValue}`}),g=D.classMaxValue+1;const M=h.style.replace("esriSLS","").toLowerCase();let W;a===0?W="":y.has(M)?W=`-${M}-${a}`:W=`-${M}`,y.add(M),S.push({suffix:W,where:N,paint:B,legend:V})}return S}function $(t){if(!t||!Array.isArray(t)||t.length<3)return"#888888";const l=t[0],r=t[1],n=t[2],i=(t[3]??255)/255;return i===1?`#${l.toString(16).padStart(2,"0")}${r.toString(16).padStart(2,"0")}${n.toString(16).padStart(2,"0")}`:`rgba(${l}, ${r}, ${n}, ${i.toFixed(2)})`}function ae(t){return t!==void 0?t:1}function U(t){return Math.round(t*(96/72)*10)/10}const uo=559082264;function it(t){return!t||t<=0?null:Math.round(Math.log2(uo/t)*100)/100}function fo(t,l){const r={};if(t&&t>0){const n=it(t);n!==null&&(r.minZoom=n)}if(l&&l>0){const n=it(l);n!==null&&(r.maxZoom=n)}return r}function Re(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 pe(t){return!(!t||t.style==="esriSLSNull"||t.color===null||t.width===0||t.color&&t.color[3]===0)}function Je(t){return String(t)}function pt(t,l,r){const n=t.symbol,s=Re(n);let i={},u=[],b=null;if(s==="fill"&&n){const p=n.color===null?0:n.color?.[3]??255,S=p===0?"rgba(0, 0, 0, 0)":$(n.color),y=p===0?0:p<255?1:ae(l);if(i={"fill-color":S,"fill-opacity":y},pe(n.outline)){const g=U(n.outline.width||1);b={"line-color":$(n.outline.color),"line-width":g}}u=[{type:"fill",color:$(n.color),label:t.label||"Feature"}]}else if(s==="line"&&n){i={"line-color":$(n.color),"line-width":U(n.width||1),"line-opacity":ae(l)};const p=Oe(n.style);p&&(i["line-dasharray"]=p),u=[{type:"line",color:$(n.color),width:U(n.width||1),label:t.label||"Feature"}]}else if(s==="circle"&&n){const p=Math.round((n.size||6)*.71*100)/100;i={"circle-color":$(n.color),"circle-radius":p,"circle-opacity":ae(l)},pe(n.outline)&&(i["circle-stroke-color"]=$(n.outline.color),i["circle-stroke-width"]=U(n.outline.width||1)),u=[{type:"circle",color:$(n.color),label:t.label||"Feature"}]}return{paint:i,legend:u,geomType:s,outlinePaint:b}}function po(t,l,r){const n=t.field1.toLowerCase(),s=t.uniqueValueInfos||[],i=t.defaultSymbol;if(s.length===0)return pt({...t,symbol:i},l);const u=s[0]?.symbol||i,b=Re(u);let p={};const S=[];let y=null;if(b==="fill"){const g=["match",["to-string",["get",n]]];for(const a of s){g.push(Je(a.value)),g.push($(a.symbol?.color));const h=String(a.value),k=r?.get(h)||a.label||h;S.push({type:"fill",color:$(a.symbol?.color),label:k})}if(g.push(i?$(i.color):"rgba(0, 0, 0, 0)"),p={"fill-color":g,"fill-opacity":ae(l)},pe(u?.outline)){const a=U(Math.max(u.outline.width||1,1));y={"line-color":$(u.outline.color),"line-width":a}}}else if(b==="line"){const g=["match",["to-string",["get",n]]];for(const f of s){g.push(Je(f.value)),g.push($(f.symbol?.color));const k=String(f.value),x=r?.get(k)||f.label||k;S.push({type:"line",color:$(f.symbol?.color),width:U(f.symbol?.width||1),label:x})}g.push(i?$(i.color):"rgba(0, 0, 0, 0)"),p={"line-color":g,"line-width":U(u?.width||2),"line-opacity":ae(l)};const a=s.map(f=>f.symbol?.style).filter(Boolean),h=[...new Set(a)];if(h.length===1){const f=Oe(h[0]);f&&(p["line-dasharray"]=f)}}else if(b==="circle"){const g=["match",["to-string",["get",n]]];for(const h of s){g.push(Je(h.value)),g.push($(h.symbol?.color));const f=String(h.value),L=r?.get(f)||h.label||f;S.push({type:"circle",color:$(h.symbol?.color),label:L})}g.push(i?$(i.color):"rgba(0, 0, 0, 0)");const a=Math.round((u?.size||6)*.71*100)/100;p={"circle-color":g,"circle-radius":a,"circle-opacity":ae(l)},pe(u?.outline)&&(p["circle-stroke-color"]=$(u.outline.color),p["circle-stroke-width"]=U(u.outline.width||1))}return{paint:p,legend:S,geomType:b,outlinePaint:y}}function mo(t,l){const r=t.field.toLowerCase(),n=t.classBreakInfos||[],s=t.visualVariables?.find(y=>y.type==="colorInfo");if(s?.stops&&s.stops.length>0)return yo(s,r,t,l);if(n.length===0)return{paint:{},legend:[],geomType:"fill",outlinePaint:null};const i=n[0]?.symbol,u=Re(i);let b={};const p=[];let S=null;if(u==="fill"){const y=["step",["get",r]];y.push($(n[0]?.symbol?.color));for(let g=0;g<n.length;g++){const a=n[g];g>0&&(y.push(n[g-1].classMaxValue),y.push($(a.symbol?.color))),p.push({type:"fill",color:$(a.symbol?.color),label:a.label||`${a.classMaxValue}`})}if(b={"fill-color":y,"fill-opacity":ae(l)},pe(i?.outline)){const g=U(i.outline.width||1);S={"line-color":$(i.outline.color),"line-width":g}}}else if(u==="line"){const y=n.map(x=>x.symbol?.style||"esriSLSSolid"),g=[...new Set(y)];if(g.length>1){const x=co(n,y,r,t,l);return{paint:{},legend:[],geomType:u,outlinePaint:S,splitLayers:x}}const h=["step",["get",r]];h.push($(n[0]?.symbol?.color));let f=t.minValue??0;for(let x=0;x<n.length;x++){const N=n[x];x>0&&(h.push(n[x-1].classMaxValue),h.push($(N.symbol?.color))),p.push({type:"line",color:$(N.symbol?.color),width:U(N.symbol?.width||i?.width||2),label:N.label||`${f} - ${N.classMaxValue}`}),f=N.classMaxValue+1}const k=U(i?.width||2);b={"line-color":h,"line-width":k,"line-opacity":ae(l)};const L=Oe(g[0]);L&&(b["line-dasharray"]=L)}return{paint:b,legend:p,geomType:u,outlinePaint:S}}function yo(t,l,r,n){const s=t.stops||[];if(s.length===0)return{paint:{},legend:[],geomType:"fill",outlinePaint:null};const i=r.classBreakInfos?.[0]?.symbol||r.defaultSymbol,u=Re(i);let b={};const p=[];let S=null;if(u==="fill"){const y=["interpolate",["linear"],["get",l]];for(const a of s)y.push(a.value),y.push($(a.color)),p.push({type:"fill",color:$(a.color),label:a.label||`${a.value}`});if(b={"fill-color":["case",["==",["get",l],null],"rgba(0, 0, 0, 0)",y],"fill-opacity":ae(n)},pe(i?.outline)){const a=U(i.outline.width||1);S={"line-color":$(i.outline.color),"line-width":a}}}return{paint:b,legend:p,geomType:u,outlinePaint:S}}function go(t,l,r,n){if(!t?.renderer)return{paint:{},legend:[],geomType:"fill",outlinePaint:null};const s=t.renderer;switch(s.type){case"simple":return pt(s,l);case"uniqueValue":return po(s,l,r);case"classBreaks":return mo(s,l);default:return{paint:{},legend:[],geomType:"fill",outlinePaint:null}}}function ho(t){if(!t)return null;const l=(t.title||"").replace(/\{([^}]+)\}/g,(i,u)=>`{${u.toLowerCase()}}`),n=(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}),s={title:l,fields:n};return t.showTime&&(s.showTime=!0),s}function vo(t){return t?.definitionExpression}function bo(t){return(t.includes("_")?t.split("_").slice(1).join(" "):t).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function ko(t){return t.includes("_")?t.split("_").slice(1).join(" "):t}function Lo(t){const l=new Map;if(!t)return l;const r=t.split(`
2
+ `),n=/^(\d{1,3})\s+(.+)$/;for(const s of r){const i=s.trim().match(n);if(i){const[,u,b]=i;u&&b&&l.set(u,b.trim())}}return l}async function wo(t){try{const l=await fetch(`${t}?f=json`);if(!l.ok)return null;const r=await l.json();return r.drawingInfo?{drawingInfo:r.drawingInfo,description:r.description}:null}catch{return null}}function st(t){const l={id:t.id,title:t.title,type:t.type,url:t.url,opacity:t.opacity,paint:t.paint,legend:t.legend,popup:t.popup};return t.where&&(l.where=t.where),t.minZoom!==void 0&&(l.minZoom=t.minZoom),t.maxZoom!==void 0&&(l.maxZoom=t.maxZoom),t.outlinePaint&&(l.outlinePaint=t.outlinePaint),l}async function et(t){const l=t.operationalLayers||[],r=[],n=["Zoning and Planning_Land Use"];for(const s of l)if(s.url&&!s.title?.toLowerCase().includes("(under construction)")&&!(s.url&&/\/MapServer(\/\d+)?$/i.test(s.url)))try{let i=s.layerDefinition?.drawingInfo,u;const b=!i||!i.renderer,p=n.includes(s.title),S=i?.renderer?.uniqueValueInfos?.[0]?.symbol?.outline||i?.renderer?.defaultSymbol?.outline;if((b||p)&&s.url){const V=await wo(s.url);if(V){if(i=V.drawingInfo,S&&pe(S)&&i?.renderer){const M=i.renderer,W=M.uniqueValueInfos?.[0]?.symbol?.outline||M.defaultSymbol?.outline;if(!pe(W)){for(const D of M.uniqueValueInfos||[])D.symbol&&(D.symbol.outline=S);M.defaultSymbol&&(M.defaultSymbol.outline=S)}}V.description&&(u=Lo(V.description),u.size>0)}}const{paint:y,legend:g,geomType:a,outlinePaint:h,splitLayers:f}=go(i,s.opacity,u,s.title),k=ho(s.popupInfo),L=vo(s.layerDefinition),x=fo(s.layerDefinition?.minScale,s.layerDefinition?.maxScale),N=bo(s.title),A=ko(s.title),B=s.opacity??1;if(f&&f.length>0)for(const V of f)r.push(st({id:`${N}${V.suffix}`,title:A,type:a,url:s.url,opacity:B,paint:V.paint,legend:V.legend,popup:k,where:L?`(${L}) AND (${V.where})`:V.where,minZoom:x.minZoom,maxZoom:x.maxZoom}));else r.push(st({id:N,title:A,type:a,url:s.url,opacity:B,paint:y,legend:g,popup:k,where:L,minZoom:x.minZoom,maxZoom:x.maxZoom,outlinePaint:h}))}catch{}return r.sort((s,i)=>s.title.localeCompare(i.title)),r}const ct={},tt="376af635c84643cd816a8c5d017a53aa",So=tt;function _e(t,l){let r=`https://www.arcgis.com/sharing/rest/content/items/${t}/data?f=json`;return l&&(r+=`&token=${l}`),r}function Co(){return _e(tt)}const De=new Map,$e=new Map;function mt(t){t?(De.delete(t),$e.delete(t)):(De.clear(),$e.clear())}let Fe,ut=0;async function Bo(){const t=typeof{url:typeof document>"u"?require("url").pathToFileURL(__filename).href:Ce&&Ce.tagName.toUpperCase()==="SCRIPT"&&Ce.src||new URL("index.js",document.baseURI).href}<"u"&&ct?.VITE_AGO_USERNAME,l=typeof{url:typeof document>"u"?require("url").pathToFileURL(__filename).href:Ce&&Ce.tagName.toUpperCase()==="SCRIPT"&&Ce.src||new URL("index.js",document.baseURI).href}<"u"&&ct?.VITE_AGO_PASSWORD;if(!(!t||!l)){if(Fe&&Date.now()<ut-3e5)return Fe;try{const n=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:l,referer:window.location.origin||"https://localhost",expiration:"120"})})).json();return n.error?void 0:(Fe=n.token,ut=n.expires,Fe)}catch{return}}}async function Eo(t,l){const r=_e(t,l),n=await fetch(r,{cache:"no-store"});if(!n.ok)throw new Error(`Failed to fetch WebMap: ${n.status} ${n.statusText}`);const s=await n.json();if(s.error)throw new Error(`ArcGIS error: ${s.error.message||s.error.code||"Unknown error"}`);return s}async function xo(t){try{const l=await Bo(),r=await Eo(t,l);return await et(r)}catch(l){throw new Error(`Failed to load dynamic layer configs: ${l instanceof Error?l.message:"Unknown error"}`)}}async function Ie(t=tt){const l=De.get(t);if(l)return l;const r=$e.get(t);if(r)return r;const n=(async()=>{try{const s=await xo(t);return De.set(t,s),s}finally{$e.delete(t)}})();return $e.set(t,n),n}function yt(t){const l=e.ref({}),r=new Map;for(const a of t)l.value[a.id]={data:null,loading:!1,error:null,lastFetched:null};async function n(a){const h=a.id;l.value={...l.value,[h]:{data:l.value[h]?.data??null,lastFetched:l.value[h]?.lastFetched??null,loading:!0,error:null}};try{let f;if(a.type==="http-get"){const k=await fetch(a.url,{method:"GET",...a.options});if(!k.ok)throw new Error(`HTTP ${k.status}: ${k.statusText}`);f=await k.json()}else if(a.type==="http-post"){const k=await fetch(a.url,{method:"POST",...a.options});if(!k.ok)throw new Error(`HTTP ${k.status}: ${k.statusText}`);f=await k.json()}else if(a.type==="esri"){const L=`${a.url.replace(/\/$/,"")}/query?where=1%3D1&outFields=*&returnGeometry=false&f=json`,x=await fetch(L,a.options);if(!x.ok)throw new Error(`HTTP ${x.status}: ${x.statusText}`);f=(await x.json()).features?.map(A=>A.attributes)||[]}else throw new Error(`Unknown data source type: ${a.type}`);a.transform&&(f=a.transform(f)),l.value={...l.value,[h]:{data:f,loading:!1,error:null,lastFetched:Date.now()}}}catch(f){const k=f instanceof Error?f.message:"Unknown error";l.value={...l.value,[h]:{data:l.value[h]?.data??null,lastFetched:l.value[h]?.lastFetched??null,loading:!1,error:k}}}}async function s(){await Promise.all(t.map(a=>n(a)))}async function i(a){const h=t.find(f=>f.id===a);h&&await n(h)}function u(a){return l.value[a]?.data??null}const b=e.computed(()=>Object.values(l.value).some(a=>a.loading));function p(a){return l.value[a]?.loading??!1}function S(a){return l.value[a]?.error??null}function y(){for(const a of t)if(a.pollInterval&&a.pollInterval>0){const h=window.setInterval(()=>{n(a)},a.pollInterval);r.set(a.id,h)}}function g(){for(const[,a]of r)window.clearInterval(a);r.clear()}return e.onMounted(()=>{s(),y()}),e.onUnmounted(()=>{g()}),{state:e.readonly(l),isLoading:b,fetchAll:s,refetch:i,getData:u,isSourceLoading:p,getError:S,stopPolling:g}}const Vo={class:"layerboard-layout"},$o=["aria-expanded"],No={key:0,class:"layerboard-subtitle"},Mo={class:"layerboard-mobile-menu-content"},To={class:"layerboard-main"},Po={key:0,class:"layerboard-loading",role:"status","aria-live":"polite"},Fo={key:1,class:"layerboard-error",role:"alert"},zo=["aria-expanded","aria-label"],Do={key:0},Io={key:1},Oo={class:"sr-only","aria-live":"polite"},Ro=e.defineComponent({__name:"Layerboard",props:{title:{},subtitle:{default:void 0},webMapId:{},themeColor:{default:"#0f4d90"},cyclomediaConfig:{default:void 0},pictometryCredentials:{default:void 0},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:{default:void 0},initialCenter:{default:void 0}},emits:["configs-loaded","load-error","zoom"],setup(t,{expose:l,emit:r}){const n=t,s=r,i=e.ref([]),u=e.ref(!0),b=e.ref(null),p=e.ref(12),S=e.ref(""),y=e.ref(new Set),g=e.ref({}),a=e.ref(new Set),h=e.ref({}),f=e.ref({}),k=e.ref(new Set),L=e.ref({});function x(){const m={};for(const C of n.tiledLayers)m[C.id]=C.opacity??1;L.value=m}function N(m){k.value.has(m)?k.value.delete(m):k.value.add(m),k.value=new Set(k.value)}function A(m,C){C?k.value.add(m):k.value.delete(m),k.value=new Set(k.value)}function B(m,C){L.value={...L.value,[m]:C}}const V=n.dataSources.length>0?yt(n.dataSources):null,M=e.computed(()=>V?.state.value??{}),W=e.computed(()=>V?.isLoading.value??!1);function D(m){return V?.getData(m)??null}function te(m){return V?.refetch(m)??Promise.resolve()}e.provide("layerboard-layers",e.readonly(i)),e.provide("layerboard-visible",y),e.provide("layerboard-opacities",g),e.provide("layerboard-loading",e.readonly(a)),e.provide("layerboard-errors",e.readonly(h)),e.provide("layerboard-zoom",e.readonly(p)),e.provide("layerboard-toggle-layer",ve),e.provide("layerboard-set-layer-visible",ue),e.provide("layerboard-set-layers-visible",be),e.provide("layerboard-set-opacity",de),e.provide("layerboard-tiled-layers",e.readonly(e.computed(()=>n.tiledLayers))),e.provide("layerboard-visible-tiled",k),e.provide("layerboard-tiled-opacities",L),e.provide("layerboard-toggle-tiled",N),e.provide("layerboard-set-tiled-opacity",B),e.provide("layerboard-set-tiled-visible",A),e.provide("layerboard-data-sources-state",M),e.provide("layerboard-data-sources-loading",W),e.provide("layerboard-get-data-source",D),e.provide("layerboard-refetch-data-source",te);const oe=e.computed(()=>({backgroundColor:n.themeColor})),Be=e.computed(()=>({backgroundColor:n.themeColor})),Ne=e.computed(()=>({backgroundColor:n.themeColor})),Ae=e.computed(()=>({width:ee.value?"0":n.sidebarWidth}));async function he(){try{u.value=!0,b.value=null;const C=(await Ie(n.webMapId)).map(I=>{let _=I;const se=n.layerStyleOverrides[I.id];se&&(_={..._,paint:se.paint??_.paint,outlinePaint:se.outlinePaint??_.outlinePaint,legend:se.legend??_.legend,type:se.type??_.type});const Se=n.popupOverrides[I.id];return Se&&_.popup&&(_={..._,popup:{..._.popup,...Se}}),_});i.value=C.map(I=>({config:I,component:I.type}));const O={};C.forEach(I=>{O[I.id]=I.opacity??1}),g.value=O,s("configs-loaded",C)}catch(m){const C=m instanceof Error?m.message:"Failed to load layer configurations";b.value=C,s("load-error",C)}finally{u.value=!1}}async function Ze(){if(n.fetchMetadata)try{const m="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"),C=await fetch(m);if(!C.ok)return;const O=await C.json(),I={};for(const _ of O.rows||[])if(_.url_text&&_.representation){const se=Ke(_.url_text),Se=`https://metadata.phila.gov/#home/representationdetails/${_.representation}/`;I[se]=Se}f.value=I}catch{}}function Ue(m){p.value=m,s("zoom",m)}function ve(m){y.value.has(m)?y.value.delete(m):y.value.add(m),y.value=new Set(y.value)}function ue(m,C){C?y.value.add(m):y.value.delete(m),y.value=new Set(y.value)}function be(m,C){for(const O of m)C?y.value.add(O):y.value.delete(O);y.value=new Set(y.value)}function de(m,C){g.value={...g.value,[m]:C}}function We(m,C){C?a.value.add(m):a.value.delete(m),a.value=new Set(a.value)}function X(m,C){if(C)h.value={...h.value,[m]:C};else{const O={...h.value};delete O[m],h.value=O}}function ke(m){S.value=m}const G=e.ref(null),me=e.ref(null),je=e.ref(null),le=e.ref(null),Ee=e.ref(null),xe=e.ref(null),Me=e.ref(null),re=e.ref("map");function Le(){re.value=re.value==="sidebar"?"map":"sidebar",e.nextTick(()=>{re.value==="sidebar"&&G.value?.focus()})}const H=e.ref(!1);function Te(){H.value=!H.value,H.value&&e.nextTick(()=>{le.value?.focus()})}function ye(){H.value=!1,e.nextTick(()=>{me.value?.focus()})}const ee=e.ref(!1);function ge(){ee.value=!ee.value}const ne=e.ref(!1),Ve=e.ref(null);function ie(){Ve.value=document.activeElement,ne.value=!0,e.nextTick(()=>{Me.value?.focus()})}function J(){ne.value=!1,e.nextTick(()=>{Ve.value?.focus(),Ve.value=null})}function we(m){m.target.classList.contains("layerboard-modal-backdrop")&&J()}function qe(m){if(m.key==="Escape"){ye();return}if(m.key==="Tab"&&Ee.value){const C=Array.from(Ee.value.querySelectorAll('a[href], button:not([disabled]), textarea, input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])'));if(C.length===0)return;const O=C[0],I=C[C.length-1];m.shiftKey?document.activeElement===O&&(m.preventDefault(),I.focus()):document.activeElement===I&&(m.preventDefault(),O.focus())}}function Ge(m){if(m.key==="Escape"){J();return}if(m.key==="Tab"&&xe.value){const C=Array.from(xe.value.querySelectorAll('a[href], button:not([disabled]), textarea, input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])'));if(C.length===0)return;const O=C[0],I=C[C.length-1];m.shiftKey?document.activeElement===O&&(m.preventDefault(),I.focus()):document.activeElement===I&&(m.preventDefault(),O.focus())}}e.provide("layerboard-open-modal",ie),e.provide("layerboard-close-modal",J),e.provide("layerboard-is-modal-open",e.readonly(ne)),l({layerList:i,visibleLayers:y,layerOpacities:g,loadingLayers:a,layerErrors:h,currentZoom:p,toggleLayer:ve,setLayerVisible:ue,setLayersVisible:be,setLayerOpacity:de,reloadConfigs:he,clearCache:()=>mt(n.webMapId),visibleTiledLayers:k,tiledLayerOpacities:L,toggleTiledLayer:N,setTiledLayerVisible:A,setTiledLayerOpacity:B,dataSourcesState:M,dataSourcesLoading:W,getDataSourceData:D,refetchDataSource:te,isModalOpen:ne,openModal:ie,closeModal:J});function Pe(m){m.key==="Escape"&&H.value&&ye()}return e.onMounted(()=>{he(),Ze(),x(),document.addEventListener("keydown",Pe)}),e.onBeforeUnmount(()=>{document.removeEventListener("keydown",Pe)}),(m,C)=>(e.openBlock(),e.createElementBlock("div",Vo,[C[5]||(C[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(oe.value)},[C[1]||(C[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)),C[2]||(C[2]=e.createElementVNode("span",{class:"layerboard-header-divider layerboard-desktop-only","aria-hidden":"true"},null,-1)),e.createElementVNode("button",{ref_key:"hamburgerRef",ref:me,class:"layerboard-hamburger layerboard-mobile-only","aria-expanded":H.value,"aria-label":"Toggle menu",onClick:Te},[e.createVNode(e.unref(q.Icon),{"icon-definition":e.unref(Rt),size:"medium",inline:"",decorative:""},null,8,["icon-definition"])],8,$o),e.renderSlot(m.$slots,"header",{},()=>[e.createElementVNode("h1",null,e.toDisplayString(t.title),1),t.subtitle?(e.openBlock(),e.createElementBlock("span",No,e.toDisplayString(t.subtitle),1)):e.createCommentVNode("",!0)],!0),H.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"mobileMenuRef",ref:Ee,class:"layerboard-mobile-menu",role:"dialog","aria-modal":"true","aria-label":"Site menu",style:e.normalizeStyle({backgroundColor:t.themeColor}),onKeydown:qe},[e.createElementVNode("div",Mo,[e.renderSlot(m.$slots,"footer",{openModal:ie,closeModal:J,isModalOpen:ne.value},()=>[C[0]||(C[0]=e.createTextVNode(" City of Philadelphia ",-1))],!0)]),e.createElementVNode("button",{ref_key:"mobileMenuCloseRef",ref:le,class:"layerboard-mobile-menu-close","aria-label":"Close menu",onClick:ye},[e.createVNode(e.unref(q.Icon),{"icon-definition":e.unref(rt),size:"medium",decorative:""},null,8,["icon-definition"])],512)],36)):e.createCommentVNode("",!0),H.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:"layerboard-mobile-menu-backdrop",onClick:ye})):e.createCommentVNode("",!0)],4),e.createElementVNode("div",To,[u.value?(e.openBlock(),e.createElementBlock("div",Po,[e.createElementVNode("div",{class:"layerboard-spinner",style:e.normalizeStyle({borderTopColor:t.themeColor})},null,4),e.createElementVNode("p",null,"Loading "+e.toDisplayString(t.title)+"...",1)])):b.value?(e.openBlock(),e.createElementBlock("div",Fo,[C[3]||(C[3]=e.createElementVNode("h2",null,"Error Loading Layers",-1)),e.createElementVNode("p",null,e.toDisplayString(b.value),1),e.createElementVNode("button",{class:"layerboard-retry-button",style:e.normalizeStyle({backgroundColor:t.themeColor}),onClick:he}," Retry ",4)])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("aside",{id:"main-content",ref_key:"sidebarRef",ref:G,class:e.normalizeClass(["layerboard-sidebar",{"is-active":re.value==="sidebar"}]),style:e.normalizeStyle(Ae.value),"aria-label":"Map layers",tabindex:"-1"},[e.renderSlot(m.$slots,"sidebar",{layers:i.value,visibleLayers:y.value,layerOpacities:g.value,loadingLayers:a.value,layerErrors:h.value,currentZoom:p.value,toggleLayer:ve,setLayerVisible:ue,setLayersVisible:be,setOpacity:de,tiledLayers:t.tiledLayers,visibleTiledLayers:k.value,tiledLayerOpacities:L.value,toggleTiledLayer:N,setTiledLayerVisible:A,setTiledLayerOpacity:B,dataSourcesState:M.value,dataSourcesLoading:W.value,getDataSource:D,refetchDataSource:te},()=>[t.showDefaultSidebar?(e.openBlock(),e.createBlock(ft,{key:0,"layer-list":i.value,"visible-layers":y.value,"layer-opacities":g.value,"loading-layers":a.value,"layer-errors":h.value,"current-zoom":p.value,"search-query":S.value,"layer-metadata":f.value,onToggleLayer:ve,onSetOpacity:de,onUpdateSearch:ke},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":re.value==="map"}])},[e.createVNode(dt,{"visible-layers":y.value,"layer-opacities":g.value,"layer-list":i.value,"tiled-layers":t.tiledLayers,"visible-tiled-layers":k.value,"tiled-layer-opacities":L.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:Ue,onLayerLoading:We,onLayerError:X},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":ee.value}]),style:e.normalizeStyle({left:ee.value?"0":n.sidebarWidth}),"aria-expanded":!ee.value,"aria-label":ee.value?"Expand sidebar":"Collapse sidebar",onClick:ge},[e.createVNode(e.unref(q.Icon),{"icon-definition":ee.value?e.unref(It):e.unref(Ot),size:"medium",decorative:""},null,8,["icon-definition"])],14,zo)],64))]),e.createElementVNode("button",{ref_key:"mobileToggleRef",ref:je,class:"layerboard-mobile-toggle",style:e.normalizeStyle(Ne.value),onClick:Le},[re.value==="map"?(e.openBlock(),e.createElementBlock("span",Do,e.toDisplayString(t.sidebarLabel),1)):(e.openBlock(),e.createElementBlock("span",Io,e.toDisplayString(t.mapLabel),1))],4),e.createElementVNode("footer",{class:"layerboard-footer",style:e.normalizeStyle(Be.value)},[e.renderSlot(m.$slots,"footer",{openModal:ie,closeModal:J,isModalOpen:ne.value},()=>[C[4]||(C[4]=e.createTextVNode(" City of Philadelphia ",-1))],!0)],4),ne.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"layerboard-modal-backdrop",onClick:we,onKeydown:Ge},[e.createElementVNode("div",{ref_key:"modalRef",ref:xe,class:"layerboard-modal",role:"dialog","aria-modal":"true","aria-label":"Application information"},[e.createElementVNode("button",{ref_key:"modalCloseRef",ref:Me,class:"layerboard-modal-close","aria-label":"Close modal",onClick:J},[e.createVNode(e.unref(q.Icon),{"icon-definition":e.unref(rt),size:"medium",decorative:""},null,8,["icon-definition"])],512),e.renderSlot(m.$slots,"modal",{closeModal:J},void 0,!0)],512)],32)):e.createCommentVNode("",!0),e.createElementVNode("span",Oo,e.toDisplayString(re.value==="sidebar"?"Showing layers panel":"Showing map"),1)]))}}),_o=ce(Ro,[["__scopeId","data-v-67021805"]]),Ao=["aria-expanded"],Zo={key:0,class:"topic-icon"},Uo={class:"topic-title"},Wo=e.defineComponent({__name:"TopicAccordion",props:{title:{},icon:{default:void 0},expanded:{type:Boolean,default:!1},layerIds:{default:()=>[]},headerClass:{default:void 0}},emits:["toggle","layerChange"],setup(t,{emit:l}){const r=t,n=l,s=e.ref(r.expanded),i=`topic-panel-${e.useId()}`,u=`topic-header-${e.useId()}`;e.watch(()=>r.expanded,p=>{s.value=p});function b(){s.value=!s.value,n("toggle",s.value)}return(p,S)=>{const y=e.resolveComponent("font-awesome-icon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["topic-accordion",{"is-expanded":s.value}])},[e.createElementVNode("button",{id:u,class:e.normalizeClass(["topic-header",t.headerClass]),type:"button","aria-expanded":s.value,"aria-controls":i,onClick:b},[t.icon||p.$slots.icon?(e.openBlock(),e.createElementBlock("span",Zo,[e.renderSlot(p.$slots,"icon",{},()=>[t.icon?(e.openBlock(),e.createBlock(y,{key:0,icon:["fas",t.icon],"aria-hidden":"true"},null,8,["icon"])):e.createCommentVNode("",!0)],!0)])):e.createCommentVNode("",!0),e.createElementVNode("span",Uo,e.toDisplayString(t.title),1),e.createElementVNode("span",{class:e.normalizeClass(["topic-chevron",{"is-rotated":s.value}])},[...S[0]||(S[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,Ao),e.withDirectives(e.createElementVNode("div",{id:i,role:"region","aria-labelledby":u,class:"topic-content"},[e.renderSlot(p.$slots,"default",{},()=>[S[1]||(S[1]=e.createElementVNode("p",{class:"topic-empty"},"No content provided for this topic.",-1))],!0)],512),[[e.vShow,s.value]])],2)}}}),jo=ce(Wo,[["__scopeId","data-v-a2023afa"]]);function gt(t){return t.displayOptions?.shouldShowCheckbox!==!1}function ot(t,l){return l?t.displayOptions?.shouldShowSlider!==!1:!1}function nt(t,l){return l?t.displayOptions?.shouldShowLegendBox!==!1:!1}function fe(t){return t.displayOptions?.layerNameChange||t.title}const qo=["aria-label"],Go=["checked","disabled","onChange"],Ho={class:"layer-title"},Jo={class:"layer-title"},Ko={key:0,class:"empty-state"},Qo=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:{default:void 0}},emits:["toggleLayer","setOpacity"],setup(t,{emit:l}){const r=t,n=l,{isVisible:s,getLayerOpacity:i,isLayerLoading:u,getLayerError:b,isLayerAvailableAtZoom:p}=Ye(()=>r);function S(y){n("toggleLayer",y)}return(y,g)=>(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,a=>(e.openBlock(),e.createElementBlock("div",{key:a.id,class:"layer-item"},[e.unref(gt)(a)?(e.openBlock(),e.createElementBlock("label",{key:0,class:e.normalizeClass(["layer-checkbox",{"layer-unavailable":!e.unref(p)(a),"layer-error":e.unref(b)(a.id)}])},[e.createElementVNode("input",{type:"checkbox",checked:e.unref(s)(a.id),disabled:!e.unref(p)(a),onChange:h=>S(a.id)},null,40,Go),e.createElementVNode("span",Ho,[e.createTextVNode(e.toDisplayString(e.unref(fe)(a))+" ",1),e.createVNode(ze,{loading:e.unref(u)(a.id),error:e.unref(b)(a.id),unavailable:!e.unref(p)(a)},null,8,["loading","error","unavailable"])])],2)):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["layer-label-only",{"layer-unavailable":!e.unref(p)(a),"layer-error":e.unref(b)(a.id)}])},[e.createElementVNode("span",Jo,[e.createTextVNode(e.toDisplayString(e.unref(fe)(a))+" ",1),e.createVNode(ze,{loading:e.unref(u)(a.id),error:e.unref(b)(a.id),unavailable:!e.unref(p)(a)},null,8,["loading","error","unavailable"])])],2)),e.unref(ot)(a,t.showOpacity)&&e.unref(s)(a.id)&&e.unref(p)(a)?(e.openBlock(),e.createBlock(Qe,{key:2,"layer-id":a.id,"layer-name":e.unref(fe)(a),opacity:e.unref(i)(a.id),"onUpdate:opacity":h=>n("setOpacity",a.id,h)},null,8,["layer-id","layer-name","opacity","onUpdate:opacity"])):e.createCommentVNode("",!0),e.unref(nt)(a,t.showLegend)&&e.unref(s)(a.id)&&e.unref(p)(a)&&a.legend?.length?(e.openBlock(),e.createBlock(Xe,{key:3,items:a.legend,label:"Legend for "+e.unref(fe)(a)},null,8,["items","label"])):e.createCommentVNode("",!0)]))),128)),t.layers.length===0?(e.openBlock(),e.createElementBlock("div",Ko,"No layers available")):e.createCommentVNode("",!0)],8,qo))}}),Xo=ce(Qo,[["__scopeId","data-v-bfcd7855"]]),Yo=["aria-label"],en=["name","checked","disabled","onChange"],tn={class:"layer-title"},on={key:0,class:"empty-state"},nn=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:{default:void 0}},emits:["selectLayer","setOpacity"],setup(t,{emit:l}){const r=t,n=l,{isVisible:s,getLayerOpacity:i,isLayerLoading:u,getLayerError:b,isLayerAvailableAtZoom:p}=Ye(()=>r);function S(y){const g=r.layers.filter(a=>r.visibleLayerIds.has(a.id)&&a.id!==y).map(a=>a.id);n("selectLayer",y,g)}return(y,g)=>(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,a=>(e.openBlock(),e.createElementBlock("div",{key:a.id,class:"layer-item"},[e.createElementVNode("label",{class:e.normalizeClass(["layer-radio",{"layer-unavailable":!e.unref(p)(a),"layer-error":e.unref(b)(a.id)}])},[e.createElementVNode("input",{type:"radio",name:t.groupName,checked:e.unref(s)(a.id),disabled:!e.unref(p)(a),onChange:h=>S(a.id)},null,40,en),e.createElementVNode("span",tn,[e.createTextVNode(e.toDisplayString(e.unref(fe)(a))+" ",1),e.createVNode(ze,{loading:e.unref(u)(a.id),error:e.unref(b)(a.id),unavailable:!e.unref(p)(a)},null,8,["loading","error","unavailable"])])],2),e.unref(ot)(a,t.showOpacity)&&e.unref(s)(a.id)&&e.unref(p)(a)?(e.openBlock(),e.createBlock(Qe,{key:0,"layer-id":a.id,"layer-name":e.unref(fe)(a),opacity:e.unref(i)(a.id),"onUpdate:opacity":h=>n("setOpacity",a.id,h)},null,8,["layer-id","layer-name","opacity","onUpdate:opacity"])):e.createCommentVNode("",!0),e.unref(nt)(a,t.showLegend)&&e.unref(s)(a.id)&&e.unref(p)(a)&&a.legend?.length?(e.openBlock(),e.createBlock(Xe,{key:1,items:a.legend,label:"Legend for "+e.unref(fe)(a)},null,8,["items","label"])):e.createCommentVNode("",!0)]))),128)),t.layers.length===0?(e.openBlock(),e.createElementBlock("div",on,"No layers available")):e.createCommentVNode("",!0)],8,Yo))}}),an=ce(nn,[["__scopeId","data-v-c368d815"]]);function ln(t){const l=e.ref([]),r=e.ref(new Set),n=e.ref({}),s=e.ref(new Set),i=e.ref({}),u=e.ref(""),b=e.ref(!1),p=e.ref(!1),S=e.ref(null),y=e.computed(()=>{if(!u.value.trim())return l.value;const B=u.value.toLowerCase();return l.value.filter(V=>V.title.toLowerCase().includes(B))}),g=e.computed(()=>l.value.map(B=>({config:B,component:B.type})));async function a(){if(!p.value){b.value=!0,S.value=null;try{let B;t.mode==="dynamic"||!t.mode?t.webMapId?B=await h(t.webMapId):B=await Ie():B=await Ie(),l.value=B;const V={};B.forEach(M=>{V[M.id]=M.opacity??1}),n.value=V,p.value=!0}catch(B){S.value=B instanceof Error?B:new Error("Failed to initialize layerboard")}finally{b.value=!1}}}async function h(B){const V=_e(B),M=await fetch(V,{cache:"no-store"});if(!M.ok)throw new Error(`Failed to fetch WebMap: ${M.status} ${M.statusText}`);const W=await M.json();return et(W)}function f(B){const V=new Set(r.value);V.has(B)?V.delete(B):V.add(B),r.value=V}function k(B,V){n.value={...n.value,[B]:Math.max(0,Math.min(1,V))}}function L(B){u.value=B}function x(B,V){const M=new Set(s.value);V?M.add(B):M.delete(B),s.value=M}function N(B,V){if(V)i.value={...i.value,[B]:V};else{const M={...i.value};delete M[B],i.value=M}}function A(){l.value=[],r.value=new Set,n.value={},s.value=new Set,i.value={},u.value="",b.value=!1,p.value=!1,S.value=null}return{layerConfigs:e.readonly(l),visibleLayers:e.readonly(r),layerOpacities:e.readonly(n),loadingLayers:e.readonly(s),layerErrors:e.readonly(i),searchQuery:e.readonly(u),isLoading:e.readonly(b),isInitialized:e.readonly(p),error:e.readonly(S),filteredLayerConfigs:y,layerList:g,config:t,initialize:a,toggleLayer:f,setLayerOpacity:k,filterLayers:L,setLayerLoading:x,setLayerError:N,reset:A}}function rn(){const t=e.ref([]),l=e.ref(new Set),r=e.ref(new Set);function n(i){l.value.has(i)?l.value.delete(i):l.value.add(i)}function s(i){t.value=i}return{layers:e.computed(()=>t.value),visibleLayerIds:e.computed(()=>l.value),loadingLayerIds:e.computed(()=>r.value),toggleLayer:n,setLayers:s}}function ht(t){const l=e.ref(null),r=e.ref(!1),n=e.ref(null),s=e.ref(0);async function i(p={}){r.value=!0,n.value=null;const S=t.pageSize||2e3;let y=0,g=[],a=!0;try{for(;a;){const f=t.url.replace(/\/$/,""),k=encodeURIComponent(p.where||t.where||"1=1");let L=`${f}/query?where=${k}&outFields=*&returnGeometry=true&resultRecordCount=${S}&resultOffset=${y}&f=geojson`;if(p.bounds){const A=JSON.stringify({xmin:p.bounds.west,ymin:p.bounds.south,xmax:p.bounds.east,ymax:p.bounds.north,spatialReference:{wkid:4326}});L+=`&geometry=${encodeURIComponent(A)}&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects`}const x=await fetch(L);if(!x.ok)throw new Error(`HTTP ${x.status}: ${x.statusText}`);const N=await x.json();N.features&&N.features.length>0?(g=g.concat(N.features),y+=N.features.length,a=N.features.length===S):a=!1}const h={type:"FeatureCollection",features:g};return l.value=h,s.value=g.length,h}catch(h){const f=h instanceof Error?h:new Error("Failed to fetch features");throw n.value=f,f}finally{r.value=!1}}function u(){l.value=null,s.value=0,n.value=null}async function b(p={}){return i(p)}return{data:e.readonly(l),isLoading:e.readonly(r),error:e.readonly(n),totalFeatures:e.readonly(s),config:t,fetch:i,refetch:b,clear:u}}function sn(t,l,r){const n=ht(t);return e.watch(l,async s=>{if(s){const i=r(s);await n.fetch(i)}},{immediate:!0}),n}exports.LayerCheckboxSet=Xo;exports.LayerPanel=ft;exports.LayerRadioButtonSet=an;exports.Layerboard=_o;exports.MapPanel=dt;exports.TopicAccordion=jo;exports.WEBMAP_ID=So;exports.buildWebMapUrl=_e;exports.clearCache=mt;exports.getLayerConfigs=Ie;exports.getLayerDisplayName=fe;exports.getWebMapUrl=Co;exports.normalizeUrl=Ke;exports.shouldShowCheckbox=gt;exports.shouldShowLegendBox=nt;exports.shouldShowSlider=ot;exports.transformWebMapToLayerConfigs=et;exports.useApiDataSources=yt;exports.useDataSource=ht;exports.useLayerConfig=rn;exports.useLayerboard=ln;exports.useReactiveDataSource=sn;