@phila/layerboard 3.0.0-beta.21 → 3.0.0-beta.23

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