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