@phila/layerboard 3.0.0-beta.2 → 3.0.0-beta.3
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/README.md +12 -0
- package/dist/index.js +2 -2
- package/dist/index.mjs +1148 -1114
- package/dist/layerboard.css +1 -1
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -28,6 +28,18 @@ This package requires the following peer dependencies:
|
|
|
28
28
|
- `@fortawesome/free-solid-svg-icons` ^7.0.0
|
|
29
29
|
- `@fortawesome/vue-fontawesome` ^3.0.0
|
|
30
30
|
|
|
31
|
+
## Design Decisions
|
|
32
|
+
|
|
33
|
+
### Compact Text Field Styling
|
|
34
|
+
|
|
35
|
+
The phila-ui TextField component has a standard height of 56px, designed for form inputs where touch targets and readability are priorities. In the layerboard context (sidebar filter and map search control), we intentionally use a more compact ~40px version to save vertical space.
|
|
36
|
+
|
|
37
|
+
This is achieved through CSS overrides in:
|
|
38
|
+
- **LayerPanel.vue** - for the layer filter search box
|
|
39
|
+
- **MapPanel.vue** - for the MapSearchControl on the map
|
|
40
|
+
|
|
41
|
+
The overrides remove padding from `.state-layer` and `.content` elements. See the detailed comments in those files for the technical breakdown.
|
|
42
|
+
|
|
31
43
|
## Development
|
|
32
44
|
|
|
33
45
|
### Recommended IDE Setup
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),q=require("@phila/phila-ui-map-core"),A=require("@phila/phila-ui-core");var ue=typeof document<"u"?document.currentScript:null;function Se(t,r,o={}){const n={type:"Feature"};return(o.id===0||o.id)&&(n.id=o.id),o.bbox&&(n.bbox=o.bbox),n.properties=r||{},n.geometry=t,n}function rt(t,r,o={}){for(const a of t){if(a.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");if(a[a.length-1].length!==a[0].length)throw new Error("First and last Position are not equivalent.");for(let i=0;i<a[a.length-1].length;i++)if(a[a.length-1][i]!==a[0][i])throw new Error("First and last Position are not equivalent.")}return Se({type:"Polygon",coordinates:t},r,o)}function at(t,r,o={}){if(t.length<2)throw new Error("coordinates must be an array of two or more positions");return Se({type:"LineString",coordinates:t},r,o)}function it(t,r,o={}){return Se({type:"MultiLineString",coordinates:t},r,o)}function st(t,r,o={}){return Se({type:"MultiPolygon",coordinates:t},r,o)}function ct(t){return t.type==="Feature"?t.geometry:t}function ut(t,r,o){var n=t.length,a=de(t[0],r),i=[],u,f,p;let w,y;for(o||(o=[]),u=1;u<n;u++){for(w=t[u-1],y=t[u],f=p=de(y,r);;)if(a|f){if(a&f)break;a?(w=Ie(w,y,a,r),a=de(w,r)):(y=Ie(w,y,f,r),f=de(y,r))}else{i.push(w),f!==p?(i.push(y),u<n-1&&(o.push(i),i=[])):u===n-1&&i.push(y);break}a=p}return i.length&&o.push(i),o}function dt(t,r){var o,n,a,i,u,f,p;for(n=1;n<=8;n*=2){for(o=[],a=t[t.length-1],i=!(de(a,r)&n),u=0;u<t.length;u++)f=t[u],p=!(de(f,r)&n),p!==i&&o.push(Ie(a,f,n,r)),p&&o.push(f),a=f,i=p;if(t=o,!t.length)break}return o}function Ie(t,r,o,n){return o&8?[t[0]+(r[0]-t[0])*(n[3]-t[1])/(r[1]-t[1]),n[3]]:o&4?[t[0]+(r[0]-t[0])*(n[1]-t[1])/(r[1]-t[1]),n[1]]:o&2?[n[2],t[1]+(r[1]-t[1])*(n[2]-t[0])/(r[0]-t[0])]:o&1?[n[0],t[1]+(r[1]-t[1])*(n[0]-t[0])/(r[0]-t[0])]:null}function de(t,r){var o=0;return t[0]<r[0]?o|=1:t[0]>r[2]&&(o|=2),t[1]<r[1]?o|=4:t[1]>r[3]&&(o|=8),o}function ft(t,r){const o=ct(t),n=o.type,a=t.type==="Feature"?t.properties:{};let i=o.coordinates;switch(n){case"LineString":case"MultiLineString":{const u=[];return n==="LineString"&&(i=[i]),i.forEach(f=>{ut(f,r,u)}),u.length===1?at(u[0],a):it(u,a)}case"Polygon":return rt(We(i,r),a);case"MultiPolygon":return st(i.map(u=>We(u,r)),a);default:throw new Error("geometry "+n+" not supported")}}function We(t,r){const o=[];for(const n of t){const a=dt(n,r);a.length>0&&((a[0][0]!==a[a.length-1][0]||a[0][1]!==a[a.length-1][1])&&a.push(a[0]),a.length>=4&&o.push(a))}return o}var pt=ft;const mt={class:"map-panel"},yt=e.defineComponent({__name:"MapPanel",props:{visibleLayers:{},layerOpacities:{},layerList:{},tiledLayers:{},visibleTiledLayers:{},tiledLayerOpacities:{},cyclomediaConfig:{},pictometryCredentials:{},basemapControlPosition:{default:"top-right"},navigationControlPosition:{default:"bottom-right"},geolocationControlPosition:{default:"bottom-right"},searchControlPosition:{default:"top-left"},drawControlPosition:{default:"bottom-left"},cyclomediaButtonPosition:{default:"top-right"},pictometryButtonPosition:{default:"top-right"},initialZoom:{},initialCenter:{}},emits:["zoom","layerLoading","layerError"],setup(t,{emit:r}){const o=t,n=r,a=e.ref(null),i=e.ref(null),u=e.ref(0);function f(l){n("zoom",l),i.value&&(u.value=p(i.value))}function p(l){const d=l.getZoom(),S=l.getCenter().lat,C=559082264028e-3,B=S*Math.PI/180;return C*Math.cos(B)/Math.pow(2,d)}const w=e.ref({}),y=e.ref(null),h=e.ref(new Set),c=["fema-100-year-floodplain","fema-500-year-floodplain"];async function v(l,d,s,S){const C=encodeURIComponent(S||"1=1"),B=JSON.stringify({xmin:d.west,ymin:d.south,xmax:d.east,ymax:d.north,spatialReference:{wkid:4326}}),P=2e3;let F=0,_=[],Z=!0;for(;Z;){const D=`${l}/query?where=${C}&geometry=${encodeURIComponent(B)}&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects&outFields=*&returnGeometry=true&resultRecordCount=${P}&resultOffset=${F}&f=geojson`,z=await fetch(D);if(!z.ok)throw new Error(`HTTP ${z.status}: ${z.statusText}`);const O=await z.json();O.features&&O.features.length>0?(_=_.concat(O.features),F+=O.features.length,Z=O.features.length===P):Z=!1}if(c.includes(s)){const D=[d.west,d.south,d.east,d.north];_=_.map(z=>{if(z.geometry&&(z.geometry.type==="Polygon"||z.geometry.type==="MultiPolygon"))try{return pt(z,D)}catch{return z}return z})}return{type:"FeatureCollection",features:_}}async function N(l,d){const s=d.map(async S=>{const C=o.layerList.find(B=>B.config.id===S)?.config;if(C){n("layerLoading",S,!0);try{const B=await v(C.url,l,S,C.where);w.value={...w.value,[S]:B},n("layerError",S,null)}catch(B){const P=B instanceof Error?B.message:"Failed to load";n("layerError",S,P)}finally{n("layerLoading",S,!1)}}});await Promise.all(s)}async function g(l){const d=[...o.visibleLayers];await N(l,d)}function L(l){y.value=l.bounds,g(l.bounds)}function m(l){i.value=l;const d=l.getBounds();y.value={west:d.getWest(),south:d.getSouth(),east:d.getEast(),north:d.getNorth()};const s=l.getZoom();n("zoom",s),u.value=p(l),g(y.value)}e.watch(()=>o.visibleLayers.size,async()=>{if(j.value.length>0&&W(),y.value){const l=new Set(o.visibleLayers),d=[...l].filter(s=>!h.value.has(s));h.value=new Set(l),d.length>0&&await N(y.value,d)}});function b(l){return o.visibleLayers.has(l)}function V(l){return!!w.value[l.id]}const x=e.computed(()=>o.layerList.filter(l=>l.config.type==="circle"&&b(l.config.id)&&V(l.config)).map(l=>l.config)),T=e.computed(()=>o.layerList.filter(l=>l.config.type==="fill"&&b(l.config.id)&&V(l.config)).map(l=>l.config)),I=e.computed(()=>o.layerList.filter(l=>l.config.type==="fill"&&l.config.outlinePaint&&b(l.config.id)&&V(l.config)).map(l=>l.config)),J=e.computed(()=>o.layerList.filter(l=>l.config.type==="line"&&b(l.config.id)&&V(l.config)).map(l=>l.config));function le(l){return o.visibleTiledLayers?.has(l)??!1}function re(l){return o.tiledLayerOpacities?.[l]??1}function Ne(l){return`${l.replace(/\/$/,"")}/tile/{z}/{y}/{x}`}function xe(l){return{type:"raster",tiles:[Ne(l.url)],tileSize:256,attribution:l.attribution||""}}const pe=e.ref({}),he=e.ref(new Set);async function me(l){if(!he.value.has(l.id)){he.value.add(l.id);try{const d=l.url.replace(/\/$/,""),s=await fetch(`${d}?f=json`);if(!s.ok)return;const S=await s.json();let C=S.minScale||0,B=S.maxScale||0;if(S.layers&&S.layers.length>0)for(const P of S.layers)P.maxScale&&P.maxScale>0&&(B===0||P.maxScale<B)&&(B=P.maxScale);B===0&&(B=72e3),pe.value={...pe.value,[l.id]:{minScale:C,maxScale:B}}}catch{}}}e.onMounted(()=>{if(o.tiledLayers)for(const l of o.tiledLayers)l.scaleBasedRendering&&me(l)});function ve(l){if(!l.scaleBasedRendering)return"tiled";const d=pe.value[l.id];if(!d)return"tiled";const s=u.value;return s===0||s>d.maxScale?"tiled":"dynamic"}const Ve=e.computed(()=>o.tiledLayers?o.tiledLayers.filter(l=>le(l.id)?l.scaleBasedRendering?ve(l)==="tiled":!0:!1):[]),Pe=e.computed(()=>o.tiledLayers?o.tiledLayers.filter(l=>le(l.id)&&l.scaleBasedRendering?ve(l)==="dynamic":!1):[]);function ae(l){return{type:"raster",tiles:[`${l.url.replace(/\/$/,"")}/export?bbox={bbox-epsg-3857}&bboxSR=3857&imageSR=3857&size=256,256&format=png32&transparent=true&f=image`],tileSize:256,attribution:l.attribution||""}}function K(l){return{type:"geojson",data:w.value[l.id]}}function ie(l){return o.layerOpacities[l]??1}function X(l){const d=ie(l.id),s=l.type==="circle"?"circle-opacity":l.type==="fill"?"fill-opacity":"line-opacity";if(l.type==="fill"&&l.paint["fill-opacity"]===0)return{...l.paint,"fill-opacity":0};const S=l.type==="circle"?"circle-color":l.type==="fill"?"fill-color":"line-color",C={...l.paint},B=C[S],P=C[s]===1,F=typeof B=="string"&&B.startsWith("rgba(");if(P&&F){if(d===1)return C;{const _=B.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/);if(_&&_[4]){const[,Z,D,z,O]=_,Me=parseFloat(O)*d;C[S]=`rgba(${Z}, ${D}, ${z}, ${Me})`,C[s]=1}return C}}if(F){const _=B.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/);if(_){const[,Z,D,z]=_;C[S]=`rgb(${Z}, ${D}, ${z})`}}return C[s]=d,C}function $e(l){const d=ie(l.id);return{...l.outlinePaint,"line-opacity":d}}const j=e.ref([]),Y=e.ref(null),R=e.ref(0);function se(l){const d=l.replace(/-outline$/,"");return o.layerList.find(S=>S.config.id===d)?.config}function oe(l,d){return l.replace(/\{([^}]+)\}/g,(s,S)=>{const C=d[S];return C==null?"":String(C)})}function ze(l,d){if(l==null)return"-";if(d?.dateFormat&&typeof l=="number"){const s=new Date(l);switch(d.dateFormat){case"shortDateShortTime":return s.toLocaleString();case"longMonthDayYear":return s.toLocaleDateString(void 0,{month:"long",day:"numeric",year:"numeric"});case"shortDate":return s.toLocaleDateString();case"longDate":return s.toLocaleDateString(void 0,{weekday:"long",month:"long",day:"numeric",year:"numeric"});default:return s.toLocaleDateString()}}if(typeof l=="number"){if(l>1e12&&!d)return new Date(l).toLocaleDateString();const s=d?.places,S=d?.digitSeparator??!0;if(s!==void 0){const C=l.toFixed(s);if(S){const B=C.split("."),P=B[0]||"0",F=B[1],_=P.replace(/\B(?=(\d{3})+(?!\d))/g,",");return F?`${_}.${F}`:_}return C}return S?l.toLocaleString():String(l)}return String(l)}function be(l){const d=new Set;return l.filter(s=>{const C=`${s.layer.id.replace(/-outline$/,"")}:${JSON.stringify(s.properties)}`;return d.has(C)?!1:(d.add(C),!0)})}function ee(l,d){const s=new Map;return d.forEach((S,C)=>{s.set(S.id,C)}),l.sort((S,C)=>{const B=S.layer.id.replace(/-outline$/,""),P=C.layer.id.replace(/-outline$/,""),F=s.get(B)??-1;return(s.get(P)??-1)-F})}function ce(l){const d=i.value;if(!d)return;const s=[];o.layerList.forEach(D=>{const z=D.config;o.visibleLayers.has(z.id)&&(s.push(z.id),z.outlinePaint&&s.push(`${z.id}-outline`))});const S=d.project([l.lngLat.lng,l.lngLat.lat]),C=d.queryRenderedFeatures(S,{layers:s});if(C.length===0)return;const B=be(C),P=o.layerList.map(D=>D.config),F=ee(B,P),_=F.map(D=>{const z=D.layer.id.replace(/-outline$/,""),O=se(z);return O?{layerId:O.id,layerTitle:O.title,properties:D.properties||{},popupConfig:O.popup}:null}).filter(D=>D!==null);if(_.length===0)return;j.value=_,R.value=0,Y.value=[l.lngLat.lng,l.lngLat.lat];const Z=F[0];if(Z&&Z.geometry){const D=Z.layer.id.replace(/-outline$/,""),z=se(D);if(z){const O=Re(Z.geometry),Me=Ue(z.id,z.type);te.value={geometry:Z.geometry,geometryType:O,layerId:z.id,properties:Z.properties||{},originalStyle:Me}}}}function W(){j.value=[],Y.value=null,R.value=0,te.value=null}function ne(l){if(j.value.length===0)return;const d=l.target;if(!(d.tagName==="INPUT"||d.tagName==="TEXTAREA"||d.isContentEditable))switch(l.key){case"ArrowLeft":case"ArrowUp":l.preventDefault(),ke();break;case"ArrowRight":case"ArrowDown":l.preventDefault(),G();break;case"Escape":l.preventDefault(),W();break}}e.onMounted(()=>{window.addEventListener("keydown",ne)}),e.onUnmounted(()=>{window.removeEventListener("keydown",ne)});function G(){const l=j.value.length;l<=1||(R.value=(R.value+1)%l)}function ke(){const l=j.value.length;l<=1||(R.value=(R.value-1+l)%l)}const k=e.computed(()=>j.value.length===0?null:j.value[R.value]),E=e.computed(()=>{const l=k.value;return!l||!l.popupConfig?l?.layerTitle||"":oe(l.popupConfig.title,l.properties)}),H=e.computed(()=>{const l=k.value;if(!l)return"";let d='<div class="popup-content">';if(d+=`<h3 class="popup-title">${E.value}</h3>`,l.popupConfig?.fields?.length){d+='<table class="popup-table">';for(const s of l.popupConfig.fields){const S=ze(l.properties[s.field],s.format);d+=`<tr><th>${s.label}</th><td>${S}</td></tr>`}d+="</table>"}else d+='<p class="popup-no-fields">No additional information available.</p>';return d+="</div>",d}),M=e.ref({type:"FeatureCollection",features:[]}),U=e.ref({type:"FeatureCollection",features:[]}),Te={"circle-radius":["get","highlightRadius"],"circle-color":"#00FFFF","circle-opacity":.8,"circle-stroke-width":2,"circle-stroke-color":"#FFFFFF"},Fe={"line-width":["get","highlightWidth"],"line-color":"#00FFFF","line-opacity":.9},te=e.ref(null);function Re(l){return l.type}function Ue(l,d){const s=se(l);if(!s)return{radius:5,width:2};const S=s.paint||{};if(d==="circle"){const C=S["circle-radius"];return typeof C=="number"?{radius:C}:{radius:5}}if(d==="line"||d==="fill"){const C=S["line-width"];if(typeof C=="number")return{width:C};if(s.outlinePaint&&s.outlinePaint["line-width"]){const B=s.outlinePaint["line-width"];if(typeof B=="number")return{width:B}}return{width:2}}return{radius:5,width:2}}function Ze(l){return!l||l.length===0?[]:l[0]??[]}function tt(l){const{geometry:d,geometryType:s,originalStyle:S}=l;if(s==="Point"||s==="MultiPoint"){const B=(S.radius||5)+3;return{type:"FeatureCollection",features:[{type:"Feature",geometry:d,properties:{highlightRadius:B}}]}}if(s==="LineString"||s==="MultiLineString"){const B=(S.width||2)+3;return{type:"FeatureCollection",features:[{type:"Feature",geometry:d,properties:{highlightWidth:B}}]}}if(s==="Polygon"){const C=d.coordinates,B=Ze(C),F=(S.width||2)+3;return{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"LineString",coordinates:B},properties:{highlightWidth:F}}]}}if(s==="MultiPolygon"){const C=d.coordinates,P=(S.width||2)+3;return{type:"FeatureCollection",features:C.map(_=>({type:"Feature",geometry:{type:"LineString",coordinates:Ze(_)},properties:{highlightWidth:P}}))}}return{type:"FeatureCollection",features:[]}}function ot(l){if(!l){nt();return}const d=tt(l);l.geometryType==="Point"||l.geometryType==="MultiPoint"?(M.value=d,U.value={type:"FeatureCollection",features:[]}):(U.value=d,M.value={type:"FeatureCollection",features:[]})}function nt(){M.value={type:"FeatureCollection",features:[]},U.value={type:"FeatureCollection",features:[]}}e.watch(te,l=>{ot(l)}),e.watch(()=>o.visibleLayers,l=>{te.value&&!l.has(te.value.layerId)&&(te.value=null,W())},{deep:!0}),e.watch(R,()=>{const l=k.value;if(!l){te.value=null;return}const d=i.value;if(!d||!Y.value)return;const s=[];o.layerList.forEach(P=>{const F=P.config;o.visibleLayers.has(F.id)&&(s.push(F.id),F.outlinePaint&&s.push(`${F.id}-outline`))});const S=d.project(Y.value),B=d.queryRenderedFeatures(S,{layers:s}).find(P=>P.layer.id.replace(/-outline$/,"")===l.layerId&&JSON.stringify(P.properties)===JSON.stringify(l.properties));if(B&&B.geometry){const P=se(l.layerId);if(P){const F=Re(B.geometry),_=Ue(P.id,P.type);te.value={geometry:B.geometry,geometryType:F,layerId:P.id,properties:B.properties||{},originalStyle:_}}}});const Ae=e.ref(null);function lt(l){const[d,s]=l.geometry.coordinates;Ae.value=[d,s]}return(l,d)=>(e.openBlock(),e.createElementBlock("div",mt,[e.createVNode(e.unref(q.Map),{ref_key:"mapRef",ref:a,zoom:o.initialZoom,center:o.initialCenter,"navigation-controls":{position:o.navigationControlPosition},"geolocation-control":{position:o.geolocationControlPosition},"basemap-change-controls":{toggle:!0,dropdown:!0,position:o.basemapControlPosition},"map-search-control":{position:o.searchControlPosition},"enable-cyclomedia":!0,"cyclomedia-config":o.cyclomediaConfig,"cyclomedia-button-position":o.cyclomediaButtonPosition,"enable-pictometry":!0,"pictometry-credentials":o.pictometryCredentials,"pictometry-button-position":o.pictometryButtonPosition,"tool-panel-layout":"vertical","tool-panel-split-ratio":50,onZoom:f,onClick:W,onMoveend:L,onLoad:m,onSearchResult:lt},{default:e.withCtx(()=>[o.drawControlPosition!==null?(e.openBlock(),e.createBlock(e.unref(q.DrawTool),{key:0,position:o.drawControlPosition},null,8,["position"])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ve.value,s=>(e.openBlock(),e.createBlock(e.unref(q.RasterLayer),{key:"tiled-"+s.id,id:"tiled-"+s.id,source:xe(s),paint:{"raster-opacity":re(s.id)},minzoom:s.minZoom,maxzoom:s.maxZoom},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Pe.value,s=>(e.openBlock(),e.createBlock(e.unref(q.RasterLayer),{key:"dynamic-"+s.id,id:"dynamic-"+s.id,source:ae(s),paint:{"raster-opacity":re(s.id)},minzoom:s.minZoom,maxzoom:s.maxZoom},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x.value,s=>(e.openBlock(),e.createBlock(e.unref(q.CircleLayer),{key:s.id,id:s.id,source:K(s),paint:X(s),minzoom:s.minZoom,maxzoom:s.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(T.value,s=>(e.openBlock(),e.createBlock(e.unref(q.FillLayer),{key:s.id,id:s.id,source:K(s),paint:X(s),minzoom:s.minZoom,maxzoom:s.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(I.value,s=>(e.openBlock(),e.createBlock(e.unref(q.LineLayer),{key:s.id+"-outline",id:s.id+"-outline",source:K(s),paint:$e(s),minzoom:s.minZoom,maxzoom:s.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(J.value,s=>(e.openBlock(),e.createBlock(e.unref(q.LineLayer),{key:s.id,id:s.id,source:K(s),paint:X(s),minzoom:s.minZoom,maxzoom:s.maxZoom,"before-id":"highlight-lines",onClick:ce},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),e.createVNode(e.unref(q.CircleLayer),{key:"highlight-circles-layer",id:"highlight-circles",source:{type:"geojson",data:M.value},paint:Te},null,8,["source"]),e.createVNode(e.unref(q.LineLayer),{key:"highlight-lines-layer",id:"highlight-lines",source:{type:"geojson",data:U.value},paint:Fe},null,8,["source"]),e.createVNode(e.unref(q.MapMarker),{"lng-lat":Ae.value,color:"#2176d2"},null,8,["lng-lat"]),k.value&&Y.value?(e.openBlock(),e.createBlock(e.unref(q.MapPopup),{key:1,"lng-lat":Y.value,html:H.value,"close-on-click":!1,"show-navigation":j.value.length>1,"current-feature-index":R.value,"total-features":j.value.length,"layer-name":k.value.layerTitle,onClose:W,onNext:G,onPrevious:ke},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"])]))}}),ge=(t,r)=>{const o=t.__vccOpts||t;for(const[n,a]of r)o[n]=a;return o},Je=ge(yt,[["__scopeId","data-v-38b78874"]]),gt=["disabled"],ht=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 r=t,o=u=>"href"in u&&u.href!==void 0||"to"in u&&u.to!==void 0,n=e.computed(()=>A.cn("phila-button",`phila-button--${r.variant}`,r.size&&`is-${r.size}`,r.iconOnly&&"icon-button",r.iconOnly&&r.variant==="standard"&&"icon-button--standard",r.className)),a=e.computed(()=>o(r)?"to"in r&&r.to!==void 0?{to:r.to,disabled:r.disabled,className:n.value}:{href:r.href,target:r.target,rel:r.rel,disabled:r.disabled,className:n.value}:{}),i=e.computed(()=>({iconDefinition:r.iconDefinition,iconClass:r.iconClass,src:r.src,iconRight:r.iconRight,iconOnly:r.iconOnly,text:r.text,size:r.size}));return(u,f)=>o(r)?(e.openBlock(),e.createBlock(e.unref(A.BaseLink),e.mergeProps({key:0},{...a.value,...u.$attrs},{role:"button"}),{default:e.withCtx(()=>[e.createVNode(e.unref(A.ActionContent),e.normalizeProps(e.guardReactiveProps(i.value)),{default:e.withCtx(()=>[e.renderSlot(u.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(r.text),1)])]),_:3},16)]),_:3},16)):(e.openBlock(),e.createElementBlock("button",e.mergeProps({key:1,type:"button",disabled:r.disabled,class:n.value},u.$attrs),[e.createVNode(e.unref(A.ActionContent),e.normalizeProps(e.guardReactiveProps(i.value)),{default:e.withCtx(()=>[e.renderSlot(u.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(r.text),1)])]),_:3},16)],16,gt))}});var vt={prefix:"fas",iconName:"circle-exclamation",icon:[512,512,["exclamation-circle"],"f06a","M256 512a256 256 0 1 1 0-512 256 256 0 1 1 0 512zm0-192a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-192c-18.2 0-32.7 15.5-31.4 33.7l7.4 104c.9 12.6 11.4 22.3 23.9 22.3 12.6 0 23-9.7 23.9-22.3l7.4-104c1.3-18.2-13.1-33.7-31.4-33.7z"]},bt=vt,kt={prefix:"fas",iconName:"xmark",icon:[384,512,[128473,10005,10006,10060,215,"close","multiply","remove","times"],"f00d","M55.1 73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L147.2 256 9.9 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192.5 301.3 329.9 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.8 256 375.1 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192.5 210.7 55.1 73.4z"]},wt=kt;const Lt=["for"],Ct={class:"state-layer"},St={class:"content"},Et={class:"input-text-container"},Bt=["id","placeholder"],Nt={key:1,class:"has-text-body-small phila-supporting-text"},xt={key:2,class:"has-text-body-small phila-error-text"},Vt=e.defineComponent({inheritAttrs:!1,__name:"TextField",props:{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[]}}},setup(t,{emit:r}){const o=e.useAttrs(),n=t,a=e.computed(()=>typeof n.error=="string"?n.error:n.error[0]),i=e.toRef(n,"id"),u=e.computed(()=>{const w=["default-class"];return o.disabled!=null&&w.push("phila-input--disabled"),a.value&&w.push("phila-input--error"),o.required!=null&&w.push("phila-input--required"),A.cn(...w)}),f=e.ref(""),p=e.computed(()=>{const w=[];return f.value!==""&&w.push("phila-text-field--filled"),n.className&&w.push(n.className),A.cn(...w)});return(w,y)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["phila-input",u.value])},[n.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:i.value,class:"has-text-label-small phila-label"},e.toDisplayString(n.label),9,Lt)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["phila-text-field",p.value])},[e.createElementVNode("div",Ct,[n.leadingIcon?(e.openBlock(),e.createBlock(e.unref(A.Icon),{key:0,"icon-class":n.leadingIcon,inline:""},null,8,["icon-class"])):e.createCommentVNode("",!0),e.createElementVNode("div",St,[e.createElementVNode("div",Et,[e.withDirectives(e.createElementVNode("input",e.mergeProps({id:i.value,"onUpdate:modelValue":y[0]||(y[0]=h=>f.value=h),class:"phila-text-field-input has-text-body-default",placeholder:n.placeholder},e.unref(o)),null,16,Bt),[[e.vModelDynamic,f.value]])])]),f.value!=""?(e.openBlock(),e.createBlock(e.unref(ht),{key:1,variant:"standard",size:"extra-small","icon-only":"",icon:e.unref(wt),onClick:y[1]||(y[1]=h=>f.value="")},null,8,["icon"])):e.createCommentVNode("",!0),n.trailingIcon?(e.openBlock(),e.createBlock(e.unref(A.Icon),{key:2,"icon-class":n.trailingIcon,inline:""},null,8,["icon-class"])):e.createCommentVNode("",!0)])],2),n.supportingText?(e.openBlock(),e.createElementBlock("div",Nt,e.toDisplayString(n.supportingText),1)):e.createCommentVNode("",!0),a.value?(e.openBlock(),e.createElementBlock("div",xt,[e.createVNode(e.unref(A.Icon),{"icon-definition":e.unref(bt),size:"small",inline:""},null,8,["icon-definition"]),e.createTextVNode(" "+e.toDisplayString(a.value),1)])):e.createCommentVNode("",!0)],2))}});var 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"]},$t={prefix:"fas",iconName:"caret-left",icon:[256,512,[],"f0d9","M7.7 235.8c-10.3 12.6-9.5 31.1 2.2 42.8l128 128c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-256c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-128 128-2.2 2.4z"]},je={prefix:"fas",iconName:"xmark",icon:[384,512,[128473,10005,10006,10060,215,"close","multiply","remove","times"],"f00d","M55.1 73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L147.2 256 9.9 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192.5 301.3 329.9 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.8 256 375.1 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192.5 210.7 55.1 73.4z"]},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"]},Tt={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 Ft={class:"layer-panel"},Mt={key:0,class:"search-box"},_t={key:1,class:"topics-container"},It={class:"layer-row"},Dt=["href"],Ot={key:1,class:"metadata-placeholder"},Rt=["checked","disabled","onChange"],Ut={class:"layer-title"},Zt={key:0,class:"loading-indicator"},At=["title"],Wt={key:2,class:"zoom-indicator"},jt={key:0,class:"opacity-control"},qt={class:"opacity-label"},Gt=["value","onInput"],Ht={key:1,class:"layer-legend"},Jt={class:"legend-label"},Qt={key:0,class:"no-results"},Kt=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:"Search layers..."}},emits:["toggleLayer","setOpacity","updateSearch"],setup(t,{emit:r}){const o=t,n=r,a=e.computed(()=>{if(!o.searchQuery.trim())return o.layerList;const L=o.searchQuery.toLowerCase();return o.layerList.filter(m=>m.config.title.toLowerCase().includes(L))});function i(L){let m=L.split("?")[0]||L;return m=m.replace(/\/query$/,""),m=m.replace(/\/$/,""),m.toLowerCase()}function u(L){const m=i(L);return o.layerMetadata[m]||null}const f=e.computed(()=>o.layerList.some(L=>u(L.config.url)));function p(L){return o.visibleLayers.has(L)}function w(L){return o.layerOpacities[L]??1}function y(L){return o.loadingLayers.has(L)}function h(L){return o.layerErrors[L]||null}function c(L){const m=o.currentZoom,b=L.minZoom,V=L.maxZoom;return!(b!==void 0&&m<b||V!==void 0&&m>V)}const v=e.computed({get:()=>o.searchQuery,set:L=>n("updateSearch",L)});function N(L){n("toggleLayer",L)}function g(L,m){const b=m.target,V=parseFloat(b.value);n("setOpacity",L,V)}return(L,m)=>(e.openBlock(),e.createElementBlock("aside",Ft,[t.showSearch?(e.openBlock(),e.createElementBlock("div",Mt,[e.createVNode(e.unref(Vt),{modelValue:v.value,"onUpdate:modelValue":m[0]||(m[0]=b=>v.value=b),placeholder:t.searchPlaceholder,"class-name":"layer-search-field"},null,8,["modelValue","placeholder"])])):e.createCommentVNode("",!0),t.mode==="topics"?(e.openBlock(),e.createElementBlock("div",_t,[e.renderSlot(L.$slots,"topics",{},()=>[m[2]||(m[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":f.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,b=>(e.openBlock(),e.createElementBlock("div",{key:b.config.id,class:"layer-item"},[e.createElementVNode("div",It,[u(b.config.url)?(e.openBlock(),e.createElementBlock("a",{key:0,href:u(b.config.url)||"",target:"_blank",rel:"noopener noreferrer",class:"metadata-link",title:"View metadata",onClick:m[1]||(m[1]=e.withModifiers(()=>{},["stop"]))},[e.createVNode(e.unref(A.Icon),{"icon-definition":e.unref(Tt),size:"small",inline:"",decorative:""},null,8,["icon-definition"])],8,Dt)):f.value?(e.openBlock(),e.createElementBlock("span",Ot)):e.createCommentVNode("",!0),e.createElementVNode("label",{class:e.normalizeClass(["layer-checkbox",{"layer-unavailable":!c(b.config),"layer-error":h(b.config.id)}])},[e.createElementVNode("input",{type:"checkbox",checked:p(b.config.id),disabled:!c(b.config),onChange:V=>N(b.config.id)},null,40,Rt),e.createElementVNode("span",Ut,[e.createTextVNode(e.toDisplayString(b.config.title)+" ",1),y(b.config.id)?(e.openBlock(),e.createElementBlock("span",Zt," Loading... ")):e.createCommentVNode("",!0),h(b.config.id)?(e.openBlock(),e.createElementBlock("span",{key:1,class:"error-indicator",title:h(b.config.id)||""}," Error ",8,At)):e.createCommentVNode("",!0),c(b.config)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",Wt," (zoom in) "))])],2)]),t.showOpacity&&p(b.config.id)?(e.openBlock(),e.createElementBlock("div",jt,[e.createElementVNode("label",qt," Opacity: "+e.toDisplayString(Math.round(w(b.config.id)*100))+"% ",1),e.createElementVNode("input",{type:"range",min:"0",max:"1",step:"0.05",value:w(b.config.id),class:"opacity-slider",onInput:V=>g(b.config.id,V)},null,40,Gt)])):e.createCommentVNode("",!0),t.showLegend&&p(b.config.id)&&b.config.legend?.length?(e.openBlock(),e.createElementBlock("ul",Ht,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.config.legend,(V,x)=>(e.openBlock(),e.createElementBlock("li",{key:x,class:"legend-item"},[V.type==="circle"?(e.openBlock(),e.createElementBlock("span",{key:0,class:"legend-symbol legend-circle",style:e.normalizeStyle({backgroundColor:V.color})},null,4)):V.type==="line"?(e.openBlock(),e.createElementBlock("span",{key:1,class:"legend-symbol legend-line",style:e.normalizeStyle({backgroundColor:V.color,height:`${V.width||2}px`})},null,4)):V.type==="fill"?(e.openBlock(),e.createElementBlock("span",{key:2,class:"legend-symbol legend-fill",style:e.normalizeStyle({backgroundColor:V.color})},null,4)):e.createCommentVNode("",!0),e.createElementVNode("span",Jt,e.toDisplayString(V.label),1)]))),128))])):e.createCommentVNode("",!0)]))),128)),a.value.length===0?(e.openBlock(),e.createElementBlock("div",Qt,' No layers match "'+e.toDisplayString(t.searchQuery)+'" ',1)):e.createCommentVNode("",!0)],2))]))}}),Qe=ge(Kt,[["__scopeId","data-v-82d84fbe"]]);function $(t){if(!t||!Array.isArray(t)||t.length<3)return"#888888";const r=t[0],o=t[1],n=t[2],i=(t[3]??255)/255;return i===1?`#${r.toString(16).padStart(2,"0")}${o.toString(16).padStart(2,"0")}${n.toString(16).padStart(2,"0")}`:`rgba(${r}, ${o}, ${n}, ${i.toFixed(2)})`}function Q(t){return t!==void 0?t:1}const Xt=559082264;function qe(t){return!t||t<=0?null:Math.round(Math.log2(Xt/t)*100)/100}function Yt(t,r){const o={};if(t&&t>0){const n=qe(t);n!==null&&(o.minZoom=n)}if(r&&r>0){const n=qe(r);n!==null&&(o.maxZoom=n)}return o}function Ee(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 fe(t){return!(!t||t.style==="esriSLSNull"||t.color===null||t.width===0||t.color&&t.color[3]===0)}function _e(t){return String(t)}function Ke(t,r,o){const n=t.symbol,a=Ee(n);let i={},u=[],f=null;if(a==="fill"&&n){const p=n.color===null?0:n.color?.[3]??255,w=p===0?"rgba(0, 0, 0, 0)":$(n.color),y=p===0?0:p<255?1:Q(r);if(i={"fill-color":w,"fill-opacity":y},fe(n.outline)){const h=n.outline.width||1,c=$(n.outline.color);p!==0&&(i["fill-outline-color"]=c),(h>1||p===0)&&(f={"line-color":c,"line-width":h})}u=[{type:"fill",color:$(n.color),label:t.label||"Feature"}]}else if(a==="line"&&n)i={"line-color":$(n.color),"line-width":n.width||1,"line-opacity":Q(r)},u=[{type:"line",color:$(n.color),width:n.width||1,label:t.label||"Feature"}];else if(a==="circle"&&n){const p=Math.round((n.size||6)*.71*100)/100;i={"circle-color":$(n.color),"circle-radius":p,"circle-opacity":Q(r)},fe(n.outline)&&(i["circle-stroke-color"]=$(n.outline.color),i["circle-stroke-width"]=n.outline.width||1),u=[{type:"circle",color:$(n.color),label:t.label||"Feature"}]}return{paint:i,legend:u,geomType:a,outlinePaint:f}}function eo(t,r,o){const n=t.field1,a=t.uniqueValueInfos||[],i=t.defaultSymbol;if(a.length===0)return Ke({...t,symbol:i},r);const u=a[0]?.symbol||i,f=Ee(u);let p={},w=[],y=null;if(f==="fill"){const h=["match",["to-string",["get",n]]];for(const c of a){h.push(_e(c.value)),h.push($(c.symbol?.color));const v=String(c.value),g=o?.get(v)||c.label||v;w.push({type:"fill",color:$(c.symbol?.color),label:g})}if(h.push(i?$(i.color):"#888888"),p={"fill-color":h,"fill-opacity":Q(r)},fe(u?.outline)){const c=u.outline.width||1,v=$(u.outline.color);p["fill-outline-color"]=v,c>1&&(y={"line-color":v,"line-width":c})}}else if(f==="line"){const h=["match",["to-string",["get",n]]];for(const c of a){h.push(_e(c.value)),h.push($(c.symbol?.color));const v=String(c.value),g=o?.get(v)||c.label||v;w.push({type:"line",color:$(c.symbol?.color),width:c.symbol?.width||1,label:g})}h.push(i?$(i.color):"#888888"),p={"line-color":h,"line-width":u?.width||2,"line-opacity":Q(r)}}else if(f==="circle"){const h=["match",["to-string",["get",n]]];for(const v of a){h.push(_e(v.value)),h.push($(v.symbol?.color));const N=String(v.value),L=o?.get(N)||v.label||N;w.push({type:"circle",color:$(v.symbol?.color),label:L})}h.push(i?$(i.color):"#888888");const c=Math.round((u?.size||6)*.71*100)/100;p={"circle-color":h,"circle-radius":c,"circle-opacity":Q(r)},fe(u?.outline)&&(p["circle-stroke-color"]=$(u.outline.color),p["circle-stroke-width"]=u.outline.width||1)}return{paint:p,legend:w,geomType:f,outlinePaint:y}}function to(t,r){const o=t.field,n=t.classBreakInfos||[],a=t.visualVariables?.find(y=>y.type==="colorInfo");if(a?.stops&&a.stops.length>0)return oo(a,o,t,r);if(n.length===0)return{paint:{},legend:[],geomType:"fill",outlinePaint:null};const i=n[0]?.symbol,u=Ee(i);let f={},p=[],w=null;if(u==="fill"){const y=["step",["get",o]];y.push($(n[0]?.symbol?.color));for(let h=0;h<n.length;h++){const c=n[h];h>0&&(y.push(n[h-1].classMaxValue),y.push($(c.symbol?.color))),p.push({type:"fill",color:$(c.symbol?.color),label:c.label||`${c.classMaxValue}`})}if(f={"fill-color":y,"fill-opacity":Q(r)},fe(i?.outline)){const h=i.outline.width||1,c=$(i.outline.color);f["fill-outline-color"]=c,h>1&&(w={"line-color":c,"line-width":h})}}else if(u==="line"){const y=["step",["get",o]];y.push($(n[0]?.symbol?.color));let h=t.minValue??0;for(let v=0;v<n.length;v++){const N=n[v];v>0&&(y.push(n[v-1].classMaxValue),y.push($(N.symbol?.color))),p.push({type:"line",color:$(N.symbol?.color),width:N.symbol?.width||i?.width||2,label:N.label||`${h} - ${N.classMaxValue}`}),h=N.classMaxValue+1}const c=i?.width||2;f={"line-color":y,"line-width":c,"line-opacity":Q(r)}}return{paint:f,legend:p,geomType:u,outlinePaint:w}}function oo(t,r,o,n){const a=t.stops||[];if(a.length===0)return{paint:{},legend:[],geomType:"fill",outlinePaint:null};const i=o.classBreakInfos?.[0]?.symbol||o.defaultSymbol,u=Ee(i);let f={},p=[],w=null;if(u==="fill"){const y=["interpolate",["linear"],["get",r]];for(const c of a)y.push(c.value),y.push($(c.color)),p.push({type:"fill",color:$(c.color),label:c.label||`${c.value}`});if(f={"fill-color":["case",["==",["get",r],null],"rgba(0, 0, 0, 0)",y],"fill-opacity":Q(n)},fe(i?.outline)){const c=i.outline.width||1,v=$(i.outline.color);f["fill-outline-color"]=v,c>1&&(w={"line-color":v,"line-width":c})}}return{paint:f,legend:p,geomType:u,outlinePaint:w}}function no(t,r,o,n){if(!t?.renderer)return{paint:{},legend:[],geomType:"fill",outlinePaint:null};const a=t.renderer;switch(a.type){case"simple":return Ke(a,r);case"uniqueValue":return eo(a,r,o);case"classBreaks":return to(a,r);default:return{paint:{},legend:[],geomType:"fill",outlinePaint:null}}}function lo(t){if(!t)return null;const r=t.title||"",n=(t.fieldInfos||[]).filter(a=>a.visible===!0).map(a=>{const i={field:a.fieldName,label:a.label||a.fieldName};return a.format&&(i.format={},a.format.dateFormat&&(i.format.dateFormat=a.format.dateFormat),a.format.digitSeparator!==void 0&&(i.format.digitSeparator=a.format.digitSeparator),a.format.places!==void 0&&(i.format.places=a.format.places),Object.keys(i.format).length===0&&delete i.format),i});return{title:r,fields:n}}function ro(t){return t?.definitionExpression}function ao(t){return(t.includes("_")?t.split("_").slice(1).join(" "):t).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function io(t){return t.includes("_")?t.split("_").slice(1).join(" "):t}function so(t){const r=new Map;if(!t)return r;const o=t.split(`
|
|
2
|
-
`),n=/^(\d{1,3})\s+(.+)$/;for(const a of o){const i=a.trim().match(n);if(i){const[,u,f]=i;u&&f&&r.set(u,f.trim())}}return r}async function co(t){try{const r=await fetch(`${t}?f=json`);if(!r.ok)return null;const o=await r.json();return o.drawingInfo?{drawingInfo:o.drawingInfo,description:o.description}:null}catch{return null}}async function De(t){const r=t.operationalLayers||[],o=[],n=["Zoning and Planning_Land Use"];for(const a of r)if(a.url&&a.itemId!=="4f39b829b96d437da9231727d9c91fab")try{let i=a.layerDefinition?.drawingInfo,u;const f=!i||!i.renderer,p=n.includes(a.title);if((f||p)&&a.url){const x=await co(a.url);x&&(i=x.drawingInfo,x.description&&(u=so(x.description),u.size>0))}const{paint:w,legend:y,geomType:h,outlinePaint:c}=no(i,a.opacity,u,a.title),v=lo(a.popupInfo),N=ro(a.layerDefinition),g=Yt(a.layerDefinition?.minScale,a.layerDefinition?.maxScale),L=ao(a.title),m=io(a.title);let b=a.opacity??1;const V={id:L,title:m,type:h,url:a.url,opacity:b,paint:w,legend:y,popup:v};N&&(V.where=N),g.minZoom!==void 0&&(V.minZoom=g.minZoom),g.maxZoom!==void 0&&(V.maxZoom=g.maxZoom),c&&(V.outlinePaint=c),o.push(V)}catch{}return o.sort((a,i)=>a.title.localeCompare(i.title)),o}const Ge={},Oe="376af635c84643cd816a8c5d017a53aa",uo=Oe;function Be(t,r){let o=`https://www.arcgis.com/sharing/rest/content/items/${t}/data?f=json`;return r&&(o+=`&token=${r}`),o}function fo(){return Be(Oe)}const Le=new Map,ye=new Map;function Xe(t){t?(Le.delete(t),ye.delete(t)):(Le.clear(),ye.clear())}let we,He=0;async function po(){const t=typeof{url:typeof document>"u"?require("url").pathToFileURL(__filename).href:ue&&ue.tagName.toUpperCase()==="SCRIPT"&&ue.src||new URL("index.js",document.baseURI).href}<"u"&&Ge?.VITE_AGO_USERNAME,r=typeof{url:typeof document>"u"?require("url").pathToFileURL(__filename).href:ue&&ue.tagName.toUpperCase()==="SCRIPT"&&ue.src||new URL("index.js",document.baseURI).href}<"u"&&Ge?.VITE_AGO_PASSWORD;if(!(!t||!r)){if(we&&Date.now()<He-3e5)return we;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:r,referer:window.location.origin||"https://localhost",expiration:"120"})})).json();return n.error?void 0:(we=n.token,He=n.expires,we)}catch{return}}}async function mo(t,r){const o=Be(t,r),n=await fetch(o);if(!n.ok)throw new Error(`Failed to fetch WebMap: ${n.status} ${n.statusText}`);const a=await n.json();if(a.error)throw new Error(`ArcGIS error: ${a.error.message||a.error.code||"Unknown error"}`);return a}async function yo(t){try{const r=await po(),o=await mo(t,r);return await De(o)}catch(r){throw new Error(`Failed to load dynamic layer configs: ${r instanceof Error?r.message:"Unknown error"}`)}}async function Ce(t=Oe){const r=Le.get(t);if(r)return r;const o=ye.get(t);if(o)return o;const n=(async()=>{try{const a=await yo(t);return Le.set(t,a),a}finally{ye.delete(t)}})();return ye.set(t,n),n}function Ye(t){const r=e.ref({}),o=new Map;for(const c of t)r.value[c.id]={data:null,loading:!1,error:null,lastFetched:null};async function n(c){const v=c.id;r.value={...r.value,[v]:{data:r.value[v]?.data??null,lastFetched:r.value[v]?.lastFetched??null,loading:!0,error:null}};try{let N;if(c.type==="http-get"){const g=await fetch(c.url,{method:"GET",...c.options});if(!g.ok)throw new Error(`HTTP ${g.status}: ${g.statusText}`);N=await g.json()}else if(c.type==="http-post"){const g=await fetch(c.url,{method:"POST",...c.options});if(!g.ok)throw new Error(`HTTP ${g.status}: ${g.statusText}`);N=await g.json()}else if(c.type==="esri"){const L=`${c.url.replace(/\/$/,"")}/query?where=1%3D1&outFields=*&returnGeometry=false&f=json`,m=await fetch(L,c.options);if(!m.ok)throw new Error(`HTTP ${m.status}: ${m.statusText}`);N=(await m.json()).features?.map(V=>V.attributes)||[]}else throw new Error(`Unknown data source type: ${c.type}`);c.transform&&(N=c.transform(N)),r.value={...r.value,[v]:{data:N,loading:!1,error:null,lastFetched:Date.now()}}}catch(N){const g=N instanceof Error?N.message:"Unknown error";r.value={...r.value,[v]:{data:r.value[v]?.data??null,lastFetched:r.value[v]?.lastFetched??null,loading:!1,error:g}}}}async function a(){await Promise.all(t.map(c=>n(c)))}async function i(c){const v=t.find(N=>N.id===c);v&&await n(v)}function u(c){return r.value[c]?.data??null}const f=e.computed(()=>Object.values(r.value).some(c=>c.loading));function p(c){return r.value[c]?.loading??!1}function w(c){return r.value[c]?.error??null}function y(){for(const c of t)if(c.pollInterval&&c.pollInterval>0){const v=window.setInterval(()=>{n(c)},c.pollInterval);o.set(c.id,v)}}function h(){for(const[,c]of o)window.clearInterval(c);o.clear()}return e.onMounted(()=>{a(),y()}),e.onUnmounted(()=>{h()}),{state:e.readonly(r),isLoading:f,fetchAll:a,refetch:i,getData:u,isSourceLoading:p,getError:w,stopPolling:h}}const go={class:"layerboard-layout"},ho={key:0,class:"layerboard-subtitle"},vo={class:"layerboard-mobile-menu-content"},bo={class:"layerboard-main"},ko={key:0,class:"layerboard-loading"},wo={key:1,class:"layerboard-error"},Lo={key:0},Co={key:1},So={class:"layerboard-modal"},Eo=e.defineComponent({__name:"Layerboard",props:{title:{},subtitle:{},webMapId:{},themeColor:{default:"#0f4d90"},cyclomediaConfig:{},pictometryCredentials:{},showDefaultSidebar:{type:Boolean,default:!0},sidebarWidth:{default:"30%"},sidebarLabel:{default:"Layers"},mapLabel:{default:"Map"},fetchMetadata:{type:Boolean,default:!1},tiledLayers:{default:()=>[]},dataSources:{default:()=>[]},layerStyleOverrides:{default:()=>({})},basemapControlPosition:{default:"top-right"},navigationControlPosition:{default:"bottom-right"},geolocationControlPosition:{default:"bottom-right"},searchControlPosition:{default:"top-left"},drawControlPosition:{default:"bottom-left"},cyclomediaButtonPosition:{default:"top-right"},pictometryButtonPosition:{default:"top-right"},initialZoom:{},initialCenter:{}},emits:["configs-loaded","load-error","zoom"],setup(t,{expose:r,emit:o}){const n=t,a=o,i=e.ref([]),u=e.ref(!0),f=e.ref(null),p=e.ref(12),w=e.ref(""),y=e.ref(new Set),h=e.ref({}),c=e.ref(new Set),v=e.ref({}),N=e.ref({}),g=e.ref(new Set),L=e.ref({});function m(){const k={};for(const E of n.tiledLayers)k[E.id]=E.opacity??1;L.value=k}function b(k){g.value.has(k)?g.value.delete(k):g.value.add(k),g.value=new Set(g.value)}function V(k,E){E?g.value.add(k):g.value.delete(k),g.value=new Set(g.value)}function x(k,E){L.value={...L.value,[k]:E}}const T=n.dataSources.length>0?Ye(n.dataSources):null,I=e.computed(()=>T?.state.value??{}),J=e.computed(()=>T?.isLoading.value??!1);function le(k){return T?.getData(k)??null}function re(k){return T?.refetch(k)??Promise.resolve()}e.provide("layerboard-layers",e.readonly(i)),e.provide("layerboard-visible",y),e.provide("layerboard-opacities",h),e.provide("layerboard-loading",e.readonly(c)),e.provide("layerboard-errors",e.readonly(v)),e.provide("layerboard-zoom",e.readonly(p)),e.provide("layerboard-toggle-layer",ae),e.provide("layerboard-set-layer-visible",K),e.provide("layerboard-set-layers-visible",ie),e.provide("layerboard-set-opacity",X),e.provide("layerboard-tiled-layers",e.readonly(e.computed(()=>n.tiledLayers))),e.provide("layerboard-visible-tiled",g),e.provide("layerboard-tiled-opacities",L),e.provide("layerboard-toggle-tiled",b),e.provide("layerboard-set-tiled-opacity",x),e.provide("layerboard-set-tiled-visible",V),e.provide("layerboard-data-sources-state",I),e.provide("layerboard-data-sources-loading",J),e.provide("layerboard-get-data-source",le),e.provide("layerboard-refetch-data-source",re);const Ne=e.computed(()=>({backgroundColor:n.themeColor})),xe=e.computed(()=>({backgroundColor:n.themeColor})),pe=e.computed(()=>({backgroundColor:n.themeColor})),he=e.computed(()=>({width:ee.value?"0":n.sidebarWidth}));async function me(){try{u.value=!0,f.value=null;const E=(await Ce(n.webMapId)).map(M=>{const U=n.layerStyleOverrides[M.id];return U?{...M,paint:U.paint??M.paint,outlinePaint:U.outlinePaint??M.outlinePaint,legend:U.legend??M.legend,type:U.type??M.type}:M});i.value=E.map(M=>({config:M,component:M.type}));const H={};E.forEach(M=>{H[M.id]=M.opacity??1}),h.value=H,a("configs-loaded",E)}catch(k){const E=k instanceof Error?k.message:"Failed to load layer configurations";f.value=E,a("load-error",E)}finally{u.value=!1}}function ve(k){let E=k.split("?")[0]||k;return E=E.replace(/\/query$/,""),E=E.replace(/\/$/,""),E.toLowerCase()}async function Ve(){if(n.fetchMetadata)try{const k="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"),E=await fetch(k);if(!E.ok)return;const H=await E.json(),M={};for(const U of H.rows||[])if(U.url_text&&U.representation){const Te=ve(U.url_text),Fe=`https://metadata.phila.gov/#home/representationdetails/${U.representation}/`;M[Te]=Fe}N.value=M}catch{}}function Pe(k){p.value=k,a("zoom",k)}function ae(k){y.value.has(k)?y.value.delete(k):y.value.add(k),y.value=new Set(y.value)}function K(k,E){E?y.value.add(k):y.value.delete(k),y.value=new Set(y.value)}function ie(k,E){for(const H of k)E?y.value.add(H):y.value.delete(H);y.value=new Set(y.value)}function X(k,E){h.value={...h.value,[k]:E}}function $e(k,E){E?c.value.add(k):c.value.delete(k),c.value=new Set(c.value)}function j(k,E){if(E)v.value={...v.value,[k]:E};else{const{[k]:H,...M}=v.value;v.value=M}}function Y(k){w.value=k}const R=e.ref("map");function se(){R.value=R.value==="sidebar"?"map":"sidebar"}const oe=e.ref(!1);function ze(){oe.value=!oe.value}function be(){oe.value=!1}const ee=e.ref(!1);function ce(){ee.value=!ee.value}const W=e.ref(!1);function ne(){W.value=!0}function G(){W.value=!1}function ke(k){k.target.classList.contains("layerboard-modal-backdrop")&&G()}return e.provide("layerboard-open-modal",ne),e.provide("layerboard-close-modal",G),e.provide("layerboard-is-modal-open",e.readonly(W)),r({layerList:i,visibleLayers:y,layerOpacities:h,loadingLayers:c,layerErrors:v,currentZoom:p,toggleLayer:ae,setLayerVisible:K,setLayersVisible:ie,setLayerOpacity:X,reloadConfigs:me,clearCache:()=>Xe(n.webMapId),visibleTiledLayers:g,tiledLayerOpacities:L,toggleTiledLayer:b,setTiledLayerVisible:V,setTiledLayerOpacity:x,dataSourcesState:I,dataSourcesLoading:J,getDataSourceData:le,refetchDataSource:re,isModalOpen:W,openModal:ne,closeModal:G}),e.onMounted(()=>{me(),Ve(),m()}),(k,E)=>(e.openBlock(),e.createElementBlock("div",go,[e.createElementVNode("header",{class:"layerboard-header",style:e.normalizeStyle(Ne.value)},[E[1]||(E[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)),E[2]||(E[2]=e.createElementVNode("span",{class:"layerboard-header-divider layerboard-desktop-only"},null,-1)),e.createElementVNode("button",{class:"layerboard-hamburger layerboard-mobile-only",onClick:ze,"aria-label":"Toggle menu"},[e.createVNode(e.unref(A.Icon),{"icon-definition":e.unref(zt),size:"medium",decorative:""},null,8,["icon-definition"])]),e.renderSlot(k.$slots,"header",{},()=>[e.createElementVNode("h1",null,e.toDisplayString(t.title),1),t.subtitle?(e.openBlock(),e.createElementBlock("span",ho,e.toDisplayString(t.subtitle),1)):e.createCommentVNode("",!0)],!0),oe.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"layerboard-mobile-menu",style:e.normalizeStyle({backgroundColor:t.themeColor})},[e.createElementVNode("div",vo,[e.renderSlot(k.$slots,"footer",{openModal:ne,closeModal:G,isModalOpen:W.value},()=>[E[0]||(E[0]=e.createTextVNode(" City of Philadelphia ",-1))],!0)]),e.createElementVNode("button",{class:"layerboard-mobile-menu-close",onClick:be,"aria-label":"Close menu"},[e.createVNode(e.unref(A.Icon),{"icon-definition":e.unref(je),size:"medium",decorative:""},null,8,["icon-definition"])])],4)):e.createCommentVNode("",!0),oe.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:"layerboard-mobile-menu-backdrop",onClick:be})):e.createCommentVNode("",!0)],4),e.createElementVNode("div",bo,[u.value?(e.openBlock(),e.createElementBlock("div",ko,[e.createElementVNode("div",{class:"layerboard-spinner",style:e.normalizeStyle({borderTopColor:t.themeColor})},null,4),e.createElementVNode("p",null,"Loading "+e.toDisplayString(t.title)+"...",1)])):f.value?(e.openBlock(),e.createElementBlock("div",wo,[E[3]||(E[3]=e.createElementVNode("h2",null,"Error Loading Layers",-1)),e.createElementVNode("p",null,e.toDisplayString(f.value),1),e.createElementVNode("button",{class:"layerboard-retry-button",style:e.normalizeStyle({backgroundColor:t.themeColor}),onClick:me}," Retry ",4)])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("aside",{class:e.normalizeClass(["layerboard-sidebar",{"is-active":R.value==="sidebar"}]),style:e.normalizeStyle(he.value)},[e.renderSlot(k.$slots,"sidebar",{layers:i.value,visibleLayers:y.value,layerOpacities:h.value,loadingLayers:c.value,layerErrors:v.value,currentZoom:p.value,toggleLayer:ae,setLayerVisible:K,setLayersVisible:ie,setOpacity:X,tiledLayers:t.tiledLayers,visibleTiledLayers:g.value,tiledLayerOpacities:L.value,toggleTiledLayer:b,setTiledLayerVisible:V,setTiledLayerOpacity:x,dataSourcesState:I.value,dataSourcesLoading:J.value,getDataSource:le,refetchDataSource:re},()=>[t.showDefaultSidebar?(e.openBlock(),e.createBlock(Qe,{key:0,"layer-list":i.value,"visible-layers":y.value,"layer-opacities":h.value,"loading-layers":c.value,"layer-errors":v.value,"current-zoom":p.value,"search-query":w.value,"layer-metadata":N.value,onToggleLayer:ae,onSetOpacity:X,onUpdateSearch:Y},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",{class:e.normalizeClass(["layerboard-map",{"is-active":R.value==="map"}])},[e.createVNode(Je,{"visible-layers":y.value,"layer-opacities":h.value,"layer-list":i.value,"tiled-layers":t.tiledLayers,"visible-tiled-layers":g.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:Pe,onLayerLoading:$e,onLayerError:j},null,8,["visible-layers","layer-opacities","layer-list","tiled-layers","visible-tiled-layers","tiled-layer-opacities","cyclomedia-config","pictometry-credentials","basemap-control-position","navigation-control-position","geolocation-control-position","search-control-position","draw-control-position","cyclomedia-button-position","pictometry-button-position","initial-zoom","initial-center"])],2),e.createElementVNode("button",{class:e.normalizeClass(["layerboard-sidebar-toggle",{"is-collapsed":ee.value}]),style:e.normalizeStyle({left:ee.value?"0":n.sidebarWidth}),onClick:ce,"aria-label":"Toggle sidebar"},[e.createVNode(e.unref(A.Icon),{"icon-definition":ee.value?e.unref(Pt):e.unref($t),size:"medium",decorative:""},null,8,["icon-definition"])],6)],64))]),e.createElementVNode("button",{class:"layerboard-mobile-toggle",style:e.normalizeStyle(pe.value),onClick:se},[R.value==="map"?(e.openBlock(),e.createElementBlock("span",Lo,e.toDisplayString(t.sidebarLabel),1)):(e.openBlock(),e.createElementBlock("span",Co,e.toDisplayString(t.mapLabel),1))],4),e.createElementVNode("footer",{class:"layerboard-footer",style:e.normalizeStyle(xe.value)},[e.renderSlot(k.$slots,"footer",{openModal:ne,closeModal:G,isModalOpen:W.value},()=>[E[4]||(E[4]=e.createTextVNode(" City of Philadelphia ",-1))],!0)],4),W.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"layerboard-modal-backdrop",onClick:ke},[e.createElementVNode("div",So,[e.createElementVNode("button",{class:"layerboard-modal-close",onClick:G,"aria-label":"Close modal"},[e.createVNode(e.unref(A.Icon),{"icon-definition":e.unref(je),size:"medium",decorative:""},null,8,["icon-definition"])]),e.renderSlot(k.$slots,"modal",{closeModal:G},void 0,!0)])])):e.createCommentVNode("",!0)]))}}),Bo=ge(Eo,[["__scopeId","data-v-54d854f8"]]),No=["aria-expanded"],xo={key:0,class:"topic-icon"},Vo={class:"topic-title"},Po={class:"topic-content"},$o=e.defineComponent({__name:"TopicAccordion",props:{title:{},icon:{},expanded:{type:Boolean,default:!1},layerIds:{default:()=>[]},headerClass:{}},emits:["toggle","layerChange"],setup(t,{emit:r}){const o=t,n=r,a=e.ref(o.expanded);e.watch(()=>o.expanded,u=>{a.value=u});function i(){a.value=!a.value,n("toggle",a.value)}return(u,f)=>{const p=e.resolveComponent("font-awesome-icon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["topic-accordion",{"is-expanded":a.value}])},[e.createElementVNode("button",{class:e.normalizeClass(["topic-header",t.headerClass]),type:"button","aria-expanded":a.value,onClick:i},[t.icon||u.$slots.icon?(e.openBlock(),e.createElementBlock("span",xo,[e.renderSlot(u.$slots,"icon",{},()=>[t.icon?(e.openBlock(),e.createBlock(p,{key:0,icon:["fas",t.icon]},null,8,["icon"])):e.createCommentVNode("",!0)],!0)])):e.createCommentVNode("",!0),e.createElementVNode("span",Vo,e.toDisplayString(t.title),1),e.createElementVNode("span",{class:e.normalizeClass(["topic-chevron",{"is-rotated":a.value}])},[...f[0]||(f[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"},[e.createElementVNode("polyline",{points:"6 9 12 15 18 9"})],-1)])],2)],10,No),e.withDirectives(e.createElementVNode("div",Po,[e.renderSlot(u.$slots,"default",{},()=>[f[1]||(f[1]=e.createElementVNode("p",{class:"topic-empty"},"No content provided for this topic.",-1))],!0)],512),[[e.vShow,a.value]])],2)}}}),zo=ge($o,[["__scopeId","data-v-fb48c75b"]]),To={class:"layer-checkbox-set"},Fo=["checked","disabled","onChange"],Mo={class:"layer-title"},_o={key:0,class:"loading-indicator"},Io=["title"],Do={key:2,class:"zoom-indicator"},Oo={class:"layer-title"},Ro={key:0,class:"loading-indicator"},Uo=["title"],Zo={key:2,class:"zoom-indicator"},Ao={key:2,class:"opacity-control"},Wo={class:"opacity-label"},jo=["value","onInput"],qo={key:3,class:"layer-legend"},Go={class:"legend-label"},Ho={key:0,class:"empty-state"},Jo=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}},emits:["toggleLayer","setOpacity"],setup(t,{emit:r}){const o=t,n=r;function a(g){return o.visibleLayerIds.has(g)}function i(g){return o.layerOpacities[g]??1}function u(g){return o.loadingLayerIds.has(g)}function f(g){return o.layerErrors[g]||null}function p(g){const L=o.currentZoom,m=g.minZoom,b=g.maxZoom;return!(m!==void 0&&L<m||b!==void 0&&L>b)}function w(g){return g.displayOptions?.shouldShowCheckbox!==!1}function y(g){return o.showOpacity?g.displayOptions?.shouldShowSlider!==!1:!1}function h(g){return o.showLegend?g.displayOptions?.shouldShowLegendBox!==!1:!1}function c(g){return g.displayOptions?.layerNameChange||g.title}function v(g){n("toggleLayer",g)}function N(g,L){const m=L.target;n("setOpacity",g,parseFloat(m.value))}return(g,L)=>(e.openBlock(),e.createElementBlock("div",To,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.layers,m=>(e.openBlock(),e.createElementBlock("div",{key:m.id,class:"layer-item"},[w(m)?(e.openBlock(),e.createElementBlock("label",{key:0,class:e.normalizeClass(["layer-checkbox",{"layer-unavailable":!p(m),"layer-error":f(m.id)}])},[e.createElementVNode("input",{type:"checkbox",checked:a(m.id),disabled:!p(m),onChange:b=>v(m.id)},null,40,Fo),e.createElementVNode("span",Mo,[e.createTextVNode(e.toDisplayString(c(m))+" ",1),u(m.id)?(e.openBlock(),e.createElementBlock("span",_o," Loading... ")):e.createCommentVNode("",!0),f(m.id)?(e.openBlock(),e.createElementBlock("span",{key:1,class:"error-indicator",title:f(m.id)||""}," Error ",8,Io)):e.createCommentVNode("",!0),p(m)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",Do," (zoom in) "))])],2)):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["layer-label-only",{"layer-unavailable":!p(m),"layer-error":f(m.id)}])},[e.createElementVNode("span",Oo,[e.createTextVNode(e.toDisplayString(c(m))+" ",1),u(m.id)?(e.openBlock(),e.createElementBlock("span",Ro," Loading... ")):e.createCommentVNode("",!0),f(m.id)?(e.openBlock(),e.createElementBlock("span",{key:1,class:"error-indicator",title:f(m.id)||""}," Error ",8,Uo)):e.createCommentVNode("",!0),p(m)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",Zo," (zoom in) "))])],2)),y(m)&&a(m.id)?(e.openBlock(),e.createElementBlock("div",Ao,[e.createElementVNode("label",Wo," Opacity: "+e.toDisplayString(Math.round(i(m.id)*100))+"% ",1),e.createElementVNode("input",{type:"range",min:"0",max:"1",step:"0.05",value:i(m.id),class:"opacity-slider",onInput:b=>N(m.id,b)},null,40,jo)])):e.createCommentVNode("",!0),h(m)&&a(m.id)&&m.legend?.length?(e.openBlock(),e.createElementBlock("ul",qo,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.legend,(b,V)=>(e.openBlock(),e.createElementBlock("li",{key:V,class:"legend-item"},[b.type==="circle"?(e.openBlock(),e.createElementBlock("span",{key:0,class:"legend-symbol legend-circle",style:e.normalizeStyle({backgroundColor:b.color})},null,4)):b.type==="line"?(e.openBlock(),e.createElementBlock("span",{key:1,class:"legend-symbol legend-line",style:e.normalizeStyle({backgroundColor:b.color,height:`${b.width||2}px`})},null,4)):b.type==="fill"?(e.openBlock(),e.createElementBlock("span",{key:2,class:"legend-symbol legend-fill",style:e.normalizeStyle({backgroundColor:b.color})},null,4)):e.createCommentVNode("",!0),e.createElementVNode("span",Go,e.toDisplayString(b.label),1)]))),128))])):e.createCommentVNode("",!0)]))),128)),t.layers.length===0?(e.openBlock(),e.createElementBlock("div",Ho," No layers available ")):e.createCommentVNode("",!0)]))}}),Qo=ge(Jo,[["__scopeId","data-v-cc5e50fd"]]);function Ko(t){const r=e.ref([]),o=e.ref(new Set),n=e.ref({}),a=e.ref(new Set),i=e.ref({}),u=e.ref(""),f=e.ref(!1),p=e.ref(!1),w=e.ref(null),y=e.computed(()=>{if(!u.value.trim())return r.value;const x=u.value.toLowerCase();return r.value.filter(T=>T.title.toLowerCase().includes(x))}),h=e.computed(()=>r.value.map(x=>({config:x,component:x.type})));async function c(){if(!p.value){f.value=!0,w.value=null;try{let x;t.mode==="dynamic"||!t.mode?t.webMapId?x=await v(t.webMapId):x=await Ce():x=await Ce(),r.value=x;const T={};x.forEach(I=>{T[I.id]=I.opacity??1}),n.value=T,p.value=!0}catch(x){w.value=x instanceof Error?x:new Error("Failed to initialize layerboard")}finally{f.value=!1}}}async function v(x){const T=Be(x),I=await fetch(T);if(!I.ok)throw new Error(`Failed to fetch WebMap: ${I.status} ${I.statusText}`);const J=await I.json();return De(J)}function N(x){const T=new Set(o.value);T.has(x)?T.delete(x):T.add(x),o.value=T}function g(x,T){n.value={...n.value,[x]:Math.max(0,Math.min(1,T))}}function L(x){u.value=x}function m(x,T){const I=new Set(a.value);T?I.add(x):I.delete(x),a.value=I}function b(x,T){if(T)i.value={...i.value,[x]:T};else{const{[x]:I,...J}=i.value;i.value=J}}function V(){r.value=[],o.value=new Set,n.value={},a.value=new Set,i.value={},u.value="",f.value=!1,p.value=!1,w.value=null}return{layerConfigs:e.readonly(r),visibleLayers:e.readonly(o),layerOpacities:e.readonly(n),loadingLayers:e.readonly(a),layerErrors:e.readonly(i),searchQuery:e.readonly(u),isLoading:e.readonly(f),isInitialized:e.readonly(p),error:e.readonly(w),filteredLayerConfigs:y,layerList:h,config:t,initialize:c,toggleLayer:N,setLayerOpacity:g,filterLayers:L,setLayerLoading:m,setLayerError:b,reset:V}}function Xo(){const t=e.ref([]),r=e.ref(new Set),o=e.ref(new Set);function n(i){r.value.has(i)?r.value.delete(i):r.value.add(i)}function a(i){t.value=i}return{layers:e.computed(()=>t.value),visibleLayerIds:e.computed(()=>r.value),loadingLayerIds:e.computed(()=>o.value),toggleLayer:n,setLayers:a}}function et(t){const r=e.ref(null),o=e.ref(!1),n=e.ref(null),a=e.ref(0);async function i(p={}){o.value=!0,n.value=null;const w=t.pageSize||2e3;let y=0,h=[],c=!0;try{for(;c;){const N=t.url.replace(/\/$/,""),g=encodeURIComponent(p.where||t.where||"1=1");let L=`${N}/query?where=${g}&outFields=*&returnGeometry=true&resultRecordCount=${w}&resultOffset=${y}&f=geojson`;if(p.bounds){const V=JSON.stringify({xmin:p.bounds.west,ymin:p.bounds.south,xmax:p.bounds.east,ymax:p.bounds.north,spatialReference:{wkid:4326}});L+=`&geometry=${encodeURIComponent(V)}&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects`}const m=await fetch(L);if(!m.ok)throw new Error(`HTTP ${m.status}: ${m.statusText}`);const b=await m.json();b.features&&b.features.length>0?(h=h.concat(b.features),y+=b.features.length,c=b.features.length===w):c=!1}const v={type:"FeatureCollection",features:h};return r.value=v,a.value=h.length,v}catch(v){const N=v instanceof Error?v:new Error("Failed to fetch features");throw n.value=N,N}finally{o.value=!1}}function u(){r.value=null,a.value=0,n.value=null}async function f(p={}){return i(p)}return{data:e.readonly(r),isLoading:e.readonly(o),error:e.readonly(n),totalFeatures:e.readonly(a),config:t,fetch:i,refetch:f,clear:u}}function Yo(t,r,o){const n=et(t);return e.watch(r,async a=>{if(a){const i=o(a);await n.fetch(i)}},{immediate:!0}),n}exports.LayerCheckboxSet=Qo;exports.LayerPanel=Qe;exports.Layerboard=Bo;exports.MapPanel=Je;exports.TopicAccordion=zo;exports.WEBMAP_ID=uo;exports.buildWebMapUrl=Be;exports.clearCache=Xe;exports.getLayerConfigs=Ce;exports.getWebMapUrl=fo;exports.transformWebMapToLayerConfigs=De;exports.useApiDataSources=Ye;exports.useDataSource=et;exports.useLayerConfig=Xo;exports.useLayerboard=Ko;exports.useReactiveDataSource=Yo;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),q=require("@phila/phila-ui-map-core"),Z=require("@phila/phila-ui-core");var ue=typeof document<"u"?document.currentScript:null;function Se(t,l,o={}){const n={type:"Feature"};return(o.id===0||o.id)&&(n.id=o.id),o.bbox&&(n.bbox=o.bbox),n.properties=l||{},n.geometry=t,n}function at(t,l,o={}){for(const r of t){if(r.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");if(r[r.length-1].length!==r[0].length)throw new Error("First and last Position are not equivalent.");for(let i=0;i<r[r.length-1].length;i++)if(r[r.length-1][i]!==r[0][i])throw new Error("First and last Position are not equivalent.")}return Se({type:"Polygon",coordinates:t},l,o)}function rt(t,l,o={}){if(t.length<2)throw new Error("coordinates must be an array of two or more positions");return Se({type:"LineString",coordinates:t},l,o)}function it(t,l,o={}){return Se({type:"MultiLineString",coordinates:t},l,o)}function st(t,l,o={}){return Se({type:"MultiPolygon",coordinates:t},l,o)}function ct(t){return t.type==="Feature"?t.geometry:t}function ut(t,l,o){var n=t.length,r=de(t[0],l),i=[],u,g,p;let E,h;for(o||(o=[]),u=1;u<n;u++){for(E=t[u-1],h=t[u],g=p=de(h,l);;)if(r|g){if(r&g)break;r?(E=Ie(E,h,r,l),r=de(E,l)):(h=Ie(E,h,g,l),g=de(h,l))}else{i.push(E),g!==p?(i.push(h),u<n-1&&(o.push(i),i=[])):u===n-1&&i.push(h);break}r=p}return i.length&&o.push(i),o}function dt(t,l){var o,n,r,i,u,g,p;for(n=1;n<=8;n*=2){for(o=[],r=t[t.length-1],i=!(de(r,l)&n),u=0;u<t.length;u++)g=t[u],p=!(de(g,l)&n),p!==i&&o.push(Ie(r,g,n,l)),p&&o.push(g),r=g,i=p;if(t=o,!t.length)break}return o}function Ie(t,l,o,n){return o&8?[t[0]+(l[0]-t[0])*(n[3]-t[1])/(l[1]-t[1]),n[3]]:o&4?[t[0]+(l[0]-t[0])*(n[1]-t[1])/(l[1]-t[1]),n[1]]:o&2?[n[2],t[1]+(l[1]-t[1])*(n[2]-t[0])/(l[0]-t[0])]:o&1?[n[0],t[1]+(l[1]-t[1])*(n[0]-t[0])/(l[0]-t[0])]:null}function de(t,l){var o=0;return t[0]<l[0]?o|=1:t[0]>l[2]&&(o|=2),t[1]<l[1]?o|=4:t[1]>l[3]&&(o|=8),o}function ft(t,l){const o=ct(t),n=o.type,r=t.type==="Feature"?t.properties:{};let i=o.coordinates;switch(n){case"LineString":case"MultiLineString":{const u=[];return n==="LineString"&&(i=[i]),i.forEach(g=>{ut(g,l,u)}),u.length===1?rt(u[0],r):it(u,r)}case"Polygon":return at(We(i,l),r);case"MultiPolygon":return st(i.map(u=>We(u,l)),r);default:throw new Error("geometry "+n+" not supported")}}function We(t,l){const o=[];for(const n of t){const r=dt(n,l);r.length>0&&((r[0][0]!==r[r.length-1][0]||r[0][1]!==r[r.length-1][1])&&r.push(r[0]),r.length>=4&&o.push(r))}return o}var pt=ft;const mt={class:"map-panel"},yt=e.defineComponent({__name:"MapPanel",props:{visibleLayers:{},layerOpacities:{},layerList:{},tiledLayers:{},visibleTiledLayers:{},tiledLayerOpacities:{},cyclomediaConfig:{},pictometryCredentials:{},basemapControlPosition:{default:"top-right"},navigationControlPosition:{default:"bottom-right"},geolocationControlPosition:{default:"bottom-right"},searchControlPosition:{default:"top-left"},drawControlPosition:{default:"bottom-left"},cyclomediaButtonPosition:{default:"top-right"},pictometryButtonPosition:{default:"top-right"},initialZoom:{},initialCenter:{}},emits:["zoom","layerLoading","layerError"],setup(t,{emit:l}){const o=t,n=l,r=e.ref(null),i=e.ref(null),u=e.ref(0);function g(a){n("zoom",a),i.value&&(u.value=p(i.value))}function p(a){const d=a.getZoom(),S=a.getCenter().lat,L=559082264028e-3,N=S*Math.PI/180;return L*Math.cos(N)/Math.pow(2,d)}const E=e.ref({}),h=e.ref(null),v=e.ref(new Set),c=["fema-100-year-floodplain","fema-500-year-floodplain"];async function f(a,d,s,S){const L=encodeURIComponent(S||"1=1"),N=JSON.stringify({xmin:d.west,ymin:d.south,xmax:d.east,ymax:d.north,spatialReference:{wkid:4326}}),P=2e3;let T=0,_=[],A=!0;for(;A;){const D=`${a}/query?where=${L}&geometry=${encodeURIComponent(N)}&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects&outFields=*&returnGeometry=true&resultRecordCount=${P}&resultOffset=${T}&f=geojson`,z=await fetch(D);if(!z.ok)throw new Error(`HTTP ${z.status}: ${z.statusText}`);const O=await z.json();O.features&&O.features.length>0?(_=_.concat(O.features),T+=O.features.length,A=O.features.length===P):A=!1}if(c.includes(s)){const D=[d.west,d.south,d.east,d.north];_=_.map(z=>{if(z.geometry&&(z.geometry.type==="Polygon"||z.geometry.type==="MultiPolygon"))try{return pt(z,D)}catch{return z}return z})}return{type:"FeatureCollection",features:_}}async function C(a,d){const s=d.map(async S=>{const L=o.layerList.find(N=>N.config.id===S)?.config;if(L){n("layerLoading",S,!0);try{const N=await f(L.url,a,S,L.where);E.value={...E.value,[S]:N},n("layerError",S,null)}catch(N){const P=N instanceof Error?N.message:"Failed to load";n("layerError",S,P)}finally{n("layerLoading",S,!1)}}});await Promise.all(s)}async function m(a){const d=[...o.visibleLayers];await C(a,d)}function w(a){h.value=a.bounds,m(a.bounds)}function y(a){i.value=a;const d=a.getBounds();h.value={west:d.getWest(),south:d.getSouth(),east:d.getEast(),north:d.getNorth()};const s=a.getZoom();n("zoom",s),u.value=p(a),m(h.value)}e.watch(()=>o.visibleLayers.size,async()=>{if(j.value.length>0&&W(),h.value){const a=new Set(o.visibleLayers),d=[...a].filter(s=>!v.value.has(s));v.value=new Set(a),d.length>0&&await C(h.value,d)}});function b(a){return o.visibleLayers.has(a)}function V(a){return!!E.value[a.id]}const x=e.computed(()=>o.layerList.filter(a=>a.config.type==="circle"&&b(a.config.id)&&V(a.config)).map(a=>a.config)),F=e.computed(()=>o.layerList.filter(a=>a.config.type==="fill"&&b(a.config.id)&&V(a.config)).map(a=>a.config)),I=e.computed(()=>o.layerList.filter(a=>a.config.type==="fill"&&a.config.outlinePaint&&b(a.config.id)&&V(a.config)).map(a=>a.config)),J=e.computed(()=>o.layerList.filter(a=>a.config.type==="line"&&b(a.config.id)&&V(a.config)).map(a=>a.config));function le(a){return o.visibleTiledLayers?.has(a)??!1}function ae(a){return o.tiledLayerOpacities?.[a]??1}function Ne(a){return`${a.replace(/\/$/,"")}/tile/{z}/{y}/{x}`}function xe(a){return{type:"raster",tiles:[Ne(a.url)],tileSize:256,attribution:a.attribution||""}}const pe=e.ref({}),he=e.ref(new Set);async function me(a){if(!he.value.has(a.id)){he.value.add(a.id);try{const d=a.url.replace(/\/$/,""),s=await fetch(`${d}?f=json`);if(!s.ok)return;const S=await s.json();let L=S.minScale||0,N=S.maxScale||0;if(S.layers&&S.layers.length>0)for(const P of S.layers)P.maxScale&&P.maxScale>0&&(N===0||P.maxScale<N)&&(N=P.maxScale);N===0&&(N=72e3),pe.value={...pe.value,[a.id]:{minScale:L,maxScale:N}}}catch{}}}e.onMounted(()=>{if(o.tiledLayers)for(const a of o.tiledLayers)a.scaleBasedRendering&&me(a)});function ve(a){if(!a.scaleBasedRendering)return"tiled";const d=pe.value[a.id];if(!d)return"tiled";const s=u.value;return s===0||s>d.maxScale?"tiled":"dynamic"}const Ve=e.computed(()=>o.tiledLayers?o.tiledLayers.filter(a=>le(a.id)?a.scaleBasedRendering?ve(a)==="tiled":!0:!1):[]),Pe=e.computed(()=>o.tiledLayers?o.tiledLayers.filter(a=>le(a.id)&&a.scaleBasedRendering?ve(a)==="dynamic":!1):[]);function re(a){return{type:"raster",tiles:[`${a.url.replace(/\/$/,"")}/export?bbox={bbox-epsg-3857}&bboxSR=3857&imageSR=3857&size=256,256&format=png32&transparent=true&f=image`],tileSize:256,attribution:a.attribution||""}}function K(a){return{type:"geojson",data:E.value[a.id]}}function ie(a){return o.layerOpacities[a]??1}function X(a){const d=ie(a.id),s=a.type==="circle"?"circle-opacity":a.type==="fill"?"fill-opacity":"line-opacity";if(a.type==="fill"&&a.paint["fill-opacity"]===0)return{...a.paint,"fill-opacity":0};const S=a.type==="circle"?"circle-color":a.type==="fill"?"fill-color":"line-color",L={...a.paint},N=L[S],P=L[s]===1,T=typeof N=="string"&&N.startsWith("rgba(");if(P&&T){if(d===1)return L;{const _=N.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/);if(_&&_[4]){const[,A,D,z,O]=_,Me=parseFloat(O)*d;L[S]=`rgba(${A}, ${D}, ${z}, ${Me})`,L[s]=1}return L}}if(T){const _=N.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/);if(_){const[,A,D,z]=_;L[S]=`rgb(${A}, ${D}, ${z})`}}return L[s]=d,L}function $e(a){const d=ie(a.id);return{...a.outlinePaint,"line-opacity":d}}const j=e.ref([]),Y=e.ref(null),R=e.ref(0);function se(a){const d=a.replace(/-outline$/,"");return o.layerList.find(S=>S.config.id===d)?.config}function oe(a,d){return a.replace(/\{([^}]+)\}/g,(s,S)=>{const L=d[S];return L==null?"":String(L)})}function ze(a,d){if(a==null)return"-";if(d?.dateFormat&&typeof a=="number"){const s=new Date(a);switch(d.dateFormat){case"shortDateShortTime":return s.toLocaleString();case"longMonthDayYear":return s.toLocaleDateString(void 0,{month:"long",day:"numeric",year:"numeric"});case"shortDate":return s.toLocaleDateString();case"longDate":return s.toLocaleDateString(void 0,{weekday:"long",month:"long",day:"numeric",year:"numeric"});default:return s.toLocaleDateString()}}if(typeof a=="number"){if(a>1e12&&!d)return new Date(a).toLocaleDateString();const s=d?.places,S=d?.digitSeparator??!0;if(s!==void 0){const L=a.toFixed(s);if(S){const N=L.split("."),P=N[0]||"0",T=N[1],_=P.replace(/\B(?=(\d{3})+(?!\d))/g,",");return T?`${_}.${T}`:_}return L}return S?a.toLocaleString():String(a)}return String(a)}function be(a){const d=new Set;return a.filter(s=>{const L=`${s.layer.id.replace(/-outline$/,"")}:${JSON.stringify(s.properties)}`;return d.has(L)?!1:(d.add(L),!0)})}function ee(a,d){const s=new Map;return d.forEach((S,L)=>{s.set(S.id,L)}),a.sort((S,L)=>{const N=S.layer.id.replace(/-outline$/,""),P=L.layer.id.replace(/-outline$/,""),T=s.get(N)??-1;return(s.get(P)??-1)-T})}function ce(a){const d=i.value;if(!d)return;const s=[];o.layerList.forEach(D=>{const z=D.config;o.visibleLayers.has(z.id)&&(s.push(z.id),z.outlinePaint&&s.push(`${z.id}-outline`))});const S=d.project([a.lngLat.lng,a.lngLat.lat]),L=d.queryRenderedFeatures(S,{layers:s});if(L.length===0)return;const N=be(L),P=o.layerList.map(D=>D.config),T=ee(N,P),_=T.map(D=>{const z=D.layer.id.replace(/-outline$/,""),O=se(z);return O?{layerId:O.id,layerTitle:O.title,properties:D.properties||{},popupConfig:O.popup}:null}).filter(D=>D!==null);if(_.length===0)return;j.value=_,R.value=0,Y.value=[a.lngLat.lng,a.lngLat.lat];const A=T[0];if(A&&A.geometry){const D=A.layer.id.replace(/-outline$/,""),z=se(D);if(z){const O=Re(A.geometry),Me=Ue(z.id,z.type);te.value={geometry:A.geometry,geometryType:O,layerId:z.id,properties:A.properties||{},originalStyle:Me}}}}function W(){j.value=[],Y.value=null,R.value=0,te.value=null}function ne(a){if(j.value.length===0)return;const d=a.target;if(!(d.tagName==="INPUT"||d.tagName==="TEXTAREA"||d.isContentEditable))switch(a.key){case"ArrowLeft":case"ArrowUp":a.preventDefault(),ke();break;case"ArrowRight":case"ArrowDown":a.preventDefault(),G();break;case"Escape":a.preventDefault(),W();break}}e.onMounted(()=>{window.addEventListener("keydown",ne)}),e.onUnmounted(()=>{window.removeEventListener("keydown",ne)});function G(){const a=j.value.length;a<=1||(R.value=(R.value+1)%a)}function ke(){const a=j.value.length;a<=1||(R.value=(R.value-1+a)%a)}const k=e.computed(()=>j.value.length===0?null:j.value[R.value]),B=e.computed(()=>{const a=k.value;return!a||!a.popupConfig?a?.layerTitle||"":oe(a.popupConfig.title,a.properties)}),H=e.computed(()=>{const a=k.value;if(!a)return"";let d='<div class="popup-content">';if(d+=`<h3 class="popup-title">${B.value}</h3>`,a.popupConfig?.fields?.length){d+='<table class="popup-table">';for(const s of a.popupConfig.fields){const S=ze(a.properties[s.field],s.format);d+=`<tr><th>${s.label}</th><td>${S}</td></tr>`}d+="</table>"}else d+='<p class="popup-no-fields">No additional information available.</p>';return d+="</div>",d}),M=e.ref({type:"FeatureCollection",features:[]}),U=e.ref({type:"FeatureCollection",features:[]}),Fe={"circle-radius":["get","highlightRadius"],"circle-color":"#00FFFF","circle-opacity":.8,"circle-stroke-width":2,"circle-stroke-color":"#FFFFFF"},Te={"line-width":["get","highlightWidth"],"line-color":"#00FFFF","line-opacity":.9},te=e.ref(null);function Re(a){return a.type}function Ue(a,d){const s=se(a);if(!s)return{radius:5,width:2};const S=s.paint||{};if(d==="circle"){const L=S["circle-radius"];return typeof L=="number"?{radius:L}:{radius:5}}if(d==="line"||d==="fill"){const L=S["line-width"];if(typeof L=="number")return{width:L};if(s.outlinePaint&&s.outlinePaint["line-width"]){const N=s.outlinePaint["line-width"];if(typeof N=="number")return{width:N}}return{width:2}}return{radius:5,width:2}}function Ze(a){return!a||a.length===0?[]:a[0]??[]}function tt(a){const{geometry:d,geometryType:s,originalStyle:S}=a;if(s==="Point"||s==="MultiPoint"){const N=(S.radius||5)+3;return{type:"FeatureCollection",features:[{type:"Feature",geometry:d,properties:{highlightRadius:N}}]}}if(s==="LineString"||s==="MultiLineString"){const N=(S.width||2)+3;return{type:"FeatureCollection",features:[{type:"Feature",geometry:d,properties:{highlightWidth:N}}]}}if(s==="Polygon"){const L=d.coordinates,N=Ze(L),T=(S.width||2)+3;return{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"LineString",coordinates:N},properties:{highlightWidth:T}}]}}if(s==="MultiPolygon"){const L=d.coordinates,P=(S.width||2)+3;return{type:"FeatureCollection",features:L.map(_=>({type:"Feature",geometry:{type:"LineString",coordinates:Ze(_)},properties:{highlightWidth:P}}))}}return{type:"FeatureCollection",features:[]}}function ot(a){if(!a){nt();return}const d=tt(a);a.geometryType==="Point"||a.geometryType==="MultiPoint"?(M.value=d,U.value={type:"FeatureCollection",features:[]}):(U.value=d,M.value={type:"FeatureCollection",features:[]})}function nt(){M.value={type:"FeatureCollection",features:[]},U.value={type:"FeatureCollection",features:[]}}e.watch(te,a=>{ot(a)}),e.watch(()=>o.visibleLayers,a=>{te.value&&!a.has(te.value.layerId)&&(te.value=null,W())},{deep:!0}),e.watch(R,()=>{const a=k.value;if(!a){te.value=null;return}const d=i.value;if(!d||!Y.value)return;const s=[];o.layerList.forEach(P=>{const T=P.config;o.visibleLayers.has(T.id)&&(s.push(T.id),T.outlinePaint&&s.push(`${T.id}-outline`))});const S=d.project(Y.value),N=d.queryRenderedFeatures(S,{layers:s}).find(P=>P.layer.id.replace(/-outline$/,"")===a.layerId&&JSON.stringify(P.properties)===JSON.stringify(a.properties));if(N&&N.geometry){const P=se(a.layerId);if(P){const T=Re(N.geometry),_=Ue(P.id,P.type);te.value={geometry:N.geometry,geometryType:T,layerId:P.id,properties:N.properties||{},originalStyle:_}}}});const Ae=e.ref(null);function lt(a){const[d,s]=a.geometry.coordinates;Ae.value=[d,s]}return(a,d)=>(e.openBlock(),e.createElementBlock("div",mt,[e.createVNode(e.unref(q.Map),{ref_key:"mapRef",ref:r,zoom:o.initialZoom,center:o.initialCenter,"navigation-controls":{position:o.navigationControlPosition},"geolocation-control":{position:o.geolocationControlPosition},"basemap-change-controls":{toggle:!0,dropdown:!0,position:o.basemapControlPosition},"map-search-control":{position:o.searchControlPosition},"enable-cyclomedia":!0,"cyclomedia-config":o.cyclomediaConfig,"cyclomedia-button-position":o.cyclomediaButtonPosition,"enable-pictometry":!0,"pictometry-credentials":o.pictometryCredentials,"pictometry-button-position":o.pictometryButtonPosition,"tool-panel-layout":"vertical","tool-panel-split-ratio":50,onZoom:g,onClick:W,onMoveend:w,onLoad:y,onSearchResult:lt},{default:e.withCtx(()=>[o.drawControlPosition!==null?(e.openBlock(),e.createBlock(e.unref(q.DrawTool),{key:0,position:o.drawControlPosition},null,8,["position"])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ve.value,s=>(e.openBlock(),e.createBlock(e.unref(q.RasterLayer),{key:"tiled-"+s.id,id:"tiled-"+s.id,source:xe(s),paint:{"raster-opacity":ae(s.id)},minzoom:s.minZoom,maxzoom:s.maxZoom},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Pe.value,s=>(e.openBlock(),e.createBlock(e.unref(q.RasterLayer),{key:"dynamic-"+s.id,id:"dynamic-"+s.id,source:re(s),paint:{"raster-opacity":ae(s.id)},minzoom:s.minZoom,maxzoom:s.maxZoom},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x.value,s=>(e.openBlock(),e.createBlock(e.unref(q.CircleLayer),{key:s.id,id:s.id,source:K(s),paint:X(s),minzoom:s.minZoom,maxzoom:s.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(F.value,s=>(e.openBlock(),e.createBlock(e.unref(q.FillLayer),{key:s.id,id:s.id,source:K(s),paint:X(s),minzoom:s.minZoom,maxzoom:s.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(I.value,s=>(e.openBlock(),e.createBlock(e.unref(q.LineLayer),{key:s.id+"-outline",id:s.id+"-outline",source:K(s),paint:$e(s),minzoom:s.minZoom,maxzoom:s.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(J.value,s=>(e.openBlock(),e.createBlock(e.unref(q.LineLayer),{key:s.id,id:s.id,source:K(s),paint:X(s),minzoom:s.minZoom,maxzoom:s.maxZoom,"before-id":"highlight-lines",onClick:ce},null,8,["id","source","paint","minzoom","maxzoom"]))),128)),e.createVNode(e.unref(q.CircleLayer),{key:"highlight-circles-layer",id:"highlight-circles",source:{type:"geojson",data:M.value},paint:Fe},null,8,["source"]),e.createVNode(e.unref(q.LineLayer),{key:"highlight-lines-layer",id:"highlight-lines",source:{type:"geojson",data:U.value},paint:Te},null,8,["source"]),e.createVNode(e.unref(q.MapMarker),{"lng-lat":Ae.value,color:"#2176d2"},null,8,["lng-lat"]),k.value&&Y.value?(e.openBlock(),e.createBlock(e.unref(q.MapPopup),{key:1,"lng-lat":Y.value,html:H.value,"close-on-click":!1,"show-navigation":j.value.length>1,"current-feature-index":R.value,"total-features":j.value.length,"layer-name":k.value.layerTitle,onClose:W,onNext:G,onPrevious:ke},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"])]))}}),ge=(t,l)=>{const o=t.__vccOpts||t;for(const[n,r]of l)o[n]=r;return o},Je=ge(yt,[["__scopeId","data-v-c7524a9f"]]),gt=["disabled"],ht=e.defineComponent({inheritAttrs:!1,__name:"PhlButton",props:{href:{},to:{},target:{},rel:{},disabled:{type:Boolean,default:!1},clickTarget:{},variant:{default:"primary"},size:{default:"medium"},iconOnly:{type:Boolean,default:!1},iconRight:{type:Boolean},text:{},className:{},iconDefinition:{},iconClass:{},src:{},svgRaw:{}},setup(t){const l=t,o=u=>"href"in u&&u.href!==void 0||"to"in u&&u.to!==void 0,n=e.computed(()=>Z.cn("phila-button",`phila-button--${l.variant}`,l.size&&`is-${l.size}`,l.iconOnly&&"icon-button",l.iconOnly&&l.variant==="standard"&&"icon-button--standard",l.className)),r=e.computed(()=>o(l)?"to"in l&&l.to!==void 0?{to:l.to,disabled:l.disabled,className:n.value}:{href:l.href,target:l.target,rel:l.rel,disabled:l.disabled,className:n.value}:{}),i=e.computed(()=>({iconDefinition:l.iconDefinition,iconClass:l.iconClass,src:l.src,iconRight:l.iconRight,iconOnly:l.iconOnly,text:l.text,size:l.size,shadow:l.iconOnly&&l.variant==="standard"}));return(u,g)=>o(l)?(e.openBlock(),e.createBlock(e.unref(Z.BaseLink),e.mergeProps({key:0},{...r.value,...u.$attrs},{role:"button"}),{default:e.withCtx(()=>[e.createVNode(e.unref(Z.ActionContent),e.normalizeProps(e.guardReactiveProps(i.value)),{default:e.withCtx(()=>[e.renderSlot(u.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(l.text),1)])]),_:3},16)]),_:3},16)):(e.openBlock(),e.createElementBlock("button",e.mergeProps({key:1,type:"button",disabled:l.disabled,class:n.value},u.$attrs),[e.createVNode(e.unref(Z.ActionContent),e.normalizeProps(e.guardReactiveProps(i.value)),{default:e.withCtx(()=>[e.renderSlot(u.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(l.text),1)])]),_:3},16)],16,gt))}});var vt={prefix:"fas",iconName:"circle-exclamation",icon:[512,512,["exclamation-circle"],"f06a","M256 512a256 256 0 1 1 0-512 256 256 0 1 1 0 512zm0-192a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-192c-18.2 0-32.7 15.5-31.4 33.7l7.4 104c.9 12.6 11.4 22.3 23.9 22.3 12.6 0 23-9.7 23.9-22.3l7.4-104c1.3-18.2-13.1-33.7-31.4-33.7z"]},bt=vt,kt={prefix:"fas",iconName:"xmark",icon:[384,512,[128473,10005,10006,10060,215,"close","multiply","remove","times"],"f00d","M55.1 73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L147.2 256 9.9 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192.5 301.3 329.9 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.8 256 375.1 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192.5 210.7 55.1 73.4z"]},wt=kt;const Lt=["for"],Ct={class:"state-layer"},St={class:"content"},Et={class:"input-text-container"},Bt=["id","placeholder"],Nt={key:1,class:"has-text-body-small phila-supporting-text"},xt={key:2,class:"has-text-body-small phila-error-text"},Vt=e.defineComponent({inheritAttrs:!1,__name:"TextField",props:{modelValue:{default:void 0},className:{default:""},label:{default:""},id:{default:`phila-text-field-${Math.random().toString(36).substring(2,9)}`},supportingText:{default:""},placeholder:{default:""},leadingIcon:{default:""},trailingIcon:{default:""},error:{default(){return[]}}},emits:["update:modelValue"],setup(t,{emit:l}){const o=e.useAttrs(),n=t,r=e.computed(()=>typeof n.error=="string"?n.error:n.error[0]),i=e.toRef(n,"id"),u=l,g=e.ref(""),p=e.computed({get:()=>n.modelValue!==void 0?n.modelValue:g.value,set:f=>{u("update:modelValue",f),g.value=f}}),E=e.computed(()=>{const f=["default-class"];return o.disabled!=null&&f.push("phila-input--disabled"),r.value&&f.push("phila-input--error"),o.required!=null&&f.push("phila-input--required"),Z.cn(...f)}),h=e.computed(()=>{const f=[];return p.value!==""&&f.push("phila-text-field--filled"),n.className&&f.push(n.className),Z.cn(...f)}),v=e.ref(null),c=f=>{f.target.closest("button")||v.value?.focus()};return(f,C)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["phila-input",E.value])},[n.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:i.value,class:"has-text-label-small phila-label"},e.toDisplayString(n.label),9,Lt)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["phila-text-field",h.value]),onClick:c},[e.createElementVNode("div",Ct,[n.leadingIcon?(e.openBlock(),e.createBlock(e.unref(Z.Icon),{key:0,"icon-class":n.leadingIcon,inline:"",decorative:"",shadow:""},null,8,["icon-class"])):e.createCommentVNode("",!0),e.createElementVNode("div",St,[e.createElementVNode("div",Et,[e.withDirectives(e.createElementVNode("input",e.mergeProps({id:i.value,ref_key:"inputRef",ref:v,"onUpdate:modelValue":C[0]||(C[0]=m=>p.value=m),class:"phila-text-field-input has-text-body-default",placeholder:n.placeholder},e.unref(o)),null,16,Bt),[[e.vModelDynamic,p.value]])])]),p.value!=""?(e.openBlock(),e.createBlock(e.unref(ht),{key:1,variant:"standard",size:"small","icon-only":"","icon-definition":e.unref(wt),onClick:C[1]||(C[1]=m=>p.value="")},null,8,["icon-definition"])):e.createCommentVNode("",!0),n.trailingIcon?(e.openBlock(),e.createBlock(e.unref(Z.Icon),{key:2,size:"small","icon-class":n.trailingIcon,inline:"",decorative:"",shadow:""},null,8,["icon-class"])):e.createCommentVNode("",!0),e.renderSlot(f.$slots,"trailing-action")])],2),n.supportingText?(e.openBlock(),e.createElementBlock("div",Nt,e.toDisplayString(n.supportingText),1)):e.createCommentVNode("",!0),r.value?(e.openBlock(),e.createElementBlock("div",xt,[e.createVNode(e.unref(Z.Icon),{"icon-definition":e.unref(bt),size:"small",inline:"",decorative:""},null,8,["icon-definition"]),e.createTextVNode(" "+e.toDisplayString(r.value),1)])):e.createCommentVNode("",!0)],2))}});var Pt={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"]},$t={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"]},zt={prefix:"fas",iconName:"caret-left",icon:[256,512,[],"f0d9","M7.7 235.8c-10.3 12.6-9.5 31.1 2.2 42.8l128 128c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-256c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-128 128-2.2 2.4z"]},je={prefix:"fas",iconName:"xmark",icon:[384,512,[128473,10005,10006,10060,215,"close","multiply","remove","times"],"f00d","M55.1 73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L147.2 256 9.9 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192.5 301.3 329.9 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.8 256 375.1 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192.5 210.7 55.1 73.4z"]},Ft={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"]},Tt={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 Mt={class:"layer-panel"},_t={key:0,class:"search-box"},It={key:1,class:"topics-container"},Dt={class:"layer-row"},Ot=["href"],Rt={key:1,class:"metadata-placeholder"},Ut=["checked","disabled","onChange"],Zt={class:"layer-title"},At={key:0,class:"loading-indicator"},Wt=["title"],jt={key:2,class:"zoom-indicator"},qt={key:0,class:"opacity-control"},Gt={class:"opacity-label"},Ht=["value","onInput"],Jt={key:1,class:"layer-legend"},Qt={class:"legend-label"},Kt={key:0,class:"no-results"},Xt=e.defineComponent({__name:"LayerPanel",props:{layerList:{},visibleLayers:{},layerOpacities:{},loadingLayers:{},layerErrors:{},currentZoom:{},searchQuery:{},layerMetadata:{},mode:{default:"flat"},showSearch:{type:Boolean,default:!0},showOpacity:{type:Boolean,default:!0},showLegend:{type:Boolean,default:!0},searchPlaceholder:{default:"Filter layers..."}},emits:["toggleLayer","setOpacity","updateSearch"],setup(t,{emit:l}){const o=t,n=l,r=e.computed(()=>{if(!o.searchQuery.trim())return o.layerList;const w=o.searchQuery.toLowerCase();return o.layerList.filter(y=>y.config.title.toLowerCase().includes(w))});function i(w){let y=w.split("?")[0]||w;return y=y.replace(/\/query$/,""),y=y.replace(/\/$/,""),y.toLowerCase()}function u(w){const y=i(w);return o.layerMetadata[y]||null}const g=e.computed(()=>o.layerList.some(w=>u(w.config.url)));function p(w){return o.visibleLayers.has(w)}function E(w){return o.layerOpacities[w]??1}function h(w){return o.loadingLayers.has(w)}function v(w){return o.layerErrors[w]||null}function c(w){const y=o.currentZoom,b=w.minZoom,V=w.maxZoom;return!(b!==void 0&&y<b||V!==void 0&&y>V)}const f=e.computed({get:()=>o.searchQuery,set:w=>n("updateSearch",w)});function C(w){n("toggleLayer",w)}function m(w,y){const b=y.target,V=parseFloat(b.value);n("setOpacity",w,V)}return(w,y)=>(e.openBlock(),e.createElementBlock("aside",Mt,[t.showSearch?(e.openBlock(),e.createElementBlock("div",_t,[e.createVNode(e.unref(Vt),{modelValue:f.value,"onUpdate:modelValue":y[0]||(y[0]=b=>f.value=b),placeholder:t.searchPlaceholder,"class-name":"layer-search-field"},{"trailing-action":e.withCtx(()=>[e.createVNode(e.unref(Z.Icon),{"icon-definition":e.unref(Pt),size:"small",inline:"",decorative:""},null,8,["icon-definition"])]),_:1},8,["modelValue","placeholder"])])):e.createCommentVNode("",!0),t.mode==="topics"?(e.openBlock(),e.createElementBlock("div",It,[e.renderSlot(w.$slots,"topics",{},()=>[y[2]||(y[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":g.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,b=>(e.openBlock(),e.createElementBlock("div",{key:b.config.id,class:"layer-item"},[e.createElementVNode("div",Dt,[u(b.config.url)?(e.openBlock(),e.createElementBlock("a",{key:0,href:u(b.config.url)||"",target:"_blank",rel:"noopener noreferrer",class:"metadata-link",title:"View metadata",onClick:y[1]||(y[1]=e.withModifiers(()=>{},["stop"]))},[e.createVNode(e.unref(Z.Icon),{"icon-definition":e.unref(Tt),size:"small",inline:"",decorative:""},null,8,["icon-definition"])],8,Ot)):g.value?(e.openBlock(),e.createElementBlock("span",Rt)):e.createCommentVNode("",!0),e.createElementVNode("label",{class:e.normalizeClass(["layer-checkbox",{"layer-unavailable":!c(b.config),"layer-error":v(b.config.id)}])},[e.createElementVNode("input",{type:"checkbox",checked:p(b.config.id),disabled:!c(b.config),onChange:V=>C(b.config.id)},null,40,Ut),e.createElementVNode("span",Zt,[e.createTextVNode(e.toDisplayString(b.config.title)+" ",1),h(b.config.id)?(e.openBlock(),e.createElementBlock("span",At," Loading... ")):e.createCommentVNode("",!0),v(b.config.id)?(e.openBlock(),e.createElementBlock("span",{key:1,class:"error-indicator",title:v(b.config.id)||""}," Error ",8,Wt)):e.createCommentVNode("",!0),c(b.config)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",jt," (zoom in) "))])],2)]),t.showOpacity&&p(b.config.id)?(e.openBlock(),e.createElementBlock("div",qt,[e.createElementVNode("label",Gt," Opacity: "+e.toDisplayString(Math.round(E(b.config.id)*100))+"% ",1),e.createElementVNode("input",{type:"range",min:"0",max:"1",step:"0.05",value:E(b.config.id),class:"opacity-slider",onInput:V=>m(b.config.id,V)},null,40,Ht)])):e.createCommentVNode("",!0),t.showLegend&&p(b.config.id)&&b.config.legend?.length?(e.openBlock(),e.createElementBlock("ul",Jt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.config.legend,(V,x)=>(e.openBlock(),e.createElementBlock("li",{key:x,class:"legend-item"},[V.type==="circle"?(e.openBlock(),e.createElementBlock("span",{key:0,class:"legend-symbol legend-circle",style:e.normalizeStyle({backgroundColor:V.color})},null,4)):V.type==="line"?(e.openBlock(),e.createElementBlock("span",{key:1,class:"legend-symbol legend-line",style:e.normalizeStyle({backgroundColor:V.color,height:`${V.width||2}px`})},null,4)):V.type==="fill"?(e.openBlock(),e.createElementBlock("span",{key:2,class:"legend-symbol legend-fill",style:e.normalizeStyle({backgroundColor:V.color})},null,4)):e.createCommentVNode("",!0),e.createElementVNode("span",Qt,e.toDisplayString(V.label),1)]))),128))])):e.createCommentVNode("",!0)]))),128)),r.value.length===0?(e.openBlock(),e.createElementBlock("div",Kt,' No layers match "'+e.toDisplayString(t.searchQuery)+'" ',1)):e.createCommentVNode("",!0)],2))]))}}),Qe=ge(Xt,[["__scopeId","data-v-d2e878e2"]]);function $(t){if(!t||!Array.isArray(t)||t.length<3)return"#888888";const l=t[0],o=t[1],n=t[2],i=(t[3]??255)/255;return i===1?`#${l.toString(16).padStart(2,"0")}${o.toString(16).padStart(2,"0")}${n.toString(16).padStart(2,"0")}`:`rgba(${l}, ${o}, ${n}, ${i.toFixed(2)})`}function Q(t){return t!==void 0?t:1}const Yt=559082264;function qe(t){return!t||t<=0?null:Math.round(Math.log2(Yt/t)*100)/100}function eo(t,l){const o={};if(t&&t>0){const n=qe(t);n!==null&&(o.minZoom=n)}if(l&&l>0){const n=qe(l);n!==null&&(o.maxZoom=n)}return o}function Ee(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 fe(t){return!(!t||t.style==="esriSLSNull"||t.color===null||t.width===0||t.color&&t.color[3]===0)}function _e(t){return String(t)}function Ke(t,l,o){const n=t.symbol,r=Ee(n);let i={},u=[],g=null;if(r==="fill"&&n){const p=n.color===null?0:n.color?.[3]??255,E=p===0?"rgba(0, 0, 0, 0)":$(n.color),h=p===0?0:p<255?1:Q(l);if(i={"fill-color":E,"fill-opacity":h},fe(n.outline)){const v=n.outline.width||1,c=$(n.outline.color);p!==0&&(i["fill-outline-color"]=c),(v>1||p===0)&&(g={"line-color":c,"line-width":v})}u=[{type:"fill",color:$(n.color),label:t.label||"Feature"}]}else if(r==="line"&&n)i={"line-color":$(n.color),"line-width":n.width||1,"line-opacity":Q(l)},u=[{type:"line",color:$(n.color),width:n.width||1,label:t.label||"Feature"}];else if(r==="circle"&&n){const p=Math.round((n.size||6)*.71*100)/100;i={"circle-color":$(n.color),"circle-radius":p,"circle-opacity":Q(l)},fe(n.outline)&&(i["circle-stroke-color"]=$(n.outline.color),i["circle-stroke-width"]=n.outline.width||1),u=[{type:"circle",color:$(n.color),label:t.label||"Feature"}]}return{paint:i,legend:u,geomType:r,outlinePaint:g}}function to(t,l,o){const n=t.field1,r=t.uniqueValueInfos||[],i=t.defaultSymbol;if(r.length===0)return Ke({...t,symbol:i},l);const u=r[0]?.symbol||i,g=Ee(u);let p={},E=[],h=null;if(g==="fill"){const v=["match",["to-string",["get",n]]];for(const c of r){v.push(_e(c.value)),v.push($(c.symbol?.color));const f=String(c.value),m=o?.get(f)||c.label||f;E.push({type:"fill",color:$(c.symbol?.color),label:m})}if(v.push(i?$(i.color):"#888888"),p={"fill-color":v,"fill-opacity":Q(l)},fe(u?.outline)){const c=u.outline.width||1,f=$(u.outline.color);p["fill-outline-color"]=f,c>1&&(h={"line-color":f,"line-width":c})}}else if(g==="line"){const v=["match",["to-string",["get",n]]];for(const c of r){v.push(_e(c.value)),v.push($(c.symbol?.color));const f=String(c.value),m=o?.get(f)||c.label||f;E.push({type:"line",color:$(c.symbol?.color),width:c.symbol?.width||1,label:m})}v.push(i?$(i.color):"#888888"),p={"line-color":v,"line-width":u?.width||2,"line-opacity":Q(l)}}else if(g==="circle"){const v=["match",["to-string",["get",n]]];for(const f of r){v.push(_e(f.value)),v.push($(f.symbol?.color));const C=String(f.value),w=o?.get(C)||f.label||C;E.push({type:"circle",color:$(f.symbol?.color),label:w})}v.push(i?$(i.color):"#888888");const c=Math.round((u?.size||6)*.71*100)/100;p={"circle-color":v,"circle-radius":c,"circle-opacity":Q(l)},fe(u?.outline)&&(p["circle-stroke-color"]=$(u.outline.color),p["circle-stroke-width"]=u.outline.width||1)}return{paint:p,legend:E,geomType:g,outlinePaint:h}}function oo(t,l){const o=t.field,n=t.classBreakInfos||[],r=t.visualVariables?.find(h=>h.type==="colorInfo");if(r?.stops&&r.stops.length>0)return no(r,o,t,l);if(n.length===0)return{paint:{},legend:[],geomType:"fill",outlinePaint:null};const i=n[0]?.symbol,u=Ee(i);let g={},p=[],E=null;if(u==="fill"){const h=["step",["get",o]];h.push($(n[0]?.symbol?.color));for(let v=0;v<n.length;v++){const c=n[v];v>0&&(h.push(n[v-1].classMaxValue),h.push($(c.symbol?.color))),p.push({type:"fill",color:$(c.symbol?.color),label:c.label||`${c.classMaxValue}`})}if(g={"fill-color":h,"fill-opacity":Q(l)},fe(i?.outline)){const v=i.outline.width||1,c=$(i.outline.color);g["fill-outline-color"]=c,v>1&&(E={"line-color":c,"line-width":v})}}else if(u==="line"){const h=["step",["get",o]];h.push($(n[0]?.symbol?.color));let v=t.minValue??0;for(let f=0;f<n.length;f++){const C=n[f];f>0&&(h.push(n[f-1].classMaxValue),h.push($(C.symbol?.color))),p.push({type:"line",color:$(C.symbol?.color),width:C.symbol?.width||i?.width||2,label:C.label||`${v} - ${C.classMaxValue}`}),v=C.classMaxValue+1}const c=i?.width||2;g={"line-color":h,"line-width":c,"line-opacity":Q(l)}}return{paint:g,legend:p,geomType:u,outlinePaint:E}}function no(t,l,o,n){const r=t.stops||[];if(r.length===0)return{paint:{},legend:[],geomType:"fill",outlinePaint:null};const i=o.classBreakInfos?.[0]?.symbol||o.defaultSymbol,u=Ee(i);let g={},p=[],E=null;if(u==="fill"){const h=["interpolate",["linear"],["get",l]];for(const c of r)h.push(c.value),h.push($(c.color)),p.push({type:"fill",color:$(c.color),label:c.label||`${c.value}`});if(g={"fill-color":["case",["==",["get",l],null],"rgba(0, 0, 0, 0)",h],"fill-opacity":Q(n)},fe(i?.outline)){const c=i.outline.width||1,f=$(i.outline.color);g["fill-outline-color"]=f,c>1&&(E={"line-color":f,"line-width":c})}}return{paint:g,legend:p,geomType:u,outlinePaint:E}}function lo(t,l,o,n){if(!t?.renderer)return{paint:{},legend:[],geomType:"fill",outlinePaint:null};const r=t.renderer;switch(r.type){case"simple":return Ke(r,l);case"uniqueValue":return to(r,l,o);case"classBreaks":return oo(r,l);default:return{paint:{},legend:[],geomType:"fill",outlinePaint:null}}}function ao(t){if(!t)return null;const l=t.title||"",n=(t.fieldInfos||[]).filter(r=>r.visible===!0).map(r=>{const i={field:r.fieldName,label:r.label||r.fieldName};return r.format&&(i.format={},r.format.dateFormat&&(i.format.dateFormat=r.format.dateFormat),r.format.digitSeparator!==void 0&&(i.format.digitSeparator=r.format.digitSeparator),r.format.places!==void 0&&(i.format.places=r.format.places),Object.keys(i.format).length===0&&delete i.format),i});return{title:l,fields:n}}function ro(t){return t?.definitionExpression}function io(t){return(t.includes("_")?t.split("_").slice(1).join(" "):t).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function so(t){return t.includes("_")?t.split("_").slice(1).join(" "):t}function co(t){const l=new Map;if(!t)return l;const o=t.split(`
|
|
2
|
+
`),n=/^(\d{1,3})\s+(.+)$/;for(const r of o){const i=r.trim().match(n);if(i){const[,u,g]=i;u&&g&&l.set(u,g.trim())}}return l}async function uo(t){try{const l=await fetch(`${t}?f=json`);if(!l.ok)return null;const o=await l.json();return o.drawingInfo?{drawingInfo:o.drawingInfo,description:o.description}:null}catch{return null}}async function De(t){const l=t.operationalLayers||[],o=[],n=["Zoning and Planning_Land Use"];for(const r of l)if(r.url&&r.itemId!=="4f39b829b96d437da9231727d9c91fab")try{let i=r.layerDefinition?.drawingInfo,u;const g=!i||!i.renderer,p=n.includes(r.title);if((g||p)&&r.url){const x=await uo(r.url);x&&(i=x.drawingInfo,x.description&&(u=co(x.description),u.size>0))}const{paint:E,legend:h,geomType:v,outlinePaint:c}=lo(i,r.opacity,u,r.title),f=ao(r.popupInfo),C=ro(r.layerDefinition),m=eo(r.layerDefinition?.minScale,r.layerDefinition?.maxScale),w=io(r.title),y=so(r.title);let b=r.opacity??1;const V={id:w,title:y,type:v,url:r.url,opacity:b,paint:E,legend:h,popup:f};C&&(V.where=C),m.minZoom!==void 0&&(V.minZoom=m.minZoom),m.maxZoom!==void 0&&(V.maxZoom=m.maxZoom),c&&(V.outlinePaint=c),o.push(V)}catch{}return o.sort((r,i)=>r.title.localeCompare(i.title)),o}const Ge={},Oe="376af635c84643cd816a8c5d017a53aa",fo=Oe;function Be(t,l){let o=`https://www.arcgis.com/sharing/rest/content/items/${t}/data?f=json`;return l&&(o+=`&token=${l}`),o}function po(){return Be(Oe)}const Le=new Map,ye=new Map;function Xe(t){t?(Le.delete(t),ye.delete(t)):(Le.clear(),ye.clear())}let we,He=0;async function mo(){const t=typeof{url:typeof document>"u"?require("url").pathToFileURL(__filename).href:ue&&ue.tagName.toUpperCase()==="SCRIPT"&&ue.src||new URL("index.js",document.baseURI).href}<"u"&&Ge?.VITE_AGO_USERNAME,l=typeof{url:typeof document>"u"?require("url").pathToFileURL(__filename).href:ue&&ue.tagName.toUpperCase()==="SCRIPT"&&ue.src||new URL("index.js",document.baseURI).href}<"u"&&Ge?.VITE_AGO_PASSWORD;if(!(!t||!l)){if(we&&Date.now()<He-3e5)return we;try{const n=await(await fetch("https://www.arcgis.com/sharing/rest/generateToken",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({f:"json",username:t,password:l,referer:window.location.origin||"https://localhost",expiration:"120"})})).json();return n.error?void 0:(we=n.token,He=n.expires,we)}catch{return}}}async function yo(t,l){const o=Be(t,l),n=await fetch(o);if(!n.ok)throw new Error(`Failed to fetch WebMap: ${n.status} ${n.statusText}`);const r=await n.json();if(r.error)throw new Error(`ArcGIS error: ${r.error.message||r.error.code||"Unknown error"}`);return r}async function go(t){try{const l=await mo(),o=await yo(t,l);return await De(o)}catch(l){throw new Error(`Failed to load dynamic layer configs: ${l instanceof Error?l.message:"Unknown error"}`)}}async function Ce(t=Oe){const l=Le.get(t);if(l)return l;const o=ye.get(t);if(o)return o;const n=(async()=>{try{const r=await go(t);return Le.set(t,r),r}finally{ye.delete(t)}})();return ye.set(t,n),n}function Ye(t){const l=e.ref({}),o=new Map;for(const c of t)l.value[c.id]={data:null,loading:!1,error:null,lastFetched:null};async function n(c){const f=c.id;l.value={...l.value,[f]:{data:l.value[f]?.data??null,lastFetched:l.value[f]?.lastFetched??null,loading:!0,error:null}};try{let C;if(c.type==="http-get"){const m=await fetch(c.url,{method:"GET",...c.options});if(!m.ok)throw new Error(`HTTP ${m.status}: ${m.statusText}`);C=await m.json()}else if(c.type==="http-post"){const m=await fetch(c.url,{method:"POST",...c.options});if(!m.ok)throw new Error(`HTTP ${m.status}: ${m.statusText}`);C=await m.json()}else if(c.type==="esri"){const w=`${c.url.replace(/\/$/,"")}/query?where=1%3D1&outFields=*&returnGeometry=false&f=json`,y=await fetch(w,c.options);if(!y.ok)throw new Error(`HTTP ${y.status}: ${y.statusText}`);C=(await y.json()).features?.map(V=>V.attributes)||[]}else throw new Error(`Unknown data source type: ${c.type}`);c.transform&&(C=c.transform(C)),l.value={...l.value,[f]:{data:C,loading:!1,error:null,lastFetched:Date.now()}}}catch(C){const m=C instanceof Error?C.message:"Unknown error";l.value={...l.value,[f]:{data:l.value[f]?.data??null,lastFetched:l.value[f]?.lastFetched??null,loading:!1,error:m}}}}async function r(){await Promise.all(t.map(c=>n(c)))}async function i(c){const f=t.find(C=>C.id===c);f&&await n(f)}function u(c){return l.value[c]?.data??null}const g=e.computed(()=>Object.values(l.value).some(c=>c.loading));function p(c){return l.value[c]?.loading??!1}function E(c){return l.value[c]?.error??null}function h(){for(const c of t)if(c.pollInterval&&c.pollInterval>0){const f=window.setInterval(()=>{n(c)},c.pollInterval);o.set(c.id,f)}}function v(){for(const[,c]of o)window.clearInterval(c);o.clear()}return e.onMounted(()=>{r(),h()}),e.onUnmounted(()=>{v()}),{state:e.readonly(l),isLoading:g,fetchAll:r,refetch:i,getData:u,isSourceLoading:p,getError:E,stopPolling:v}}const ho={class:"layerboard-layout"},vo={key:0,class:"layerboard-subtitle"},bo={class:"layerboard-mobile-menu-content"},ko={class:"layerboard-main"},wo={key:0,class:"layerboard-loading"},Lo={key:1,class:"layerboard-error"},Co={key:0},So={key:1},Eo={class:"layerboard-modal"},Bo=e.defineComponent({__name:"Layerboard",props:{title:{},subtitle:{},webMapId:{},themeColor:{default:"#0f4d90"},cyclomediaConfig:{},pictometryCredentials:{},showDefaultSidebar:{type:Boolean,default:!0},sidebarWidth:{default:"30%"},sidebarLabel:{default:"Layers"},mapLabel:{default:"Map"},fetchMetadata:{type:Boolean,default:!1},tiledLayers:{default:()=>[]},dataSources:{default:()=>[]},layerStyleOverrides:{default:()=>({})},basemapControlPosition:{default:"top-right"},navigationControlPosition:{default:"bottom-right"},geolocationControlPosition:{default:"bottom-right"},searchControlPosition:{default:"top-left"},drawControlPosition:{default:"bottom-left"},cyclomediaButtonPosition:{default:"top-right"},pictometryButtonPosition:{default:"top-right"},initialZoom:{},initialCenter:{}},emits:["configs-loaded","load-error","zoom"],setup(t,{expose:l,emit:o}){const n=t,r=o,i=e.ref([]),u=e.ref(!0),g=e.ref(null),p=e.ref(12),E=e.ref(""),h=e.ref(new Set),v=e.ref({}),c=e.ref(new Set),f=e.ref({}),C=e.ref({}),m=e.ref(new Set),w=e.ref({});function y(){const k={};for(const B of n.tiledLayers)k[B.id]=B.opacity??1;w.value=k}function b(k){m.value.has(k)?m.value.delete(k):m.value.add(k),m.value=new Set(m.value)}function V(k,B){B?m.value.add(k):m.value.delete(k),m.value=new Set(m.value)}function x(k,B){w.value={...w.value,[k]:B}}const F=n.dataSources.length>0?Ye(n.dataSources):null,I=e.computed(()=>F?.state.value??{}),J=e.computed(()=>F?.isLoading.value??!1);function le(k){return F?.getData(k)??null}function ae(k){return F?.refetch(k)??Promise.resolve()}e.provide("layerboard-layers",e.readonly(i)),e.provide("layerboard-visible",h),e.provide("layerboard-opacities",v),e.provide("layerboard-loading",e.readonly(c)),e.provide("layerboard-errors",e.readonly(f)),e.provide("layerboard-zoom",e.readonly(p)),e.provide("layerboard-toggle-layer",re),e.provide("layerboard-set-layer-visible",K),e.provide("layerboard-set-layers-visible",ie),e.provide("layerboard-set-opacity",X),e.provide("layerboard-tiled-layers",e.readonly(e.computed(()=>n.tiledLayers))),e.provide("layerboard-visible-tiled",m),e.provide("layerboard-tiled-opacities",w),e.provide("layerboard-toggle-tiled",b),e.provide("layerboard-set-tiled-opacity",x),e.provide("layerboard-set-tiled-visible",V),e.provide("layerboard-data-sources-state",I),e.provide("layerboard-data-sources-loading",J),e.provide("layerboard-get-data-source",le),e.provide("layerboard-refetch-data-source",ae);const Ne=e.computed(()=>({backgroundColor:n.themeColor})),xe=e.computed(()=>({backgroundColor:n.themeColor})),pe=e.computed(()=>({backgroundColor:n.themeColor})),he=e.computed(()=>({width:ee.value?"0":n.sidebarWidth}));async function me(){try{u.value=!0,g.value=null;const B=(await Ce(n.webMapId)).map(M=>{const U=n.layerStyleOverrides[M.id];return U?{...M,paint:U.paint??M.paint,outlinePaint:U.outlinePaint??M.outlinePaint,legend:U.legend??M.legend,type:U.type??M.type}:M});i.value=B.map(M=>({config:M,component:M.type}));const H={};B.forEach(M=>{H[M.id]=M.opacity??1}),v.value=H,r("configs-loaded",B)}catch(k){const B=k instanceof Error?k.message:"Failed to load layer configurations";g.value=B,r("load-error",B)}finally{u.value=!1}}function ve(k){let B=k.split("?")[0]||k;return B=B.replace(/\/query$/,""),B=B.replace(/\/$/,""),B.toLowerCase()}async function Ve(){if(n.fetchMetadata)try{const k="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"),B=await fetch(k);if(!B.ok)return;const H=await B.json(),M={};for(const U of H.rows||[])if(U.url_text&&U.representation){const Fe=ve(U.url_text),Te=`https://metadata.phila.gov/#home/representationdetails/${U.representation}/`;M[Fe]=Te}C.value=M}catch{}}function Pe(k){p.value=k,r("zoom",k)}function re(k){h.value.has(k)?h.value.delete(k):h.value.add(k),h.value=new Set(h.value)}function K(k,B){B?h.value.add(k):h.value.delete(k),h.value=new Set(h.value)}function ie(k,B){for(const H of k)B?h.value.add(H):h.value.delete(H);h.value=new Set(h.value)}function X(k,B){v.value={...v.value,[k]:B}}function $e(k,B){B?c.value.add(k):c.value.delete(k),c.value=new Set(c.value)}function j(k,B){if(B)f.value={...f.value,[k]:B};else{const{[k]:H,...M}=f.value;f.value=M}}function Y(k){E.value=k}const R=e.ref("map");function se(){R.value=R.value==="sidebar"?"map":"sidebar"}const oe=e.ref(!1);function ze(){oe.value=!oe.value}function be(){oe.value=!1}const ee=e.ref(!1);function ce(){ee.value=!ee.value}const W=e.ref(!1);function ne(){W.value=!0}function G(){W.value=!1}function ke(k){k.target.classList.contains("layerboard-modal-backdrop")&&G()}return e.provide("layerboard-open-modal",ne),e.provide("layerboard-close-modal",G),e.provide("layerboard-is-modal-open",e.readonly(W)),l({layerList:i,visibleLayers:h,layerOpacities:v,loadingLayers:c,layerErrors:f,currentZoom:p,toggleLayer:re,setLayerVisible:K,setLayersVisible:ie,setLayerOpacity:X,reloadConfigs:me,clearCache:()=>Xe(n.webMapId),visibleTiledLayers:m,tiledLayerOpacities:w,toggleTiledLayer:b,setTiledLayerVisible:V,setTiledLayerOpacity:x,dataSourcesState:I,dataSourcesLoading:J,getDataSourceData:le,refetchDataSource:ae,isModalOpen:W,openModal:ne,closeModal:G}),e.onMounted(()=>{me(),Ve(),y()}),(k,B)=>(e.openBlock(),e.createElementBlock("div",ho,[e.createElementVNode("header",{class:"layerboard-header",style:e.normalizeStyle(Ne.value)},[B[1]||(B[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)),B[2]||(B[2]=e.createElementVNode("span",{class:"layerboard-header-divider layerboard-desktop-only"},null,-1)),e.createElementVNode("button",{class:"layerboard-hamburger layerboard-mobile-only",onClick:ze,"aria-label":"Toggle menu"},[e.createVNode(e.unref(Z.Icon),{"icon-definition":e.unref(Ft),size:"medium",decorative:""},null,8,["icon-definition"])]),e.renderSlot(k.$slots,"header",{},()=>[e.createElementVNode("h1",null,e.toDisplayString(t.title),1),t.subtitle?(e.openBlock(),e.createElementBlock("span",vo,e.toDisplayString(t.subtitle),1)):e.createCommentVNode("",!0)],!0),oe.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"layerboard-mobile-menu",style:e.normalizeStyle({backgroundColor:t.themeColor})},[e.createElementVNode("div",bo,[e.renderSlot(k.$slots,"footer",{openModal:ne,closeModal:G,isModalOpen:W.value},()=>[B[0]||(B[0]=e.createTextVNode(" City of Philadelphia ",-1))],!0)]),e.createElementVNode("button",{class:"layerboard-mobile-menu-close",onClick:be,"aria-label":"Close menu"},[e.createVNode(e.unref(Z.Icon),{"icon-definition":e.unref(je),size:"medium",decorative:""},null,8,["icon-definition"])])],4)):e.createCommentVNode("",!0),oe.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:"layerboard-mobile-menu-backdrop",onClick:be})):e.createCommentVNode("",!0)],4),e.createElementVNode("div",ko,[u.value?(e.openBlock(),e.createElementBlock("div",wo,[e.createElementVNode("div",{class:"layerboard-spinner",style:e.normalizeStyle({borderTopColor:t.themeColor})},null,4),e.createElementVNode("p",null,"Loading "+e.toDisplayString(t.title)+"...",1)])):g.value?(e.openBlock(),e.createElementBlock("div",Lo,[B[3]||(B[3]=e.createElementVNode("h2",null,"Error Loading Layers",-1)),e.createElementVNode("p",null,e.toDisplayString(g.value),1),e.createElementVNode("button",{class:"layerboard-retry-button",style:e.normalizeStyle({backgroundColor:t.themeColor}),onClick:me}," Retry ",4)])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("aside",{class:e.normalizeClass(["layerboard-sidebar",{"is-active":R.value==="sidebar"}]),style:e.normalizeStyle(he.value)},[e.renderSlot(k.$slots,"sidebar",{layers:i.value,visibleLayers:h.value,layerOpacities:v.value,loadingLayers:c.value,layerErrors:f.value,currentZoom:p.value,toggleLayer:re,setLayerVisible:K,setLayersVisible:ie,setOpacity:X,tiledLayers:t.tiledLayers,visibleTiledLayers:m.value,tiledLayerOpacities:w.value,toggleTiledLayer:b,setTiledLayerVisible:V,setTiledLayerOpacity:x,dataSourcesState:I.value,dataSourcesLoading:J.value,getDataSource:le,refetchDataSource:ae},()=>[t.showDefaultSidebar?(e.openBlock(),e.createBlock(Qe,{key:0,"layer-list":i.value,"visible-layers":h.value,"layer-opacities":v.value,"loading-layers":c.value,"layer-errors":f.value,"current-zoom":p.value,"search-query":E.value,"layer-metadata":C.value,onToggleLayer:re,onSetOpacity:X,onUpdateSearch:Y},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",{class:e.normalizeClass(["layerboard-map",{"is-active":R.value==="map"}])},[e.createVNode(Je,{"visible-layers":h.value,"layer-opacities":v.value,"layer-list":i.value,"tiled-layers":t.tiledLayers,"visible-tiled-layers":m.value,"tiled-layer-opacities":w.value,"cyclomedia-config":t.cyclomediaConfig,"pictometry-credentials":t.pictometryCredentials,"basemap-control-position":t.basemapControlPosition,"navigation-control-position":t.navigationControlPosition,"geolocation-control-position":t.geolocationControlPosition,"search-control-position":t.searchControlPosition,"draw-control-position":t.drawControlPosition,"cyclomedia-button-position":t.cyclomediaButtonPosition,"pictometry-button-position":t.pictometryButtonPosition,"initial-zoom":t.initialZoom,"initial-center":t.initialCenter,onZoom:Pe,onLayerLoading:$e,onLayerError:j},null,8,["visible-layers","layer-opacities","layer-list","tiled-layers","visible-tiled-layers","tiled-layer-opacities","cyclomedia-config","pictometry-credentials","basemap-control-position","navigation-control-position","geolocation-control-position","search-control-position","draw-control-position","cyclomedia-button-position","pictometry-button-position","initial-zoom","initial-center"])],2),e.createElementVNode("button",{class:e.normalizeClass(["layerboard-sidebar-toggle",{"is-collapsed":ee.value}]),style:e.normalizeStyle({left:ee.value?"0":n.sidebarWidth}),onClick:ce,"aria-label":"Toggle sidebar"},[e.createVNode(e.unref(Z.Icon),{"icon-definition":ee.value?e.unref($t):e.unref(zt),size:"medium",decorative:""},null,8,["icon-definition"])],6)],64))]),e.createElementVNode("button",{class:"layerboard-mobile-toggle",style:e.normalizeStyle(pe.value),onClick:se},[R.value==="map"?(e.openBlock(),e.createElementBlock("span",Co,e.toDisplayString(t.sidebarLabel),1)):(e.openBlock(),e.createElementBlock("span",So,e.toDisplayString(t.mapLabel),1))],4),e.createElementVNode("footer",{class:"layerboard-footer",style:e.normalizeStyle(xe.value)},[e.renderSlot(k.$slots,"footer",{openModal:ne,closeModal:G,isModalOpen:W.value},()=>[B[4]||(B[4]=e.createTextVNode(" City of Philadelphia ",-1))],!0)],4),W.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"layerboard-modal-backdrop",onClick:ke},[e.createElementVNode("div",Eo,[e.createElementVNode("button",{class:"layerboard-modal-close",onClick:G,"aria-label":"Close modal"},[e.createVNode(e.unref(Z.Icon),{"icon-definition":e.unref(je),size:"medium",decorative:""},null,8,["icon-definition"])]),e.renderSlot(k.$slots,"modal",{closeModal:G},void 0,!0)])])):e.createCommentVNode("",!0)]))}}),No=ge(Bo,[["__scopeId","data-v-dac16679"]]),xo=["aria-expanded"],Vo={key:0,class:"topic-icon"},Po={class:"topic-title"},$o={class:"topic-content"},zo=e.defineComponent({__name:"TopicAccordion",props:{title:{},icon:{},expanded:{type:Boolean,default:!1},layerIds:{default:()=>[]},headerClass:{}},emits:["toggle","layerChange"],setup(t,{emit:l}){const o=t,n=l,r=e.ref(o.expanded);e.watch(()=>o.expanded,u=>{r.value=u});function i(){r.value=!r.value,n("toggle",r.value)}return(u,g)=>{const p=e.resolveComponent("font-awesome-icon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["topic-accordion",{"is-expanded":r.value}])},[e.createElementVNode("button",{class:e.normalizeClass(["topic-header",t.headerClass]),type:"button","aria-expanded":r.value,onClick:i},[t.icon||u.$slots.icon?(e.openBlock(),e.createElementBlock("span",Vo,[e.renderSlot(u.$slots,"icon",{},()=>[t.icon?(e.openBlock(),e.createBlock(p,{key:0,icon:["fas",t.icon]},null,8,["icon"])):e.createCommentVNode("",!0)],!0)])):e.createCommentVNode("",!0),e.createElementVNode("span",Po,e.toDisplayString(t.title),1),e.createElementVNode("span",{class:e.normalizeClass(["topic-chevron",{"is-rotated":r.value}])},[...g[0]||(g[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"},[e.createElementVNode("polyline",{points:"6 9 12 15 18 9"})],-1)])],2)],10,xo),e.withDirectives(e.createElementVNode("div",$o,[e.renderSlot(u.$slots,"default",{},()=>[g[1]||(g[1]=e.createElementVNode("p",{class:"topic-empty"},"No content provided for this topic.",-1))],!0)],512),[[e.vShow,r.value]])],2)}}}),Fo=ge(zo,[["__scopeId","data-v-fb48c75b"]]),To={class:"layer-checkbox-set"},Mo=["checked","disabled","onChange"],_o={class:"layer-title"},Io={key:0,class:"loading-indicator"},Do=["title"],Oo={key:2,class:"zoom-indicator"},Ro={class:"layer-title"},Uo={key:0,class:"loading-indicator"},Zo=["title"],Ao={key:2,class:"zoom-indicator"},Wo={key:2,class:"opacity-control"},jo={class:"opacity-label"},qo=["value","onInput"],Go={key:3,class:"layer-legend"},Ho={class:"legend-label"},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}},emits:["toggleLayer","setOpacity"],setup(t,{emit:l}){const o=t,n=l;function r(m){return o.visibleLayerIds.has(m)}function i(m){return o.layerOpacities[m]??1}function u(m){return o.loadingLayerIds.has(m)}function g(m){return o.layerErrors[m]||null}function p(m){const w=o.currentZoom,y=m.minZoom,b=m.maxZoom;return!(y!==void 0&&w<y||b!==void 0&&w>b)}function E(m){return m.displayOptions?.shouldShowCheckbox!==!1}function h(m){return o.showOpacity?m.displayOptions?.shouldShowSlider!==!1:!1}function v(m){return o.showLegend?m.displayOptions?.shouldShowLegendBox!==!1:!1}function c(m){return m.displayOptions?.layerNameChange||m.title}function f(m){n("toggleLayer",m)}function C(m,w){const y=w.target;n("setOpacity",m,parseFloat(y.value))}return(m,w)=>(e.openBlock(),e.createElementBlock("div",To,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.layers,y=>(e.openBlock(),e.createElementBlock("div",{key:y.id,class:"layer-item"},[E(y)?(e.openBlock(),e.createElementBlock("label",{key:0,class:e.normalizeClass(["layer-checkbox",{"layer-unavailable":!p(y),"layer-error":g(y.id)}])},[e.createElementVNode("input",{type:"checkbox",checked:r(y.id),disabled:!p(y),onChange:b=>f(y.id)},null,40,Mo),e.createElementVNode("span",_o,[e.createTextVNode(e.toDisplayString(c(y))+" ",1),u(y.id)?(e.openBlock(),e.createElementBlock("span",Io," Loading... ")):e.createCommentVNode("",!0),g(y.id)?(e.openBlock(),e.createElementBlock("span",{key:1,class:"error-indicator",title:g(y.id)||""}," Error ",8,Do)):e.createCommentVNode("",!0),p(y)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",Oo," (zoom in) "))])],2)):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["layer-label-only",{"layer-unavailable":!p(y),"layer-error":g(y.id)}])},[e.createElementVNode("span",Ro,[e.createTextVNode(e.toDisplayString(c(y))+" ",1),u(y.id)?(e.openBlock(),e.createElementBlock("span",Uo," Loading... ")):e.createCommentVNode("",!0),g(y.id)?(e.openBlock(),e.createElementBlock("span",{key:1,class:"error-indicator",title:g(y.id)||""}," Error ",8,Zo)):e.createCommentVNode("",!0),p(y)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",Ao," (zoom in) "))])],2)),h(y)&&r(y.id)?(e.openBlock(),e.createElementBlock("div",Wo,[e.createElementVNode("label",jo," Opacity: "+e.toDisplayString(Math.round(i(y.id)*100))+"% ",1),e.createElementVNode("input",{type:"range",min:"0",max:"1",step:"0.05",value:i(y.id),class:"opacity-slider",onInput:b=>C(y.id,b)},null,40,qo)])):e.createCommentVNode("",!0),v(y)&&r(y.id)&&y.legend?.length?(e.openBlock(),e.createElementBlock("ul",Go,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.legend,(b,V)=>(e.openBlock(),e.createElementBlock("li",{key:V,class:"legend-item"},[b.type==="circle"?(e.openBlock(),e.createElementBlock("span",{key:0,class:"legend-symbol legend-circle",style:e.normalizeStyle({backgroundColor:b.color})},null,4)):b.type==="line"?(e.openBlock(),e.createElementBlock("span",{key:1,class:"legend-symbol legend-line",style:e.normalizeStyle({backgroundColor:b.color,height:`${b.width||2}px`})},null,4)):b.type==="fill"?(e.openBlock(),e.createElementBlock("span",{key:2,class:"legend-symbol legend-fill",style:e.normalizeStyle({backgroundColor:b.color})},null,4)):e.createCommentVNode("",!0),e.createElementVNode("span",Ho,e.toDisplayString(b.label),1)]))),128))])):e.createCommentVNode("",!0)]))),128)),t.layers.length===0?(e.openBlock(),e.createElementBlock("div",Jo," No layers available ")):e.createCommentVNode("",!0)]))}}),Ko=ge(Qo,[["__scopeId","data-v-cc5e50fd"]]);function Xo(t){const l=e.ref([]),o=e.ref(new Set),n=e.ref({}),r=e.ref(new Set),i=e.ref({}),u=e.ref(""),g=e.ref(!1),p=e.ref(!1),E=e.ref(null),h=e.computed(()=>{if(!u.value.trim())return l.value;const x=u.value.toLowerCase();return l.value.filter(F=>F.title.toLowerCase().includes(x))}),v=e.computed(()=>l.value.map(x=>({config:x,component:x.type})));async function c(){if(!p.value){g.value=!0,E.value=null;try{let x;t.mode==="dynamic"||!t.mode?t.webMapId?x=await f(t.webMapId):x=await Ce():x=await Ce(),l.value=x;const F={};x.forEach(I=>{F[I.id]=I.opacity??1}),n.value=F,p.value=!0}catch(x){E.value=x instanceof Error?x:new Error("Failed to initialize layerboard")}finally{g.value=!1}}}async function f(x){const F=Be(x),I=await fetch(F);if(!I.ok)throw new Error(`Failed to fetch WebMap: ${I.status} ${I.statusText}`);const J=await I.json();return De(J)}function C(x){const F=new Set(o.value);F.has(x)?F.delete(x):F.add(x),o.value=F}function m(x,F){n.value={...n.value,[x]:Math.max(0,Math.min(1,F))}}function w(x){u.value=x}function y(x,F){const I=new Set(r.value);F?I.add(x):I.delete(x),r.value=I}function b(x,F){if(F)i.value={...i.value,[x]:F};else{const{[x]:I,...J}=i.value;i.value=J}}function V(){l.value=[],o.value=new Set,n.value={},r.value=new Set,i.value={},u.value="",g.value=!1,p.value=!1,E.value=null}return{layerConfigs:e.readonly(l),visibleLayers:e.readonly(o),layerOpacities:e.readonly(n),loadingLayers:e.readonly(r),layerErrors:e.readonly(i),searchQuery:e.readonly(u),isLoading:e.readonly(g),isInitialized:e.readonly(p),error:e.readonly(E),filteredLayerConfigs:h,layerList:v,config:t,initialize:c,toggleLayer:C,setLayerOpacity:m,filterLayers:w,setLayerLoading:y,setLayerError:b,reset:V}}function Yo(){const t=e.ref([]),l=e.ref(new Set),o=e.ref(new Set);function n(i){l.value.has(i)?l.value.delete(i):l.value.add(i)}function r(i){t.value=i}return{layers:e.computed(()=>t.value),visibleLayerIds:e.computed(()=>l.value),loadingLayerIds:e.computed(()=>o.value),toggleLayer:n,setLayers:r}}function et(t){const l=e.ref(null),o=e.ref(!1),n=e.ref(null),r=e.ref(0);async function i(p={}){o.value=!0,n.value=null;const E=t.pageSize||2e3;let h=0,v=[],c=!0;try{for(;c;){const C=t.url.replace(/\/$/,""),m=encodeURIComponent(p.where||t.where||"1=1");let w=`${C}/query?where=${m}&outFields=*&returnGeometry=true&resultRecordCount=${E}&resultOffset=${h}&f=geojson`;if(p.bounds){const V=JSON.stringify({xmin:p.bounds.west,ymin:p.bounds.south,xmax:p.bounds.east,ymax:p.bounds.north,spatialReference:{wkid:4326}});w+=`&geometry=${encodeURIComponent(V)}&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects`}const y=await fetch(w);if(!y.ok)throw new Error(`HTTP ${y.status}: ${y.statusText}`);const b=await y.json();b.features&&b.features.length>0?(v=v.concat(b.features),h+=b.features.length,c=b.features.length===E):c=!1}const f={type:"FeatureCollection",features:v};return l.value=f,r.value=v.length,f}catch(f){const C=f instanceof Error?f:new Error("Failed to fetch features");throw n.value=C,C}finally{o.value=!1}}function u(){l.value=null,r.value=0,n.value=null}async function g(p={}){return i(p)}return{data:e.readonly(l),isLoading:e.readonly(o),error:e.readonly(n),totalFeatures:e.readonly(r),config:t,fetch:i,refetch:g,clear:u}}function en(t,l,o){const n=et(t);return e.watch(l,async r=>{if(r){const i=o(r);await n.fetch(i)}},{immediate:!0}),n}exports.LayerCheckboxSet=Ko;exports.LayerPanel=Qe;exports.Layerboard=No;exports.MapPanel=Je;exports.TopicAccordion=Fo;exports.WEBMAP_ID=fo;exports.buildWebMapUrl=Be;exports.clearCache=Xe;exports.getLayerConfigs=Ce;exports.getWebMapUrl=po;exports.transformWebMapToLayerConfigs=De;exports.useApiDataSources=Ye;exports.useDataSource=et;exports.useLayerConfig=Yo;exports.useLayerboard=Xo;exports.useReactiveDataSource=en;
|