@phila/layerboard 3.0.0-beta.11 → 3.0.0-beta.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { defineComponent as Se, ref as C, watch as Te, computed as I, onMounted as Je, onUnmounted as Pt, createElementBlock as m, openBlock as d, createVNode as Q, unref as O, withCtx as Ne, createBlock as ee, createCommentVNode as z, Fragment as oe, renderList as re, useAttrs as zt, toRef as Ft, normalizeClass as ne, createElementVNode as x, toDisplayString as V, renderSlot as ce, withDirectives as Et, mergeProps as dt, vModelDynamic as Ot, createTextVNode as me, normalizeProps as mt, guardReactiveProps as vt, withModifiers as It, normalizeStyle as H, readonly as j, provide as W, onBeforeUnmount as Rt, nextTick as Ae, useId as bt, resolveComponent as Dt, vShow as Zt } from "vue";
1
+ import { defineComponent as Se, ref as C, watch as Te, computed as I, onMounted as Je, onUnmounted as _t, createElementBlock as m, openBlock as d, createVNode as Q, unref as O, withCtx as Ne, createBlock as ee, createCommentVNode as z, Fragment as oe, renderList as re, useAttrs as zt, toRef as Ft, normalizeClass as ae, createElementVNode as x, toDisplayString as V, renderSlot as ce, withDirectives as Et, mergeProps as dt, vModelDynamic as Ot, createTextVNode as me, normalizeProps as mt, guardReactiveProps as vt, withModifiers as It, normalizeStyle as H, readonly as j, provide as W, onBeforeUnmount as Rt, nextTick as Ae, useId as bt, resolveComponent as Dt, vShow as Zt } from "vue";
2
2
  import { Map as Bt, DrawTool as At, RasterLayer as wt, CircleLayer as Lt, FillLayer as Nt, LineLayer as ct, MapMarker as Vt, MapPopup as Ut } from "@phila/phila-ui-map-core";
3
3
  import { cn as ft, Icon as ge, BaseLink as Wt, ActionContent as St } from "@phila/phila-ui-core";
4
4
  function Xe(e, i, t = {}) {
@@ -6,15 +6,15 @@ function Xe(e, i, t = {}) {
6
6
  return (t.id === 0 || t.id) && (o.id = t.id), t.bbox && (o.bbox = t.bbox), o.properties = i || {}, o.geometry = e, o;
7
7
  }
8
8
  function jt(e, i, t = {}) {
9
- for (const a of e) {
10
- if (a.length < 4)
9
+ for (const n of e) {
10
+ if (n.length < 4)
11
11
  throw new Error(
12
12
  "Each LinearRing of a Polygon must have 4 or more Positions."
13
13
  );
14
- if (a[a.length - 1].length !== a[0].length)
14
+ if (n[n.length - 1].length !== n[0].length)
15
15
  throw new Error("First and last Position are not equivalent.");
16
- for (let l = 0; l < a[a.length - 1].length; l++)
17
- if (a[a.length - 1][l] !== a[0][l])
16
+ for (let l = 0; l < n[n.length - 1].length; l++)
17
+ if (n[n.length - 1][l] !== n[0][l])
18
18
  throw new Error("First and last Position are not equivalent.");
19
19
  }
20
20
  return Xe({
@@ -46,27 +46,27 @@ function Kt(e) {
46
46
  return e.type === "Feature" ? e.geometry : e;
47
47
  }
48
48
  function Jt(e, i, t) {
49
- var o = e.length, a = ze(e[0], i), l = [], u, b, y;
50
- let _, v;
49
+ var o = e.length, n = ze(e[0], i), l = [], u, b, y;
50
+ let P, v;
51
51
  for (t || (t = []), u = 1; u < o; u++) {
52
- for (_ = e[u - 1], v = e[u], b = y = ze(v, i); ; )
53
- if (a | b) {
54
- if (a & b)
52
+ for (P = e[u - 1], v = e[u], b = y = ze(v, i); ; )
53
+ if (n | b) {
54
+ if (n & b)
55
55
  break;
56
- a ? (_ = pt(_, v, a, i), a = ze(_, i)) : (v = pt(_, v, b, i), b = ze(v, i));
56
+ n ? (P = pt(P, v, n, i), n = ze(P, i)) : (v = pt(P, v, b, i), b = ze(v, i));
57
57
  } else {
58
- l.push(_), b !== y ? (l.push(v), u < o - 1 && (t.push(l), l = [])) : u === o - 1 && l.push(v);
58
+ l.push(P), b !== y ? (l.push(v), u < o - 1 && (t.push(l), l = [])) : u === o - 1 && l.push(v);
59
59
  break;
60
60
  }
61
- a = y;
61
+ n = y;
62
62
  }
63
63
  return l.length && t.push(l), t;
64
64
  }
65
65
  function Qt(e, i) {
66
- var t, o, a, l, u, b, y;
66
+ var t, o, n, l, u, b, y;
67
67
  for (o = 1; o <= 8; o *= 2) {
68
- for (t = [], a = e[e.length - 1], l = !(ze(a, i) & o), u = 0; u < e.length; u++)
69
- b = e[u], y = !(ze(b, i) & o), y !== l && t.push(pt(a, b, o, i)), y && t.push(b), a = b, l = y;
68
+ for (t = [], n = e[e.length - 1], l = !(ze(n, i) & o), u = 0; u < e.length; u++)
69
+ b = e[u], y = !(ze(b, i) & o), y !== l && t.push(pt(n, b, o, i)), y && t.push(b), n = b, l = y;
70
70
  if (e = t, !e.length) break;
71
71
  }
72
72
  return t;
@@ -79,7 +79,7 @@ function ze(e, i) {
79
79
  return e[0] < i[0] ? t |= 1 : e[0] > i[2] && (t |= 2), e[1] < i[1] ? t |= 4 : e[1] > i[3] && (t |= 8), t;
80
80
  }
81
81
  function Xt(e, i) {
82
- const t = Kt(e), o = t.type, a = e.type === "Feature" ? e.properties : {};
82
+ const t = Kt(e), o = t.type, n = e.type === "Feature" ? e.properties : {};
83
83
  let l = t.coordinates;
84
84
  switch (o) {
85
85
  case "LineString":
@@ -87,14 +87,14 @@ function Xt(e, i) {
87
87
  const u = [];
88
88
  return o === "LineString" && (l = [l]), l.forEach((b) => {
89
89
  Jt(b, i, u);
90
- }), u.length === 1 ? qt(u[0], a) : Gt(u, a);
90
+ }), u.length === 1 ? qt(u[0], n) : Gt(u, n);
91
91
  }
92
92
  case "Polygon":
93
- return jt(kt(l, i), a);
93
+ return jt(kt(l, i), n);
94
94
  case "MultiPolygon":
95
95
  return Ht(
96
96
  l.map((u) => kt(u, i)),
97
- a
97
+ n
98
98
  );
99
99
  default:
100
100
  throw new Error("geometry " + o + " not supported");
@@ -103,8 +103,8 @@ function Xt(e, i) {
103
103
  function kt(e, i) {
104
104
  const t = [];
105
105
  for (const o of e) {
106
- const a = Qt(o, i);
107
- 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 && t.push(a));
106
+ const n = Qt(o, i);
107
+ n.length > 0 && ((n[0][0] !== n[n.length - 1][0] || n[0][1] !== n[n.length - 1][1]) && n.push(n[0]), n.length >= 4 && t.push(n));
108
108
  }
109
109
  return t;
110
110
  }
@@ -132,17 +132,17 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
132
132
  },
133
133
  emits: ["zoom", "layerLoading", "layerError"],
134
134
  setup(e, { emit: i }) {
135
- const t = e, o = i, a = C(null), l = C(null), u = C(0);
136
- function b(n) {
137
- o("zoom", n), l.value && (u.value = y(l.value));
135
+ const t = e, o = i, n = C(null), l = C(null), u = C(0);
136
+ function b(a) {
137
+ o("zoom", a), l.value && (u.value = y(l.value));
138
138
  }
139
- function y(n) {
140
- const p = n.getZoom(), E = n.getCenter().lat, P = 559082264028e-3, M = E * Math.PI / 180;
141
- return P * Math.cos(M) / Math.pow(2, p);
139
+ function y(a) {
140
+ const p = a.getZoom(), E = a.getCenter().lat, _ = 559082264028e-3, M = E * Math.PI / 180;
141
+ return _ * Math.cos(M) / Math.pow(2, p);
142
142
  }
143
- const _ = C({}), v = C(null), k = C(/* @__PURE__ */ new Set()), r = ["fema-100-year-floodplain", "fema-500-year-floodplain"];
144
- async function h(n, p, s, E) {
145
- const P = encodeURIComponent(E || "1=1"), M = JSON.stringify({
143
+ const P = C({}), v = C(null), k = C(/* @__PURE__ */ new Set()), r = ["fema-100-year-floodplain", "fema-500-year-floodplain"];
144
+ async function h(a, p, s, E) {
145
+ const _ = encodeURIComponent(E || "1=1"), M = JSON.stringify({
146
146
  xmin: p.west,
147
147
  ymin: p.south,
148
148
  xmax: p.east,
@@ -151,7 +151,7 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
151
151
  }), R = 2e3;
152
152
  let N = 0, U = [], Y = !0;
153
153
  for (; Y; ) {
154
- const G = `${n}/query?where=${P}&geometry=${encodeURIComponent(M)}&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects&outFields=*&returnGeometry=true&resultRecordCount=${R}&resultOffset=${N}&f=geojson`, Z = await fetch(G);
154
+ const G = `${a}/query?where=${_}&geometry=${encodeURIComponent(M)}&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects&outFields=*&returnGeometry=true&resultRecordCount=${R}&resultOffset=${N}&f=geojson`, Z = await fetch(G);
155
155
  if (!Z.ok)
156
156
  throw new Error(`HTTP ${Z.status}: ${Z.statusText}`);
157
157
  const J = await Z.json();
@@ -174,14 +174,14 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
174
174
  features: U
175
175
  };
176
176
  }
177
- async function w(n, p) {
177
+ async function w(a, p) {
178
178
  const s = p.map(async (E) => {
179
- const P = t.layerList.find((M) => M.config.id === E)?.config;
180
- if (P) {
179
+ const _ = t.layerList.find((M) => M.config.id === E)?.config;
180
+ if (_) {
181
181
  o("layerLoading", E, !0);
182
182
  try {
183
- const M = await h(P.url, n, E, P.where);
184
- _.value = { ..._.value, [E]: M }, o("layerError", E, null);
183
+ const M = await h(_.url, a, E, _.where);
184
+ P.value = { ...P.value, [E]: M }, o("layerError", E, null);
185
185
  } catch (M) {
186
186
  const R = M instanceof Error ? M.message : "Failed to load";
187
187
  o("layerError", E, R);
@@ -192,84 +192,84 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
192
192
  });
193
193
  await Promise.all(s);
194
194
  }
195
- async function g(n) {
195
+ async function g(a) {
196
196
  const p = [...t.visibleLayers];
197
- await w(n, p);
197
+ await w(a, p);
198
198
  }
199
- function f(n) {
200
- v.value = n.bounds, g(n.bounds);
199
+ function f(a) {
200
+ v.value = a.bounds, g(a.bounds);
201
201
  }
202
- function c(n) {
203
- l.value = n;
204
- const p = n.getBounds();
202
+ function c(a) {
203
+ l.value = a;
204
+ const p = a.getBounds();
205
205
  v.value = {
206
206
  west: p.getWest(),
207
207
  south: p.getSouth(),
208
208
  east: p.getEast(),
209
209
  north: p.getNorth()
210
210
  };
211
- const s = n.getZoom();
212
- o("zoom", s), u.value = y(n), g(v.value);
211
+ const s = a.getZoom();
212
+ o("zoom", s), u.value = y(a), g(v.value);
213
213
  }
214
214
  Te(
215
215
  () => t.visibleLayers.size,
216
216
  async () => {
217
217
  if (ie.value.length > 0 && $e(), v.value) {
218
- const n = new Set(t.visibleLayers), p = [...n].filter(
218
+ const a = new Set(t.visibleLayers), p = [...a].filter(
219
219
  (s) => !k.value.has(s)
220
220
  );
221
- k.value = new Set(n), p.length > 0 && await w(v.value, p);
221
+ k.value = new Set(a), p.length > 0 && await w(v.value, p);
222
222
  }
223
223
  }
224
224
  );
225
- function S(n) {
226
- return t.visibleLayers.has(n);
225
+ function S(a) {
226
+ return t.visibleLayers.has(a);
227
227
  }
228
- function F(n) {
229
- return !!_.value[n.id];
228
+ function F(a) {
229
+ return !!P.value[a.id];
230
230
  }
231
231
  const T = I(
232
- () => t.layerList.filter((n) => n.config.type === "circle" && S(n.config.id) && F(n.config)).map((n) => n.config)
232
+ () => t.layerList.filter((a) => a.config.type === "circle" && S(a.config.id) && F(a.config)).map((a) => a.config)
233
233
  ), A = I(
234
- () => t.layerList.filter((n) => n.config.type === "fill" && S(n.config.id) && F(n.config)).map((n) => n.config)
234
+ () => t.layerList.filter((a) => a.config.type === "fill" && S(a.config.id) && F(a.config)).map((a) => a.config)
235
235
  ), q = I(
236
- () => t.layerList.filter((n) => n.config.type === "fill" && n.config.outlinePaint && S(n.config.id) && F(n.config)).map((n) => n.config)
236
+ () => t.layerList.filter((a) => a.config.type === "fill" && a.config.outlinePaint && S(a.config.id) && F(a.config)).map((a) => a.config)
237
237
  ), fe = I(
238
- () => t.layerList.filter((n) => n.config.type === "line" && S(n.config.id) && F(n.config)).map((n) => n.config)
238
+ () => t.layerList.filter((a) => a.config.type === "line" && S(a.config.id) && F(a.config)).map((a) => a.config)
239
239
  );
240
- function _e(n) {
241
- return t.visibleTiledLayers?.has(n) ?? !1;
240
+ function Pe(a) {
241
+ return t.visibleTiledLayers?.has(a) ?? !1;
242
242
  }
243
- function Pe(n) {
244
- return t.tiledLayerOpacities?.[n] ?? 1;
243
+ function _e(a) {
244
+ return t.tiledLayerOpacities?.[a] ?? 1;
245
245
  }
246
- function et(n) {
247
- return `${n.replace(/\/$/, "")}/tile/{z}/{y}/{x}`;
246
+ function et(a) {
247
+ return `${a.replace(/\/$/, "")}/tile/{z}/{y}/{x}`;
248
248
  }
249
- function tt(n) {
249
+ function tt(a) {
250
250
  return {
251
251
  type: "raster",
252
- tiles: [et(n.url)],
252
+ tiles: [et(a.url)],
253
253
  tileSize: 256,
254
- attribution: n.attribution || ""
254
+ attribution: a.attribution || ""
255
255
  };
256
256
  }
257
257
  const Ie = C({}), Ue = C(/* @__PURE__ */ new Set());
258
- async function Re(n) {
259
- if (!Ue.value.has(n.id)) {
260
- Ue.value.add(n.id);
258
+ async function Re(a) {
259
+ if (!Ue.value.has(a.id)) {
260
+ Ue.value.add(a.id);
261
261
  try {
262
- const p = n.url.replace(/\/$/, ""), s = await fetch(`${p}?f=json`);
262
+ const p = a.url.replace(/\/$/, ""), s = await fetch(`${p}?f=json`);
263
263
  if (!s.ok)
264
264
  return;
265
265
  const E = await s.json();
266
- let P = E.minScale || 0, M = E.maxScale || 0;
266
+ let _ = E.minScale || 0, M = E.maxScale || 0;
267
267
  if (E.layers && E.layers.length > 0)
268
268
  for (const R of E.layers)
269
269
  R.maxScale && R.maxScale > 0 && (M === 0 || R.maxScale < M) && (M = R.maxScale);
270
270
  M === 0 && (M = 72e3), Ie.value = {
271
271
  ...Ie.value,
272
- [n.id]: { minScale: P, maxScale: M }
272
+ [a.id]: { minScale: _, maxScale: M }
273
273
  };
274
274
  } catch {
275
275
  }
@@ -277,81 +277,81 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
277
277
  }
278
278
  Je(() => {
279
279
  if (t.tiledLayers)
280
- for (const n of t.tiledLayers)
281
- n.scaleBasedRendering && Re(n);
280
+ for (const a of t.tiledLayers)
281
+ a.scaleBasedRendering && Re(a);
282
282
  });
283
- function We(n) {
284
- if (!n.scaleBasedRendering)
283
+ function We(a) {
284
+ if (!a.scaleBasedRendering)
285
285
  return "tiled";
286
- const p = Ie.value[n.id];
286
+ const p = Ie.value[a.id];
287
287
  if (!p)
288
288
  return "tiled";
289
289
  const s = u.value;
290
290
  return s === 0 || s > p.maxScale ? "tiled" : "dynamic";
291
291
  }
292
- const ot = I(() => t.tiledLayers ? t.tiledLayers.filter((n) => _e(n.id) ? n.scaleBasedRendering ? We(n) === "tiled" : !0 : !1) : []), nt = I(() => t.tiledLayers ? t.tiledLayers.filter((n) => _e(n.id) && n.scaleBasedRendering ? We(n) === "dynamic" : !1) : []);
293
- function Ee(n) {
292
+ const ot = I(() => t.tiledLayers ? t.tiledLayers.filter((a) => Pe(a.id) ? a.scaleBasedRendering ? We(a) === "tiled" : !0 : !1) : []), at = I(() => t.tiledLayers ? t.tiledLayers.filter((a) => Pe(a.id) && a.scaleBasedRendering ? We(a) === "dynamic" : !1) : []);
293
+ function Ee(a) {
294
294
  return {
295
295
  type: "raster",
296
- tiles: [`${n.url.replace(/\/$/, "")}/export?bbox={bbox-epsg-3857}&bboxSR=3857&imageSR=3857&size=256,256&format=png32&transparent=true&f=image`],
296
+ tiles: [`${a.url.replace(/\/$/, "")}/export?bbox={bbox-epsg-3857}&bboxSR=3857&imageSR=3857&size=256,256&format=png32&transparent=true&f=image`],
297
297
  tileSize: 256,
298
- attribution: n.attribution || ""
298
+ attribution: a.attribution || ""
299
299
  };
300
300
  }
301
- function ve(n) {
302
- return { type: "geojson", data: _.value[n.id] };
301
+ function ve(a) {
302
+ return { type: "geojson", data: P.value[a.id] };
303
303
  }
304
- function Me(n) {
305
- return t.layerOpacities[n] ?? 1;
304
+ function Me(a) {
305
+ return t.layerOpacities[a] ?? 1;
306
306
  }
307
- function be(n) {
308
- const p = Me(n.id), s = n.type === "circle" ? "circle-opacity" : n.type === "fill" ? "fill-opacity" : "line-opacity";
309
- if (n.type === "fill" && n.paint["fill-opacity"] === 0)
310
- return { ...n.paint, "fill-opacity": 0 };
311
- const E = n.type === "circle" ? "circle-color" : n.type === "fill" ? "fill-color" : "line-color", P = { ...n.paint }, M = P[E], R = P[s] === 1, N = typeof M == "string" && M.startsWith("rgba(");
307
+ function be(a) {
308
+ const p = Me(a.id), s = a.type === "circle" ? "circle-opacity" : a.type === "fill" ? "fill-opacity" : "line-opacity";
309
+ if (a.type === "fill" && a.paint["fill-opacity"] === 0)
310
+ return { ...a.paint, "fill-opacity": 0 };
311
+ const E = a.type === "circle" ? "circle-color" : a.type === "fill" ? "fill-color" : "line-color", _ = { ...a.paint }, M = _[E], R = _[s] === 1, N = typeof M == "string" && M.startsWith("rgba(");
312
312
  if (R && N) {
313
313
  if (p === 1)
314
- return P;
314
+ return _;
315
315
  {
316
316
  const U = M.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/);
317
317
  if (U && U[4]) {
318
318
  const [, Y, G, Z, J] = U, st = parseFloat(J) * p;
319
- P[E] = `rgba(${Y}, ${G}, ${Z}, ${st})`, P[s] = 1;
319
+ _[E] = `rgba(${Y}, ${G}, ${Z}, ${st})`, _[s] = 1;
320
320
  }
321
- return P;
321
+ return _;
322
322
  }
323
323
  }
324
324
  if (N) {
325
325
  const U = M.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/);
326
326
  if (U) {
327
327
  const [, Y, G, Z] = U;
328
- P[E] = `rgb(${Y}, ${G}, ${Z})`;
328
+ _[E] = `rgb(${Y}, ${G}, ${Z})`;
329
329
  }
330
330
  }
331
- return P[s] = p, P;
331
+ return _[s] = p, _;
332
332
  }
333
- function it(n) {
334
- const p = Me(n.id);
335
- return { ...n.outlinePaint, "line-opacity": p };
333
+ function it(a) {
334
+ const p = Me(a.id);
335
+ return { ...a.outlinePaint, "line-opacity": p };
336
336
  }
337
- const ie = C([]), we = C(null), ae = C(0);
338
- function ke(n) {
339
- const p = n.replace(/-outline$/, "");
337
+ const ie = C([]), we = C(null), ne = C(0);
338
+ function ke(a) {
339
+ const p = a.replace(/-outline$/, "");
340
340
  return t.layerList.find((E) => E.config.id === p)?.config;
341
341
  }
342
- function at(n, p) {
343
- return n.replace(/\{([^}]+)\}/g, (s, E) => {
344
- const P = p[E];
345
- return P == null ? "" : String(P);
342
+ function nt(a, p) {
343
+ return a.replace(/\{([^}]+)\}/g, (s, E) => {
344
+ const _ = p[E];
345
+ return _ == null ? "" : String(_);
346
346
  });
347
347
  }
348
- function Ce(n) {
349
- return n.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
348
+ function Ce(a) {
349
+ return a.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
350
350
  }
351
- function De(n, p) {
352
- if (n == null) return "-";
353
- if (p?.dateFormat && typeof n == "number") {
354
- const s = new Date(n);
351
+ function De(a, p) {
352
+ if (a == null) return "-";
353
+ if (p?.dateFormat && typeof a == "number") {
354
+ const s = new Date(a);
355
355
  switch (p.dateFormat) {
356
356
  case "shortDateShortTime":
357
357
  return s.toLocaleString();
@@ -365,39 +365,39 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
365
365
  return s.toLocaleDateString();
366
366
  }
367
367
  }
368
- if (typeof n == "number") {
369
- if (n > 1e12 && !p)
370
- return new Date(n).toLocaleDateString();
368
+ if (typeof a == "number") {
369
+ if (a > 1e12 && !p)
370
+ return new Date(a).toLocaleDateString();
371
371
  const s = p?.places, E = p?.digitSeparator ?? !0;
372
372
  if (s !== void 0) {
373
- const P = n.toFixed(s);
373
+ const _ = a.toFixed(s);
374
374
  if (E) {
375
- const M = P.split("."), R = M[0] || "0", N = M[1], U = R.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
375
+ const M = _.split("."), R = M[0] || "0", N = M[1], U = R.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
376
376
  return N ? `${U}.${N}` : U;
377
377
  }
378
- return P;
378
+ return _;
379
379
  }
380
- return E ? n.toLocaleString() : String(n);
380
+ return E ? a.toLocaleString() : String(a);
381
381
  }
382
- return String(n);
382
+ return String(a);
383
383
  }
384
- function Ze(n) {
384
+ function Ze(a) {
385
385
  const p = /* @__PURE__ */ new Set();
386
- return n.filter((s) => {
387
- const P = `${s.layer.id.replace(/-outline$/, "")}:${JSON.stringify(s.properties)}`;
388
- return p.has(P) ? !1 : (p.add(P), !0);
386
+ return a.filter((s) => {
387
+ const _ = `${s.layer.id.replace(/-outline$/, "")}:${JSON.stringify(s.properties)}`;
388
+ return p.has(_) ? !1 : (p.add(_), !0);
389
389
  });
390
390
  }
391
- function je(n, p) {
391
+ function je(a, p) {
392
392
  const s = /* @__PURE__ */ new Map();
393
- return p.forEach((E, P) => {
394
- s.set(E.id, P);
395
- }), n.sort((E, P) => {
396
- const M = E.layer.id.replace(/-outline$/, ""), R = P.layer.id.replace(/-outline$/, ""), N = s.get(M) ?? -1;
393
+ return p.forEach((E, _) => {
394
+ s.set(E.id, _);
395
+ }), a.sort((E, _) => {
396
+ const M = E.layer.id.replace(/-outline$/, ""), R = _.layer.id.replace(/-outline$/, ""), N = s.get(M) ?? -1;
397
397
  return (s.get(R) ?? -1) - N;
398
398
  });
399
399
  }
400
- function le(n) {
400
+ function le(a) {
401
401
  const p = l.value;
402
402
  if (!p) return;
403
403
  const s = [];
@@ -405,11 +405,11 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
405
405
  const Z = G.config;
406
406
  t.visibleLayers.has(Z.id) && (s.push(Z.id), Z.outlinePaint && s.push(`${Z.id}-outline`));
407
407
  });
408
- const E = p.project([n.lngLat.lng, n.lngLat.lat]), P = p.queryRenderedFeatures(E, {
408
+ const E = p.project([a.lngLat.lng, a.lngLat.lat]), _ = p.queryRenderedFeatures(E, {
409
409
  layers: s
410
410
  });
411
- if (P.length === 0) return;
412
- const M = Ze(P), R = t.layerList.map((G) => G.config), N = je(M, R), U = N.map((G) => {
411
+ if (_.length === 0) return;
412
+ const M = Ze(_), R = t.layerList.map((G) => G.config), N = je(M, R), U = N.map((G) => {
413
413
  const Z = G.layer.id.replace(/-outline$/, ""), J = ke(Z);
414
414
  return J ? {
415
415
  layerId: J.id,
@@ -419,7 +419,7 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
419
419
  } : null;
420
420
  }).filter((G) => G !== null);
421
421
  if (U.length === 0) return;
422
- ie.value = U, ae.value = 0, we.value = [n.lngLat.lng, n.lngLat.lat];
422
+ ie.value = U, ne.value = 0, we.value = [a.lngLat.lng, a.lngLat.lat];
423
423
  const Y = N[0];
424
424
  if (Y && Y.geometry) {
425
425
  const G = Y.layer.id.replace(/-outline$/, ""), Z = ke(G);
@@ -436,51 +436,51 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
436
436
  }
437
437
  }
438
438
  function $e() {
439
- ie.value = [], we.value = null, ae.value = 0, de.value = null;
439
+ ie.value = [], we.value = null, ne.value = 0, de.value = null;
440
440
  }
441
- function se(n) {
441
+ function se(a) {
442
442
  if (ie.value.length === 0) return;
443
- const p = n.target;
443
+ const p = a.target;
444
444
  if (!(p.tagName === "INPUT" || p.tagName === "TEXTAREA" || p.isContentEditable))
445
- switch (n.key) {
445
+ switch (a.key) {
446
446
  case "ArrowLeft":
447
447
  case "ArrowUp":
448
- n.preventDefault(), xe();
448
+ a.preventDefault(), xe();
449
449
  break;
450
450
  case "ArrowRight":
451
451
  case "ArrowDown":
452
- n.preventDefault(), qe();
452
+ a.preventDefault(), qe();
453
453
  break;
454
454
  case "Escape":
455
- n.preventDefault(), $e();
455
+ a.preventDefault(), $e();
456
456
  break;
457
457
  }
458
458
  }
459
459
  Je(() => {
460
460
  window.addEventListener("keydown", se);
461
- }), Pt(() => {
461
+ }), _t(() => {
462
462
  window.removeEventListener("keydown", se);
463
463
  });
464
464
  function qe() {
465
- const n = ie.value.length;
466
- n <= 1 || (ae.value = (ae.value + 1) % n);
465
+ const a = ie.value.length;
466
+ a <= 1 || (ne.value = (ne.value + 1) % a);
467
467
  }
468
468
  function xe() {
469
- const n = ie.value.length;
470
- n <= 1 || (ae.value = (ae.value - 1 + n) % n);
469
+ const a = ie.value.length;
470
+ a <= 1 || (ne.value = (ne.value - 1 + a) % a);
471
471
  }
472
- const X = I(() => ie.value.length === 0 ? null : ie.value[ae.value]), Ge = I(() => {
473
- const n = X.value;
474
- return !n || !n.popupConfig ? n?.layerTitle || "" : at(n.popupConfig.title, n.properties);
472
+ const X = I(() => ie.value.length === 0 ? null : ie.value[ne.value]), Ge = I(() => {
473
+ const a = X.value;
474
+ return !a || !a.popupConfig ? a?.layerTitle || "" : nt(a.popupConfig.title, a.properties);
475
475
  }), pe = I(() => {
476
- const n = X.value;
477
- if (!n) return "";
476
+ const a = X.value;
477
+ if (!a) return "";
478
478
  let p = '<div class="popup-content">';
479
- if (p += `<h3 class="popup-title">${Ce(Ge.value)}</h3>`, n.popupConfig?.fields?.length) {
479
+ if (p += `<h3 class="popup-title">${Ce(Ge.value)}</h3>`, a.popupConfig?.fields?.length) {
480
480
  p += `<table class="popup-table" aria-label="${Ce(Ge.value)}">`;
481
- for (const s of n.popupConfig.fields) {
482
- const E = De(n.properties[s.field], s.format);
483
- p += `<tr><th>${Ce(s.label)}</th><td>${Ce(E)}</td></tr>`;
481
+ for (const s of a.popupConfig.fields) {
482
+ const E = De(a.properties[s.field], s.format);
483
+ p += `<tr><th scope="row">${Ce(s.label)}</th><td>${Ce(E)}</td></tr>`;
484
484
  }
485
485
  p += "</table>";
486
486
  } else
@@ -503,21 +503,21 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
503
503
  "line-color": "#00FFFF",
504
504
  "line-opacity": 0.9
505
505
  }, de = C(null);
506
- function He(n) {
507
- return n.type;
506
+ function He(a) {
507
+ return a.type;
508
508
  }
509
- function Be(n, p) {
510
- const s = ke(n);
509
+ function Be(a, p) {
510
+ const s = ke(a);
511
511
  if (!s) return { radius: 5, width: 2 };
512
512
  const E = s.paint || {};
513
513
  if (p === "circle") {
514
- const P = E["circle-radius"];
515
- return typeof P == "number" ? { radius: P } : { radius: 5 };
514
+ const _ = E["circle-radius"];
515
+ return typeof _ == "number" ? { radius: _ } : { radius: 5 };
516
516
  }
517
517
  if (p === "line" || p === "fill") {
518
- const P = E["line-width"];
519
- if (typeof P == "number")
520
- return { width: P };
518
+ const _ = E["line-width"];
519
+ if (typeof _ == "number")
520
+ return { width: _ };
521
521
  if (s.outlinePaint && s.outlinePaint["line-width"]) {
522
522
  const M = s.outlinePaint["line-width"];
523
523
  if (typeof M == "number")
@@ -527,11 +527,11 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
527
527
  }
528
528
  return { radius: 5, width: 2 };
529
529
  }
530
- function L(n) {
531
- return !n || n.length === 0 ? [] : n[0] ?? [];
530
+ function L(a) {
531
+ return !a || a.length === 0 ? [] : a[0] ?? [];
532
532
  }
533
- function $(n) {
534
- const { geometry: p, geometryType: s, originalStyle: E } = n;
533
+ function $(a) {
534
+ const { geometry: p, geometryType: s, originalStyle: E } = a;
535
535
  if (s === "Point" || s === "MultiPoint") {
536
536
  const M = (E.radius || 5) + 3;
537
537
  return {
@@ -559,7 +559,7 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
559
559
  };
560
560
  }
561
561
  if (s === "Polygon") {
562
- const P = p.coordinates, M = L(P), N = (E.width || 2) + 3;
562
+ const _ = p.coordinates, M = L(_), N = (E.width || 2) + 3;
563
563
  return {
564
564
  type: "FeatureCollection",
565
565
  features: [{
@@ -575,10 +575,10 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
575
575
  };
576
576
  }
577
577
  if (s === "MultiPolygon") {
578
- const P = p.coordinates, R = (E.width || 2) + 3;
578
+ const _ = p.coordinates, R = (E.width || 2) + 3;
579
579
  return {
580
580
  type: "FeatureCollection",
581
- features: P.map((U) => ({
581
+ features: _.map((U) => ({
582
582
  type: "Feature",
583
583
  geometry: {
584
584
  type: "LineString",
@@ -595,28 +595,28 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
595
595
  features: []
596
596
  };
597
597
  }
598
- function K(n) {
599
- if (!n) {
598
+ function K(a) {
599
+ if (!a) {
600
600
  B();
601
601
  return;
602
602
  }
603
- const p = $(n);
604
- n.geometryType === "Point" || n.geometryType === "MultiPoint" ? (Le.value = p, ye.value = { type: "FeatureCollection", features: [] }) : (ye.value = p, Le.value = { type: "FeatureCollection", features: [] });
603
+ const p = $(a);
604
+ a.geometryType === "Point" || a.geometryType === "MultiPoint" ? (Le.value = p, ye.value = { type: "FeatureCollection", features: [] }) : (ye.value = p, Le.value = { type: "FeatureCollection", features: [] });
605
605
  }
606
606
  function B() {
607
607
  Le.value = { type: "FeatureCollection", features: [] }, ye.value = { type: "FeatureCollection", features: [] };
608
608
  }
609
- Te(de, (n) => {
610
- K(n);
609
+ Te(de, (a) => {
610
+ K(a);
611
611
  }), Te(
612
612
  () => t.visibleLayers,
613
- (n) => {
614
- de.value && !n.has(de.value.layerId) && (de.value = null, $e());
613
+ (a) => {
614
+ de.value && !a.has(de.value.layerId) && (de.value = null, $e());
615
615
  },
616
616
  { deep: !0 }
617
- ), Te(ae, () => {
618
- const n = X.value;
619
- if (!n) {
617
+ ), Te(ne, () => {
618
+ const a = X.value;
619
+ if (!a) {
620
620
  de.value = null;
621
621
  return;
622
622
  }
@@ -629,9 +629,9 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
629
629
  });
630
630
  const E = p.project(we.value), M = p.queryRenderedFeatures(E, {
631
631
  layers: s
632
- }).find((R) => R.layer.id.replace(/-outline$/, "") === n.layerId && JSON.stringify(R.properties) === JSON.stringify(n.properties));
632
+ }).find((R) => R.layer.id.replace(/-outline$/, "") === a.layerId && JSON.stringify(R.properties) === JSON.stringify(a.properties));
633
633
  if (M && M.geometry) {
634
- const R = ke(n.layerId);
634
+ const R = ke(a.layerId);
635
635
  if (R) {
636
636
  const N = He(M.geometry), U = Be(R.id, R.type);
637
637
  de.value = {
@@ -645,14 +645,14 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
645
645
  }
646
646
  });
647
647
  const te = C(null);
648
- function rt(n) {
649
- const [p, s] = n.geometry.coordinates;
648
+ function rt(a) {
649
+ const [p, s] = a.geometry.coordinates;
650
650
  te.value = [p, s];
651
651
  }
652
- return (n, p) => (d(), m("div", eo, [
652
+ return (a, p) => (d(), m("div", eo, [
653
653
  Q(O(Bt), {
654
654
  ref_key: "mapRef",
655
- ref: a,
655
+ ref: n,
656
656
  zoom: t.initialZoom,
657
657
  center: t.initialCenter,
658
658
  "navigation-controls": { position: t.navigationControlPosition },
@@ -682,15 +682,15 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
682
682
  key: "tiled-" + s.id,
683
683
  id: "tiled-" + s.id,
684
684
  source: tt(s),
685
- paint: { "raster-opacity": Pe(s.id) },
685
+ paint: { "raster-opacity": _e(s.id) },
686
686
  minzoom: s.minZoom,
687
687
  maxzoom: s.maxZoom
688
688
  }, null, 8, ["id", "source", "paint", "minzoom", "maxzoom"]))), 128)),
689
- (d(!0), m(oe, null, re(nt.value, (s) => (d(), ee(O(wt), {
689
+ (d(!0), m(oe, null, re(at.value, (s) => (d(), ee(O(wt), {
690
690
  key: "dynamic-" + s.id,
691
691
  id: "dynamic-" + s.id,
692
692
  source: Ee(s),
693
- paint: { "raster-opacity": Pe(s.id) },
693
+ paint: { "raster-opacity": _e(s.id) },
694
694
  minzoom: s.minZoom,
695
695
  maxzoom: s.maxZoom
696
696
  }, null, 8, ["id", "source", "paint", "minzoom", "maxzoom"]))), 128)),
@@ -756,7 +756,7 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
756
756
  html: pe.value,
757
757
  "close-on-click": !1,
758
758
  "show-navigation": ie.value.length > 1,
759
- "current-feature-index": ae.value,
759
+ "current-feature-index": ne.value,
760
760
  "total-features": ie.value.length,
761
761
  "layer-name": X.value.layerTitle,
762
762
  onClose: $e,
@@ -770,10 +770,10 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
770
770
  }
771
771
  }), Oe = (e, i) => {
772
772
  const t = e.__vccOpts || e;
773
- for (const [o, a] of i)
774
- t[o] = a;
773
+ for (const [o, n] of i)
774
+ t[o] = n;
775
775
  return t;
776
- }, oo = /* @__PURE__ */ Oe(to, [["__scopeId", "data-v-823ed331"]]), no = ["disabled"], io = /* @__PURE__ */ Se({
776
+ }, oo = /* @__PURE__ */ Oe(to, [["__scopeId", "data-v-669444d6"]]), ao = ["disabled"], io = /* @__PURE__ */ Se({
777
777
  inheritAttrs: !1,
778
778
  __name: "PhlButton",
779
779
  props: {
@@ -802,7 +802,7 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
802
802
  i.iconOnly && "icon-button",
803
803
  i.iconOnly && i.variant === "standard" && "icon-button--standard",
804
804
  i.className
805
- )), a = I(() => t(i) ? "to" in i && i.to !== void 0 ? {
805
+ )), n = I(() => t(i) ? "to" in i && i.to !== void 0 ? {
806
806
  to: i.to,
807
807
  disabled: i.disabled,
808
808
  className: o.value
@@ -823,7 +823,7 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
823
823
  size: i.size
824
824
  })
825
825
  );
826
- return (u, b) => t(i) ? (d(), ee(O(Wt), dt({ key: 0 }, { ...a.value, ...u.$attrs }, { role: "button" }), {
826
+ return (u, b) => t(i) ? (d(), ee(O(Wt), dt({ key: 0 }, { ...n.value, ...u.$attrs }, { role: "button" }), {
827
827
  default: Ne(() => [
828
828
  Q(O(St), mt(vt(l.value)), {
829
829
  default: Ne(() => [
@@ -849,14 +849,14 @@ const eo = { class: "map-panel" }, to = /* @__PURE__ */ Se({
849
849
  ]),
850
850
  _: 3
851
851
  }, 16)
852
- ], 16, no));
852
+ ], 16, ao));
853
853
  }
854
854
  });
855
- var ao = {
855
+ var no = {
856
856
  prefix: "fas",
857
857
  iconName: "circle-exclamation",
858
858
  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"]
859
- }, lo = ao, ro = {
859
+ }, lo = no, ro = {
860
860
  prefix: "fas",
861
861
  iconName: "xmark",
862
862
  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"]
@@ -885,14 +885,14 @@ const co = ["for"], uo = { class: "state-layer" }, fo = { class: "content" }, po
885
885
  },
886
886
  emits: ["update:modelValue"],
887
887
  setup(e, { emit: i }) {
888
- const t = zt(), o = e, a = I(() => typeof o.error == "string" ? o.error : o.error[0]), l = Ft(o, "id"), u = i, b = C(""), y = I({
888
+ const t = zt(), o = e, n = I(() => typeof o.error == "string" ? o.error : o.error[0]), l = Ft(o, "id"), u = i, b = C(""), y = I({
889
889
  get: () => o.modelValue !== void 0 ? o.modelValue : b.value,
890
890
  set: (h) => {
891
891
  u("update:modelValue", h), b.value = h;
892
892
  }
893
- }), _ = I(() => {
893
+ }), P = I(() => {
894
894
  const h = ["default-class"];
895
- return t.disabled != null && h.push("phila-input--disabled"), a.value && h.push("phila-input--error"), t.required != null && h.push("phila-input--required"), ft(...h);
895
+ return t.disabled != null && h.push("phila-input--disabled"), n.value && h.push("phila-input--error"), t.required != null && h.push("phila-input--required"), ft(...h);
896
896
  }), v = I(() => {
897
897
  const h = [];
898
898
  return y.value !== "" && h.push("phila-text-field--filled"), o.className && h.push(o.className), ft(...h);
@@ -900,7 +900,7 @@ const co = ["for"], uo = { class: "state-layer" }, fo = { class: "content" }, po
900
900
  h.target.closest("button") || k.value?.focus();
901
901
  };
902
902
  return (h, w) => (d(), m("div", {
903
- class: ne(["phila-input", _.value])
903
+ class: ae(["phila-input", P.value])
904
904
  }, [
905
905
  o.label ? (d(), m("label", {
906
906
  key: 0,
@@ -908,7 +908,7 @@ const co = ["for"], uo = { class: "state-layer" }, fo = { class: "content" }, po
908
908
  class: "has-text-label-small phila-label"
909
909
  }, V(o.label), 9, co)) : z("", !0),
910
910
  x("div", {
911
- class: ne(["phila-text-field", v.value]),
911
+ class: ae(["phila-text-field", v.value]),
912
912
  onClick: r
913
913
  }, [
914
914
  x("div", uo, [
@@ -951,14 +951,14 @@ const co = ["for"], uo = { class: "state-layer" }, fo = { class: "content" }, po
951
951
  ])
952
952
  ], 2),
953
953
  o.supportingText ? (d(), m("div", go, V(o.supportingText), 1)) : z("", !0),
954
- a.value ? (d(), m("div", ho, [
954
+ n.value ? (d(), m("div", ho, [
955
955
  Q(O(ge), {
956
956
  "icon-definition": O(lo),
957
957
  size: "small",
958
958
  inline: "",
959
959
  decorative: ""
960
960
  }, null, 8, ["icon-definition"]),
961
- me(" " + V(a.value), 1)
961
+ me(" " + V(n.value), 1)
962
962
  ])) : z("", !0)
963
963
  ], 2));
964
964
  }
@@ -994,7 +994,7 @@ const ko = { class: "layer-panel" }, Co = {
994
994
  }, $o = {
995
995
  key: 1,
996
996
  class: "topics-container"
997
- }, xo = { class: "layer-row" }, _o = ["href", "aria-label"], Po = {
997
+ }, xo = { class: "layer-row" }, Po = ["href", "aria-label"], _o = {
998
998
  key: 1,
999
999
  class: "metadata-placeholder"
1000
1000
  }, Eo = ["checked", "disabled", "onChange"], Mo = { class: "layer-title" }, To = {
@@ -1007,10 +1007,7 @@ const ko = { class: "layer-panel" }, Co = {
1007
1007
  }, Oo = {
1008
1008
  key: 0,
1009
1009
  class: "opacity-control"
1010
- }, Io = ["for"], Ro = ["id", "value", "aria-label", "onInput"], Do = {
1011
- key: 1,
1012
- class: "layer-legend"
1013
- }, Zo = { class: "legend-label" }, Bo = {
1010
+ }, Io = ["for"], Ro = ["id", "value", "aria-label", "onInput"], Do = ["aria-label"], Zo = { class: "legend-label" }, Bo = {
1014
1011
  key: 0,
1015
1012
  class: "no-results"
1016
1013
  }, Ao = /* @__PURE__ */ Se({
@@ -1032,7 +1029,7 @@ const ko = { class: "layer-panel" }, Co = {
1032
1029
  },
1033
1030
  emits: ["toggleLayer", "setOpacity", "updateSearch"],
1034
1031
  setup(e, { emit: i }) {
1035
- const t = e, o = i, a = I(() => {
1032
+ const t = e, o = i, n = I(() => {
1036
1033
  if (!t.searchQuery.trim())
1037
1034
  return t.layerList;
1038
1035
  const f = t.searchQuery.toLowerCase();
@@ -1052,7 +1049,7 @@ const ko = { class: "layer-panel" }, Co = {
1052
1049
  function y(f) {
1053
1050
  return t.visibleLayers.has(f);
1054
1051
  }
1055
- function _(f) {
1052
+ function P(f) {
1056
1053
  return t.layerOpacities[f] ?? 1;
1057
1054
  }
1058
1055
  function v(f) {
@@ -1101,9 +1098,9 @@ const ko = { class: "layer-panel" }, Co = {
1101
1098
  ], !0)
1102
1099
  ])) : (d(), m("div", {
1103
1100
  key: 2,
1104
- class: ne(["layer-list", { "has-metadata": b.value }])
1101
+ class: ae(["layer-list", { "has-metadata": b.value }])
1105
1102
  }, [
1106
- (d(!0), m(oe, null, re(a.value, (S) => (d(), m("div", {
1103
+ (d(!0), m(oe, null, re(n.value, (S) => (d(), m("div", {
1107
1104
  key: S.config.id,
1108
1105
  class: "layer-item"
1109
1106
  }, [
@@ -1124,9 +1121,9 @@ const ko = { class: "layer-panel" }, Co = {
1124
1121
  inline: "",
1125
1122
  decorative: ""
1126
1123
  }, null, 8, ["icon-definition"])
1127
- ], 8, _o)) : b.value ? (d(), m("span", Po)) : z("", !0),
1124
+ ], 8, Po)) : b.value ? (d(), m("span", _o)) : z("", !0),
1128
1125
  x("label", {
1129
- class: ne(["layer-checkbox", {
1126
+ class: ae(["layer-checkbox", {
1130
1127
  "layer-unavailable": !r(S.config),
1131
1128
  "layer-error": k(S.config.id)
1132
1129
  }])
@@ -1154,20 +1151,24 @@ const ko = { class: "layer-panel" }, Co = {
1154
1151
  x("label", {
1155
1152
  class: "opacity-label",
1156
1153
  for: "opacity-" + S.config.id
1157
- }, " Opacity: " + V(Math.round(_(S.config.id) * 100)) + "% ", 9, Io),
1154
+ }, " Opacity: " + V(Math.round(P(S.config.id) * 100)) + "% ", 9, Io),
1158
1155
  x("input", {
1159
1156
  id: "opacity-" + S.config.id,
1160
1157
  type: "range",
1161
1158
  min: "0",
1162
1159
  max: "1",
1163
1160
  step: "0.05",
1164
- value: _(S.config.id),
1161
+ value: P(S.config.id),
1165
1162
  "aria-label": "Opacity for " + S.config.title,
1166
1163
  class: "opacity-slider",
1167
1164
  onInput: (F) => g(S.config.id, F)
1168
1165
  }, null, 40, Ro)
1169
1166
  ])) : z("", !0),
1170
- e.showLegend && y(S.config.id) && S.config.legend?.length ? (d(), m("ul", Do, [
1167
+ e.showLegend && y(S.config.id) && S.config.legend?.length ? (d(), m("ul", {
1168
+ key: 1,
1169
+ class: "layer-legend",
1170
+ "aria-label": "Legend for " + S.config.title
1171
+ }, [
1171
1172
  (d(!0), m(oe, null, re(S.config.legend, (F, T) => (d(), m("li", {
1172
1173
  key: T,
1173
1174
  class: "legend-item"
@@ -1193,13 +1194,13 @@ const ko = { class: "layer-panel" }, Co = {
1193
1194
  }, null, 4)) : z("", !0),
1194
1195
  x("span", Zo, V(F.label), 1)
1195
1196
  ]))), 128))
1196
- ])) : z("", !0)
1197
+ ], 8, Do)) : z("", !0)
1197
1198
  ]))), 128)),
1198
- a.value.length === 0 ? (d(), m("div", Bo, ' No layers match "' + V(e.searchQuery) + '" ', 1)) : z("", !0)
1199
+ n.value.length === 0 ? (d(), m("div", Bo, ' No layers match "' + V(e.searchQuery) + '" ', 1)) : z("", !0)
1199
1200
  ], 2))
1200
1201
  ]));
1201
1202
  }
1202
- }), No = /* @__PURE__ */ Oe(Ao, [["__scopeId", "data-v-bd7d8852"]]);
1203
+ }), No = /* @__PURE__ */ Oe(Ao, [["__scopeId", "data-v-a0dcf4f0"]]);
1203
1204
  function D(e) {
1204
1205
  if (!e || !Array.isArray(e) || e.length < 3) return "#888888";
1205
1206
  const i = e[0], t = e[1], o = e[2], l = (e[3] ?? 255) / 255;
@@ -1248,12 +1249,12 @@ function ut(e) {
1248
1249
  return String(e);
1249
1250
  }
1250
1251
  function Mt(e, i, t) {
1251
- const o = e.symbol, a = Ye(o);
1252
+ const o = e.symbol, n = Ye(o);
1252
1253
  let l = {}, u = [], b = null;
1253
- if (a === "fill" && o) {
1254
- const y = o.color === null ? 0 : o.color?.[3] ?? 255, _ = y === 0 ? "rgba(0, 0, 0, 0)" : D(o.color), v = y === 0 ? 0 : y < 255 ? 1 : he(i);
1254
+ if (n === "fill" && o) {
1255
+ const y = o.color === null ? 0 : o.color?.[3] ?? 255, P = y === 0 ? "rgba(0, 0, 0, 0)" : D(o.color), v = y === 0 ? 0 : y < 255 ? 1 : he(i);
1255
1256
  if (l = {
1256
- "fill-color": _,
1257
+ "fill-color": P,
1257
1258
  "fill-opacity": v
1258
1259
  }, Fe(o.outline)) {
1259
1260
  const k = o.outline.width || 1, r = D(o.outline.color);
@@ -1267,7 +1268,7 @@ function Mt(e, i, t) {
1267
1268
  color: D(o.color),
1268
1269
  label: e.label || "Feature"
1269
1270
  }];
1270
- } else if (a === "line" && o)
1271
+ } else if (n === "line" && o)
1271
1272
  l = {
1272
1273
  "line-color": D(o.color),
1273
1274
  "line-width": o.width || 1,
@@ -1278,7 +1279,7 @@ function Mt(e, i, t) {
1278
1279
  width: o.width || 1,
1279
1280
  label: e.label || "Feature"
1280
1281
  }];
1281
- else if (a === "circle" && o) {
1282
+ else if (n === "circle" && o) {
1282
1283
  const y = Math.round((o.size || 6) * 0.71 * 100) / 100;
1283
1284
  l = {
1284
1285
  "circle-color": D(o.color),
@@ -1290,20 +1291,20 @@ function Mt(e, i, t) {
1290
1291
  label: e.label || "Feature"
1291
1292
  }];
1292
1293
  }
1293
- return { paint: l, legend: u, geomType: a, outlinePaint: b };
1294
+ return { paint: l, legend: u, geomType: n, outlinePaint: b };
1294
1295
  }
1295
1296
  function Wo(e, i, t) {
1296
- const o = e.field1, a = e.uniqueValueInfos || [], l = e.defaultSymbol;
1297
- if (a.length === 0)
1297
+ const o = e.field1, n = e.uniqueValueInfos || [], l = e.defaultSymbol;
1298
+ if (n.length === 0)
1298
1299
  return Mt({ ...e, symbol: l }, i);
1299
- const u = a[0]?.symbol || l, b = Ye(u);
1300
- let y = {}, _ = [], v = null;
1300
+ const u = n[0]?.symbol || l, b = Ye(u);
1301
+ let y = {}, P = [], v = null;
1301
1302
  if (b === "fill") {
1302
1303
  const k = ["match", ["to-string", ["get", o]]];
1303
- for (const r of a) {
1304
+ for (const r of n) {
1304
1305
  k.push(ut(r.value)), k.push(D(r.symbol?.color));
1305
1306
  const h = String(r.value), g = t?.get(h) || r.label || h;
1306
- _.push({
1307
+ P.push({
1307
1308
  type: "fill",
1308
1309
  color: D(r.symbol?.color),
1309
1310
  label: g
@@ -1321,10 +1322,10 @@ function Wo(e, i, t) {
1321
1322
  }
1322
1323
  } else if (b === "line") {
1323
1324
  const k = ["match", ["to-string", ["get", o]]];
1324
- for (const r of a) {
1325
+ for (const r of n) {
1325
1326
  k.push(ut(r.value)), k.push(D(r.symbol?.color));
1326
1327
  const h = String(r.value), g = t?.get(h) || r.label || h;
1327
- _.push({
1328
+ P.push({
1328
1329
  type: "line",
1329
1330
  color: D(r.symbol?.color),
1330
1331
  width: r.symbol?.width || 1,
@@ -1338,10 +1339,10 @@ function Wo(e, i, t) {
1338
1339
  };
1339
1340
  } else if (b === "circle") {
1340
1341
  const k = ["match", ["to-string", ["get", o]]];
1341
- for (const h of a) {
1342
+ for (const h of n) {
1342
1343
  k.push(ut(h.value)), k.push(D(h.symbol?.color));
1343
1344
  const w = String(h.value), f = t?.get(w) || h.label || w;
1344
- _.push({
1345
+ P.push({
1345
1346
  type: "circle",
1346
1347
  color: D(h.symbol?.color),
1347
1348
  label: f
@@ -1355,16 +1356,16 @@ function Wo(e, i, t) {
1355
1356
  "circle-opacity": he(i)
1356
1357
  }, Fe(u?.outline) && (y["circle-stroke-color"] = D(u.outline.color), y["circle-stroke-width"] = u.outline.width || 1);
1357
1358
  }
1358
- return { paint: y, legend: _, geomType: b, outlinePaint: v };
1359
+ return { paint: y, legend: P, geomType: b, outlinePaint: v };
1359
1360
  }
1360
1361
  function jo(e, i) {
1361
- const t = e.field, o = e.classBreakInfos || [], a = e.visualVariables?.find((v) => v.type === "colorInfo");
1362
- if (a?.stops && a.stops.length > 0)
1363
- return qo(a, t, e, i);
1362
+ const t = e.field, o = e.classBreakInfos || [], n = e.visualVariables?.find((v) => v.type === "colorInfo");
1363
+ if (n?.stops && n.stops.length > 0)
1364
+ return qo(n, t, e, i);
1364
1365
  if (o.length === 0)
1365
1366
  return { paint: {}, legend: [], geomType: "fill", outlinePaint: null };
1366
1367
  const l = o[0]?.symbol, u = Ye(l);
1367
- let b = {}, y = [], _ = null;
1368
+ let b = {}, y = [], P = null;
1368
1369
  if (u === "fill") {
1369
1370
  const v = ["step", ["get", t]];
1370
1371
  v.push(D(o[0]?.symbol?.color));
@@ -1381,7 +1382,7 @@ function jo(e, i) {
1381
1382
  "fill-opacity": he(i)
1382
1383
  }, Fe(l?.outline)) {
1383
1384
  const k = l.outline.width || 1, r = D(l.outline.color);
1384
- b["fill-outline-color"] = r, k > 1 && (_ = {
1385
+ b["fill-outline-color"] = r, k > 1 && (P = {
1385
1386
  "line-color": r,
1386
1387
  "line-width": k
1387
1388
  });
@@ -1406,17 +1407,17 @@ function jo(e, i) {
1406
1407
  "line-opacity": he(i)
1407
1408
  };
1408
1409
  }
1409
- return { paint: b, legend: y, geomType: u, outlinePaint: _ };
1410
+ return { paint: b, legend: y, geomType: u, outlinePaint: P };
1410
1411
  }
1411
1412
  function qo(e, i, t, o) {
1412
- const a = e.stops || [];
1413
- if (a.length === 0)
1413
+ const n = e.stops || [];
1414
+ if (n.length === 0)
1414
1415
  return { paint: {}, legend: [], geomType: "fill", outlinePaint: null };
1415
1416
  const l = t.classBreakInfos?.[0]?.symbol || t.defaultSymbol, u = Ye(l);
1416
- let b = {}, y = [], _ = null;
1417
+ let b = {}, y = [], P = null;
1417
1418
  if (u === "fill") {
1418
1419
  const v = ["interpolate", ["linear"], ["get", i]];
1419
- for (const r of a)
1420
+ for (const r of n)
1420
1421
  v.push(r.value), v.push(D(r.color)), y.push({
1421
1422
  type: "fill",
1422
1423
  color: D(r.color),
@@ -1434,37 +1435,37 @@ function qo(e, i, t, o) {
1434
1435
  "fill-opacity": he(o)
1435
1436
  }, Fe(l?.outline)) {
1436
1437
  const r = l.outline.width || 1, h = D(l.outline.color);
1437
- b["fill-outline-color"] = h, r > 1 && (_ = {
1438
+ b["fill-outline-color"] = h, r > 1 && (P = {
1438
1439
  "line-color": h,
1439
1440
  "line-width": r
1440
1441
  });
1441
1442
  }
1442
1443
  }
1443
- return { paint: b, legend: y, geomType: u, outlinePaint: _ };
1444
+ return { paint: b, legend: y, geomType: u, outlinePaint: P };
1444
1445
  }
1445
1446
  function Go(e, i, t, o) {
1446
1447
  if (!e?.renderer)
1447
1448
  return { paint: {}, legend: [], geomType: "fill", outlinePaint: null };
1448
- const a = e.renderer;
1449
- switch (a.type) {
1449
+ const n = e.renderer;
1450
+ switch (n.type) {
1450
1451
  case "simple":
1451
- return Mt(a, i);
1452
+ return Mt(n, i);
1452
1453
  case "uniqueValue":
1453
- return Wo(a, i, t);
1454
+ return Wo(n, i, t);
1454
1455
  case "classBreaks":
1455
- return jo(a, i);
1456
+ return jo(n, i);
1456
1457
  default:
1457
1458
  return { paint: {}, legend: [], geomType: "fill", outlinePaint: null };
1458
1459
  }
1459
1460
  }
1460
1461
  function Ho(e) {
1461
1462
  if (!e) return null;
1462
- const i = e.title || "", o = (e.fieldInfos || []).filter((a) => a.visible === !0).map((a) => {
1463
+ const i = e.title || "", o = (e.fieldInfos || []).filter((n) => n.visible === !0).map((n) => {
1463
1464
  const l = {
1464
- field: a.fieldName,
1465
- label: a.label || a.fieldName
1465
+ field: n.fieldName,
1466
+ label: n.label || n.fieldName
1466
1467
  };
1467
- return a.format && (l.format = {}, a.format.dateFormat && (l.format.dateFormat = a.format.dateFormat), a.format.digitSeparator !== void 0 && (l.format.digitSeparator = a.format.digitSeparator), a.format.places !== void 0 && (l.format.places = a.format.places), Object.keys(l.format).length === 0 && delete l.format), l;
1468
+ return n.format && (l.format = {}, n.format.dateFormat && (l.format.dateFormat = n.format.dateFormat), n.format.digitSeparator !== void 0 && (l.format.digitSeparator = n.format.digitSeparator), n.format.places !== void 0 && (l.format.places = n.format.places), Object.keys(l.format).length === 0 && delete l.format), l;
1468
1469
  });
1469
1470
  return {
1470
1471
  title: i,
@@ -1486,8 +1487,8 @@ function Xo(e) {
1486
1487
  return i;
1487
1488
  const t = e.split(`
1488
1489
  `), o = /^(\d{1,3})\s+(.+)$/;
1489
- for (const a of t) {
1490
- const l = a.trim().match(o);
1490
+ for (const n of t) {
1491
+ const l = n.trim().match(o);
1491
1492
  if (l) {
1492
1493
  const [, u, b] = l;
1493
1494
  u && b && i.set(u, b.trim());
@@ -1511,57 +1512,57 @@ async function Yo(e) {
1511
1512
  }
1512
1513
  async function Tt(e) {
1513
1514
  const i = e.operationalLayers || [], t = [], o = ["Zoning and Planning_Land Use"];
1514
- for (const a of i)
1515
- if (a.url && a.itemId !== "4f39b829b96d437da9231727d9c91fab")
1515
+ for (const n of i)
1516
+ if (n.url && n.itemId !== "4f39b829b96d437da9231727d9c91fab")
1516
1517
  try {
1517
- let l = a.layerDefinition?.drawingInfo, u;
1518
- const b = !l || !l.renderer, y = o.includes(a.title);
1519
- if ((b || y) && a.url) {
1520
- const T = await Yo(a.url);
1518
+ let l = n.layerDefinition?.drawingInfo, u;
1519
+ const b = !l || !l.renderer, y = o.includes(n.title);
1520
+ if ((b || y) && n.url) {
1521
+ const T = await Yo(n.url);
1521
1522
  T && (l = T.drawingInfo, T.description && (u = Xo(T.description), u.size > 0));
1522
1523
  }
1523
- const { paint: _, legend: v, geomType: k, outlinePaint: r } = Go(
1524
+ const { paint: P, legend: v, geomType: k, outlinePaint: r } = Go(
1524
1525
  l,
1525
- a.opacity,
1526
+ n.opacity,
1526
1527
  u,
1527
- a.title
1528
- ), h = Ho(a.popupInfo), w = Ko(a.layerDefinition), g = Uo(
1529
- a.layerDefinition?.minScale,
1530
- a.layerDefinition?.maxScale
1531
- ), f = Jo(a.title), c = Qo(a.title);
1532
- let S = a.opacity ?? 1;
1528
+ n.title
1529
+ ), h = Ho(n.popupInfo), w = Ko(n.layerDefinition), g = Uo(
1530
+ n.layerDefinition?.minScale,
1531
+ n.layerDefinition?.maxScale
1532
+ ), f = Jo(n.title), c = Qo(n.title);
1533
+ let S = n.opacity ?? 1;
1533
1534
  const F = {
1534
1535
  id: f,
1535
1536
  title: c,
1536
1537
  type: k,
1537
- url: a.url,
1538
+ url: n.url,
1538
1539
  opacity: S,
1539
- paint: _,
1540
+ paint: P,
1540
1541
  legend: v,
1541
1542
  popup: h
1542
1543
  };
1543
1544
  w && (F.where = w), g.minZoom !== void 0 && (F.minZoom = g.minZoom), g.maxZoom !== void 0 && (F.maxZoom = g.maxZoom), r && (F.outlinePaint = r), t.push(F);
1544
1545
  } catch {
1545
1546
  }
1546
- return t.sort((a, l) => a.title.localeCompare(l.title)), t;
1547
+ return t.sort((n, l) => n.title.localeCompare(l.title)), t;
1547
1548
  }
1548
- const xt = {}, gt = "376af635c84643cd816a8c5d017a53aa", oi = gt;
1549
+ const xt = {}, gt = "376af635c84643cd816a8c5d017a53aa", ti = gt;
1549
1550
  function ht(e, i) {
1550
1551
  let t = `https://www.arcgis.com/sharing/rest/content/items/${e}/data?f=json`;
1551
1552
  return i && (t += `&token=${i}`), t;
1552
1553
  }
1553
- function ni() {
1554
+ function oi() {
1554
1555
  return ht(gt);
1555
1556
  }
1556
1557
  const Qe = /* @__PURE__ */ new Map(), Ve = /* @__PURE__ */ new Map();
1557
- function en(e) {
1558
+ function ea(e) {
1558
1559
  e ? (Qe.delete(e), Ve.delete(e)) : (Qe.clear(), Ve.clear());
1559
1560
  }
1560
- let Ke, _t = 0;
1561
- async function tn() {
1561
+ let Ke, Pt = 0;
1562
+ async function ta() {
1562
1563
  const e = typeof import.meta < "u" && xt?.VITE_AGO_USERNAME, i = typeof import.meta < "u" && xt?.VITE_AGO_PASSWORD;
1563
1564
  if (!(!e || !i)) {
1564
- if (Ke && Date.now() < _t - 3e5)
1565
+ if (Ke && Date.now() < Pt - 3e5)
1565
1566
  return Ke;
1566
1567
  try {
1567
1568
  const o = await (await fetch("https://www.arcgis.com/sharing/rest/generateToken", {
@@ -1578,24 +1579,24 @@ async function tn() {
1578
1579
  // 2 hours
1579
1580
  })
1580
1581
  })).json();
1581
- return o.error ? void 0 : (Ke = o.token, _t = o.expires, Ke);
1582
+ return o.error ? void 0 : (Ke = o.token, Pt = o.expires, Ke);
1582
1583
  } catch {
1583
1584
  return;
1584
1585
  }
1585
1586
  }
1586
1587
  }
1587
- async function on(e, i) {
1588
+ async function oa(e, i) {
1588
1589
  const t = ht(e, i), o = await fetch(t);
1589
1590
  if (!o.ok)
1590
1591
  throw new Error(`Failed to fetch WebMap: ${o.status} ${o.statusText}`);
1591
- const a = await o.json();
1592
- if (a.error)
1593
- throw new Error(`ArcGIS error: ${a.error.message || a.error.code || "Unknown error"}`);
1594
- return a;
1592
+ const n = await o.json();
1593
+ if (n.error)
1594
+ throw new Error(`ArcGIS error: ${n.error.message || n.error.code || "Unknown error"}`);
1595
+ return n;
1595
1596
  }
1596
- async function nn(e) {
1597
+ async function aa(e) {
1597
1598
  try {
1598
- const i = await tn(), t = await on(e, i);
1599
+ const i = await ta(), t = await oa(e, i);
1599
1600
  return await Tt(t);
1600
1601
  } catch (i) {
1601
1602
  throw new Error(`Failed to load dynamic layer configs: ${i instanceof Error ? i.message : "Unknown error"}`);
@@ -1610,15 +1611,15 @@ async function yt(e = gt) {
1610
1611
  return t;
1611
1612
  const o = (async () => {
1612
1613
  try {
1613
- const a = await nn(e);
1614
- return Qe.set(e, a), a;
1614
+ const n = await aa(e);
1615
+ return Qe.set(e, n), n;
1615
1616
  } finally {
1616
1617
  Ve.delete(e);
1617
1618
  }
1618
1619
  })();
1619
1620
  return Ve.set(e, o), o;
1620
1621
  }
1621
- function an(e) {
1622
+ function ia(e) {
1622
1623
  const i = C({}), t = /* @__PURE__ */ new Map();
1623
1624
  for (const r of e)
1624
1625
  i.value[r.id] = {
@@ -1685,7 +1686,7 @@ function an(e) {
1685
1686
  };
1686
1687
  }
1687
1688
  }
1688
- async function a() {
1689
+ async function n() {
1689
1690
  await Promise.all(e.map((r) => o(r)));
1690
1691
  }
1691
1692
  async function l(r) {
@@ -1699,7 +1700,7 @@ function an(e) {
1699
1700
  function y(r) {
1700
1701
  return i.value[r]?.loading ?? !1;
1701
1702
  }
1702
- function _(r) {
1703
+ function P(r) {
1703
1704
  return i.value[r]?.error ?? null;
1704
1705
  }
1705
1706
  function v() {
@@ -1717,8 +1718,8 @@ function an(e) {
1717
1718
  t.clear();
1718
1719
  }
1719
1720
  return Je(() => {
1720
- a(), v();
1721
- }), Pt(() => {
1721
+ n(), v();
1722
+ }), _t(() => {
1722
1723
  k();
1723
1724
  }), {
1724
1725
  /** Reactive state for all data sources */
@@ -1726,7 +1727,7 @@ function an(e) {
1726
1727
  /** Whether any data source is currently loading */
1727
1728
  isLoading: b,
1728
1729
  /** Fetch all data sources */
1729
- fetchAll: a,
1730
+ fetchAll: n,
1730
1731
  /** Refetch a specific data source by id */
1731
1732
  refetch: l,
1732
1733
  /** Get data for a specific source */
@@ -1734,27 +1735,27 @@ function an(e) {
1734
1735
  /** Check if a specific source is loading */
1735
1736
  isSourceLoading: y,
1736
1737
  /** Get error for a specific source */
1737
- getError: _,
1738
+ getError: P,
1738
1739
  /** Stop all polling (useful for cleanup) */
1739
1740
  stopPolling: k
1740
1741
  };
1741
1742
  }
1742
- const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
1743
+ const na = { class: "layerboard-layout" }, la = ["aria-expanded"], ra = {
1743
1744
  key: 0,
1744
1745
  class: "layerboard-subtitle"
1745
- }, cn = { class: "layerboard-mobile-menu-content" }, un = { class: "layerboard-main" }, dn = {
1746
+ }, sa = { class: "layerboard-mobile-menu-content" }, ca = { class: "layerboard-main" }, ua = {
1746
1747
  key: 0,
1747
1748
  class: "layerboard-loading",
1748
1749
  role: "status",
1749
1750
  "aria-live": "polite"
1750
- }, fn = {
1751
+ }, da = {
1751
1752
  key: 1,
1752
1753
  class: "layerboard-error",
1753
1754
  role: "alert"
1754
- }, pn = ["aria-expanded", "aria-label"], yn = { key: 0 }, gn = { key: 1 }, hn = {
1755
+ }, fa = ["aria-expanded", "aria-label"], pa = { key: 0 }, ya = { key: 1 }, ga = {
1755
1756
  class: "sr-only",
1756
1757
  "aria-live": "polite"
1757
- }, mn = /* @__PURE__ */ Se({
1758
+ }, ha = /* @__PURE__ */ Se({
1758
1759
  __name: "Layerboard",
1759
1760
  props: {
1760
1761
  title: {},
@@ -1783,7 +1784,7 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
1783
1784
  },
1784
1785
  emits: ["configs-loaded", "load-error", "zoom"],
1785
1786
  setup(e, { expose: i, emit: t }) {
1786
- const o = e, a = t, l = C([]), u = C(!0), b = C(null), y = C(12), _ = C(""), v = C(/* @__PURE__ */ new Set()), k = C({}), r = C(/* @__PURE__ */ new Set()), h = C({}), w = C({}), g = C(/* @__PURE__ */ new Set()), f = C({});
1787
+ const o = e, n = t, l = C([]), u = C(!0), b = C(null), y = C(12), P = C(""), v = C(/* @__PURE__ */ new Set()), k = C({}), r = C(/* @__PURE__ */ new Set()), h = C({}), w = C({}), g = C(/* @__PURE__ */ new Set()), f = C({});
1787
1788
  function c() {
1788
1789
  const L = {};
1789
1790
  for (const $ of o.tiledLayers)
@@ -1799,14 +1800,14 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
1799
1800
  function T(L, $) {
1800
1801
  f.value = { ...f.value, [L]: $ };
1801
1802
  }
1802
- const A = o.dataSources.length > 0 ? an(o.dataSources) : null, q = I(() => A?.state.value ?? {}), fe = I(() => A?.isLoading.value ?? !1);
1803
- function _e(L) {
1803
+ const A = o.dataSources.length > 0 ? ia(o.dataSources) : null, q = I(() => A?.state.value ?? {}), fe = I(() => A?.isLoading.value ?? !1);
1804
+ function Pe(L) {
1804
1805
  return A?.getData(L) ?? null;
1805
1806
  }
1806
- function Pe(L) {
1807
+ function _e(L) {
1807
1808
  return A?.refetch(L) ?? Promise.resolve();
1808
1809
  }
1809
- W("layerboard-layers", j(l)), W("layerboard-visible", v), W("layerboard-opacities", k), W("layerboard-loading", j(r)), W("layerboard-errors", j(h)), W("layerboard-zoom", j(y)), W("layerboard-toggle-layer", Ee), W("layerboard-set-layer-visible", ve), W("layerboard-set-layers-visible", Me), W("layerboard-set-opacity", be), W("layerboard-tiled-layers", j(I(() => o.tiledLayers))), W("layerboard-visible-tiled", g), W("layerboard-tiled-opacities", f), W("layerboard-toggle-tiled", S), W("layerboard-set-tiled-opacity", T), W("layerboard-set-tiled-visible", F), W("layerboard-data-sources-state", q), W("layerboard-data-sources-loading", fe), W("layerboard-get-data-source", _e), W("layerboard-refetch-data-source", Pe);
1810
+ W("layerboard-layers", j(l)), W("layerboard-visible", v), W("layerboard-opacities", k), W("layerboard-loading", j(r)), W("layerboard-errors", j(h)), W("layerboard-zoom", j(y)), W("layerboard-toggle-layer", Ee), W("layerboard-set-layer-visible", ve), W("layerboard-set-layers-visible", Me), W("layerboard-set-opacity", be), W("layerboard-tiled-layers", j(I(() => o.tiledLayers))), W("layerboard-visible-tiled", g), W("layerboard-tiled-opacities", f), W("layerboard-toggle-tiled", S), W("layerboard-set-tiled-opacity", T), W("layerboard-set-tiled-visible", F), W("layerboard-data-sources-state", q), W("layerboard-data-sources-loading", fe), W("layerboard-get-data-source", Pe), W("layerboard-refetch-data-source", _e);
1810
1811
  const et = I(() => ({
1811
1812
  backgroundColor: o.themeColor
1812
1813
  })), tt = I(() => ({
@@ -1836,10 +1837,10 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
1836
1837
  const K = {};
1837
1838
  $.forEach((B) => {
1838
1839
  K[B.id] = B.opacity ?? 1;
1839
- }), k.value = K, a("configs-loaded", $);
1840
+ }), k.value = K, n("configs-loaded", $);
1840
1841
  } catch (L) {
1841
1842
  const $ = L instanceof Error ? L.message : "Failed to load layer configurations";
1842
- b.value = $, a("load-error", $);
1843
+ b.value = $, n("load-error", $);
1843
1844
  } finally {
1844
1845
  u.value = !1;
1845
1846
  }
@@ -1858,15 +1859,15 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
1858
1859
  const K = await $.json(), B = {};
1859
1860
  for (const te of K.rows || [])
1860
1861
  if (te.url_text && te.representation) {
1861
- const rt = We(te.url_text), n = `https://metadata.phila.gov/#home/representationdetails/${te.representation}/`;
1862
- B[rt] = n;
1862
+ const rt = We(te.url_text), a = `https://metadata.phila.gov/#home/representationdetails/${te.representation}/`;
1863
+ B[rt] = a;
1863
1864
  }
1864
1865
  w.value = B;
1865
1866
  } catch {
1866
1867
  }
1867
1868
  }
1868
- function nt(L) {
1869
- y.value = L, a("zoom", L);
1869
+ function at(L) {
1870
+ y.value = L, n("zoom", L);
1870
1871
  }
1871
1872
  function Ee(L) {
1872
1873
  v.value.has(L) ? v.value.delete(L) : v.value.add(L), v.value = new Set(v.value);
@@ -1894,12 +1895,12 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
1894
1895
  }
1895
1896
  }
1896
1897
  function we(L) {
1897
- _.value = L;
1898
+ P.value = L;
1898
1899
  }
1899
- const ae = C(null), ke = C(null), at = C(null), Ce = C(null), De = C(null), Ze = C(null), je = C(null), le = C("map");
1900
+ const ne = C(null), ke = C(null), nt = C(null), Ce = C(null), De = C(null), Ze = C(null), je = C(null), le = C("map");
1900
1901
  function $e() {
1901
1902
  le.value = le.value === "sidebar" ? "map" : "sidebar", Ae(() => {
1902
- le.value === "sidebar" && ae.value?.focus();
1903
+ le.value === "sidebar" && ne.value?.focus();
1903
1904
  });
1904
1905
  }
1905
1906
  const se = C(!1);
@@ -1983,7 +1984,7 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
1983
1984
  /** Reload layer configurations */
1984
1985
  reloadConfigs: Re,
1985
1986
  /** Clear configuration cache */
1986
- clearCache: () => en(o.webMapId),
1987
+ clearCache: () => ea(o.webMapId),
1987
1988
  // Tiled layer APIs
1988
1989
  /** Set of visible tiled layer IDs */
1989
1990
  visibleTiledLayers: g,
@@ -2001,9 +2002,9 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2001
2002
  /** Whether any data source is loading */
2002
2003
  dataSourcesLoading: fe,
2003
2004
  /** Get data from a specific data source */
2004
- getDataSourceData: _e,
2005
+ getDataSourceData: Pe,
2005
2006
  /** Refetch a specific data source */
2006
- refetchDataSource: Pe,
2007
+ refetchDataSource: _e,
2007
2008
  // Modal APIs
2008
2009
  /** Whether the modal is currently open */
2009
2010
  isModalOpen: pe,
@@ -2019,7 +2020,7 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2019
2020
  Re(), ot(), c(), document.addEventListener("keydown", Be);
2020
2021
  }), Rt(() => {
2021
2022
  document.removeEventListener("keydown", Be);
2022
- }), (L, $) => (d(), m("div", ln, [
2023
+ }), (L, $) => (d(), m("div", na, [
2023
2024
  $[5] || ($[5] = x("a", {
2024
2025
  href: "#main-content",
2025
2026
  class: "skip-to-main-content-link"
@@ -2054,20 +2055,23 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2054
2055
  size: "medium",
2055
2056
  decorative: ""
2056
2057
  }, null, 8, ["icon-definition"])
2057
- ], 8, rn),
2058
+ ], 8, la),
2058
2059
  ce(L.$slots, "header", {}, () => [
2059
2060
  x("h1", null, V(e.title), 1),
2060
- e.subtitle ? (d(), m("span", sn, V(e.subtitle), 1)) : z("", !0)
2061
+ e.subtitle ? (d(), m("span", ra, V(e.subtitle), 1)) : z("", !0)
2061
2062
  ], !0),
2062
2063
  se.value ? (d(), m("div", {
2063
2064
  key: 0,
2064
2065
  ref_key: "mobileMenuRef",
2065
2066
  ref: De,
2066
2067
  class: "layerboard-mobile-menu",
2068
+ role: "dialog",
2069
+ "aria-modal": "true",
2070
+ "aria-label": "Site menu",
2067
2071
  style: H({ backgroundColor: e.themeColor }),
2068
2072
  onKeydown: de
2069
2073
  }, [
2070
- x("div", cn, [
2074
+ x("div", sa, [
2071
2075
  ce(L.$slots, "footer", {
2072
2076
  openModal: ye,
2073
2077
  closeModal: ue,
@@ -2096,14 +2100,14 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2096
2100
  onClick: xe
2097
2101
  })) : z("", !0)
2098
2102
  ], 4),
2099
- x("div", un, [
2100
- u.value ? (d(), m("div", dn, [
2103
+ x("div", ca, [
2104
+ u.value ? (d(), m("div", ua, [
2101
2105
  x("div", {
2102
2106
  class: "layerboard-spinner",
2103
2107
  style: H({ borderTopColor: e.themeColor })
2104
2108
  }, null, 4),
2105
2109
  x("p", null, "Loading " + V(e.title) + "...", 1)
2106
- ])) : b.value ? (d(), m("div", fn, [
2110
+ ])) : b.value ? (d(), m("div", da, [
2107
2111
  $[3] || ($[3] = x("h2", null, "Error Loading Layers", -1)),
2108
2112
  x("p", null, V(b.value), 1),
2109
2113
  x("button", {
@@ -2114,9 +2118,9 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2114
2118
  ])) : (d(), m(oe, { key: 2 }, [
2115
2119
  x("aside", {
2116
2120
  ref_key: "sidebarRef",
2117
- ref: ae,
2121
+ ref: ne,
2118
2122
  id: "main-content",
2119
- class: ne(["layerboard-sidebar", { "is-active": le.value === "sidebar" }]),
2123
+ class: ae(["layerboard-sidebar", { "is-active": le.value === "sidebar" }]),
2120
2124
  style: H(Ue.value),
2121
2125
  "aria-label": "Map layers",
2122
2126
  tabindex: "-1"
@@ -2140,8 +2144,8 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2140
2144
  setTiledLayerOpacity: T,
2141
2145
  dataSourcesState: q.value,
2142
2146
  dataSourcesLoading: fe.value,
2143
- getDataSource: _e,
2144
- refetchDataSource: Pe
2147
+ getDataSource: Pe,
2148
+ refetchDataSource: _e
2145
2149
  }, () => [
2146
2150
  e.showDefaultSidebar ? (d(), ee(No, {
2147
2151
  key: 0,
@@ -2151,7 +2155,7 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2151
2155
  "loading-layers": r.value,
2152
2156
  "layer-errors": h.value,
2153
2157
  "current-zoom": y.value,
2154
- "search-query": _.value,
2158
+ "search-query": P.value,
2155
2159
  "layer-metadata": w.value,
2156
2160
  onToggleLayer: Ee,
2157
2161
  onSetOpacity: be,
@@ -2162,7 +2166,7 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2162
2166
  x("div", {
2163
2167
  role: "main",
2164
2168
  "aria-label": "Map",
2165
- class: ne(["layerboard-map", { "is-active": le.value === "map" }])
2169
+ class: ae(["layerboard-map", { "is-active": le.value === "map" }])
2166
2170
  }, [
2167
2171
  Q(oo, {
2168
2172
  "visible-layers": v.value,
@@ -2182,13 +2186,13 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2182
2186
  "pictometry-button-position": e.pictometryButtonPosition,
2183
2187
  "initial-zoom": e.initialZoom,
2184
2188
  "initial-center": e.initialCenter,
2185
- onZoom: nt,
2189
+ onZoom: at,
2186
2190
  onLayerLoading: it,
2187
2191
  onLayerError: ie
2188
2192
  }, 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"])
2189
2193
  ], 2),
2190
2194
  x("button", {
2191
- class: ne(["layerboard-sidebar-toggle", { "is-collapsed": X.value }]),
2195
+ class: ae(["layerboard-sidebar-toggle", { "is-collapsed": X.value }]),
2192
2196
  style: H({ left: X.value ? "0" : o.sidebarWidth }),
2193
2197
  onClick: Ge,
2194
2198
  "aria-expanded": !X.value,
@@ -2199,17 +2203,17 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2199
2203
  size: "medium",
2200
2204
  decorative: ""
2201
2205
  }, null, 8, ["icon-definition"])
2202
- ], 14, pn)
2206
+ ], 14, fa)
2203
2207
  ], 64))
2204
2208
  ]),
2205
2209
  x("button", {
2206
2210
  ref_key: "mobileToggleRef",
2207
- ref: at,
2211
+ ref: nt,
2208
2212
  class: "layerboard-mobile-toggle",
2209
2213
  style: H(Ie.value),
2210
2214
  onClick: $e
2211
2215
  }, [
2212
- le.value === "map" ? (d(), m("span", yn, V(e.sidebarLabel), 1)) : (d(), m("span", gn, V(e.mapLabel), 1))
2216
+ le.value === "map" ? (d(), m("span", pa, V(e.sidebarLabel), 1)) : (d(), m("span", ya, V(e.mapLabel), 1))
2213
2217
  ], 4),
2214
2218
  x("footer", {
2215
2219
  class: "layerboard-footer",
@@ -2253,13 +2257,13 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2253
2257
  ce(L.$slots, "modal", { closeModal: ue }, void 0, !0)
2254
2258
  ], 512)
2255
2259
  ], 32)) : z("", !0),
2256
- x("span", hn, V(le.value === "sidebar" ? "Showing layers panel" : "Showing map"), 1)
2260
+ x("span", ga, V(le.value === "sidebar" ? "Showing layers panel" : "Showing map"), 1)
2257
2261
  ]));
2258
2262
  }
2259
- }), ii = /* @__PURE__ */ Oe(mn, [["__scopeId", "data-v-0348ae97"]]), vn = ["aria-expanded"], bn = {
2263
+ }), ai = /* @__PURE__ */ Oe(ha, [["__scopeId", "data-v-d1e907be"]]), ma = ["aria-expanded"], va = {
2260
2264
  key: 0,
2261
2265
  class: "topic-icon"
2262
- }, wn = { class: "topic-title" }, Ln = /* @__PURE__ */ Se({
2266
+ }, ba = { class: "topic-title" }, wa = /* @__PURE__ */ Se({
2263
2267
  __name: "TopicAccordion",
2264
2268
  props: {
2265
2269
  title: {},
@@ -2270,30 +2274,30 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2270
2274
  },
2271
2275
  emits: ["toggle", "layerChange"],
2272
2276
  setup(e, { emit: i }) {
2273
- const t = e, o = i, a = C(t.expanded), l = `topic-panel-${bt()}`, u = `topic-header-${bt()}`;
2277
+ const t = e, o = i, n = C(t.expanded), l = `topic-panel-${bt()}`, u = `topic-header-${bt()}`;
2274
2278
  Te(
2275
2279
  () => t.expanded,
2276
2280
  (y) => {
2277
- a.value = y;
2281
+ n.value = y;
2278
2282
  }
2279
2283
  );
2280
2284
  function b() {
2281
- a.value = !a.value, o("toggle", a.value);
2285
+ n.value = !n.value, o("toggle", n.value);
2282
2286
  }
2283
- return (y, _) => {
2287
+ return (y, P) => {
2284
2288
  const v = Dt("font-awesome-icon");
2285
2289
  return d(), m("div", {
2286
- class: ne(["topic-accordion", { "is-expanded": a.value }])
2290
+ class: ae(["topic-accordion", { "is-expanded": n.value }])
2287
2291
  }, [
2288
2292
  x("button", {
2289
2293
  id: u,
2290
- class: ne(["topic-header", e.headerClass]),
2294
+ class: ae(["topic-header", e.headerClass]),
2291
2295
  type: "button",
2292
- "aria-expanded": a.value,
2296
+ "aria-expanded": n.value,
2293
2297
  "aria-controls": l,
2294
2298
  onClick: b
2295
2299
  }, [
2296
- e.icon || y.$slots.icon ? (d(), m("span", bn, [
2300
+ e.icon || y.$slots.icon ? (d(), m("span", va, [
2297
2301
  ce(y.$slots, "icon", {}, () => [
2298
2302
  e.icon ? (d(), ee(v, {
2299
2303
  key: 0,
@@ -2302,10 +2306,10 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2302
2306
  }, null, 8, ["icon"])) : z("", !0)
2303
2307
  ], !0)
2304
2308
  ])) : z("", !0),
2305
- x("span", wn, V(e.title), 1),
2309
+ x("span", ba, V(e.title), 1),
2306
2310
  x("span", {
2307
- class: ne(["topic-chevron", { "is-rotated": a.value }])
2308
- }, [..._[0] || (_[0] = [
2311
+ class: ae(["topic-chevron", { "is-rotated": n.value }])
2312
+ }, [...P[0] || (P[0] = [
2309
2313
  x("svg", {
2310
2314
  xmlns: "http://www.w3.org/2000/svg",
2311
2315
  width: "20",
@@ -2321,7 +2325,7 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2321
2325
  x("polyline", { points: "6 9 12 15 18 9" })
2322
2326
  ], -1)
2323
2327
  ])], 2)
2324
- ], 10, vn),
2328
+ ], 10, ma),
2325
2329
  Et(x("div", {
2326
2330
  id: l,
2327
2331
  role: "region",
@@ -2329,41 +2333,35 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2329
2333
  class: "topic-content"
2330
2334
  }, [
2331
2335
  ce(y.$slots, "default", {}, () => [
2332
- _[1] || (_[1] = x("p", { class: "topic-empty" }, "No content provided for this topic.", -1))
2336
+ P[1] || (P[1] = x("p", { class: "topic-empty" }, "No content provided for this topic.", -1))
2333
2337
  ], !0)
2334
2338
  ], 512), [
2335
- [Zt, a.value]
2339
+ [Zt, n.value]
2336
2340
  ])
2337
2341
  ], 2);
2338
2342
  };
2339
2343
  }
2340
- }), ai = /* @__PURE__ */ Oe(Ln, [["__scopeId", "data-v-7339d8d1"]]), Sn = {
2341
- class: "layer-checkbox-set",
2342
- role: "group"
2343
- }, kn = ["checked", "disabled", "onChange"], Cn = { class: "layer-title" }, $n = {
2344
+ }), ii = /* @__PURE__ */ Oe(wa, [["__scopeId", "data-v-13853397"]]), La = ["aria-label"], Sa = ["checked", "disabled", "onChange"], ka = { class: "layer-title" }, Ca = {
2344
2345
  key: 0,
2345
2346
  class: "loading-indicator",
2346
2347
  role: "status"
2347
- }, xn = ["aria-label"], _n = {
2348
+ }, $a = ["aria-label"], xa = {
2348
2349
  key: 2,
2349
2350
  class: "zoom-indicator"
2350
- }, Pn = { class: "layer-title" }, En = {
2351
+ }, Pa = { class: "layer-title" }, _a = {
2351
2352
  key: 0,
2352
2353
  class: "loading-indicator",
2353
2354
  role: "status"
2354
- }, Mn = ["aria-label"], Tn = {
2355
+ }, Ea = ["aria-label"], Ma = {
2355
2356
  key: 2,
2356
2357
  class: "zoom-indicator"
2357
- }, zn = {
2358
+ }, Ta = {
2358
2359
  key: 2,
2359
2360
  class: "opacity-control"
2360
- }, Fn = ["for"], On = ["id", "value", "aria-label", "onInput"], In = {
2361
- key: 3,
2362
- class: "layer-legend"
2363
- }, Rn = { class: "legend-label" }, Dn = {
2361
+ }, za = ["for"], Fa = ["id", "value", "aria-label", "onInput"], Oa = ["aria-label"], Ia = { class: "legend-label" }, Ra = {
2364
2362
  key: 0,
2365
2363
  class: "empty-state"
2366
- }, Zn = /* @__PURE__ */ Se({
2364
+ }, Da = /* @__PURE__ */ Se({
2367
2365
  __name: "LayerCheckboxSet",
2368
2366
  props: {
2369
2367
  layers: {},
@@ -2373,12 +2371,13 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2373
2371
  layerErrors: { default: () => ({}) },
2374
2372
  currentZoom: { default: 12 },
2375
2373
  showOpacity: { type: Boolean, default: !0 },
2376
- showLegend: { type: Boolean, default: !0 }
2374
+ showLegend: { type: Boolean, default: !0 },
2375
+ groupLabel: {}
2377
2376
  },
2378
2377
  emits: ["toggleLayer", "setOpacity"],
2379
2378
  setup(e, { emit: i }) {
2380
2379
  const t = e, o = i;
2381
- function a(g) {
2380
+ function n(g) {
2382
2381
  return t.visibleLayerIds.has(g);
2383
2382
  }
2384
2383
  function l(g) {
@@ -2394,7 +2393,7 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2394
2393
  const f = t.currentZoom, c = g.minZoom, S = g.maxZoom;
2395
2394
  return !(c !== void 0 && f < c || S !== void 0 && f > S);
2396
2395
  }
2397
- function _(g) {
2396
+ function P(g) {
2398
2397
  return g.displayOptions?.shouldShowCheckbox !== !1;
2399
2398
  }
2400
2399
  function v(g) {
@@ -2413,59 +2412,63 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2413
2412
  const c = f.target;
2414
2413
  o("setOpacity", g, parseFloat(c.value));
2415
2414
  }
2416
- return (g, f) => (d(), m("fieldset", Sn, [
2415
+ return (g, f) => (d(), m("fieldset", {
2416
+ class: "layer-checkbox-set",
2417
+ role: "group",
2418
+ "aria-label": e.groupLabel
2419
+ }, [
2417
2420
  (d(!0), m(oe, null, re(e.layers, (c) => (d(), m("div", {
2418
2421
  key: c.id,
2419
2422
  class: "layer-item"
2420
2423
  }, [
2421
- _(c) ? (d(), m("label", {
2424
+ P(c) ? (d(), m("label", {
2422
2425
  key: 0,
2423
- class: ne(["layer-checkbox", {
2426
+ class: ae(["layer-checkbox", {
2424
2427
  "layer-unavailable": !y(c),
2425
2428
  "layer-error": b(c.id)
2426
2429
  }])
2427
2430
  }, [
2428
2431
  x("input", {
2429
2432
  type: "checkbox",
2430
- checked: a(c.id),
2433
+ checked: n(c.id),
2431
2434
  disabled: !y(c),
2432
2435
  onChange: (S) => h(c.id)
2433
- }, null, 40, kn),
2434
- x("span", Cn, [
2436
+ }, null, 40, Sa),
2437
+ x("span", ka, [
2435
2438
  me(V(r(c)) + " ", 1),
2436
- u(c.id) ? (d(), m("span", $n, " Loading... ")) : z("", !0),
2439
+ u(c.id) ? (d(), m("span", Ca, " Loading... ")) : z("", !0),
2437
2440
  b(c.id) ? (d(), m("span", {
2438
2441
  key: 1,
2439
2442
  class: "error-indicator",
2440
2443
  "aria-label": b(c.id) || "Error",
2441
2444
  role: "status"
2442
- }, " Error ", 8, xn)) : z("", !0),
2443
- y(c) ? z("", !0) : (d(), m("span", _n, " (zoom in) "))
2445
+ }, " Error ", 8, $a)) : z("", !0),
2446
+ y(c) ? z("", !0) : (d(), m("span", xa, " (zoom in) "))
2444
2447
  ])
2445
2448
  ], 2)) : (d(), m("div", {
2446
2449
  key: 1,
2447
- class: ne(["layer-label-only", {
2450
+ class: ae(["layer-label-only", {
2448
2451
  "layer-unavailable": !y(c),
2449
2452
  "layer-error": b(c.id)
2450
2453
  }])
2451
2454
  }, [
2452
- x("span", Pn, [
2455
+ x("span", Pa, [
2453
2456
  me(V(r(c)) + " ", 1),
2454
- u(c.id) ? (d(), m("span", En, " Loading... ")) : z("", !0),
2457
+ u(c.id) ? (d(), m("span", _a, " Loading... ")) : z("", !0),
2455
2458
  b(c.id) ? (d(), m("span", {
2456
2459
  key: 1,
2457
2460
  class: "error-indicator",
2458
2461
  "aria-label": b(c.id) || "Error",
2459
2462
  role: "status"
2460
- }, " Error ", 8, Mn)) : z("", !0),
2461
- y(c) ? z("", !0) : (d(), m("span", Tn, " (zoom in) "))
2463
+ }, " Error ", 8, Ea)) : z("", !0),
2464
+ y(c) ? z("", !0) : (d(), m("span", Ma, " (zoom in) "))
2462
2465
  ])
2463
2466
  ], 2)),
2464
- v(c) && a(c.id) ? (d(), m("div", zn, [
2467
+ v(c) && n(c.id) ? (d(), m("div", Ta, [
2465
2468
  x("label", {
2466
2469
  class: "opacity-label",
2467
2470
  for: "opacity-" + c.id
2468
- }, " Opacity: " + V(Math.round(l(c.id) * 100)) + "% ", 9, Fn),
2471
+ }, " Opacity: " + V(Math.round(l(c.id) * 100)) + "% ", 9, za),
2469
2472
  x("input", {
2470
2473
  id: "opacity-" + c.id,
2471
2474
  type: "range",
@@ -2476,9 +2479,13 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2476
2479
  "aria-label": "Opacity for " + r(c),
2477
2480
  class: "opacity-slider",
2478
2481
  onInput: (S) => w(c.id, S)
2479
- }, null, 40, On)
2482
+ }, null, 40, Fa)
2480
2483
  ])) : z("", !0),
2481
- k(c) && a(c.id) && c.legend?.length ? (d(), m("ul", In, [
2484
+ k(c) && n(c.id) && c.legend?.length ? (d(), m("ul", {
2485
+ key: 3,
2486
+ class: "layer-legend",
2487
+ "aria-label": "Legend for " + r(c)
2488
+ }, [
2482
2489
  (d(!0), m(oe, null, re(c.legend, (S, F) => (d(), m("li", {
2483
2490
  key: F,
2484
2491
  class: "legend-item"
@@ -2502,33 +2509,27 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2502
2509
  style: H({ backgroundColor: S.color }),
2503
2510
  "aria-hidden": "true"
2504
2511
  }, null, 4)) : z("", !0),
2505
- x("span", Rn, V(S.label), 1)
2512
+ x("span", Ia, V(S.label), 1)
2506
2513
  ]))), 128))
2507
- ])) : z("", !0)
2514
+ ], 8, Oa)) : z("", !0)
2508
2515
  ]))), 128)),
2509
- e.layers.length === 0 ? (d(), m("div", Dn, " No layers available ")) : z("", !0)
2510
- ]));
2516
+ e.layers.length === 0 ? (d(), m("div", Ra, " No layers available ")) : z("", !0)
2517
+ ], 8, La));
2511
2518
  }
2512
- }), li = /* @__PURE__ */ Oe(Zn, [["__scopeId", "data-v-d069e7e9"]]), Bn = {
2513
- class: "layer-radio-set",
2514
- role: "radiogroup"
2515
- }, An = ["name", "checked", "disabled", "onChange"], Nn = { class: "layer-title" }, Vn = {
2519
+ }), ni = /* @__PURE__ */ Oe(Da, [["__scopeId", "data-v-a20fd1c9"]]), Za = ["aria-label"], Ba = ["name", "checked", "disabled", "onChange"], Aa = { class: "layer-title" }, Na = {
2516
2520
  key: 0,
2517
2521
  class: "loading-indicator",
2518
2522
  role: "status"
2519
- }, Un = ["aria-label"], Wn = {
2523
+ }, Va = ["aria-label"], Ua = {
2520
2524
  key: 2,
2521
2525
  class: "zoom-indicator"
2522
- }, jn = {
2526
+ }, Wa = {
2523
2527
  key: 0,
2524
2528
  class: "opacity-control"
2525
- }, qn = ["for"], Gn = ["id", "value", "aria-label", "onInput"], Hn = {
2526
- key: 1,
2527
- class: "layer-legend"
2528
- }, Kn = { class: "legend-label" }, Jn = {
2529
+ }, ja = ["for"], qa = ["id", "value", "aria-label", "onInput"], Ga = ["aria-label"], Ha = { class: "legend-label" }, Ka = {
2529
2530
  key: 0,
2530
2531
  class: "empty-state"
2531
- }, Qn = /* @__PURE__ */ Se({
2532
+ }, Ja = /* @__PURE__ */ Se({
2532
2533
  __name: "LayerRadioButtonSet",
2533
2534
  props: {
2534
2535
  layers: {},
@@ -2539,12 +2540,13 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2539
2540
  currentZoom: { default: 12 },
2540
2541
  showOpacity: { type: Boolean, default: !0 },
2541
2542
  showLegend: { type: Boolean, default: !0 },
2542
- groupName: { default: "layer-radio-group" }
2543
+ groupName: { default: "layer-radio-group" },
2544
+ groupLabel: {}
2543
2545
  },
2544
2546
  emits: ["selectLayer", "setOpacity"],
2545
2547
  setup(e, { emit: i }) {
2546
2548
  const t = e, o = i;
2547
- function a(w) {
2549
+ function n(w) {
2548
2550
  return t.visibleLayerIds.has(w);
2549
2551
  }
2550
2552
  function l(w) {
@@ -2560,7 +2562,7 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2560
2562
  const g = t.currentZoom, f = w.minZoom, c = w.maxZoom;
2561
2563
  return !(f !== void 0 && g < f || c !== void 0 && g > c);
2562
2564
  }
2563
- function _(w) {
2565
+ function P(w) {
2564
2566
  return t.showOpacity ? w.displayOptions?.shouldShowSlider !== !1 : !1;
2565
2567
  }
2566
2568
  function v(w) {
@@ -2577,13 +2579,17 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2577
2579
  const f = g.target;
2578
2580
  o("setOpacity", w, parseFloat(f.value));
2579
2581
  }
2580
- return (w, g) => (d(), m("div", Bn, [
2582
+ return (w, g) => (d(), m("div", {
2583
+ class: "layer-radio-set",
2584
+ role: "radiogroup",
2585
+ "aria-label": e.groupLabel
2586
+ }, [
2581
2587
  (d(!0), m(oe, null, re(e.layers, (f) => (d(), m("div", {
2582
2588
  key: f.id,
2583
2589
  class: "layer-item"
2584
2590
  }, [
2585
2591
  x("label", {
2586
- class: ne(["layer-radio", {
2592
+ class: ae(["layer-radio", {
2587
2593
  "layer-unavailable": !y(f),
2588
2594
  "layer-error": b(f.id)
2589
2595
  }])
@@ -2591,27 +2597,27 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2591
2597
  x("input", {
2592
2598
  type: "radio",
2593
2599
  name: e.groupName,
2594
- checked: a(f.id),
2600
+ checked: n(f.id),
2595
2601
  disabled: !y(f),
2596
2602
  onChange: (c) => r(f.id)
2597
- }, null, 40, An),
2598
- x("span", Nn, [
2603
+ }, null, 40, Ba),
2604
+ x("span", Aa, [
2599
2605
  me(V(k(f)) + " ", 1),
2600
- u(f.id) ? (d(), m("span", Vn, " Loading... ")) : z("", !0),
2606
+ u(f.id) ? (d(), m("span", Na, " Loading... ")) : z("", !0),
2601
2607
  b(f.id) ? (d(), m("span", {
2602
2608
  key: 1,
2603
2609
  class: "error-indicator",
2604
2610
  "aria-label": b(f.id) || "Error",
2605
2611
  role: "status"
2606
- }, " Error ", 8, Un)) : z("", !0),
2607
- y(f) ? z("", !0) : (d(), m("span", Wn, " (zoom in) "))
2612
+ }, " Error ", 8, Va)) : z("", !0),
2613
+ y(f) ? z("", !0) : (d(), m("span", Ua, " (zoom in) "))
2608
2614
  ])
2609
2615
  ], 2),
2610
- _(f) && a(f.id) ? (d(), m("div", jn, [
2616
+ P(f) && n(f.id) ? (d(), m("div", Wa, [
2611
2617
  x("label", {
2612
2618
  class: "opacity-label",
2613
2619
  for: "opacity-" + f.id
2614
- }, " Opacity: " + V(Math.round(l(f.id) * 100)) + "% ", 9, qn),
2620
+ }, " Opacity: " + V(Math.round(l(f.id) * 100)) + "% ", 9, ja),
2615
2621
  x("input", {
2616
2622
  id: "opacity-" + f.id,
2617
2623
  type: "range",
@@ -2622,9 +2628,13 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2622
2628
  "aria-label": "Opacity for " + k(f),
2623
2629
  class: "opacity-slider",
2624
2630
  onInput: (c) => h(f.id, c)
2625
- }, null, 40, Gn)
2631
+ }, null, 40, qa)
2626
2632
  ])) : z("", !0),
2627
- v(f) && a(f.id) && f.legend?.length ? (d(), m("ul", Hn, [
2633
+ v(f) && n(f.id) && f.legend?.length ? (d(), m("ul", {
2634
+ key: 1,
2635
+ class: "layer-legend",
2636
+ "aria-label": "Legend for " + k(f)
2637
+ }, [
2628
2638
  (d(!0), m(oe, null, re(f.legend, (c, S) => (d(), m("li", {
2629
2639
  key: S,
2630
2640
  class: "legend-item"
@@ -2648,16 +2658,16 @@ const ln = { class: "layerboard-layout" }, rn = ["aria-expanded"], sn = {
2648
2658
  style: H({ backgroundColor: c.color }),
2649
2659
  "aria-hidden": "true"
2650
2660
  }, null, 4)) : z("", !0),
2651
- x("span", Kn, V(c.label), 1)
2661
+ x("span", Ha, V(c.label), 1)
2652
2662
  ]))), 128))
2653
- ])) : z("", !0)
2663
+ ], 8, Ga)) : z("", !0)
2654
2664
  ]))), 128)),
2655
- e.layers.length === 0 ? (d(), m("div", Jn, " No layers available ")) : z("", !0)
2656
- ]));
2665
+ e.layers.length === 0 ? (d(), m("div", Ka, " No layers available ")) : z("", !0)
2666
+ ], 8, Za));
2657
2667
  }
2658
- }), ri = /* @__PURE__ */ Oe(Qn, [["__scopeId", "data-v-1a127b6c"]]);
2659
- function si(e) {
2660
- const i = C([]), t = C(/* @__PURE__ */ new Set()), o = C({}), a = C(/* @__PURE__ */ new Set()), l = C({}), u = C(""), b = C(!1), y = C(!1), _ = C(null), v = I(() => {
2668
+ }), li = /* @__PURE__ */ Oe(Ja, [["__scopeId", "data-v-ed130a35"]]);
2669
+ function ri(e) {
2670
+ const i = C([]), t = C(/* @__PURE__ */ new Set()), o = C({}), n = C(/* @__PURE__ */ new Set()), l = C({}), u = C(""), b = C(!1), y = C(!1), P = C(null), v = I(() => {
2661
2671
  if (!u.value.trim())
2662
2672
  return i.value;
2663
2673
  const T = u.value.toLowerCase();
@@ -2671,7 +2681,7 @@ function si(e) {
2671
2681
  })));
2672
2682
  async function r() {
2673
2683
  if (!y.value) {
2674
- b.value = !0, _.value = null;
2684
+ b.value = !0, P.value = null;
2675
2685
  try {
2676
2686
  let T;
2677
2687
  e.mode === "dynamic" || !e.mode ? e.webMapId ? T = await h(e.webMapId) : T = await yt() : T = await yt(), i.value = T;
@@ -2680,7 +2690,7 @@ function si(e) {
2680
2690
  A[q.id] = q.opacity ?? 1;
2681
2691
  }), o.value = A, y.value = !0;
2682
2692
  } catch (T) {
2683
- _.value = T instanceof Error ? T : new Error("Failed to initialize layerboard");
2693
+ P.value = T instanceof Error ? T : new Error("Failed to initialize layerboard");
2684
2694
  } finally {
2685
2695
  b.value = !1;
2686
2696
  }
@@ -2707,8 +2717,8 @@ function si(e) {
2707
2717
  u.value = T;
2708
2718
  }
2709
2719
  function c(T, A) {
2710
- const q = new Set(a.value);
2711
- A ? q.add(T) : q.delete(T), a.value = q;
2720
+ const q = new Set(n.value);
2721
+ A ? q.add(T) : q.delete(T), n.value = q;
2712
2722
  }
2713
2723
  function S(T, A) {
2714
2724
  if (A)
@@ -2719,19 +2729,19 @@ function si(e) {
2719
2729
  }
2720
2730
  }
2721
2731
  function F() {
2722
- i.value = [], t.value = /* @__PURE__ */ new Set(), o.value = {}, a.value = /* @__PURE__ */ new Set(), l.value = {}, u.value = "", b.value = !1, y.value = !1, _.value = null;
2732
+ i.value = [], t.value = /* @__PURE__ */ new Set(), o.value = {}, n.value = /* @__PURE__ */ new Set(), l.value = {}, u.value = "", b.value = !1, y.value = !1, P.value = null;
2723
2733
  }
2724
2734
  return {
2725
2735
  // State (readonly)
2726
2736
  layerConfigs: j(i),
2727
2737
  visibleLayers: j(t),
2728
2738
  layerOpacities: j(o),
2729
- loadingLayers: j(a),
2739
+ loadingLayers: j(n),
2730
2740
  layerErrors: j(l),
2731
2741
  searchQuery: j(u),
2732
2742
  isLoading: j(b),
2733
2743
  isInitialized: j(y),
2734
- error: j(_),
2744
+ error: j(P),
2735
2745
  // Computed
2736
2746
  filteredLayerConfigs: v,
2737
2747
  layerList: k,
@@ -2747,12 +2757,12 @@ function si(e) {
2747
2757
  reset: F
2748
2758
  };
2749
2759
  }
2750
- function ci() {
2760
+ function si() {
2751
2761
  const e = C([]), i = C(/* @__PURE__ */ new Set()), t = C(/* @__PURE__ */ new Set());
2752
2762
  function o(l) {
2753
2763
  i.value.has(l) ? i.value.delete(l) : i.value.add(l);
2754
2764
  }
2755
- function a(l) {
2765
+ function n(l) {
2756
2766
  e.value = l;
2757
2767
  }
2758
2768
  return {
@@ -2760,19 +2770,19 @@ function ci() {
2760
2770
  visibleLayerIds: I(() => i.value),
2761
2771
  loadingLayerIds: I(() => t.value),
2762
2772
  toggleLayer: o,
2763
- setLayers: a
2773
+ setLayers: n
2764
2774
  };
2765
2775
  }
2766
- function Xn(e) {
2767
- const i = C(null), t = C(!1), o = C(null), a = C(0);
2776
+ function Qa(e) {
2777
+ const i = C(null), t = C(!1), o = C(null), n = C(0);
2768
2778
  async function l(y = {}) {
2769
2779
  t.value = !0, o.value = null;
2770
- const _ = e.pageSize || 2e3;
2780
+ const P = e.pageSize || 2e3;
2771
2781
  let v = 0, k = [], r = !0;
2772
2782
  try {
2773
2783
  for (; r; ) {
2774
2784
  const w = e.url.replace(/\/$/, ""), g = encodeURIComponent(y.where || e.where || "1=1");
2775
- let f = `${w}/query?where=${g}&outFields=*&returnGeometry=true&resultRecordCount=${_}&resultOffset=${v}&f=geojson`;
2785
+ let f = `${w}/query?where=${g}&outFields=*&returnGeometry=true&resultRecordCount=${P}&resultOffset=${v}&f=geojson`;
2776
2786
  if (y.bounds) {
2777
2787
  const F = JSON.stringify({
2778
2788
  xmin: y.bounds.west,
@@ -2787,13 +2797,13 @@ function Xn(e) {
2787
2797
  if (!c.ok)
2788
2798
  throw new Error(`HTTP ${c.status}: ${c.statusText}`);
2789
2799
  const S = await c.json();
2790
- S.features && S.features.length > 0 ? (k = k.concat(S.features), v += S.features.length, r = S.features.length === _) : r = !1;
2800
+ S.features && S.features.length > 0 ? (k = k.concat(S.features), v += S.features.length, r = S.features.length === P) : r = !1;
2791
2801
  }
2792
2802
  const h = {
2793
2803
  type: "FeatureCollection",
2794
2804
  features: k
2795
2805
  };
2796
- return i.value = h, a.value = k.length, h;
2806
+ return i.value = h, n.value = k.length, h;
2797
2807
  } catch (h) {
2798
2808
  const w = h instanceof Error ? h : new Error("Failed to fetch features");
2799
2809
  throw o.value = w, w;
@@ -2802,7 +2812,7 @@ function Xn(e) {
2802
2812
  }
2803
2813
  }
2804
2814
  function u() {
2805
- i.value = null, a.value = 0, o.value = null;
2815
+ i.value = null, n.value = 0, o.value = null;
2806
2816
  }
2807
2817
  async function b(y = {}) {
2808
2818
  return l(y);
@@ -2812,7 +2822,7 @@ function Xn(e) {
2812
2822
  data: j(i),
2813
2823
  isLoading: j(t),
2814
2824
  error: j(o),
2815
- totalFeatures: j(a),
2825
+ totalFeatures: j(n),
2816
2826
  // Config
2817
2827
  config: e,
2818
2828
  // Methods
@@ -2821,13 +2831,13 @@ function Xn(e) {
2821
2831
  clear: u
2822
2832
  };
2823
2833
  }
2824
- function ui(e, i, t) {
2825
- const o = Xn(e);
2834
+ function ci(e, i, t) {
2835
+ const o = Qa(e);
2826
2836
  return Te(
2827
2837
  i,
2828
- async (a) => {
2829
- if (a) {
2830
- const l = t(a);
2838
+ async (n) => {
2839
+ if (n) {
2840
+ const l = t(n);
2831
2841
  await o.fetch(l);
2832
2842
  }
2833
2843
  },
@@ -2835,21 +2845,21 @@ function ui(e, i, t) {
2835
2845
  ), o;
2836
2846
  }
2837
2847
  export {
2838
- li as LayerCheckboxSet,
2848
+ ni as LayerCheckboxSet,
2839
2849
  No as LayerPanel,
2840
- ri as LayerRadioButtonSet,
2841
- ii as Layerboard,
2850
+ li as LayerRadioButtonSet,
2851
+ ai as Layerboard,
2842
2852
  oo as MapPanel,
2843
- ai as TopicAccordion,
2844
- oi as WEBMAP_ID,
2853
+ ii as TopicAccordion,
2854
+ ti as WEBMAP_ID,
2845
2855
  ht as buildWebMapUrl,
2846
- en as clearCache,
2856
+ ea as clearCache,
2847
2857
  yt as getLayerConfigs,
2848
- ni as getWebMapUrl,
2858
+ oi as getWebMapUrl,
2849
2859
  Tt as transformWebMapToLayerConfigs,
2850
- an as useApiDataSources,
2851
- Xn as useDataSource,
2852
- ci as useLayerConfig,
2853
- si as useLayerboard,
2854
- ui as useReactiveDataSource
2860
+ ia as useApiDataSources,
2861
+ Qa as useDataSource,
2862
+ si as useLayerConfig,
2863
+ ri as useLayerboard,
2864
+ ci as useReactiveDataSource
2855
2865
  };