@thibezer/ui-components-kit 2.12.2 → 2.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +1 -1
  3. package/dist/camadas.cjs +60 -60
  4. package/dist/camadas.js +676 -579
  5. package/dist/components/ui-camadas/camadas-drag-drop.d.ts +2 -0
  6. package/dist/components/ui-camadas/camadas-hierarquia.d.ts +10 -0
  7. package/dist/components/ui-camadas/camadas-persistencia.d.ts +6 -1
  8. package/dist/components/ui-camadas/camadas-sincronizacao-dom.d.ts +5 -0
  9. package/dist/components/ui-cores/ui-seletor-cor.d.ts +2 -0
  10. package/dist/components/ui-tabela-propriedades/editores-basicos.d.ts +6 -0
  11. package/dist/components/ui-tabela-propriedades/propriedades-gerenciador-valores.d.ts +5 -2
  12. package/dist/components/ui-tabela-propriedades/propriedades-render-arvore.d.ts +2 -0
  13. package/dist/components/ui-tabela-propriedades/tipos.d.ts +6 -0
  14. package/dist/components/ui-tabela-propriedades/ui-tabela-propriedades.d.ts +6 -1
  15. package/dist/cores.cjs +1 -1
  16. package/dist/cores.js +2 -2
  17. package/dist/custom-elements.json +11821 -11639
  18. package/dist/data.cjs +1 -1
  19. package/dist/data.js +39 -38
  20. package/dist/index.cjs +1 -1
  21. package/dist/index.js +100 -98
  22. package/dist/register.cjs +1 -1
  23. package/dist/register.js +3 -3
  24. package/dist/tabela.cjs +1 -1
  25. package/dist/tabela.js +31 -30
  26. package/dist/tipos-elementos.d.ts +3 -3
  27. package/dist/tipos-vue.d.ts +3 -3
  28. package/dist/ui-controle-cores-C_cVXxCn.js +291 -0
  29. package/dist/ui-controle-cores-CuDFS8Y8.cjs +32 -0
  30. package/dist/ui-seletor-cor-DPKqf5wb.cjs +82 -0
  31. package/dist/ui-seletor-cor-FYtRccnK.js +396 -0
  32. package/dist/ui-tabela-propriedades-C5YYnod1.js +3053 -0
  33. package/dist/ui-tabela-propriedades-DWOKznMN.cjs +142 -0
  34. package/package.json +187 -187
package/dist/camadas.js CHANGED
@@ -1,13 +1,13 @@
1
- var We = Object.defineProperty;
2
- var Ze = (e, r, a) => r in e ? We(e, r, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[r] = a;
3
- var y = (e, r, a) => Ze(e, typeof r != "symbol" ? r + "" : r, a);
1
+ var da = Object.defineProperty;
2
+ var ua = (e, r, a) => r in e ? da(e, r, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[r] = a;
3
+ var w = (e, r, a) => ua(e, typeof r != "symbol" ? r + "" : r, a);
4
4
  /* empty css */
5
- import { d as ge, S as ea } from "./ssr-safe-5cWfJP-s.js";
6
- import { L as aa } from "./listener-bag-DQgv7OON.js";
7
- import { a as ra } from "./ui-seletor-cor-D2_C6Aor.js";
8
- import { f as ta } from "./alvo-digitavel-CzCvNVQ3.js";
9
- import { a as Le } from "./parts-CaoQiCfI.js";
10
- import { UIMapaBase as zr, UISeletorMapaBase as Br } from "./seletor-mapa-base.js";
5
+ import { d as xe, S as pa } from "./ssr-safe-5cWfJP-s.js";
6
+ import { L as fa } from "./listener-bag-DQgv7OON.js";
7
+ import { a as Re } from "./parts-CaoQiCfI.js";
8
+ import { a as ma } from "./ui-seletor-cor-FYtRccnK.js";
9
+ import { f as ga } from "./alvo-digitavel-CzCvNVQ3.js";
10
+ import { UIMapaBase as Vr, UISeletorMapaBase as Yr } from "./seletor-mapa-base.js";
11
11
  const b = {
12
12
  camadas: `<svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
13
13
  <polygon points="12 2 2 7 12 12 22 7 12 2"></polygon>
@@ -106,8 +106,8 @@ const b = {
106
106
  <line x1="9" y1="3" x2="9" y2="21"></line>
107
107
  <line x1="15" y1="3" x2="15" y2="21"></line>
108
108
  </svg>`
109
- }, U = 6378137;
110
- function ia(e, r) {
109
+ }, Y = 6378137;
110
+ function va(e, r) {
111
111
  if (!Array.isArray(e) || !Array.isArray(r) || e.length < 2 || r.length < 2 || !Number.isFinite(e[0]) || !Number.isFinite(e[1]) || !Number.isFinite(r[0]) || !Number.isFinite(r[1]))
112
112
  return 0;
113
113
  const a = e[0] * Math.PI / 180, i = e[1] * Math.PI / 180, t = r[0] * Math.PI / 180, o = r[1] * Math.PI / 180, n = t - a, l = o - i, c = Math.min(
@@ -116,65 +116,65 @@ function ia(e, r) {
116
116
  0,
117
117
  Math.sin(n / 2) * Math.sin(n / 2) + Math.cos(a) * Math.cos(t) * Math.sin(l / 2) * Math.sin(l / 2)
118
118
  )
119
- ), s = U * 2 * Math.atan2(Math.sqrt(c), Math.sqrt(1 - c));
119
+ ), s = Y * 2 * Math.atan2(Math.sqrt(c), Math.sqrt(1 - c));
120
120
  return Number.isFinite(s) ? s : 0;
121
121
  }
122
- function Ce(e) {
122
+ function Oe(e) {
123
123
  if (!Array.isArray(e) || e.length < 2) return 0;
124
124
  if (Array.isArray(e[0]) && Array.isArray(e[0][0]))
125
- return e.reduce((a, i) => a + Ce(i), 0);
125
+ return e.reduce((a, i) => a + Oe(i), 0);
126
126
  let r = 0;
127
127
  for (let a = 0; a < e.length - 1; a++) {
128
128
  const i = e[a], t = e[a + 1];
129
- Array.isArray(i) && Array.isArray(t) && i.length >= 2 && t.length >= 2 && (r += ia([i[0], i[1]], [t[0], t[1]]));
129
+ Array.isArray(i) && Array.isArray(t) && i.length >= 2 && t.length >= 2 && (r += va([i[0], i[1]], [t[0], t[1]]));
130
130
  }
131
131
  return r;
132
132
  }
133
- function ce(e) {
133
+ function ue(e) {
134
134
  if (!Array.isArray(e)) return 0;
135
135
  const r = [];
136
- for (let f = 0; f < e.length; f++) {
137
- const p = e[f];
136
+ for (let u = 0; u < e.length; u++) {
137
+ const p = e[u];
138
138
  Array.isArray(p) && p.length >= 2 && Number.isFinite(p[0]) && Number.isFinite(p[1]) && r.push([p[0], p[1]]);
139
139
  }
140
140
  r.length > 3 && r[0][0] === r[r.length - 1][0] && r[0][1] === r[r.length - 1][1] && r.pop();
141
141
  const a = r.length;
142
142
  if (a < 3) return 0;
143
143
  let i = 0;
144
- for (let f = 0; f < a; f++)
145
- i += r[f][0];
144
+ for (let u = 0; u < a; u++)
145
+ i += r[u][0];
146
146
  const t = i / a * Math.PI / 180, o = Math.cos(t), n = Math.PI / 180, l = r[0][0], c = r[0][1];
147
147
  let s = 0;
148
- for (let f = 0; f < a; f++) {
149
- const p = r[f], m = r[(f + 1) % a], u = (p[1] - c) * n * U * o, g = (p[0] - l) * n * U, v = (m[1] - c) * n * U * o, h = (m[0] - l) * n * U;
150
- s += u * h - v * g;
148
+ for (let u = 0; u < a; u++) {
149
+ const p = r[u], m = r[(u + 1) % a], f = (p[1] - c) * n * Y * o, g = (p[0] - l) * n * Y, v = (m[1] - c) * n * Y * o, h = (m[0] - l) * n * Y;
150
+ s += f * h - v * g;
151
151
  }
152
152
  const d = Math.abs(s) / 2;
153
153
  return Number.isFinite(d) ? d : 0;
154
154
  }
155
- function $e(e) {
155
+ function je(e) {
156
156
  if (!Array.isArray(e) || e.length === 0) return 0;
157
157
  if (Array.isArray(e[0]) && typeof e[0][0] == "number")
158
- return ce(e);
158
+ return ue(e);
159
159
  if (Array.isArray(e[0]) && Array.isArray(e[0][0])) {
160
160
  if (Array.isArray(e[0][0][0]))
161
- return e.reduce((i, t) => i + $e(t), 0);
162
- const r = ce(e[0]);
161
+ return e.reduce((i, t) => i + je(t), 0);
162
+ const r = ue(e[0]);
163
163
  let a = 0;
164
164
  for (let i = 1; i < e.length; i++)
165
- a += ce(e[i]);
165
+ a += ue(e[i]);
166
166
  return Math.max(0, r - a);
167
167
  }
168
168
  return 0;
169
169
  }
170
- function Lr(e) {
170
+ function Or(e) {
171
171
  if (!e || e.length === 0) return "";
172
172
  const r = e.filter(
173
173
  (i) => i.type === "Polygon" || i.type === "MultiPolygon" || i.geometryType === "Polygon"
174
174
  );
175
175
  if (r.length > 0) {
176
176
  const i = r.reduce(
177
- (t, o) => t + ($e(o.coordinates) || 0),
177
+ (t, o) => t + (je(o.coordinates) || 0),
178
178
  0
179
179
  );
180
180
  return i >= 1e4 ? `${(i / 1e4).toLocaleString("pt-BR", {
@@ -187,7 +187,7 @@ function Lr(e) {
187
187
  );
188
188
  if (a.length > 0) {
189
189
  const i = a.reduce(
190
- (t, o) => t + (Ce(o.coordinates) || 0),
190
+ (t, o) => t + (Oe(o.coordinates) || 0),
191
191
  0
192
192
  );
193
193
  return i >= 1e3 ? `${(i / 1e3).toLocaleString("pt-BR", {
@@ -197,23 +197,23 @@ function Lr(e) {
197
197
  }
198
198
  return "";
199
199
  }
200
- function M(e) {
200
+ function F(e) {
201
201
  return e == null ? "" : String(e).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
202
202
  }
203
- const oa = /^(#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})|(?:rgb|hsl)a?\(\s*[\w.%\s,/+-]+\)|[a-z]{3,30})$/i;
204
- function V(e, r = "#00E08A") {
203
+ const ba = /^(#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})|(?:rgb|hsl)a?\(\s*[\w.%\s,/+-]+\)|[a-z]{3,30})$/i;
204
+ function K(e, r = "#00E08A") {
205
205
  if (!e || typeof e != "string") return r;
206
206
  const a = e.trim();
207
- return oa.test(a) ? a : r;
207
+ return ba.test(a) ? a : r;
208
208
  }
209
- function de(e) {
209
+ function pe(e) {
210
210
  return Math.max(0, Math.min(255, Math.round(e))).toString(16).padStart(2, "0");
211
211
  }
212
- function na(e, r, a) {
212
+ function ha(e, r, a) {
213
213
  const i = r / 100, t = a / 100, o = (c) => (c + e / 30) % 12, n = i * Math.min(t, 1 - t), l = (c) => t - n * Math.max(-1, Math.min(o(c) - 3, Math.min(9 - o(c), 1)));
214
214
  return [l(0) * 255, l(8) * 255, l(4) * 255];
215
215
  }
216
- function sa(e, r = "#000000") {
216
+ function xa(e, r = "#000000") {
217
217
  if (!e || typeof e != "string") return r;
218
218
  const a = e.trim().toLowerCase(), i = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.exec(a);
219
219
  if (i) {
@@ -224,8 +224,8 @@ function sa(e, r = "#000000") {
224
224
  if (t) {
225
225
  const o = t[2].split(/[\s,/]+/).filter(Boolean).map((n) => parseFloat(n));
226
226
  if (o.length >= 3 && o.slice(0, 3).every((n) => !isNaN(n))) {
227
- const [n, l, c] = o, [s, d, f] = t[1] === "rgb" ? [n, l, c] : na(n, l, c);
228
- return `#${de(s)}${de(d)}${de(f)}`;
227
+ const [n, l, c] = o, [s, d, u] = t[1] === "rgb" ? [n, l, c] : ha(n, l, c);
228
+ return `#${pe(s)}${pe(d)}${pe(u)}`;
229
229
  }
230
230
  }
231
231
  return r;
@@ -236,7 +236,7 @@ function T(e, r, a) {
236
236
  if (i[t].getAttribute(r) === a) return i[t];
237
237
  return null;
238
238
  }
239
- function Se(e, r = 80) {
239
+ function Ne(e, r = 80) {
240
240
  let a = null;
241
241
  return (...i) => {
242
242
  a && clearTimeout(a), a = setTimeout(() => {
@@ -244,10 +244,10 @@ function Se(e, r = 80) {
244
244
  }, r);
245
245
  };
246
246
  }
247
- function D(e, r) {
247
+ function B(e, r) {
248
248
  e.setAttribute("title", r), e.setAttribute("aria-label", r);
249
249
  }
250
- const Me = [
250
+ const He = [
251
251
  {
252
252
  id: "none",
253
253
  nome: "Sem Mapa",
@@ -290,16 +290,16 @@ const Me = [
290
290
  thumbnailUrl: "https://images.unsplash.com/photo-1518709268805-4e9042af9f23?w=160&auto=format&fit=crop&q=80"
291
291
  }
292
292
  ];
293
- function Fe(e, r) {
293
+ function Ge(e, r) {
294
294
  const a = Array.isArray(e) ? e.find((i) => i.id === r) : void 0;
295
295
  return a && typeof a.nome == "string" ? a.nome : "";
296
296
  }
297
- function la(e = Me, r = "satelite", a = !1) {
297
+ function ya(e = He, r = "satelite", a = !1) {
298
298
  if (!e || e.length === 0) return "";
299
299
  const i = e.map((t) => {
300
- const o = r === t.id, n = M(t.id), l = M(t.nome), c = M(t.descricao || t.nome);
300
+ const o = r === t.id, n = F(t.id), l = F(t.nome), c = F(t.descricao || t.nome);
301
301
  let s = "";
302
- return t.thumbnailUrl ? s = `<img class="ui-basemap-preview" src="${M(t.thumbnailUrl)}" alt="" loading="lazy" referrerpolicy="no-referrer" data-basemap-thumb />` : s = `<div class="ui-basemap-preview-none">${b.gradeCad}</div>`, `
302
+ return t.thumbnailUrl ? s = `<img class="ui-basemap-preview" src="${F(t.thumbnailUrl)}" alt="" loading="lazy" referrerpolicy="no-referrer" data-basemap-thumb />` : s = `<div class="ui-basemap-preview-none">${b.gradeCad}</div>`, `
303
303
  <div class="ui-basemap-card ${o ? "active" : ""}" data-basemap-id="${n}" role="button" tabindex="0" aria-pressed="${o}" title="${c}">
304
304
  ${s}
305
305
  <span>${l}</span>
@@ -310,7 +310,7 @@ function la(e = Me, r = "satelite", a = !1) {
310
310
  <div class="ui-basemap-section ${a ? "recolhido" : ""}" part="mapas-base">
311
311
  <button type="button" class="ui-basemap-toggle" data-basemap-toggle="alternar" aria-expanded="${!a}" aria-controls="ui-basemap-grid" title="${a ? "Mostrar mapas base" : "Recolher mapas base"}">
312
312
  <span class="ui-basemap-title">Mapa Base</span>
313
- <span class="ui-basemap-atual" data-basemap-atual>${M(Fe(e, r))}</span>
313
+ <span class="ui-basemap-atual" data-basemap-atual>${F(Ge(e, r))}</span>
314
314
  <span class="ui-chevron-icon ${a ? "" : "open"}">${b.chevronDir}</span>
315
315
  </button>
316
316
  ${a ? "" : `<div class="ui-basemap-grid" id="ui-basemap-grid">
@@ -319,7 +319,7 @@ function la(e = Me, r = "satelite", a = !1) {
319
319
  </div>
320
320
  `;
321
321
  }
322
- function ve(e) {
322
+ function ye(e) {
323
323
  if (!Array.isArray(e) || e.length === 0) return [];
324
324
  const r = e.filter((s) => !!(s && typeof s == "object" && s.id)), a = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map();
325
325
  r.forEach((s, d) => {
@@ -328,19 +328,19 @@ function ve(e) {
328
328
  const t = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Set();
329
329
  for (const s of r) {
330
330
  if (o.has(s.id)) continue;
331
- const d = [], f = /* @__PURE__ */ new Map();
331
+ const d = [], u = /* @__PURE__ */ new Map();
332
332
  let p = s;
333
333
  for (; p && p.parentId && a.has(p.parentId) && p.parentId !== p.id; ) {
334
- if (f.has(p.id)) {
335
- const m = f.get(p.id), u = d.slice(m);
336
- let g = u[0];
337
- for (const v of u)
334
+ if (u.has(p.id)) {
335
+ const m = u.get(p.id), f = d.slice(m);
336
+ let g = f[0];
337
+ for (const v of f)
338
338
  (i.get(v) ?? 1 / 0) < (i.get(g) ?? 1 / 0) && (g = v);
339
339
  t.add(g);
340
340
  break;
341
341
  }
342
342
  if (o.has(p.id)) break;
343
- f.set(p.id, d.length), d.push(p.id), p = a.get(p.parentId);
343
+ u.set(p.id, d.length), d.push(p.id), p = a.get(p.parentId);
344
344
  }
345
345
  for (const m of d) o.add(m);
346
346
  }
@@ -348,21 +348,21 @@ function ve(e) {
348
348
  r.forEach((s) => {
349
349
  !t.has(s.id) && !!(s.parentId && a.has(s.parentId) && s.parentId !== s.id) && s.parentId ? (n.has(s.parentId) || n.set(s.parentId, []), n.get(s.parentId).push(s)) : l.push(s);
350
350
  });
351
- function c(s, d, f) {
352
- const p = new Set(f);
351
+ function c(s, d, u) {
352
+ const p = new Set(u);
353
353
  p.add(s.id);
354
- const u = (n.get(s.id) || (Array.isArray(s.children) ? s.children : [])).filter(
354
+ const f = (n.get(s.id) || (Array.isArray(s.children) ? s.children : [])).filter(
355
355
  (g) => !!(g && typeof g == "object" && g.id && !p.has(g.id))
356
356
  );
357
357
  return {
358
358
  camada: s,
359
359
  depth: d,
360
- subcamadas: u.map((g) => c(g, d + 1, p))
360
+ subcamadas: f.map((g) => c(g, d + 1, p))
361
361
  };
362
362
  }
363
363
  return l.map((s) => c(s, 0, /* @__PURE__ */ new Set()));
364
364
  }
365
- function ca(e, r) {
365
+ function wa(e, r) {
366
366
  const a = /* @__PURE__ */ new Set();
367
367
  if (!r || !Array.isArray(e)) return a;
368
368
  const i = /* @__PURE__ */ new Map();
@@ -380,19 +380,42 @@ function ca(e, r) {
380
380
  }
381
381
  return a;
382
382
  }
383
- function re(e, r, a) {
383
+ function ne(e, r, a) {
384
384
  if (!a || !Array.isArray(r) || r.length === 0) return [];
385
- const i = ca(e, a);
385
+ const i = wa(e, a);
386
386
  return r.filter((t) => !!(t && t.layerId && i.has(t.layerId)));
387
387
  }
388
- function da(e) {
389
- const r = ve(e), a = (i) => {
390
- const t = i.camada, o = i.depth, n = i.subcamadas, l = o > 0 ? "&nbsp;&nbsp;".repeat(o) + "↳ " : n.length > 0 || t.isGroup ? "📁 " : "", c = `<option value="${M(t.id)}">${l}${M(t.name)}</option>`, s = n.map((d) => a(d)).join("");
391
- return c + s;
388
+ function we(e) {
389
+ const r = /* @__PURE__ */ new Map();
390
+ e.forEach((i) => i && i.id && r.set(i.id, i));
391
+ const a = /* @__PURE__ */ new Map();
392
+ for (const i of r.values()) {
393
+ let t = !1, o = !1;
394
+ const n = /* @__PURE__ */ new Set([i.id]);
395
+ let l = i.parentId ? r.get(i.parentId) : void 0;
396
+ for (; l && !n.has(l.id); )
397
+ n.add(l.id), l.visible === !1 && (t = !0), l.locked === !0 && (o = !0), l = l.parentId ? r.get(l.parentId) : void 0;
398
+ a.set(i.id, { ocultaPorAncestral: t, travadaPorAncestral: o });
399
+ }
400
+ return a;
401
+ }
402
+ function Ae(e) {
403
+ const r = we(e);
404
+ return new Set(
405
+ e.filter((a) => {
406
+ var i;
407
+ return a && (a.locked === !0 || ((i = r.get(a.id)) == null ? void 0 : i.travadaPorAncestral) === !0);
408
+ }).map((a) => a.id)
409
+ );
410
+ }
411
+ function Aa(e) {
412
+ const r = ye(e), a = Ae(e), i = (t) => {
413
+ const o = t.camada, n = t.depth, l = t.subcamadas, c = n > 0 ? "&nbsp;&nbsp;".repeat(n) + "↳ " : l.length > 0 || o.isGroup ? "📁 " : "", s = a.has(o.id), d = `<option value="${F(o.id)}"${s ? " disabled" : ""}>${c}${F(o.name)}${s ? " 🔒" : ""}</option>`, u = l.map((p) => i(p)).join("");
414
+ return d + u;
392
415
  };
393
- return r.map((i) => a(i)).join("");
416
+ return r.map((t) => i(t)).join("");
394
417
  }
395
- function ze(e, r) {
418
+ function Ue(e, r) {
396
419
  return r > 0 ? {
397
420
  icone: b.alvoEnquadrar,
398
421
  texto: `${r} ${r > 1 ? "selecionados" : "selecionado"}`
@@ -401,8 +424,8 @@ function ze(e, r) {
401
424
  texto: `${e} ${e > 1 ? "camadas" : "camada"}`
402
425
  };
403
426
  }
404
- function ua(e, r, a) {
405
- const i = r.filter((c) => a.has(c.id)), t = i.length > 0, o = t ? i.length : e.length, n = ze(e.length, i.length), l = da(e);
427
+ function Ea(e, r, a) {
428
+ const i = r.filter((c) => a.has(c.id)), t = i.length > 0, o = t ? i.length : e.length, n = Ue(e.length, i.length), l = Aa(e);
406
429
  return `
407
430
  <div class="ui-tree-footer ${t ? "tem-selecao" : "sem-selecao"}" part="rodape">
408
431
  <div class="ui-footer-left">
@@ -438,128 +461,128 @@ function ua(e, r, a) {
438
461
  </div>
439
462
  `;
440
463
  }
441
- const ue = 64;
442
- function Ee(e) {
464
+ const fe = 64;
465
+ function Be(e) {
443
466
  return Array.isArray(e) && e.length >= 2 && Number.isFinite(e[0]) && Number.isFinite(e[1]);
444
467
  }
445
- function Be(e) {
446
- return !Array.isArray(e) || e.length === 0 ? [] : Ee(e[0]) ? [e.filter(Ee)] : e.flatMap(Be);
468
+ function Ve(e) {
469
+ return !Array.isArray(e) || e.length === 0 ? [] : Be(e[0]) ? [e.filter(Be)] : e.flatMap(Ve);
447
470
  }
448
- function ke(e) {
449
- if (e.length <= ue) return e;
450
- const r = e.length / ue, a = [];
451
- for (let i = 0; i < ue; i++) a.push(e[Math.floor(i * r)]);
471
+ function qe(e) {
472
+ if (e.length <= fe) return e;
473
+ const r = e.length / fe, a = [];
474
+ for (let i = 0; i < fe; i++) a.push(e[Math.floor(i * r)]);
452
475
  return a.push(e[e.length - 1]), a;
453
476
  }
454
- function pa(e, r, a) {
455
- const i = Be(r).filter((I) => I.length > 0);
477
+ function ka(e, r, a) {
478
+ const i = Ve(r).filter((I) => I.length > 0);
456
479
  if (i.length === 0) return "";
457
480
  let t = 1 / 0, o = -1 / 0, n = 1 / 0, l = -1 / 0;
458
481
  for (const I of i)
459
- for (const [L, P] of I)
460
- P < t && (t = P), P > o && (o = P), -L < n && (n = -L), -L > l && (l = -L);
461
- const c = 16, s = 2, d = c - s * 2, f = o - t, p = l - n, m = Math.max(f, p), u = m > 0 ? d / m : 0, g = s + (d - f * u) / 2, v = s + (d - p * u) / 2, h = (I) => Math.round(I * 100) / 100, k = ([I, L]) => `${h(g + (L - t) * u)},${h(v + (-I - n) * u)}`, C = e === "polygon" || e === "multipolygon", F = e === "linestring" || e === "multilinestring", x = (I) => `<svg viewBox="0 0 ${c} ${c}" width="100%" height="100%" aria-hidden="true">${I}</svg>`;
482
+ for (const [L, q] of I)
483
+ q < t && (t = q), q > o && (o = q), -L < n && (n = -L), -L > l && (l = -L);
484
+ const c = 16, s = 2, d = c - s * 2, u = o - t, p = l - n, m = Math.max(u, p), f = m > 0 ? d / m : 0, g = s + (d - u * f) / 2, v = s + (d - p * f) / 2, h = (I) => Math.round(I * 100) / 100, k = ([I, L]) => `${h(g + (L - t) * f)},${h(v + (-I - n) * f)}`, C = e === "polygon" || e === "multipolygon", $ = e === "linestring" || e === "multilinestring", y = (I) => `<svg viewBox="0 0 ${c} ${c}" width="100%" height="100%" aria-hidden="true">${I}</svg>`;
462
485
  if (C) {
463
- const I = i.filter((L) => L.length >= 3).map((L) => `M${ke(L).map(k).join("L")}Z`).join("");
464
- return I ? x(
486
+ const I = i.filter((L) => L.length >= 3).map((L) => `M${qe(L).map(k).join("L")}Z`).join("");
487
+ return I ? y(
465
488
  `<path d="${I}" fill="${a}" fill-opacity="0.45" fill-rule="evenodd" stroke="${a}" stroke-width="1.2" stroke-linejoin="round"/>`
466
489
  ) : "";
467
490
  }
468
- if (F) {
469
- const I = i.filter((L) => L.length >= 2).map((L) => `M${ke(L).map(k).join("L")}`).join("");
470
- return I ? x(
491
+ if ($) {
492
+ const I = i.filter((L) => L.length >= 2).map((L) => `M${qe(L).map(k).join("L")}`).join("");
493
+ return I ? y(
471
494
  `<path d="${I}" fill="none" stroke="${a}" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>`
472
495
  ) : "";
473
496
  }
474
497
  return "";
475
498
  }
476
- function fa(e, r, a) {
477
- const i = V(r, "#00E08A"), t = (e || "").toLowerCase(), o = a !== void 0 ? pa(t, a, i) : "";
499
+ function Ia(e, r, a) {
500
+ const i = K(r, "#00E08A"), t = (e || "").toLowerCase(), o = a !== void 0 ? ka(t, a, i) : "";
478
501
  return o || (t === "polygon" || t === "multipolygon" ? `<svg viewBox="0 0 16 16" width="11" height="11"><polygon points="2,14 14,14 12,2 4,4" fill="${i}" fill-opacity="0.45" stroke="${i}" stroke-width="1.5"/></svg>` : t === "linestring" || t === "multilinestring" ? `<svg viewBox="0 0 16 16" width="11" height="11"><polyline points="2,13 8,3 14,10" fill="none" stroke="${i}" stroke-width="2"/></svg>` : t === "text" ? `<svg viewBox="0 0 16 16" width="11" height="11"><text x="8" y="12" font-size="12" font-weight="bold" fill="${i}" text-anchor="middle" font-family="sans-serif">T</text></svg>` : `<svg viewBox="0 0 16 16" width="11" height="11"><circle cx="8" cy="8" r="4.2" fill="${i}" stroke="#ffffff" stroke-width="1.2"/></svg>`);
479
502
  }
480
- const qe = 80;
481
- function ae(e, r) {
503
+ const Ye = 80;
504
+ function oe(e, r) {
482
505
  const a = (r || "").trim().toLowerCase();
483
506
  return a ? e.filter(
484
507
  (i) => (i.name || "").toLowerCase().includes(a) || (i.category || "").toLowerCase().includes(a) || (i.type || "").toLowerCase().includes(a)
485
508
  ) : e;
486
509
  }
487
- function De(e, r, a) {
510
+ function Ke(e, r, a) {
488
511
  var p, m;
489
512
  const i = (a || "").trim().toLowerCase();
490
513
  if (!i) return null;
491
514
  const t = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map();
492
- for (const u of e)
493
- t.set(u.id, u), u.parentId && u.parentId !== u.id && (o.has(u.parentId) || o.set(u.parentId, []), o.get(u.parentId).push(u.id));
515
+ for (const f of e)
516
+ t.set(f.id, f), f.parentId && f.parentId !== f.id && (o.has(f.parentId) || o.set(f.parentId, []), o.get(f.parentId).push(f.id));
494
517
  const n = /* @__PURE__ */ new Map();
495
- for (const u of r) {
496
- const g = u.layerId || "";
497
- n.has(g) || n.set(g, []), n.get(g).push(u);
518
+ for (const f of r) {
519
+ const g = f.layerId || "";
520
+ n.has(g) || n.set(g, []), n.get(g).push(f);
498
521
  }
499
522
  const l = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Set();
500
- for (const u of e)
501
- (typeof u.name == "string" ? u.name.toLowerCase() : "").includes(i) ? (l.add(u.id), c.add(u.id)) : ae(n.get(u.id) || [], i).length > 0 && c.add(u.id);
523
+ for (const f of e)
524
+ (typeof f.name == "string" ? f.name.toLowerCase() : "").includes(i) ? (l.add(f.id), c.add(f.id)) : oe(n.get(f.id) || [], i).length > 0 && c.add(f.id);
502
525
  const s = new Set(c);
503
- for (const u of c) {
504
- const g = /* @__PURE__ */ new Set([u]);
505
- let v = (p = t.get(u)) == null ? void 0 : p.parentId;
526
+ for (const f of c) {
527
+ const g = /* @__PURE__ */ new Set([f]);
528
+ let v = (p = t.get(f)) == null ? void 0 : p.parentId;
506
529
  for (; v && t.has(v) && !g.has(v); )
507
530
  g.add(v), s.add(v), v = (m = t.get(v)) == null ? void 0 : m.parentId;
508
531
  }
509
532
  const d = [...l];
510
533
  for (; d.length > 0; ) {
511
- const u = d.pop();
512
- for (const g of o.get(u) || [])
534
+ const f = d.pop();
535
+ for (const g of o.get(f) || [])
513
536
  s.has(g) || (s.add(g), d.push(g));
514
537
  }
515
- const f = /* @__PURE__ */ new Map();
516
- for (const u of s) {
517
- const g = n.get(u) || [];
518
- f.set(u, l.has(u) ? g : ae(g, i));
538
+ const u = /* @__PURE__ */ new Map();
539
+ for (const f of s) {
540
+ const g = n.get(f) || [];
541
+ u.set(f, l.has(f) ? g : oe(g, i));
519
542
  }
520
- return { camadasVisiveis: s, feicoesPorCamada: f };
543
+ return { camadasVisiveis: s, feicoesPorCamada: u };
521
544
  }
522
- function Pe(e, r, a, i = "", t = qe, o) {
523
- const n = De(e, r, i), l = [], c = /* @__PURE__ */ new Map();
524
- for (let f = 0; f < r.length; f++) {
525
- const p = r[f];
545
+ function _e(e, r, a, i = "", t = Ye, o) {
546
+ const n = Ke(e, r, i), l = [], c = /* @__PURE__ */ new Map();
547
+ for (let u = 0; u < r.length; u++) {
548
+ const p = r[u];
526
549
  if (!p || !p.id) continue;
527
550
  const m = p.layerId || "";
528
551
  c.has(m) || c.set(m, []), c.get(m).push(p);
529
552
  }
530
- const s = ve(e);
531
- function d(f) {
532
- const p = f.camada;
553
+ const s = ye(e);
554
+ function d(u) {
555
+ const p = u.camada;
533
556
  if (n && !n.camadasVisiveis.has(p.id) || !(n ? !0 : a.has(p.id))) return;
534
- for (const h of f.subcamadas)
557
+ for (const h of u.subcamadas)
535
558
  d(h);
536
- const u = n ? n.feicoesPorCamada.get(p.id) || [] : c.get(p.id) || [], g = (o == null ? void 0 : o.get(p.id)) ?? t, v = u.slice(0, g);
559
+ const f = n ? n.feicoesPorCamada.get(p.id) || [] : c.get(p.id) || [], g = (o == null ? void 0 : o.get(p.id)) ?? t, v = f.slice(0, g);
537
560
  for (let h = 0; h < v.length; h++)
538
561
  l.push(v[h].id);
539
562
  }
540
- for (const f of s)
541
- d(f);
563
+ for (const u of s)
564
+ d(u);
542
565
  return l;
543
566
  }
544
- function ma(e, r, a, i, t, o) {
567
+ function La(e, r, a, i, t, o) {
545
568
  if (!e.includes(i)) return null;
546
569
  const n = new Set(r);
547
570
  let l = a;
548
571
  if (o && a && e.includes(a)) {
549
- const c = e.indexOf(a), s = e.indexOf(i), d = Math.min(c, s), f = Math.max(c, s);
572
+ const c = e.indexOf(a), s = e.indexOf(i), d = Math.min(c, s), u = Math.max(c, s);
550
573
  t || n.clear();
551
- for (let p = d; p <= f; p++)
574
+ for (let p = d; p <= u; p++)
552
575
  n.add(e[p]);
553
576
  } else t ? (n.has(i) ? n.delete(i) : n.add(i), l = i) : (n.clear(), n.add(i), l = i);
554
577
  return { selecionados: n, ultimoClicadoId: l };
555
578
  }
556
- function be(e, r) {
579
+ function Ee(e, r) {
557
580
  if (e.size === 0) return;
558
581
  const a = new Set(r.map((i) => i.id));
559
582
  for (const i of e)
560
583
  a.has(i) || e.delete(i);
561
584
  }
562
- function te(e, r, a) {
585
+ function _(e, r, a) {
563
586
  const i = /* @__PURE__ */ new Set();
564
587
  let t = e.find((o) => o.id === r);
565
588
  for (; t && t.parentId; ) {
@@ -568,46 +591,51 @@ function te(e, r, a) {
568
591
  }
569
592
  return !1;
570
593
  }
571
- function ga(e) {
594
+ function Ca(e) {
572
595
  return Number.isFinite(e) ? e < 0.25 ? "acima" : e > 0.75 ? "abaixo" : "dentro" : "dentro";
573
596
  }
574
- function va(e, r, a, i) {
597
+ function $a(e, r, a, i) {
575
598
  if (!r || !a || r === a) return null;
576
599
  const t = e.find((s) => s.id === r), o = e.find((s) => s.id === a);
577
600
  if (!t || !o) return null;
578
601
  const n = t.parentId !== void 0 ? t.parentId : null;
579
602
  if (i === "dentro")
580
- return te(e, o.id, t.id) ? null : (t.parentId = o.id, { tipo: "hierarquia", camada: t, novoParentId: o.id, parentAnteriorId: n });
603
+ return _(e, o.id, t.id) ? null : (t.parentId = o.id, { tipo: "hierarquia", camada: t, novoParentId: o.id, parentAnteriorId: n });
604
+ if (_(e, o.id, t.id)) return null;
581
605
  const l = e.findIndex((s) => s.id === r);
582
606
  e.splice(l, 1);
583
607
  const c = e.findIndex((s) => s.id === a);
584
608
  return c === -1 ? e.push(t) : e.splice(i === "acima" ? c : c + 1, 0, t), t.parentId = o.parentId ?? null, { tipo: "ordem", camada: t, parentAnteriorId: n, novoParentId: t.parentId };
585
609
  }
586
- function ba(e, r, a, i) {
610
+ function Sa(e, r, a, i) {
587
611
  if (!r || !a || r === a) return !1;
588
612
  const t = e.findIndex((l) => l.id === r);
589
613
  if (t === -1) return !1;
590
614
  const [o] = e.splice(t, 1), n = e.findIndex((l) => l.id === a);
591
615
  return n === -1 ? e.push(o) : e.splice(i ? n : n + 1, 0, o), !0;
592
616
  }
593
- function ha(e, r, a, i) {
617
+ function Ma(e, r, a, i) {
594
618
  const t = e.find((l) => l.id === a), o = r.find((l) => l.id === i);
595
619
  if (!t || !o || t.layerId === i) return null;
596
620
  const n = t.layerId;
597
621
  return t.layerId = i, { feicao: t, camadaOrigemId: n, camadaDestinoId: i, mudouDeCamada: !0 };
598
622
  }
599
- function xa(e, r, a, i) {
623
+ function Fa(e, r, a, i) {
600
624
  if (!r || !a || r === a) return null;
601
- const t = e.findIndex((f) => f.id === r);
625
+ const t = e.findIndex((u) => u.id === r);
602
626
  if (t === -1) return null;
603
- const o = e.find((f) => f.id === a);
627
+ const o = e.find((u) => u.id === a);
604
628
  if (!o) return null;
605
629
  const [n] = e.splice(t, 1), l = n.layerId, c = o.layerId, s = l !== c;
606
630
  s && (n.layerId = c);
607
- const d = e.findIndex((f) => f.id === a);
631
+ const d = e.findIndex((u) => u.id === a);
608
632
  return d === -1 ? e.push(n) : e.splice(i ? d : d + 1, 0, n), { feicao: n, camadaOrigemId: l, camadaDestinoId: c, mudouDeCamada: s };
609
633
  }
610
- function ya(e) {
634
+ const me = (e, r, a) => `${e} ${e === 1 ? r : a}`;
635
+ function za(e, r, a) {
636
+ return a === 0 ? me(e, "feição", "feições") : `${me(e, "feição", "feições")} no grupo (${r} nesta camada) · ${me(a, "subcamada", "subcamadas")}`;
637
+ }
638
+ function Ba(e) {
611
639
  const {
612
640
  camadas: r,
613
641
  feicoes: a,
@@ -619,65 +647,65 @@ function ya(e) {
619
647
  editingFeatureId: c,
620
648
  searchQuery: s,
621
649
  titulo: d = "CAMADAS",
622
- mostrarBusca: f = !0,
650
+ mostrarBusca: u = !0,
623
651
  limitesPorCamada: p,
624
- limiteFeicoesPorCamada: m = qe,
625
- mostrarBotaoColapsar: u = !1
626
- } = e, g = (s || "").trim().toLowerCase(), v = De(r, a, g), h = /* @__PURE__ */ new Map();
627
- for (let $ = 0; $ < a.length; $++) {
628
- const w = a[$];
629
- if (!w || !w.id) continue;
630
- const S = w.layerId || "";
631
- h.has(S) || h.set(S, []), h.get(S).push(w);
632
- }
633
- const k = r.every(($) => $.visible !== !1), C = r.length > 0 && r.every(($) => t.has($.id)), F = f ? `
652
+ limiteFeicoesPorCamada: m = Ye,
653
+ mostrarBotaoColapsar: f = !1
654
+ } = e, g = (s || "").trim().toLowerCase(), v = Ke(r, a, g), h = /* @__PURE__ */ new Map();
655
+ for (let S = 0; S < a.length; S++) {
656
+ const x = a[S];
657
+ if (!x || !x.id) continue;
658
+ const M = x.layerId || "";
659
+ h.has(M) || h.set(M, []), h.get(M).push(x);
660
+ }
661
+ const k = we(r), C = r.every((S) => S.visible !== !1), $ = r.length > 0 && r.every((S) => t.has(S.id)), y = u ? `
634
662
  <div class="ui-tree-search-wrapper" part="busca">
635
663
  <span class="ui-tree-search-icon">${b.busca}</span>
636
- <input type="text" class="ui-tree-search-input" id="input-layer-search" aria-label="Buscar camada ou feição" placeholder="Buscar camada ou feição..." value="${M(
664
+ <input type="text" class="ui-tree-search-input" id="input-layer-search" aria-label="Buscar camada ou feição" placeholder="Buscar camada ou feição..." value="${F(
637
665
  s
638
666
  )}" />
639
667
  ${s ? `<button class="ui-tree-search-clear" id="btn-clear-layer-search" title="Limpar busca" aria-label="Limpar busca">${b.fechar}</button>` : ""}
640
668
  </div>
641
- ` : "", x = `
669
+ ` : "", I = `
642
670
  <div class="ui-tree-toolbar" part="toolbar">
643
671
  <div class="ui-tree-title-group">
644
- <span class="ui-tree-section-title">${M(d || "CAMADAS")}</span>
672
+ <span class="ui-tree-section-title">${F(d || "CAMADAS")}</span>
645
673
  <span class="ui-tree-count-badge">${r.length}</span>
646
674
  </div>
647
675
  <div class="ui-tree-actions">
648
- <button id="btn-toggle-all-vis" class="ui-tree-action-btn" title="${k ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas"}" aria-label="${k ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas"}">
649
- ${k ? b.olhoAberto : b.olhoFechado}
676
+ <button id="btn-toggle-all-vis" class="ui-tree-action-btn" title="${C ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas"}" aria-label="${C ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas"}">
677
+ ${C ? b.olhoAberto : b.olhoFechado}
650
678
  </button>
651
- <button id="btn-toggle-all-expand" class="ui-tree-action-btn" aria-label="${C ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}" title="${C ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}">
652
- <span class="ui-chevron-icon ${C ? "open" : ""}">${b.chevronDir}</span>
679
+ <button id="btn-toggle-all-expand" class="ui-tree-action-btn" aria-label="${$ ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}" title="${$ ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}">
680
+ <span class="ui-chevron-icon ${$ ? "open" : ""}">${b.chevronDir}</span>
653
681
  </button>
654
- ${u ? `<button id="btn-colapsar" class="ui-camadas-btn-colapsar" title="Recolher painel" aria-label="Recolher painel">${b.recolherPainel}</button>` : ""}
682
+ ${f ? `<button id="btn-colapsar" class="ui-camadas-btn-colapsar" title="Recolher painel" aria-label="Recolher painel">${b.recolherPainel}</button>` : ""}
655
683
  </div>
656
684
  </div>
657
- ${F}
658
- `, I = ($) => {
659
- const w = $.camada;
660
- if (v && !v.camadasVisiveis.has(w.id)) return "";
661
- const S = $.depth, q = $.subcamadas, N = v ? q.filter((A) => v.camadasVisiveis.has(A.camada.id)) : q, H = !!(w.isGroup || q.length > 0), E = M(w.id), _ = M(w.name || (H ? "Novo Grupo" : "Camada")), O = V(w.color, "#00E08A"), X = w.visible !== !1, G = w.locked === !0, Q = g ? !0 : t.has(w.id), ie = n === w.id, oe = i === w.id, z = v ? v.feicoesPorCamada.get(w.id) || [] : h.get(w.id) || [], ne = v ? z : re(r, a, w.id), he = ne.length > 0 && ne.every((A) => o.has(A.id)), Ne = !he && ne.some((A) => o.has(A.id)), J = (p == null ? void 0 : p.get(w.id)) ?? m, He = z.slice(0, J), Ge = z.length > J, Ue = z.length - J, Ve = He.map((A) => {
662
- const R = M(A.id), ye = M(A.name || "Feição"), we = V(A.color, O), W = A.visible !== !1, se = G, le = A.locked === !0 || se, Ae = se ? "Bloqueada pela camada" : le ? "Desbloquear Feição" : "Bloquear Feição", Z = o.has(A.id), Je = A.status === "previa" ? '<span class="ui-previa-dot" title="Geometria prévia" aria-label="Geometria prévia"></span>' : "";
685
+ ${y}
686
+ `, L = (S) => {
687
+ const x = S.camada;
688
+ if (v && !v.camadasVisiveis.has(x.id)) return "";
689
+ const M = S.depth, P = S.subcamadas, Ie = v ? P.filter((A) => v.camadasVisiveis.has(A.camada.id)) : P, G = !!(x.isGroup || P.length > 0), E = F(x.id), W = F(x.name || (G ? "Novo Grupo" : "Camada")), O = K(x.color, "#00E08A"), U = x.visible !== !1, V = x.locked === !0, Z = g ? !0 : t.has(x.id), se = n === x.id, le = i === x.id, j = k.get(x.id), Le = (j == null ? void 0 : j.ocultaPorAncestral) === !0, Ce = (j == null ? void 0 : j.travadaPorAncestral) === !0, D = v ? v.feicoesPorCamada.get(x.id) || [] : h.get(x.id) || [], N = v ? D : ne(r, a, x.id), $e = N.length > 0 && N.every((A) => o.has(A.id)), Ze = !$e && N.some((A) => o.has(A.id)), ee = (p == null ? void 0 : p.get(x.id)) ?? m, ea = D.slice(0, ee), aa = D.length > ee, ra = D.length - ee, ta = ea.map((A) => {
690
+ const R = F(A.id), Me = F(A.name || "Feição"), Fe = K(A.color, O), ae = A.visible !== !1, ce = V || Ce, de = A.locked === !0 || ce, ze = ce ? "Bloqueada pela camada" : de ? "Desbloquear Feição" : "Bloquear Feição", re = o.has(A.id), ca = A.status === "previa" ? '<span class="ui-previa-dot" title="Geometria prévia" aria-label="Geometria prévia"></span>' : "";
663
691
  return `
664
- <div class="ui-feat-row ${Z ? "selected-row" : ""} ${W ? "" : "hidden-row"}" data-feat-row="${R}" data-feat-select="${R}" data-feat-layer="${E}" role="treeitem" aria-selected="${Z}" tabindex="-1" draggable="true" part="${Z ? "feicao feicao-selecionada" : "feicao"}" style="--layer-depth: ${S + 1};" title="Clique para selecionar | Arraste para reordenar">
665
- <div class="ui-col ui-col-eye" data-feat-eye="${R}" role="button" tabindex="0" aria-label="${W ? "Ocultar Feição" : "Exibir Feição"}" title="${W ? "Ocultar Feição" : "Exibir Feição"}">
666
- ${W ? b.olhoAberto : b.olhoFechado}
692
+ <div class="ui-feat-row ${re ? "selected-row" : ""} ${ae ? "" : "hidden-row"} ${!U || Le ? "herdado-oculto" : ""}" data-feat-row="${R}" data-feat-select="${R}" data-feat-layer="${E}" role="treeitem" aria-level="${M + 2}" aria-selected="${re}" tabindex="-1" draggable="true" part="${re ? "feicao feicao-selecionada" : "feicao"}" style="--layer-depth: ${M + 1};" title="Clique para selecionar | Arraste para reordenar">
693
+ <div class="ui-col ui-col-eye" data-feat-eye="${R}" role="button" tabindex="0" aria-label="${ae ? "Ocultar Feição" : "Exibir Feição"}" title="${ae ? "Ocultar Feição" : "Exibir Feição"}">
694
+ ${ae ? b.olhoAberto : b.olhoFechado}
667
695
  </div>
668
696
 
669
- <div class="ui-col ui-col-lock ${le ? "" : "ui-lock-open"}" data-feat-lock="${R}" ${se ? 'data-locked-by-layer="true"' : ""} role="button" tabindex="0" aria-label="${Ae}" title="${Ae}">
670
- ${le ? b.cadeadoTrancado : b.cadeadoAberto}
697
+ <div class="ui-col ui-col-lock ${de ? "" : "ui-lock-open"}" data-feat-lock="${R}" ${ce ? 'data-locked-by-layer="true"' : ""} role="button" tabindex="0" aria-label="${ze}" title="${ze}">
698
+ ${de ? b.cadeadoTrancado : b.cadeadoAberto}
671
699
  </div>
672
700
 
673
- <div class="ui-col ui-col-colorbar" style="background: ${we};"></div>
701
+ <div class="ui-col ui-col-colorbar" style="background: ${Fe};"></div>
674
702
  <div class="ui-col ui-col-branch"><span style="opacity: 0.35;">└─</span></div>
675
703
  <div class="ui-col ui-col-thumb">
676
- <div class="ui-thumb-box">${fa(A.type || A.geometryType, we, A.coordinates)}</div>
704
+ <div class="ui-thumb-box">${Ia(A.type || A.geometryType, Fe, A.coordinates)}</div>
677
705
  </div>
678
706
 
679
707
  <div class="ui-col ui-col-name" data-feat-name-trigger="${R}" title="Duplo clique para renomear">
680
- ${c === A.id ? `<input type="text" class="ui-inline-rename-input" data-inline-feat-input="${R}" value="${ye}" />` : `<span class="ui-name-text">${ye}</span>${Je}`}
708
+ ${c === A.id ? `<input type="text" class="ui-inline-rename-input" data-inline-feat-input="${R}" value="${Me}" />` : `<span class="ui-name-text">${Me}</span>${ca}`}
681
709
  </div>
682
710
 
683
711
  <div class="ui-col ui-col-actions">
@@ -685,22 +713,22 @@ function ya(e) {
685
713
  </div>
686
714
 
687
715
  <div class="ui-col ui-col-target" data-feat-target="${R}" role="button" tabindex="0" aria-label="Selecionar feição" title="Selecionar feição">
688
- <div class="ui-target-circle ${Z ? "selected" : ""}"></div>
716
+ <div class="ui-target-circle ${re ? "selected" : ""}"></div>
689
717
  </div>
690
718
  </div>
691
719
  `;
692
- }).join(""), Ye = Ge ? `<div class="ui-truncate-notice" style="display: flex; align-items: center; justify-content: space-between; padding: 4px 10px; font-size: 10px; color: var(--ui-cor-texto-secundario, #888899); font-style: italic; background: var(--ui-cor-fundo-recuado, rgba(0,0,0,0.15));">
693
- <span>Exibindo ${J} de ${z.length} feições. Use a busca acima para filtrar.</span>
694
- <button type="button" class="ui-truncate-more-btn" data-layer-show-more="${E}" style="background: transparent; border: 1px solid var(--ui-cor-borda, rgba(255,255,255,0.15)); color: var(--ui-cor-primaria, #00E08A); border-radius: 3px; font-size: 9.5px; font-style: normal; padding: 1px 6px; cursor: pointer; white-space: nowrap;">Mostrar mais (+${Math.min(80, Ue)})</button>
695
- </div>` : "", xe = w.opacity !== void 0 ? w.opacity : 1, Ke = Math.round(xe * 100), _e = r.filter((A) => A.id !== w.id && !te(r, A.id, w.id)).map(
696
- (A) => `<option value="${M(A.id)}" ${w.parentId === A.id ? "selected" : ""}>${A.isGroup ? "📁 " : ""}${M(A.name)}</option>`
697
- ).join(""), Xe = ie ? `
720
+ }).join(""), ia = aa ? `<div class="ui-truncate-notice" role="note">
721
+ <span>Exibindo ${ee} de ${D.length} feições. Use a busca acima para filtrar.</span>
722
+ <button type="button" class="ui-truncate-more-btn" data-layer-show-more="${E}">Mostrar mais (+${Math.min(80, ra)})</button>
723
+ </div>` : "", Se = x.opacity !== void 0 ? x.opacity : 1, oa = Math.round(Se * 100), na = r.filter((A) => A.id !== x.id && !_(r, A.id, x.id)).map(
724
+ (A) => `<option value="${F(A.id)}" ${x.parentId === A.id ? "selected" : ""}>${A.isGroup ? "📁 " : ""}${F(A.name)}</option>`
725
+ ).join(""), sa = se ? `
698
726
  <div class="ui-layer-settings-drawer" id="settings-drawer-${E}" part="drawer" style="--drawer-cor-camada: ${O};">
699
727
  <div class="ui-drawer-header">
700
728
  <div class="ui-drawer-header-left">
701
729
  <span class="ui-drawer-icon">${b.engrenagem}</span>
702
730
  <span class="ui-drawer-title">Configurações da Camada</span>
703
- <span class="ui-drawer-layer-chip" title="${_}">${_}</span>
731
+ <span class="ui-drawer-layer-chip" title="${W}">${W}</span>
704
732
  </div>
705
733
  <button type="button" class="ui-drawer-btn-fechar" data-layer-settings-close="${E}" title="Fechar configurações (Esc)" aria-label="Fechar configurações">
706
734
  ${b.fechar}
@@ -717,7 +745,7 @@ function ya(e) {
717
745
  <label class="ui-drawer-color-pill" title="Clique para alterar a cor da camada">
718
746
  <span class="ui-drawer-color-sample" id="sample-color-${E}" style="background-color: ${O};"></span>
719
747
  <span class="ui-drawer-color-hex" id="hex-color-${E}">${O.toUpperCase()}</span>
720
- <input type="color" aria-label="Cor da camada" data-layer-color-picker="${E}" value="${sa(O, "#00e08a")}" class="ui-drawer-color-native" />
748
+ <input type="color" aria-label="Cor da camada" data-layer-color-picker="${E}" value="${xa(O, "#00e08a")}" class="ui-drawer-color-native" />
721
749
  </label>
722
750
  </div>
723
751
  </div>
@@ -726,10 +754,10 @@ function ya(e) {
726
754
  <div class="ui-drawer-row">
727
755
  <div class="ui-drawer-row-label">
728
756
  <span>Opacidade</span>
729
- <span class="ui-drawer-badge" id="badge-op-${E}">${Ke}%</span>
757
+ <span class="ui-drawer-badge" id="badge-op-${E}">${oa}%</span>
730
758
  </div>
731
759
  <div class="ui-drawer-slider-container">
732
- <input type="range" aria-label="Opacidade da camada" min="0.05" max="1" step="0.05" value="${Number(xe) || 0}" data-layer-opacity-slider="${E}" class="ui-drawer-slider" />
760
+ <input type="range" aria-label="Opacidade da camada" min="0.05" max="1" step="0.05" value="${Number(Se) || 0}" data-layer-opacity-slider="${E}" class="ui-drawer-slider" />
733
761
  </div>
734
762
  </div>
735
763
 
@@ -740,8 +768,8 @@ function ya(e) {
740
768
  </div>
741
769
  <div class="ui-drawer-select-wrapper">
742
770
  <select class="ui-drawer-select" data-layer-parent-select="${E}" aria-label="Grupo pai da camada">
743
- <option value="" ${w.parentId ? "" : "selected"}>(Nenhum - Nível Principal)</option>
744
- ${_e}
771
+ <option value="" ${x.parentId ? "" : "selected"}>(Nenhum - Nível Principal)</option>
772
+ ${na}
745
773
  </select>
746
774
  </div>
747
775
  </div>
@@ -749,7 +777,7 @@ function ya(e) {
749
777
 
750
778
  <div class="ui-drawer-footer">
751
779
  <div class="ui-drawer-meta-info">
752
- <span>${q.length > 0 ? `${q.length} subcamadas · ` : ""}${z.length} ${z.length === 1 ? "feição" : "feições"}</span>
780
+ <span>${P.length > 0 ? `${P.length} subcamadas · ` : ""}${D.length} ${D.length === 1 ? "feição" : "feições"}</span>
753
781
  </div>
754
782
  <div class="ui-drawer-actions">
755
783
  <button type="button" class="ui-drawer-btn-sublayer" data-add-sublayer="${E}" title="Adicionar nova camada dentro desta">
@@ -762,67 +790,68 @@ function ya(e) {
762
790
  </div>
763
791
  </div>
764
792
  </div>
765
- ` : "", Qe = N.map((A) => I(A)).join("");
793
+ ` : "", la = Ie.map((A) => L(A)).join("");
766
794
  return `
767
- <div class="ui-layer-group ${S > 0 ? "is-sublayer-group" : ""}" data-layer-id="${E}" data-layer-depth="${S}" role="treeitem" aria-expanded="${Q}" part="grupo" style="--layer-active-color: ${O};">
768
- <div class="ui-layer-row ${X ? "" : "hidden-layer"} ${oe ? "active-drawing-layer" : ""} ${S > 0 ? "is-sublayer" : ""} ${H ? "is-group-row" : ""}" data-layer-row="${E}" data-layer-id="${E}" tabindex="-1" draggable="true" part="${oe ? "camada camada-ativa" : "camada"}" ${oe ? 'aria-current="true"' : ""} style="--layer-depth: ${S};">
795
+ <div class="ui-layer-group ${M > 0 ? "is-sublayer-group" : ""}" data-layer-id="${E}" data-layer-depth="${M}" role="treeitem" aria-level="${M + 1}" aria-expanded="${Z}" part="grupo" style="--layer-active-color: ${O};">
796
+ <div class="ui-layer-row ${U ? "" : "hidden-layer"} ${le ? "active-drawing-layer" : ""} ${M > 0 ? "is-sublayer" : ""} ${G ? "is-group-row" : ""} ${Le ? "herdado-oculto" : ""} ${Ce ? "herdado-travado" : ""}" data-layer-row="${E}" data-layer-id="${E}" tabindex="-1" draggable="true" part="${le ? "camada camada-ativa" : "camada"}" ${le ? 'aria-current="true"' : ""} style="--layer-depth: ${M};">
769
797
  <div class="ui-col ui-col-drag" title="Arrastar para reordenar Z-Index">${b.dragHandle}</div>
770
798
 
771
- <div class="ui-col ui-col-eye" data-layer-eye="${E}" role="button" tabindex="0" aria-label="${X ? "Ocultar Camada" : "Exibir Camada"}" title="${X ? "Ocultar Camada" : "Exibir Camada"}">
772
- ${X ? b.olhoAberto : b.olhoFechado}
799
+ <div class="ui-col ui-col-eye" data-layer-eye="${E}" role="button" tabindex="0" aria-label="${U ? "Ocultar Camada" : "Exibir Camada"}" title="${U ? "Ocultar Camada" : "Exibir Camada"}">
800
+ ${U ? b.olhoAberto : b.olhoFechado}
773
801
  </div>
774
802
 
775
- <div class="ui-col ui-col-lock ${G ? "" : "ui-lock-open"}" data-layer-lock="${E}" role="button" tabindex="0" aria-label="${G ? "Desbloquear Camada" : "Bloquear Camada"}" title="${G ? "Desbloquear Camada" : "Bloquear Camada"}">
776
- ${G ? b.cadeadoTrancado : b.cadeadoAberto}
803
+ <div class="ui-col ui-col-lock ${V ? "" : "ui-lock-open"}" data-layer-lock="${E}" role="button" tabindex="0" aria-label="${V ? "Desbloquear Camada" : "Bloquear Camada"}" title="${V ? "Desbloquear Camada" : "Bloquear Camada"}">
804
+ ${V ? b.cadeadoTrancado : b.cadeadoAberto}
777
805
  </div>
778
806
 
779
807
  <div class="ui-col ui-col-colorbar ui-col-colorbar-editavel" data-layer-color="${E}" role="button" tabindex="0" style="background: ${O};" aria-label="Alterar cor da camada" title="Alterar cor da camada (usada no destaque de seleção)"></div>
780
808
 
781
- <div class="ui-col ui-col-chevron" data-layer-expand="${E}" role="button" tabindex="0" aria-label="${Q ? "Recolher grupo" : "Expandir grupo"}">
782
- <span class="ui-chevron-icon ${Q ? "open" : ""}">${b.chevronDir}</span>
809
+ <div class="ui-col ui-col-chevron" data-layer-expand="${E}" role="button" tabindex="0" aria-label="${Z ? "Recolher grupo" : "Expandir grupo"}">
810
+ <span class="ui-chevron-icon ${Z ? "open" : ""}">${b.chevronDir}</span>
783
811
  </div>
784
812
 
785
813
  <div class="ui-col ui-col-name" data-layer-name-trigger="${E}" title="Clique para ativar camada de desenho | Duplo clique para renomear">
786
- ${l === w.id ? `<input type="text" class="ui-inline-rename-input" data-inline-layer-input="${E}" value="${_}" />` : `${H ? `<span class="ui-group-folder-icon" title="Grupo/Pasta">${b.moverPasta}</span>` : ""}
787
- <span class="ui-name-text">${_}</span>
788
- ${z.length > 0 || !H ? `<span class="ui-count-chip" title="${z.length} ${z.length === 1 ? "feição" : "feições"}${q.length > 0 ? ` · ${q.length} subcamadas` : ""}">${z.length}</span>` : ""}`}
814
+ ${l === x.id ? `<input type="text" class="ui-inline-rename-input" data-inline-layer-input="${E}" value="${W}" />` : `${G ? `<span class="ui-group-folder-icon" title="Grupo/Pasta">${b.moverPasta}</span>` : ""}
815
+ <span class="ui-name-text">${W}</span>
816
+ ${N.length > 0 || !G ? `<span class="ui-count-chip" title="${za(N.length, D.length, P.length)}">${N.length}</span>` : ""}`}
789
817
  </div>
790
818
 
791
819
  <div class="ui-col ui-col-actions">
792
820
  <button class="ui-micro-btn" data-layer-fit="${E}" title="Enquadrar camada no mapa" aria-label="Enquadrar camada no mapa">${b.alvoEnquadrar}</button>
793
- <button class="ui-micro-btn ${ie ? "active" : ""}" data-layer-settings="${E}" title="Ajustar cor, hierarquia, opacidade e excluir" aria-label="Configurações da camada" aria-expanded="${ie}">${b.engrenagem}</button>
821
+ <button class="ui-micro-btn ${se ? "active" : ""}" data-layer-settings="${E}" title="Ajustar cor, hierarquia, opacidade e excluir" aria-label="Configurações da camada" aria-expanded="${se}">${b.engrenagem}</button>
794
822
  </div>
795
823
 
796
824
  <div class="ui-col ui-col-target" data-layer-target="${E}" role="button" tabindex="0" aria-label="Selecionar todas as feições deste grupo" title="Selecionar todas as feições deste grupo">
797
- <div class="ui-target-circle ${he ? "selected" : Ne ? "partial" : ""}"></div>
825
+ <div class="ui-target-circle ${$e ? "selected" : Ze ? "partial" : ""}"></div>
798
826
  </div>
799
827
  </div>
800
828
 
801
- ${Xe}
829
+ ${sa}
802
830
 
803
- <div class="ui-children-container ${S > 0 ? "is-subchildren" : ""}" role="group" style="display: ${Q ? "block" : "none"};">
804
- ${Qe}
805
- ${Ve}
806
- ${Ye}
807
- ${N.length === 0 && z.length === 0 ? `<div class="ui-empty-row"><span>${H ? "Grupo vazio (adicione subcamadas ou feições)" : "Nenhum elemento neste grupo"}</span></div>` : ""}
831
+ <div class="ui-children-container ${M > 0 ? "is-subchildren" : ""}" role="group" style="display: ${Z ? "block" : "none"};">
832
+ ${la}
833
+ ${ta}
834
+ ${ia}
835
+ ${Ie.length === 0 && D.length === 0 ? `<div class="ui-empty-row"><span>${G ? "Grupo vazio (adicione subcamadas ou feições)" : "Camada vazia"}</span></div>` : ""}
808
836
  </div>
809
837
  </div>
810
838
  `;
811
- }, L = ve(r), P = v && v.camadasVisiveis.size === 0 ? `<div class="ui-search-empty" role="status">Nenhum resultado para “${M((s || "").trim())}”</div>` : L.map(($) => I($)).join("");
839
+ }, q = ye(r), J = v && v.camadasVisiveis.size === 0 ? `<div class="ui-search-empty" role="status">Nenhum resultado para “${F((s || "").trim())}”</div>` : q.map((S) => L(S)).join("");
812
840
  return `
813
- ${x}
841
+ ${I}
814
842
  <div class="ui-panel-box">
815
843
  <div class="ui-layer-tree" id="ui-layer-tree-mount" role="tree" aria-label="Camadas e feições" aria-multiselectable="true" part="arvore">
816
- ${P}
844
+ ${J}
817
845
  </div>
818
846
  </div>
819
847
  `;
820
848
  }
821
- function wa(e) {
849
+ function qa(e) {
822
850
  return [
823
851
  {
824
852
  gatilho: "data-layer-name-trigger",
825
853
  input: "data-inline-layer-input",
854
+ linha: "data-layer-row",
826
855
  marcarEditando: (r) => {
827
856
  e.editingLayerId = r;
828
857
  },
@@ -835,6 +864,7 @@ function wa(e) {
835
864
  {
836
865
  gatilho: "data-feat-name-trigger",
837
866
  input: "data-inline-feat-input",
867
+ linha: "data-feat-row",
838
868
  marcarEditando: (r) => {
839
869
  e.editingFeatureId = r;
840
870
  },
@@ -846,8 +876,8 @@ function wa(e) {
846
876
  }
847
877
  ];
848
878
  }
849
- function Aa(e, r) {
850
- for (const a of wa(e))
879
+ function Pa(e, r) {
880
+ for (const a of qa(e))
851
881
  r.querySelectorAll(`[${a.gatilho}]`).forEach((i) => {
852
882
  i.addEventListener("dblclick", (t) => {
853
883
  t.stopPropagation();
@@ -858,29 +888,29 @@ function Aa(e, r) {
858
888
  if (!n) return;
859
889
  n.focus(), n.select();
860
890
  let l = !1;
861
- const c = (s) => {
862
- var d;
891
+ const c = (s, d = !1) => {
892
+ var u, p;
863
893
  if (!l) {
864
894
  if (l = !0, a.marcarEditando(null), s) {
865
- const f = a.aplicar(o, n.value.trim());
866
- f && (f.salvar && ((d = e.salvarLembrancaEstado) == null || d.call(e)), a.emitir(f.detalhe));
895
+ const m = a.aplicar(o, n.value.trim());
896
+ m && (m.salvar && ((u = e.salvarLembrancaEstado) == null || u.call(e)), a.emitir(m.detalhe));
867
897
  }
868
- e.solicitarRenderizacao();
898
+ e.solicitarRenderizacao(), d && ((p = T(r, a.linha, o)) == null || p.focus());
869
899
  }
870
900
  };
871
901
  n.addEventListener("keydown", (s) => {
872
- s.key === "Enter" ? (s.preventDefault(), c(!0)) : s.key === "Escape" && (s.preventDefault(), c(!1));
902
+ s.key === "Enter" ? (s.preventDefault(), c(!0, !0)) : s.key === "Escape" && (s.preventDefault(), c(!1, !0));
873
903
  }), n.addEventListener("blur", () => c(!0));
874
904
  });
875
905
  });
876
906
  }
877
- const Ea = ["dragging", "drop-above", "drop-below", "drop-into"];
878
- class ka {
907
+ const Da = ["dragging", "drop-above", "drop-below", "drop-into"];
908
+ class Ta {
879
909
  constructor(r, a) {
880
- y(this, "host");
881
- y(this, "shadow");
910
+ w(this, "host");
911
+ w(this, "shadow");
882
912
  /** Cancela um arraste por toque em andamento (remove os ouvintes de `window`). */
883
- y(this, "cancelarToque", null);
913
+ w(this, "cancelarToque", null);
884
914
  this.host = r, this.shadow = a;
885
915
  }
886
916
  bindAll() {
@@ -892,11 +922,11 @@ class ka {
892
922
  (r = this.cancelarToque) == null || r.call(this), this.cancelarToque = null;
893
923
  }
894
924
  bindInlineRename() {
895
- Aa(this.host, this.shadow);
925
+ Pa(this.host, this.shadow);
896
926
  }
897
927
  limparClassesDeArraste() {
898
928
  this.shadow.querySelectorAll(".ui-layer-row, .ui-feat-row, .ui-layer-group").forEach((r) => {
899
- r.classList.remove(...Ea);
929
+ r.classList.remove(...Da);
900
930
  });
901
931
  }
902
932
  /** Depois de qualquer mudança na ordem/hierarquia de camadas. */
@@ -912,6 +942,14 @@ class ka {
912
942
  feicao: r.feicao
913
943
  });
914
944
  }
945
+ /** Camada travada (ou sob grupo travado) não recebe nem perde feições pelo arraste. */
946
+ trocaEntreCamadasTravada(r, a) {
947
+ var o;
948
+ const i = (o = this.host.feicoes.find((n) => n.id === r)) == null ? void 0 : o.layerId;
949
+ if (!a || i === a) return !1;
950
+ const t = Ae(this.host.camadas);
951
+ return t.has(a) || !!i && t.has(i);
952
+ }
915
953
  arrasteBloqueado(r) {
916
954
  return !!r.closest("input, button, select") || !!this.host.editingLayerId || !!this.host.editingFeatureId;
917
955
  }
@@ -930,7 +968,7 @@ class ka {
930
968
  const l = n;
931
969
  if (l.preventDefault(), l.stopPropagation(), l.dataTransfer && (l.dataTransfer.dropEffect = "move"), r === "layer") {
932
970
  if (a === o) return;
933
- const c = t.getBoundingClientRect(), s = ga((l.clientY - c.top) / c.height);
971
+ const c = t.getBoundingClientRect(), s = Ca((l.clientY - c.top) / c.height);
934
972
  t.classList.toggle("drop-above", s === "acima"), t.classList.toggle("drop-below", s === "abaixo"), t.classList.toggle("drop-into", s === "dentro");
935
973
  } else r === "feature" && t.classList.add("drop-into");
936
974
  }), t.addEventListener("dragleave", (n) => {
@@ -942,8 +980,8 @@ class ka {
942
980
  l.preventDefault(), l.stopPropagation();
943
981
  const c = t.classList.contains("drop-into") ? "dentro" : t.classList.contains("drop-above") ? "acima" : "abaixo";
944
982
  if (this.limparClassesDeArraste(), r === "layer") {
945
- if (!a || a === o || !this.host.camadas.some((f) => f.id === a) || !this.host.camadas.some((f) => f.id === o)) return;
946
- const d = va(this.host.camadas, a, o, c);
983
+ if (!a || a === o || !this.host.camadas.some((u) => u.id === a) || !this.host.camadas.some((u) => u.id === o)) return;
984
+ const d = $a(this.host.camadas, a, o, c);
947
985
  (d == null ? void 0 : d.tipo) === "hierarquia" ? ((s = this.host.expandedLayers) == null || s.add(d.novoParentId), this.host.dispararEvento("ui-camada-mover-hierarquia", {
948
986
  camadaId: d.camada.id,
949
987
  novoParentId: d.novoParentId,
@@ -956,8 +994,8 @@ class ka {
956
994
  camada: d.camada
957
995
  }), this.aposReordenarCamadas();
958
996
  } else if (r === "feature") {
959
- if (!i) return;
960
- const d = ha(this.host.feicoes, this.host.camadas, i, o);
997
+ if (!i || this.trocaEntreCamadasTravada(i, o)) return;
998
+ const d = Ma(this.host.feicoes, this.host.camadas, i, o);
961
999
  d && (this.emitirFeicaoMovida(d), this.host.solicitarRenderizacao());
962
1000
  }
963
1001
  }), t.addEventListener("dragend", () => {
@@ -986,8 +1024,8 @@ class ka {
986
1024
  if (r !== "feature" || !i || i === o) return;
987
1025
  c.preventDefault(), c.stopPropagation();
988
1026
  const s = t.classList.contains("drop-above");
989
- this.limparClassesDeArraste();
990
- const d = xa(this.host.feicoes, i, o, s);
1027
+ if (this.limparClassesDeArraste(), this.trocaEntreCamadasTravada(i, n)) return;
1028
+ const d = Fa(this.host.feicoes, i, o, s);
991
1029
  d && (d.mudouDeCamada && this.emitirFeicaoMovida(d), this.host.dispararEvento("ui-feicoes-reordenadas", { feicoes: [...this.host.feicoes] }), this.host.solicitarRenderizacao());
992
1030
  }), t.addEventListener("dragend", (l) => {
993
1031
  l.stopPropagation(), r = null, i = null, a = null, this.limparClassesDeArraste();
@@ -1004,18 +1042,18 @@ class ka {
1004
1042
  if (!a) return;
1005
1043
  const i = a.getAttribute("data-layer-id");
1006
1044
  i && r.addEventListener("pointerdown", (t) => {
1007
- var f;
1045
+ var u;
1008
1046
  const o = t;
1009
1047
  if (o.pointerType === "mouse" && o.button !== 0 || this.host.editingLayerId || this.host.editingFeatureId) return;
1010
- (f = this.cancelarToque) == null || f.call(this);
1048
+ (u = this.cancelarToque) == null || u.call(this);
1011
1049
  let n = null, l = !1;
1012
1050
  const c = (p) => {
1013
1051
  p.preventDefault(), a.classList.add("dragging");
1014
- const m = this.shadow.elementFromPoint(p.clientX, p.clientY), u = m ? m.closest(".ui-layer-row") : null;
1015
- if (n && n !== u && n.classList.remove("drop-above", "drop-below"), u && u !== a) {
1016
- n = u;
1017
- const g = u.getBoundingClientRect();
1018
- l = p.clientY - g.top < g.height / 2, u.classList.toggle("drop-above", l), u.classList.toggle("drop-below", !l);
1052
+ const m = this.shadow.elementFromPoint(p.clientX, p.clientY), f = m ? m.closest(".ui-layer-row") : null;
1053
+ if (n && n !== f && n.classList.remove("drop-above", "drop-below"), f && f !== a) {
1054
+ n = f;
1055
+ const g = f.getBoundingClientRect();
1056
+ l = p.clientY - g.top < g.height / 2, f.classList.toggle("drop-above", l), f.classList.toggle("drop-below", !l);
1019
1057
  } else
1020
1058
  n = null;
1021
1059
  }, s = () => {
@@ -1023,7 +1061,7 @@ class ka {
1023
1061
  }, d = () => {
1024
1062
  s();
1025
1063
  const p = n == null ? void 0 : n.getAttribute("data-layer-id");
1026
- this.limparClassesDeArraste(), p && ba(this.host.camadas, i, p, l) && this.aposReordenarCamadas();
1064
+ this.limparClassesDeArraste(), p && Sa(this.host.camadas, i, p, l) && this.aposReordenarCamadas();
1027
1065
  };
1028
1066
  this.cancelarToque = () => {
1029
1067
  s(), this.limparClassesDeArraste();
@@ -1032,26 +1070,60 @@ class ka {
1032
1070
  });
1033
1071
  }
1034
1072
  }
1035
- const Ia = "ui_camadas_estado_";
1036
- function La(e, r) {
1073
+ const Ra = "ui_camadas_estado_";
1074
+ function Oa(e, r) {
1037
1075
  const a = (e || r || "default").trim();
1038
- return `${Ia}${a}`;
1076
+ return `${Ra}${a}`;
1077
+ }
1078
+ function ve(e) {
1079
+ return !!e && typeof e == "object" && !Array.isArray(e);
1080
+ }
1081
+ function te(e) {
1082
+ return Array.isArray(e) ? e.filter((r) => typeof r == "string") : [];
1083
+ }
1084
+ function Pe(e) {
1085
+ if (!ve(e)) return;
1086
+ const r = {};
1087
+ return typeof e.name == "string" && (r.name = e.name), typeof e.visible == "boolean" && (r.visible = e.visible), typeof e.locked == "boolean" && (r.locked = e.locked), typeof e.opacity == "number" && Number.isFinite(e.opacity) && e.opacity >= 0 && e.opacity <= 1 && (r.opacity = e.opacity), typeof e.color == "string" && (r.color = e.color), (typeof e.parentId == "string" || e.parentId === null) && (r.parentId = e.parentId), r;
1088
+ }
1089
+ function ja(e) {
1090
+ if (!ve(e)) return null;
1091
+ const r = {};
1092
+ if (ve(e.camadasOverrides))
1093
+ for (const [i, t] of Object.entries(e.camadasOverrides)) {
1094
+ const o = Pe(t);
1095
+ if (!o) continue;
1096
+ const n = Pe(t.origem);
1097
+ r[i] = n ? { ...o, origem: n } : o;
1098
+ }
1099
+ const a = e.altura;
1100
+ return {
1101
+ versao: typeof e.versao == "number" ? e.versao : 1,
1102
+ expandedLayerIds: te(e.expandedLayerIds),
1103
+ collapsedLayerIds: te(e.collapsedLayerIds),
1104
+ camadaAtivaId: typeof e.camadaAtivaId == "string" ? e.camadaAtivaId : null,
1105
+ painelColapsado: typeof e.painelColapsado == "boolean" ? e.painelColapsado : void 0,
1106
+ ordemCamadasIds: te(e.ordemCamadasIds),
1107
+ ordemOrigemIds: Array.isArray(e.ordemOrigemIds) ? te(e.ordemOrigemIds) : void 0,
1108
+ mapaBaseAtivo: typeof e.mapaBaseAtivo == "string" ? e.mapaBaseAtivo : void 0,
1109
+ densidade: e.densidade === "compacto" || e.densidade === "normal" ? e.densidade : void 0,
1110
+ altura: typeof a == "number" && Number.isFinite(a) && a > 0 ? a : null,
1111
+ camadasOverrides: r,
1112
+ ultimaAtualizacao: typeof e.ultimaAtualizacao == "number" ? e.ultimaAtualizacao : void 0
1113
+ };
1039
1114
  }
1040
- function fe(e) {
1115
+ function be(e) {
1041
1116
  if (typeof window > "u" || typeof localStorage > "u")
1042
1117
  return null;
1043
1118
  try {
1044
1119
  const r = localStorage.getItem(e);
1045
- if (!r) return null;
1046
- const a = JSON.parse(r);
1047
- if (a && typeof a == "object")
1048
- return a;
1120
+ return r ? ja(JSON.parse(r)) : null;
1049
1121
  } catch (r) {
1050
1122
  console.warn(`[UI-Camadas] Não foi possível carregar o estado persistido (${e}):`, r);
1051
1123
  }
1052
1124
  return null;
1053
1125
  }
1054
- function Ca(e, r) {
1126
+ function Na(e, r) {
1055
1127
  if (!(typeof window > "u" || typeof localStorage > "u"))
1056
1128
  try {
1057
1129
  localStorage.setItem(e, JSON.stringify(r));
@@ -1059,14 +1131,14 @@ function Ca(e, r) {
1059
1131
  console.warn(`[UI-Camadas] Não foi possível salvar o estado persistido (${e}):`, a);
1060
1132
  }
1061
1133
  }
1062
- function $a(e) {
1134
+ function Ha(e) {
1063
1135
  if (!(typeof window > "u" || typeof localStorage > "u"))
1064
1136
  try {
1065
1137
  localStorage.removeItem(e);
1066
1138
  } catch {
1067
1139
  }
1068
1140
  }
1069
- function Te(e) {
1141
+ function Xe(e) {
1070
1142
  return {
1071
1143
  name: e.name,
1072
1144
  visible: e.visible !== !1,
@@ -1076,46 +1148,46 @@ function Te(e) {
1076
1148
  parentId: e.parentId !== void 0 ? e.parentId : null
1077
1149
  };
1078
1150
  }
1079
- function Sa(e, r, a, i) {
1080
- var f;
1151
+ function Ga(e, r, a, i) {
1152
+ var u;
1081
1153
  if (!Array.isArray(e)) return;
1082
1154
  const t = (r == null ? void 0 : r.camadasOverrides) || {}, o = new Set((r == null ? void 0 : r.expandedLayerIds) || []), n = new Set((r == null ? void 0 : r.collapsedLayerIds) || []), l = o.size > 0 || n.size > 0;
1083
1155
  for (let p = 0; p < e.length; p++) {
1084
- const m = e[p], u = t[m.id];
1085
- if (i == null || i.set(m.id, Te(m)), u) {
1086
- const g = u.origem, v = (h) => {
1156
+ const m = e[p], f = t[m.id];
1157
+ if (i == null || i.set(m.id, Xe(m)), f) {
1158
+ const g = f.origem, v = (h) => {
1087
1159
  var C;
1088
1160
  const k = (C = i == null ? void 0 : i.get(m.id)) == null ? void 0 : C[h];
1089
1161
  return g !== void 0 && g[h] !== k;
1090
1162
  };
1091
- typeof u.name == "string" && u.name.trim() && !v("name") && (m.name = u.name), typeof u.visible == "boolean" && !v("visible") && (m.visible = u.visible), typeof u.locked == "boolean" && !v("locked") && (m.locked = u.locked), typeof u.opacity == "number" && !v("opacity") && (m.opacity = u.opacity), typeof u.color == "string" && !v("color") && (m.color = u.color), u.parentId !== void 0 && !v("parentId") && (m.parentId = u.parentId);
1163
+ typeof f.name == "string" && f.name.trim() && !v("name") && (m.name = f.name), typeof f.visible == "boolean" && !v("visible") && (m.visible = f.visible), typeof f.locked == "boolean" && !v("locked") && (m.locked = f.locked), typeof f.opacity == "number" && !v("opacity") && (m.opacity = f.opacity), typeof f.color == "string" && !v("color") && (m.color = f.color), f.parentId !== void 0 && !v("parentId") && (m.parentId = f.parentId);
1092
1164
  }
1093
1165
  l ? o.has(m.id) ? a.add(m.id) : n.has(m.id) ? a.delete(m.id) : a.add(m.id) : a.add(m.id);
1094
1166
  }
1095
1167
  for (let p = 0; p < e.length; p++) {
1096
1168
  const m = e[p];
1097
- m.parentId && (m.parentId === m.id || te(e, m.parentId, m.id)) && (m.parentId = ((f = i == null ? void 0 : i.get(m.id)) == null ? void 0 : f.parentId) ?? null);
1169
+ m.parentId && (m.parentId === m.id || _(e, m.parentId, m.id)) && (m.parentId = ((u = i == null ? void 0 : i.get(m.id)) == null ? void 0 : u.parentId) ?? null);
1098
1170
  }
1099
1171
  const c = new Set(e.map((p) => p.id)), s = r == null ? void 0 : r.ordemOrigemIds;
1100
1172
  if (!(Array.isArray(s) && (() => {
1101
- const p = new Set(s), m = (u) => u.filter((g) => c.has(g) && p.has(g)).join("|");
1102
- return m(s) !== m(e.map((u) => u.id));
1173
+ const p = new Set(s), m = (f) => f.filter((g) => c.has(g) && p.has(g)).join("|");
1174
+ return m(s) !== m(e.map((f) => f.id));
1103
1175
  })()) && Array.isArray(r == null ? void 0 : r.ordemCamadasIds) && r.ordemCamadasIds.length > 0) {
1104
1176
  const p = /* @__PURE__ */ new Map();
1105
- r.ordemCamadasIds.forEach((m, u) => p.set(m, u)), e.sort((m, u) => {
1106
- const g = p.has(m.id) ? p.get(m.id) : 9999, v = p.has(u.id) ? p.get(u.id) : 9999;
1177
+ r.ordemCamadasIds.forEach((m, f) => p.set(m, f)), e.sort((m, f) => {
1178
+ const g = p.has(m.id) ? p.get(m.id) : 9999, v = p.has(f.id) ? p.get(f.id) : 9999;
1107
1179
  return g - v;
1108
1180
  });
1109
1181
  }
1110
1182
  }
1111
- function Ma(e) {
1183
+ function Ua(e) {
1112
1184
  const { estadoAnterior: r, camadas: a, expandedLayers: i } = e;
1113
1185
  let t = (r == null ? void 0 : r.expandedLayerIds) || [], o = (r == null ? void 0 : r.collapsedLayerIds) || [], n = (r == null ? void 0 : r.ordemCamadasIds) || [], l = r == null ? void 0 : r.ordemOrigemIds;
1114
1186
  const c = {
1115
1187
  ...(r == null ? void 0 : r.camadasOverrides) || {}
1116
1188
  };
1117
1189
  a.length > 0 && (t = [], o = [], n = a.map((s) => s.id), l = e.origensCamadas ? [...e.origensCamadas.keys()] : n, a.forEach((s) => {
1118
- var d, f;
1190
+ var d, u;
1119
1191
  i.has(s.id) ? t.push(s.id) : o.push(s.id), c[s.id] = {
1120
1192
  name: s.name,
1121
1193
  visible: s.visible !== !1,
@@ -1123,7 +1195,7 @@ function Ma(e) {
1123
1195
  opacity: typeof s.opacity == "number" ? s.opacity : 1,
1124
1196
  color: s.color || "#00E08A",
1125
1197
  parentId: s.parentId !== void 0 ? s.parentId : null,
1126
- origem: ((d = e.origensCamadas) == null ? void 0 : d.get(s.id)) ?? ((f = c[s.id]) == null ? void 0 : f.origem)
1198
+ origem: ((d = e.origensCamadas) == null ? void 0 : d.get(s.id)) ?? ((u = c[s.id]) == null ? void 0 : u.origem)
1127
1199
  };
1128
1200
  }));
1129
1201
  for (const s of e.camadasRemovidas ?? []) delete c[s];
@@ -1142,8 +1214,65 @@ function Ma(e) {
1142
1214
  ultimaAtualizacao: Date.now()
1143
1215
  };
1144
1216
  }
1145
- const Fa = `:host{display:flex;flex-direction:column;box-sizing:border-box;font-family:inherit;font-size:11px;color:var(--ui-cor-texto, #e1e1e6);-webkit-user-select:none;user-select:none;width:100%;height:var(--ui-camadas-altura, 100%);min-height:var(--ui-camadas-min-altura, 140px);position:relative;--camada-respiro: 8px;--camada-barra-altura: 28px;--camada-linha-altura: 25px;--camada-thumb-tamanho: 20px;--camada-transicao: .16s cubic-bezier(.16, 1, .3, 1)}:host([densidade="compacto"]){--camada-linha-altura: 22px;--camada-thumb-tamanho: 17px;font-size:10px}:host([flutuante]){position:absolute;top:10px;right:10px;bottom:46px;z-index:var(--ui-z-workspace-hud, 500);width:auto;height:var(--ui-camadas-altura, auto)}*,*:before,*:after{box-sizing:border-box}:host(:not([flutuante])) .ui-camadas-container{max-width:100%;min-width:0;border:none;box-shadow:none;border-radius:0;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none}.ui-camadas-container{display:flex;flex-direction:column;flex:1 1 auto;height:100%;min-height:0;width:100%;max-width:380px;min-width:270px;background:var(--ui-cor-superficie, #141417);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));border-radius:var(--ui-raio-borda, 8px);box-shadow:var(--ui-sombra-lg, 0 10px 30px -4px rgba(0, 0, 0, .5)),0 0 0 1px color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 5%,transparent);overflow:hidden;position:relative;transition:transform .24s cubic-bezier(.16,1,.3,1),opacity .2s ease;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}:host([colapsado]) .ui-camadas-container{transform:translate(calc(100% + 24px));opacity:0;pointer-events:none}.ui-camadas-toggle-flutuante{display:none;position:absolute;top:10px;right:10px;z-index:calc(var(--ui-z-workspace-hud, 500) - 1);background:var(--ui-cor-superficie, #141417);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .18));border-radius:var(--ui-raio-borda, 6px);color:var(--ui-cor-texto, #ffffff);width:34px;height:34px;cursor:pointer;align-items:center;justify-content:center;box-shadow:var(--ui-sombra-md, 0 8px 20px rgba(0, 0, 0, .45));transition:all var(--camada-transicao)}:host([colapsado][flutuante]) .ui-camadas-toggle-flutuante{display:flex}.ui-camadas-toggle-flutuante:hover{border-color:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-primaria, #00E08A);transform:scale(1.08);box-shadow:0 0 14px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-camadas-header{height:var(--camada-barra-altura);min-height:var(--camada-barra-altura);max-height:var(--camada-barra-altura);display:flex;align-items:center;justify-content:space-between;padding:0 5px;border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));background:var(--ui-cor-fundo-elevado, rgba(0, 0, 0, .28));gap:4px}.ui-camadas-tabs{display:flex;gap:3px;flex:1}.ui-camadas-tab-btn{flex:1;background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);height:24px;padding:0 6px;font-size:11px;font-weight:500;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:5px;white-space:nowrap;transition:all var(--camada-transicao)}.ui-camadas-tab-btn:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .07))}.ui-camadas-tab-btn.active{color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 25%,transparent);font-weight:600}.ui-camadas-btn-colapsar{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:22px;height:22px;cursor:pointer;border-radius:var(--ui-raio-sm, 4px);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all var(--camada-transicao)}.ui-camadas-btn-colapsar:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .09))}.ui-camadas-corpo{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding:0 var(--camada-respiro) var(--camada-respiro);display:flex;flex-direction:column;gap:6px;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 16%,transparent) transparent}.ui-camadas-corpo::-webkit-scrollbar{width:4px}.ui-camadas-corpo::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 18%,transparent);border-radius:var(--ui-raio-sm, 4px)}.ui-camadas-corpo::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 32%,transparent)}.ui-tree-toolbar{display:flex;align-items:center;justify-content:space-between;box-sizing:border-box;height:var(--camada-barra-altura);min-height:var(--camada-barra-altura);flex-shrink:0;margin:0 calc(-1 * var(--camada-respiro));padding:0 var(--camada-respiro);gap:8px;border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .06))}.ui-tree-title-group{display:flex;align-items:center;gap:5px}.ui-tree-section-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-cor-texto-secundario, #888899)}.ui-tree-count-badge{font-size:9px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent);color:var(--ui-cor-texto-secundario, #888899);padding:1px 5px;border-radius:8px;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent)}.ui-tree-actions{display:flex;align-items:center;gap:3px}.ui-tree-action-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);border-radius:var(--ui-raio-sm, 4px);width:24px;height:24px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-tree-action-btn:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .09))}.ui-tree-btn-new{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 14%,transparent);border:none;color:var(--ui-cor-primaria, #00E08A);border-radius:var(--ui-raio-sm, 4px);height:24px;padding:0 8px;font-size:10px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-tree-btn-new:hover{background:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-texto-sobre-primaria, #000000)}.ui-tree-search-wrapper{position:relative;display:flex;align-items:center;margin:1px 0}.ui-tree-search-icon{position:absolute;left:8px;color:var(--ui-cor-texto-secundario, #888899);pointer-events:none;display:flex;align-items:center}.ui-tree-search-input{width:100%;height:25px;background:var(--ui-cor-fundo, #0a0a0c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));border-radius:var(--ui-raio-borda, 5px);padding:0 24px 0 26px;color:var(--ui-cor-texto, #ffffff);font-size:10.5px;outline:none;transition:border-color var(--camada-transicao),box-shadow var(--camada-transicao)}.ui-tree-search-input:focus{border-color:var(--ui-cor-primaria, #00E08A);box-shadow:0 0 0 2px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 18%,transparent)}.ui-tree-search-clear{position:absolute;right:5px;background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);cursor:pointer;width:18px;height:18px;display:flex;align-items:center;justify-content:center;border-radius:3px;transition:all var(--camada-transicao)}.ui-tree-search-clear:hover{color:var(--ui-cor-texto, #ffffff);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 10%,transparent)}.ui-panel-box{background:var(--ui-cor-fundo, #0c0c0f);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));border-radius:var(--ui-raio-borda, 6px);overflow:hidden;display:flex;flex-direction:column;flex:1 1 0%;min-height:140px}.ui-search-empty{padding:14px 10px;text-align:center;font-size:11px;color:var(--ui-cor-texto-secundario, #888899);overflow-wrap:anywhere}.ui-layer-tree{flex:1 1 0%;min-height:40px;overflow-y:auto;overflow-x:hidden}.ui-layer-group{border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .04));transition:background var(--camada-transicao)}.ui-layer-group.drop-into{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 9%,transparent)!important;outline:1.5px dashed var(--ui-cor-primaria, #00E08A);outline-offset:-1.5px}.ui-layer-row,.ui-feat-row{display:flex;align-items:center;height:var(--camada-linha-altura);min-height:var(--camada-linha-altura);max-height:var(--camada-linha-altura);padding:0 4px;-webkit-user-select:none;user-select:none;cursor:default;transition:background .1s ease;position:relative}.ui-layer-row{background:var(--ui-cor-fundo-elevado, #18181d);font-weight:600;cursor:pointer;border-left:3px solid transparent}.ui-layer-row:hover{background:var(--ui-cor-hover-menu, #22222a)}.ui-layer-row.active-drawing-layer{background:color-mix(in srgb,var(--layer-active-color, var(--ui-cor-primaria, #00E08A)) 18%,var(--ui-cor-fundo-elevado, #18181d))!important;border-left:3px solid var(--layer-active-color, var(--ui-cor-primaria, #00E08A))!important;box-shadow:inset 0 0 12px color-mix(in srgb,var(--layer-active-color, var(--ui-cor-primaria, #00E08A)) 10%,transparent)}.ui-layer-row.active-drawing-layer .ui-name-text{color:var(--ui-cor-texto, #e1e1e6);font-weight:700}.ui-feat-row{border-left:3px solid transparent;padding-left:13px;background:var(--ui-cor-fundo, #101014);font-weight:400;cursor:pointer}.ui-feat-row:hover{background:var(--ui-cor-hover-menu, #19191f)}.ui-feat-row.selected-row{background:color-mix(in srgb,var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff)) 20%,var(--ui-cor-fundo, #101014))!important;outline:1px solid color-mix(in srgb,var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff)) 55%,transparent)!important;outline-offset:-1px}.ui-layer-row.hidden-layer,.ui-feat-row.hidden-row{opacity:.52}.ui-layer-row.hidden-layer .ui-col-eye,.ui-feat-row.hidden-row .ui-col-eye{color:var(--ui-cor-texto-alerta, #ffb86c);opacity:.95}.ui-layer-row.dragging,.ui-feat-row.dragging{opacity:.35;background:color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 16%,transparent)!important}.ui-layer-row.drop-above:before,.ui-feat-row.drop-above:before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:var(--ui-cor-texto-info, #33b5ff);box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 100%,transparent);z-index:20;pointer-events:none}.ui-layer-row.drop-below:after,.ui-feat-row.drop-below:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background:var(--ui-cor-texto-info, #33b5ff);box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 100%,transparent);z-index:20;pointer-events:none}.ui-layer-row.drop-into{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 16%,transparent)!important;outline:1.5px dashed var(--ui-cor-primaria, #00E08A)!important;outline-offset:-2px;border-radius:var(--ui-raio-sm, 4px)}.ui-layer-row.is-sublayer{background:color-mix(in srgb,var(--ui-cor-fundo-elevado, #18181d) 70%,transparent)}.ui-group-folder-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--ui-cor-texto-alerta, #ffb86c);margin-right:4px;flex-shrink:0}.ui-col{display:flex;align-items:center;justify-content:center;flex-shrink:0;height:var(--camada-linha-altura)}.ui-col-drag{width:8px;margin-right:1px;cursor:grab;color:var(--ui-cor-texto-secundario, #888899);opacity:.35;touch-action:none;transition:opacity var(--camada-transicao),color var(--camada-transicao)}.ui-layer-row:hover .ui-col-drag,.ui-feat-row:hover .ui-col-drag{opacity:.9;color:var(--ui-cor-primaria, #00E08A)}.ui-col-drag:active{cursor:grabbing}.ui-col-eye{width:20px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);transition:color var(--camada-transicao)}.ui-col-eye:hover{color:var(--ui-cor-primaria, #00E08A)}.ui-col-lock{width:18px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);transition:color var(--camada-transicao)}.ui-col-lock:hover{color:var(--ui-cor-texto-alerta, #ffb86c)}.ui-col-colorbar{width:3.5px;height:16px;margin:0 3px 0 2px;border-radius:1.5px;flex-shrink:0}.ui-col-colorbar-editavel{position:relative;width:5px;height:18px;cursor:pointer}.ui-col-colorbar-editavel:before{content:"";position:absolute;top:-3px;right:-4px;bottom:-3px;left:-4px}.ui-col-colorbar-editavel:hover,.ui-col-colorbar-editavel:focus-visible{filter:brightness(1.3);outline:none}.ui-col-chevron,.ui-col-branch{margin-left:calc(var(--layer-depth, 0) * 12px)}.ui-col-chevron{width:14px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);display:flex;align-items:center;justify-content:center}.ui-chevron-icon{display:inline-flex;align-items:center;justify-content:center;transition:transform var(--camada-transicao)}.ui-chevron-icon.open{transform:rotate(90deg)}.ui-col-branch{width:14px;display:flex;align-items:center;justify-content:center;color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 22%,transparent);font-size:10px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace)}.ui-col-thumb{width:calc(var(--camada-thumb-tamanho) + 3px);margin-right:4px;display:flex;align-items:center;justify-content:center}.ui-thumb-box{width:var(--camada-thumb-tamanho);height:var(--camada-thumb-tamanho);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 15%,transparent);border-radius:3px;background:var(--ui-cor-fundo, #0d0d10);box-sizing:border-box;overflow:hidden;display:flex;align-items:center;justify-content:center}.ui-col-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;color:var(--ui-cor-texto, #e1e1e6);padding-left:2px;padding-right:4px;cursor:pointer;display:flex;align-items:center;justify-content:flex-start;text-align:left;gap:4px}.ui-name-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-count-chip{font-size:9px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;color:var(--ui-cor-texto-secundario, #888899);font-weight:400;padding:0 2px;flex-shrink:0}.ui-col-actions{display:flex;align-items:center;gap:2px;opacity:0;transition:opacity var(--camada-transicao)}.ui-layer-row:hover .ui-col-actions,.ui-feat-row:hover .ui-col-actions{opacity:1}.ui-micro-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:18px;height:18px;padding:0;border-radius:3px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-micro-btn:hover{color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12))}.ui-micro-btn.active{color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 18%,transparent)}.ui-col-target{width:22px;cursor:pointer}.ui-target-circle{width:11px;height:11px;border-radius:50%;border:1.5px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 32%,transparent);background:transparent;transition:all .12s ease}.ui-col-target:hover .ui-target-circle{border-color:var(--ui-cor-texto-info, #33b5ff);transform:scale(1.18)}.ui-target-circle.selected{border:2px solid var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff));background:var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff));box-shadow:inset 0 0 0 2px var(--ui-cor-superficie, #141418)}.ui-target-circle.partial{border:2px solid var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff));background:color-mix(in srgb,var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff)) 40%,transparent)}.ui-inline-rename-input{width:100%;height:20px;background:var(--ui-cor-fundo, #0d0d10);color:var(--ui-cor-texto, #e1e1e6);border:1px solid var(--ui-cor-primaria, #00E08A);border-radius:3px;font-size:10.5px;padding:0 4px;outline:none;box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 40%,transparent)}.ui-layer-settings-drawer{background:linear-gradient(180deg,var(--ui-cor-fundo-elevado, #17171e) 0%,var(--ui-cor-superficie, #0f0f13) 100%);padding:10px 14px 12px;border-top:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);border-bottom:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent);border-left:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));display:flex;flex-direction:column;gap:10px;box-shadow:inset 0 1px color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent),0 6px 16px #00000073;animation:drawerSlideDown .18s cubic-bezier(.16,1,.3,1);position:relative;z-index:10}@keyframes drawerSlideDown{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.ui-drawer-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:6px;border-bottom:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent)}.ui-drawer-header-left{display:flex;align-items:center;gap:7px;min-width:0}.ui-drawer-icon{color:var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));display:flex;align-items:center;flex-shrink:0}.ui-drawer-title{font-size:10.5px;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);text-transform:uppercase;letter-spacing:.6px;white-space:nowrap}.ui-drawer-layer-chip{font-size:9.5px;font-weight:500;color:var(--ui-cor-texto-secundario, #888899);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent);padding:1px 6px;border-radius:var(--ui-raio-sm, 4px);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-drawer-btn-fechar{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:20px;height:20px;padding:0;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-drawer-btn-fechar:hover{color:var(--ui-cor-texto, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-body{display:flex;flex-direction:column;gap:10px}.ui-drawer-row{display:flex;flex-direction:column;gap:5px}.ui-drawer-row-label{display:flex;justify-content:space-between;align-items:center;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:var(--ui-cor-texto-secundario, #888899)}.ui-drawer-color-group{display:flex;align-items:center;justify-content:space-between;gap:8px}.ui-drawer-color-pill{position:relative;display:inline-flex;align-items:center;gap:6px;padding:3px 8px 3px 5px;background:var(--ui-cor-fundo, #0b0b0d);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 16%,transparent);border-radius:var(--ui-raio-sm, 4px);cursor:pointer;transition:all var(--camada-transicao);-webkit-user-select:none;user-select:none}.ui-drawer-color-pill:hover{border-color:var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 25%,transparent)}.ui-drawer-color-sample{width:14px;height:14px;border-radius:3px;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 35%,transparent);box-shadow:var(--ui-sombra-sm, 0 1px 3px rgba(0, 0, 0, .5));flex-shrink:0;transition:background-color .1s ease}.ui-drawer-color-hex{font-size:10px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);letter-spacing:.5px}.ui-drawer-color-native{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.ui-drawer-badge{font-size:9.5px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 10%,transparent);padding:1px 6px;border-radius:var(--ui-raio-sm, 4px);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-slider-container{display:flex;flex-direction:column;gap:4px}.ui-drawer-slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:5px;background:linear-gradient(90deg,color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent) 0%,var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A)) 100%);border-radius:3px;outline:none;margin:3px 0;cursor:pointer;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-slider::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:#fff;border:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));box-shadow:0 0 6px #0009,0 0 10px var(--drawer-cor-camada, rgba(0, 224, 138, .6));cursor:pointer;transition:transform .12s ease}.ui-drawer-slider::-webkit-slider-thumb:hover{transform:scale(1.22)}.ui-drawer-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:#fff;border:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));box-shadow:0 0 6px #0009,0 0 10px var(--drawer-cor-camada, rgba(0, 224, 138, .6));cursor:pointer}.ui-drawer-footer{display:flex;align-items:center;justify-content:space-between;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent)}.ui-drawer-meta-info{font-size:9.5px;color:var(--ui-cor-texto-secundario, #888899);font-style:italic}.ui-drawer-actions{display:flex;align-items:center;gap:6px}.ui-drawer-btn-danger{background:color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 10%,transparent);border:1px solid color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 35%,transparent);color:var(--ui-cor-texto-erro, #ff5555);border-radius:var(--ui-raio-sm, 4px);height:24px;padding:0 10px;font-size:10px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:all var(--camada-transicao)}.ui-drawer-btn-danger:hover{background:var(--ui-cor-botao-destrutivo-fundo, #d32f2f);color:var(--ui-cor-botao-destrutivo-texto, #ffffff);border-color:var(--ui-cor-botao-destrutivo-fundo, #d32f2f);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 45%,transparent);transform:translateY(-.5px)}.ui-drawer-btn-danger.confirming{background:var(--ui-cor-botao-destrutivo-hover, #b71c1c);color:var(--ui-cor-botao-destrutivo-texto, #ffffff);border-color:var(--ui-cor-botao-destrutivo-hover, #b71c1c);animation:pulseDanger 1.2s infinite}@keyframes pulseDanger{0%{transform:scale(1)}50%{transform:scale(1.02)}to{transform:scale(1)}}.ui-previa-dot{width:6px;height:6px;margin-left:4px;border-radius:50%;flex-shrink:0;background:var(--ui-cor-texto-alerta, #ffb86c);box-shadow:0 0 0 2px color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 25%,transparent)}.ui-tree-footer{height:var(--camada-barra-altura);min-height:var(--camada-barra-altura);background:var(--ui-cor-fundo-elevado, #121216);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));display:flex;align-items:center;justify-content:space-between;padding:0 var(--camada-respiro);gap:6px;box-sizing:border-box;overflow:hidden;position:relative;flex-shrink:0;margin:0 calc(-1 * var(--camada-respiro))}.ui-footer-left{display:flex;align-items:center;gap:5px;white-space:nowrap;min-width:0;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis}.ui-footer-count{font-size:11px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-primaria, #00E08A);flex-shrink:0}.ui-footer-label{display:inline-flex;align-items:center;color:var(--ui-cor-texto-secundario, #888899);flex-shrink:0}.ui-footer-actions-gerais{display:flex;align-items:center;gap:4px;flex-shrink:0}.ui-footer-chip-btn{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent);border:none;color:var(--ui-cor-texto-secundario, #a0a0b0);font-size:10px;font-weight:600;height:22px;padding:0 8px;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-footer-chip-btn:hover{background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #ffffff)}.ui-footer-chip-btn.primario{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 14%,transparent);color:var(--ui-cor-primaria, #00E08A)}.ui-footer-chip-btn.primario:hover{background:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-texto-sobre-primaria, #000000)}.ui-footer-right{display:flex;align-items:center;gap:4px;flex:1 1 auto;min-width:0}.ui-footer-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:22px;height:22px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all var(--camada-transicao);flex-shrink:0}.ui-footer-btn:hover:not(.disabled){color:var(--ui-cor-texto, #e1e1e6);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12))}.ui-footer-btn.disabled{opacity:.25;cursor:not-allowed}.ui-footer-btn.btn-danger-footer:hover:not(.disabled){color:#f55;background:#ff555526}.ui-footer-btn.confirming{background:#f55!important;color:#fff!important}.ui-footer-move-wrapper{position:relative;display:flex;align-items:center;flex:1 1 auto;min-width:0}.ui-footer-select{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23888899' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 6px center;background-size:10px;border:none;color:var(--ui-cor-texto, #e1e1e6);border-radius:var(--ui-raio-sm, 4px);font:inherit;font-size:10px;font-weight:500;height:22px;padding:0 22px 0 8px;cursor:pointer;width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-footer-select:hover:not(:disabled){background-color:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12))}.ui-footer-select:focus-visible{outline:1px solid var(--ui-cor-primaria, #00E08A)}.ui-tree-btn-group{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent);border:none;color:var(--ui-cor-texto-secundario, #a0a0b0);border-radius:var(--ui-raio-sm, 4px);height:24px;padding:0 7px;font-size:10px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-tree-btn-group:hover{background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #ffffff)}.ui-drawer-btn-sublayer{background:#ffffff0f;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #e1e1e6);font-size:10.5px;font-weight:500;padding:4px 8px;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-drawer-btn-sublayer:hover{background:#ffffff1f;color:var(--ui-cor-primaria, #00E08A);border-color:var(--ui-cor-primaria, #00E08A)}.ui-drawer-select-wrapper{display:flex;align-items:center}.ui-drawer-select{background:var(--ui-cor-fundo, #16161c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .15));color:var(--ui-cor-texto, #e1e1e6);border-radius:4px;font-size:10.5px;height:24px;padding:0 6px;cursor:pointer;max-width:140px}.ui-basemap-section{display:flex;flex-direction:column;gap:4px;flex-shrink:0}.ui-basemap-toggle{display:flex;align-items:center;gap:6px;width:100%;padding:2px;background:transparent;border:0;border-radius:var(--ui-raio-sm, 4px);font:inherit;color:inherit;cursor:pointer;text-align:left}.ui-basemap-toggle:hover .ui-basemap-title{color:var(--ui-cor-texto, #e1e1e6)}.ui-basemap-toggle:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:1px}.ui-basemap-atual{flex:1 1 auto;min-width:0;font-size:10px;color:var(--ui-cor-primaria, #00E08A);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:right}.ui-basemap-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:4px}.ui-basemap-card{display:flex;flex-direction:column;align-items:center;gap:2px;padding:3px;border-radius:var(--ui-raio-borda, 5px);background:var(--ui-cor-fundo, #101014);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:pointer;transition:all var(--camada-transicao);text-align:center;overflow:hidden}.ui-basemap-card:hover{border-color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-fundo-elevado, #17171c)}.ui-basemap-card.active{border-color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);color:var(--ui-cor-primaria, #00E08A);font-weight:600;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-basemap-preview{width:100%;height:22px;border-radius:3px;object-fit:cover;opacity:.85;transition:opacity var(--camada-transicao)}.ui-basemap-preview-none{width:100%;height:22px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 4%,transparent);border-radius:3px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-card:hover .ui-basemap-preview,.ui-basemap-card.active .ui-basemap-preview{opacity:1}.ui-basemap-card span{font-size:9.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.ui-search-hidden{display:none!important}.ui-empty-row{height:22px;display:flex;align-items:center;padding-left:36px;font-size:10px;color:var(--ui-cor-texto-secundario, #666677);font-style:italic;background:var(--ui-cor-fundo-recuado, rgba(0, 0, 0, .15))}.ui-camadas-resizer-altura{display:none;flex-shrink:0;width:100%;height:9px;background:var(--ui-cor-superficie, #141417);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:ns-resize;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;touch-action:none;transition:background .15s ease,border-color .15s ease;position:relative;z-index:10}:host([redimensionavel]) .ui-camadas-resizer-altura,:host([redimensionavel-altura]) .ui-camadas-resizer-altura{display:flex}.ui-camadas-resizer-altura:hover,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 9%,transparent);border-top-color:var(--ui-cor-primaria, #00E08A)}.ui-camadas-resizer-grip{width:32px;height:3px;border-radius:2px;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 22%,transparent);transition:all .15s ease}.ui-camadas-resizer-altura:hover .ui-camadas-resizer-grip,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo .ui-camadas-resizer-grip{background:var(--ui-cor-primaria, #00E08A);width:46px;box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 45%,transparent)}:host(.ui-camadas--redimensionando){-webkit-user-select:none!important;user-select:none!important;cursor:ns-resize!important}:host(.ui-camadas--redimensionando) *{-webkit-user-select:none!important;user-select:none!important}.ui-col-lock.ui-lock-open{opacity:.28}.ui-col-lock.ui-lock-open:hover,.ui-col-lock.ui-lock-open:focus-visible{opacity:.8}.ui-col-lock[data-locked-by-layer]{cursor:not-allowed}.ui-col[role=button]:focus-visible,.ui-basemap-card:focus-visible,.ui-feat-row:focus-visible,.ui-layer-row:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:-2px}.ui-footer-btn.confirming{color:var(--ui-cor-botao-destrutivo-texto, #ffffff);background:var(--ui-cor-botao-destrutivo-hover, #b71c1c);width:auto;padding:0 6px}.ui-truncate-notice{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 12px;margin:4px 8px 6px;background:color-mix(in srgb,var(--ui-cor-superficie-elevada, #1c1c21) 70%,transparent);border:1px dashed var(--ui-cor-borda, rgba(255, 255, 255, .12));border-radius:var(--ui-raio-borda, 4px);font-size:10px;color:var(--ui-cor-texto-secundario, #9ca3af)}.ui-truncate-notice span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-truncate-more-btn{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;background:var(--ui-cor-superficie, #27272a);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .18));border-radius:var(--ui-raio-borda, 4px);color:var(--ui-cor-primaria, #00E08A);font-size:10px;font-weight:500;cursor:pointer;white-space:nowrap;transition:all var(--camada-transicao)}.ui-truncate-more-btn:hover{background:var(--ui-cor-superficie-hover, #3f3f46);border-color:var(--ui-cor-primaria, #00E08A)}.ui-truncate-more-btn:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:1px}`;
1146
- function za(e, r) {
1217
+ const Va = `:host{display:flex;flex-direction:column;box-sizing:border-box;font-family:inherit;font-size:11px;color:var(--ui-cor-texto, #e1e1e6);-webkit-user-select:none;user-select:none;width:100%;height:var(--ui-camadas-altura, 100%);min-height:var(--ui-camadas-min-altura, 140px);position:relative;--camada-respiro: 8px;--camada-barra-altura: 28px;--camada-linha-altura: 25px;--camada-thumb-tamanho: 20px;--camada-transicao: .16s cubic-bezier(.16, 1, .3, 1)}:host([densidade="compacto"]){--camada-linha-altura: 22px;--camada-thumb-tamanho: 17px;font-size:10px}:host([flutuante]){position:absolute;top:10px;right:10px;bottom:46px;z-index:var(--ui-z-workspace-hud, 500);width:auto;height:var(--ui-camadas-altura, auto)}*,*:before,*:after{box-sizing:border-box}:host(:not([flutuante])) .ui-camadas-container{max-width:100%;min-width:0;border:none;box-shadow:none;border-radius:0;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none}.ui-camadas-container{display:flex;flex-direction:column;flex:1 1 auto;height:100%;min-height:0;width:100%;max-width:380px;min-width:270px;background:var(--ui-cor-superficie, #141417);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));border-radius:var(--ui-raio-borda, 8px);box-shadow:var(--ui-sombra-lg, 0 10px 30px -4px rgba(0, 0, 0, .5)),0 0 0 1px color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 5%,transparent);overflow:hidden;position:relative;transition:transform .24s cubic-bezier(.16,1,.3,1),opacity .2s ease;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}:host([colapsado]) .ui-camadas-container{transform:translate(calc(100% + 24px));opacity:0;pointer-events:none}.ui-camadas-toggle-flutuante{display:none;position:absolute;top:10px;right:10px;z-index:calc(var(--ui-z-workspace-hud, 500) - 1);background:var(--ui-cor-superficie, #141417);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .18));border-radius:var(--ui-raio-borda, 6px);color:var(--ui-cor-texto, #ffffff);width:34px;height:34px;cursor:pointer;align-items:center;justify-content:center;box-shadow:var(--ui-sombra-md, 0 8px 20px rgba(0, 0, 0, .45));transition:all var(--camada-transicao)}:host([colapsado][flutuante]) .ui-camadas-toggle-flutuante{display:flex}.ui-camadas-toggle-flutuante:hover{border-color:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-primaria, #00E08A);transform:scale(1.08);box-shadow:0 0 14px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-camadas-header{height:var(--camada-barra-altura);min-height:var(--camada-barra-altura);max-height:var(--camada-barra-altura);display:flex;align-items:center;justify-content:space-between;padding:0 5px;border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));background:var(--ui-cor-fundo-elevado, rgba(0, 0, 0, .28));gap:4px}.ui-camadas-tabs{display:flex;gap:3px;flex:1}.ui-camadas-tab-btn{flex:1;background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);height:24px;padding:0 6px;font-size:11px;font-weight:500;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:5px;white-space:nowrap;transition:all var(--camada-transicao)}.ui-camadas-tab-btn:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .07))}.ui-camadas-tab-btn.active{color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 25%,transparent);font-weight:600}.ui-camadas-btn-colapsar{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:22px;height:22px;cursor:pointer;border-radius:var(--ui-raio-sm, 4px);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all var(--camada-transicao)}.ui-camadas-btn-colapsar:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .09))}.ui-camadas-corpo{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding:0 var(--camada-respiro) var(--camada-respiro);display:flex;flex-direction:column;gap:6px;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 16%,transparent) transparent}.ui-camadas-corpo::-webkit-scrollbar{width:4px}.ui-camadas-corpo::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 18%,transparent);border-radius:var(--ui-raio-sm, 4px)}.ui-camadas-corpo::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 32%,transparent)}.ui-tree-toolbar{display:flex;align-items:center;justify-content:space-between;box-sizing:border-box;height:var(--camada-barra-altura);min-height:var(--camada-barra-altura);flex-shrink:0;margin:0 calc(-1 * var(--camada-respiro));padding:0 var(--camada-respiro);gap:8px;border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .06))}.ui-tree-title-group{display:flex;align-items:center;gap:5px}.ui-tree-section-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-cor-texto-secundario, #888899)}.ui-tree-count-badge{font-size:9px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent);color:var(--ui-cor-texto-secundario, #888899);padding:1px 5px;border-radius:8px;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent)}.ui-tree-actions{display:flex;align-items:center;gap:3px}.ui-tree-action-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);border-radius:var(--ui-raio-sm, 4px);width:24px;height:24px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-tree-action-btn:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .09))}.ui-tree-btn-new{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 14%,transparent);border:none;color:var(--ui-cor-primaria, #00E08A);border-radius:var(--ui-raio-sm, 4px);height:24px;padding:0 8px;font-size:10px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-tree-btn-new:hover{background:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-texto-sobre-primaria, #000000)}.ui-tree-search-wrapper{position:relative;display:flex;align-items:center;margin:1px 0}.ui-tree-search-icon{position:absolute;left:8px;color:var(--ui-cor-texto-secundario, #888899);pointer-events:none;display:flex;align-items:center}.ui-tree-search-input{width:100%;height:25px;background:var(--ui-cor-fundo, #0a0a0c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));border-radius:var(--ui-raio-borda, 5px);padding:0 24px 0 26px;color:var(--ui-cor-texto, #ffffff);font-size:10.5px;outline:none;transition:border-color var(--camada-transicao),box-shadow var(--camada-transicao)}.ui-tree-search-input:focus{border-color:var(--ui-cor-primaria, #00E08A);box-shadow:0 0 0 2px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 18%,transparent)}.ui-tree-search-clear{position:absolute;right:5px;background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);cursor:pointer;width:18px;height:18px;display:flex;align-items:center;justify-content:center;border-radius:3px;transition:all var(--camada-transicao)}.ui-tree-search-clear:hover{color:var(--ui-cor-texto, #ffffff);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 10%,transparent)}.ui-panel-box{background:var(--ui-cor-fundo, #0c0c0f);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));border-radius:var(--ui-raio-borda, 6px);overflow:hidden;display:flex;flex-direction:column;flex:1 1 0%;min-height:140px}.ui-search-empty{padding:14px 10px;text-align:center;font-size:11px;color:var(--ui-cor-texto-secundario, #888899);overflow-wrap:anywhere}.ui-layer-tree{flex:1 1 0%;min-height:40px;overflow-y:auto;overflow-x:hidden}.ui-layer-group{border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .04));transition:background var(--camada-transicao)}.ui-layer-group.drop-into{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 9%,transparent)!important;outline:1.5px dashed var(--ui-cor-primaria, #00E08A);outline-offset:-1.5px}.ui-layer-row,.ui-feat-row{display:flex;align-items:center;height:var(--camada-linha-altura);min-height:var(--camada-linha-altura);max-height:var(--camada-linha-altura);padding:0 4px;-webkit-user-select:none;user-select:none;cursor:default;transition:background .1s ease;position:relative}.ui-layer-row{background:var(--ui-cor-fundo-elevado, #18181d);font-weight:600;cursor:pointer;border-left:3px solid transparent}.ui-layer-row:hover{background:var(--ui-cor-hover-menu, #22222a)}.ui-layer-row.active-drawing-layer{background:color-mix(in srgb,var(--layer-active-color, var(--ui-cor-primaria, #00E08A)) 18%,var(--ui-cor-fundo-elevado, #18181d))!important;border-left:3px solid var(--layer-active-color, var(--ui-cor-primaria, #00E08A))!important;box-shadow:inset 0 0 12px color-mix(in srgb,var(--layer-active-color, var(--ui-cor-primaria, #00E08A)) 10%,transparent)}.ui-layer-row.active-drawing-layer .ui-name-text{color:var(--ui-cor-texto, #e1e1e6);font-weight:700}.ui-feat-row{border-left:3px solid transparent;padding-left:13px;background:var(--ui-cor-fundo, #101014);font-weight:400;cursor:pointer}.ui-feat-row:hover{background:var(--ui-cor-hover-menu, #19191f)}.ui-feat-row.selected-row{background:color-mix(in srgb,var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff)) 20%,var(--ui-cor-fundo, #101014))!important;outline:1px solid color-mix(in srgb,var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff)) 55%,transparent)!important;outline-offset:-1px}.ui-layer-row.hidden-layer,.ui-feat-row.hidden-row{opacity:.52}.ui-layer-row.hidden-layer .ui-col-eye,.ui-feat-row.hidden-row .ui-col-eye{color:var(--ui-cor-texto-alerta, #ffb86c);opacity:.95}.ui-layer-row.dragging,.ui-feat-row.dragging{opacity:.35;background:color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 16%,transparent)!important}.ui-layer-row.drop-above:before,.ui-feat-row.drop-above:before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:var(--ui-cor-texto-info, #33b5ff);box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 100%,transparent);z-index:20;pointer-events:none}.ui-layer-row.drop-below:after,.ui-feat-row.drop-below:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background:var(--ui-cor-texto-info, #33b5ff);box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 100%,transparent);z-index:20;pointer-events:none}.ui-layer-row.drop-into{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 16%,transparent)!important;outline:1.5px dashed var(--ui-cor-primaria, #00E08A)!important;outline-offset:-2px;border-radius:var(--ui-raio-sm, 4px)}.ui-layer-row.is-sublayer{background:color-mix(in srgb,var(--ui-cor-fundo-elevado, #18181d) 70%,transparent)}.ui-group-folder-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--ui-cor-texto-alerta, #ffb86c);margin-right:4px;flex-shrink:0}.ui-col{display:flex;align-items:center;justify-content:center;flex-shrink:0;height:var(--camada-linha-altura)}.ui-col-drag{width:8px;margin-right:1px;cursor:grab;color:var(--ui-cor-texto-secundario, #888899);opacity:.35;touch-action:none;transition:opacity var(--camada-transicao),color var(--camada-transicao)}.ui-layer-row:hover .ui-col-drag,.ui-feat-row:hover .ui-col-drag{opacity:.9;color:var(--ui-cor-primaria, #00E08A)}.ui-col-drag:active{cursor:grabbing}.ui-col-eye{width:20px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);transition:color var(--camada-transicao)}.ui-col-eye:hover{color:var(--ui-cor-primaria, #00E08A)}.ui-col-lock{width:18px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);transition:color var(--camada-transicao)}.ui-col-lock:hover{color:var(--ui-cor-texto-alerta, #ffb86c)}.ui-col-colorbar{width:3.5px;height:16px;margin:0 3px 0 2px;border-radius:1.5px;flex-shrink:0}.ui-col-colorbar-editavel{position:relative;width:5px;height:18px;cursor:pointer}.ui-col-colorbar-editavel:before{content:"";position:absolute;top:-3px;right:-4px;bottom:-3px;left:-4px}.ui-col-colorbar-editavel:hover,.ui-col-colorbar-editavel:focus-visible{filter:brightness(1.3);outline:none}.ui-col-chevron,.ui-col-branch{margin-left:calc(var(--layer-depth, 0) * 12px)}.ui-col-chevron{width:14px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);display:flex;align-items:center;justify-content:center}.ui-chevron-icon{display:inline-flex;align-items:center;justify-content:center;transition:transform var(--camada-transicao)}.ui-chevron-icon.open{transform:rotate(90deg)}.ui-col-branch{width:14px;display:flex;align-items:center;justify-content:center;color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 22%,transparent);font-size:10px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace)}.ui-col-thumb{width:calc(var(--camada-thumb-tamanho) + 3px);margin-right:4px;display:flex;align-items:center;justify-content:center}.ui-thumb-box{width:var(--camada-thumb-tamanho);height:var(--camada-thumb-tamanho);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 15%,transparent);border-radius:3px;background:var(--ui-cor-fundo, #0d0d10);box-sizing:border-box;overflow:hidden;display:flex;align-items:center;justify-content:center}.ui-col-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;color:var(--ui-cor-texto, #e1e1e6);padding-left:2px;padding-right:4px;cursor:pointer;display:flex;align-items:center;justify-content:flex-start;text-align:left;gap:4px}.ui-name-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-count-chip{font-size:9px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;color:var(--ui-cor-texto-secundario, #888899);font-weight:400;padding:0 2px;flex-shrink:0}.ui-col-actions{display:flex;align-items:center;gap:2px;opacity:0;transition:opacity var(--camada-transicao)}.ui-layer-row:hover .ui-col-actions,.ui-feat-row:hover .ui-col-actions{opacity:1}.ui-micro-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:18px;height:18px;padding:0;border-radius:3px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-micro-btn:hover{color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12))}.ui-micro-btn.active{color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 18%,transparent)}.ui-col-target{width:22px;cursor:pointer}.ui-target-circle{width:11px;height:11px;border-radius:50%;border:1.5px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 32%,transparent);background:transparent;transition:all .12s ease}.ui-col-target:hover .ui-target-circle{border-color:var(--ui-cor-texto-info, #33b5ff);transform:scale(1.18)}.ui-target-circle.selected{border:2px solid var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff));background:var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff));box-shadow:inset 0 0 0 2px var(--ui-cor-superficie, #141418)}.ui-target-circle.partial{border:2px solid var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff));background:color-mix(in srgb,var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff)) 40%,transparent)}.ui-inline-rename-input{width:100%;height:20px;background:var(--ui-cor-fundo, #0d0d10);color:var(--ui-cor-texto, #e1e1e6);border:1px solid var(--ui-cor-primaria, #00E08A);border-radius:3px;font-size:10.5px;padding:0 4px;outline:none;box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 40%,transparent)}.ui-layer-settings-drawer{background:linear-gradient(180deg,var(--ui-cor-fundo-elevado, #17171e) 0%,var(--ui-cor-superficie, #0f0f13) 100%);padding:10px 14px 12px;border-top:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);border-bottom:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent);border-left:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));display:flex;flex-direction:column;gap:10px;box-shadow:inset 0 1px color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent),0 6px 16px #00000073;animation:drawerSlideDown .18s cubic-bezier(.16,1,.3,1);position:relative;z-index:10}@keyframes drawerSlideDown{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.ui-drawer-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:6px;border-bottom:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent)}.ui-drawer-header-left{display:flex;align-items:center;gap:7px;min-width:0}.ui-drawer-icon{color:var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));display:flex;align-items:center;flex-shrink:0}.ui-drawer-title{font-size:10.5px;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);text-transform:uppercase;letter-spacing:.6px;white-space:nowrap}.ui-drawer-layer-chip{font-size:9.5px;font-weight:500;color:var(--ui-cor-texto-secundario, #888899);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent);padding:1px 6px;border-radius:var(--ui-raio-sm, 4px);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-drawer-btn-fechar{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:20px;height:20px;padding:0;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-drawer-btn-fechar:hover{color:var(--ui-cor-texto, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-body{display:flex;flex-direction:column;gap:10px}.ui-drawer-row{display:flex;flex-direction:column;gap:5px}.ui-drawer-row-label{display:flex;justify-content:space-between;align-items:center;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:var(--ui-cor-texto-secundario, #888899)}.ui-drawer-color-group{display:flex;align-items:center;justify-content:space-between;gap:8px}.ui-drawer-color-pill{position:relative;display:inline-flex;align-items:center;gap:6px;padding:3px 8px 3px 5px;background:var(--ui-cor-fundo, #0b0b0d);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 16%,transparent);border-radius:var(--ui-raio-sm, 4px);cursor:pointer;transition:all var(--camada-transicao);-webkit-user-select:none;user-select:none}.ui-drawer-color-pill:hover{border-color:var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 25%,transparent)}.ui-drawer-color-sample{width:14px;height:14px;border-radius:3px;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 35%,transparent);box-shadow:var(--ui-sombra-sm, 0 1px 3px rgba(0, 0, 0, .5));flex-shrink:0;transition:background-color .1s ease}.ui-drawer-color-hex{font-size:10px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);letter-spacing:.5px}.ui-drawer-color-native{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.ui-drawer-badge{font-size:9.5px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 10%,transparent);padding:1px 6px;border-radius:var(--ui-raio-sm, 4px);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-slider-container{display:flex;flex-direction:column;gap:4px}.ui-drawer-slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:5px;background:linear-gradient(90deg,color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent) 0%,var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A)) 100%);border-radius:3px;outline:none;margin:3px 0;cursor:pointer;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-slider::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:#fff;border:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));box-shadow:0 0 6px #0009,0 0 10px var(--drawer-cor-camada, rgba(0, 224, 138, .6));cursor:pointer;transition:transform .12s ease}.ui-drawer-slider::-webkit-slider-thumb:hover{transform:scale(1.22)}.ui-drawer-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:#fff;border:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));box-shadow:0 0 6px #0009,0 0 10px var(--drawer-cor-camada, rgba(0, 224, 138, .6));cursor:pointer}.ui-drawer-footer{display:flex;align-items:center;justify-content:space-between;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent)}.ui-drawer-meta-info{font-size:9.5px;color:var(--ui-cor-texto-secundario, #888899);font-style:italic}.ui-drawer-actions{display:flex;align-items:center;gap:6px}.ui-drawer-btn-danger{background:color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 10%,transparent);border:1px solid color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 35%,transparent);color:var(--ui-cor-texto-erro, #ff5555);border-radius:var(--ui-raio-sm, 4px);height:24px;padding:0 10px;font-size:10px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:all var(--camada-transicao)}.ui-drawer-btn-danger:hover{background:var(--ui-cor-botao-destrutivo-fundo, #d32f2f);color:var(--ui-cor-botao-destrutivo-texto, #ffffff);border-color:var(--ui-cor-botao-destrutivo-fundo, #d32f2f);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 45%,transparent);transform:translateY(-.5px)}.ui-drawer-btn-danger.confirming{background:var(--ui-cor-botao-destrutivo-hover, #b71c1c);color:var(--ui-cor-botao-destrutivo-texto, #ffffff);border-color:var(--ui-cor-botao-destrutivo-hover, #b71c1c);animation:pulseDanger 1.2s infinite}@keyframes pulseDanger{0%{transform:scale(1)}50%{transform:scale(1.02)}to{transform:scale(1)}}.ui-previa-dot{width:6px;height:6px;margin-left:4px;border-radius:50%;flex-shrink:0;background:var(--ui-cor-texto-alerta, #ffb86c);box-shadow:0 0 0 2px color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 25%,transparent)}.ui-tree-footer{height:var(--camada-barra-altura);min-height:var(--camada-barra-altura);background:var(--ui-cor-fundo-elevado, #121216);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));display:flex;align-items:center;justify-content:space-between;padding:0 var(--camada-respiro);gap:6px;box-sizing:border-box;overflow:hidden;position:relative;flex-shrink:0;margin:0 calc(-1 * var(--camada-respiro))}.ui-footer-left{display:flex;align-items:center;gap:5px;white-space:nowrap;min-width:0;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis}.ui-footer-count{font-size:11px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-primaria, #00E08A);flex-shrink:0}.ui-footer-label{display:inline-flex;align-items:center;color:var(--ui-cor-texto-secundario, #888899);flex-shrink:0}.ui-footer-actions-gerais{display:flex;align-items:center;gap:4px;flex-shrink:0}.ui-footer-chip-btn{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent);border:none;color:var(--ui-cor-texto-secundario, #a0a0b0);font-size:10px;font-weight:600;height:22px;padding:0 8px;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-footer-chip-btn:hover{background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #ffffff)}.ui-footer-chip-btn.primario{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 14%,transparent);color:var(--ui-cor-primaria, #00E08A)}.ui-footer-chip-btn.primario:hover{background:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-texto-sobre-primaria, #000000)}.ui-footer-right{display:flex;align-items:center;gap:4px;flex:1 1 auto;min-width:0}.ui-footer-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:22px;height:22px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all var(--camada-transicao);flex-shrink:0}.ui-footer-btn:hover:not(.disabled){color:var(--ui-cor-texto, #e1e1e6);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12))}.ui-footer-btn.disabled{opacity:.25;cursor:not-allowed}.ui-footer-btn.btn-danger-footer:hover:not(.disabled){color:#f55;background:#ff555526}.ui-footer-btn.confirming{background:#f55!important;color:#fff!important}.ui-footer-move-wrapper{position:relative;display:flex;align-items:center;flex:1 1 auto;min-width:0}.ui-footer-select{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23888899' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 6px center;background-size:10px;border:none;color:var(--ui-cor-texto, #e1e1e6);border-radius:var(--ui-raio-sm, 4px);font:inherit;font-size:10px;font-weight:500;height:22px;padding:0 22px 0 8px;cursor:pointer;width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-footer-select:hover:not(:disabled){background-color:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12))}.ui-footer-select:focus-visible{outline:1px solid var(--ui-cor-primaria, #00E08A)}.ui-tree-btn-group{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent);border:none;color:var(--ui-cor-texto-secundario, #a0a0b0);border-radius:var(--ui-raio-sm, 4px);height:24px;padding:0 7px;font-size:10px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-tree-btn-group:hover{background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #ffffff)}.ui-drawer-btn-sublayer{background:#ffffff0f;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #e1e1e6);font-size:10.5px;font-weight:500;padding:4px 8px;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-drawer-btn-sublayer:hover{background:#ffffff1f;color:var(--ui-cor-primaria, #00E08A);border-color:var(--ui-cor-primaria, #00E08A)}.ui-drawer-select-wrapper{display:flex;align-items:center}.ui-drawer-select{background:var(--ui-cor-fundo, #16161c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .15));color:var(--ui-cor-texto, #e1e1e6);border-radius:4px;font-size:10.5px;height:24px;padding:0 6px;cursor:pointer;max-width:140px}.ui-basemap-section{display:flex;flex-direction:column;gap:4px;flex-shrink:0}.ui-basemap-toggle{display:flex;align-items:center;gap:6px;width:100%;padding:2px;background:transparent;border:0;border-radius:var(--ui-raio-sm, 4px);font:inherit;color:inherit;cursor:pointer;text-align:left}.ui-basemap-toggle:hover .ui-basemap-title{color:var(--ui-cor-texto, #e1e1e6)}.ui-basemap-toggle:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:1px}.ui-basemap-atual{flex:1 1 auto;min-width:0;font-size:10px;color:var(--ui-cor-primaria, #00E08A);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:right}.ui-basemap-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:4px}.ui-basemap-card{display:flex;flex-direction:column;align-items:center;gap:2px;padding:3px;border-radius:var(--ui-raio-borda, 5px);background:var(--ui-cor-fundo, #101014);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:pointer;transition:all var(--camada-transicao);text-align:center;overflow:hidden}.ui-basemap-card:hover{border-color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-fundo-elevado, #17171c)}.ui-basemap-card.active{border-color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);color:var(--ui-cor-primaria, #00E08A);font-weight:600;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-basemap-preview{width:100%;height:22px;border-radius:3px;object-fit:cover;opacity:.85;transition:opacity var(--camada-transicao)}.ui-basemap-preview-none{width:100%;height:22px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 4%,transparent);border-radius:3px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-card:hover .ui-basemap-preview,.ui-basemap-card.active .ui-basemap-preview{opacity:1}.ui-basemap-card span{font-size:9.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.ui-layer-row.herdado-oculto,.ui-feat-row.herdado-oculto{opacity:.52}.ui-layer-row.herdado-travado .ui-col-lock.ui-lock-open{color:var(--ui-cor-texto-secundario, #888899);opacity:.7}.ui-search-hidden{display:none!important}.ui-empty-row{height:22px;display:flex;align-items:center;padding-left:36px;font-size:10px;color:var(--ui-cor-texto-secundario, #666677);font-style:italic;background:var(--ui-cor-fundo-recuado, rgba(0, 0, 0, .15))}.ui-camadas-resizer-altura{display:none;flex-shrink:0;width:100%;height:9px;background:var(--ui-cor-superficie, #141417);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:ns-resize;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;touch-action:none;transition:background .15s ease,border-color .15s ease;position:relative;z-index:10}:host([redimensionavel]) .ui-camadas-resizer-altura,:host([redimensionavel-altura]) .ui-camadas-resizer-altura{display:flex}.ui-camadas-resizer-altura:hover,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 9%,transparent);border-top-color:var(--ui-cor-primaria, #00E08A)}.ui-camadas-resizer-grip{width:32px;height:3px;border-radius:2px;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 22%,transparent);transition:all .15s ease}.ui-camadas-resizer-altura:hover .ui-camadas-resizer-grip,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo .ui-camadas-resizer-grip{background:var(--ui-cor-primaria, #00E08A);width:46px;box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 45%,transparent)}:host(.ui-camadas--redimensionando){-webkit-user-select:none!important;user-select:none!important;cursor:ns-resize!important}:host(.ui-camadas--redimensionando) *{-webkit-user-select:none!important;user-select:none!important}.ui-col-lock.ui-lock-open{opacity:.28}.ui-col-lock.ui-lock-open:hover,.ui-col-lock.ui-lock-open:focus-visible{opacity:.8}.ui-col-lock[data-locked-by-layer]{cursor:not-allowed}.ui-col[role=button]:focus-visible,.ui-basemap-card:focus-visible,.ui-feat-row:focus-visible,.ui-layer-row:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:-2px}.ui-footer-btn.confirming{color:var(--ui-cor-botao-destrutivo-texto, #ffffff);background:var(--ui-cor-botao-destrutivo-hover, #b71c1c);width:auto;padding:0 6px}.ui-truncate-notice{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 12px;margin:4px 8px 6px;background:color-mix(in srgb,var(--ui-cor-superficie-elevada, #1c1c21) 70%,transparent);border:1px dashed var(--ui-cor-borda, rgba(255, 255, 255, .12));border-radius:var(--ui-raio-borda, 4px);font-size:10px;color:var(--ui-cor-texto-secundario, #9ca3af)}.ui-truncate-notice span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-truncate-more-btn{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;background:var(--ui-cor-superficie, #27272a);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .18));border-radius:var(--ui-raio-borda, 4px);color:var(--ui-cor-primaria, #00E08A);font-size:10px;font-weight:500;cursor:pointer;white-space:nowrap;transition:all var(--camada-transicao)}.ui-truncate-more-btn:hover{background:var(--ui-cor-superficie-hover, #3f3f46);border-color:var(--ui-cor-primaria, #00E08A)}.ui-truncate-more-btn:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:1px}`;
1218
+ function Ya(e, r) {
1219
+ r.querySelectorAll("[data-layer-row]").forEach((i) => {
1220
+ const o = i.getAttribute("data-layer-row") === e.camadaAtivaId;
1221
+ i.classList.toggle("active-drawing-layer", o), Re(i, "camada-ativa", o), o ? i.setAttribute("aria-current", "true") : i.removeAttribute("aria-current");
1222
+ });
1223
+ }
1224
+ function Ka(e, r) {
1225
+ r.querySelectorAll(".ui-feat-row").forEach((u) => {
1226
+ const p = u.getAttribute("data-feat-row"), m = p ? e.selectedFeatureIds.has(p) : !1;
1227
+ u.classList.toggle("selected-row", m), Re(u, "feicao-selecionada", m), u.setAttribute("aria-selected", String(m));
1228
+ const f = u.querySelector(".ui-target-circle");
1229
+ f && f.classList.toggle("selected", m);
1230
+ }), r.querySelectorAll(".ui-layer-group").forEach((u) => {
1231
+ const p = u.getAttribute("data-layer-id"), m = ne(e.camadas, e.feicoes, p ?? ""), f = u.querySelector(".ui-layer-row .ui-target-circle");
1232
+ if (f && m.length > 0) {
1233
+ const g = m.every((h) => e.selectedFeatureIds.has(h.id)), v = !g && m.some((h) => e.selectedFeatureIds.has(h.id));
1234
+ f.classList.toggle("selected", g), f.classList.toggle("partial", v);
1235
+ } else f && f.classList.remove("selected", "partial");
1236
+ });
1237
+ const a = e.feicoes.filter((u) => e.selectedFeatureIds.has(u.id)), i = a.length > 0, t = r.getElementById("footer-count"), o = r.getElementById("footer-label");
1238
+ if (t && (t.textContent = String(i ? a.length : e.camadas.length)), o) {
1239
+ const u = Ue(e.camadas.length, a.length);
1240
+ o.innerHTML = u.icone, o.title = u.texto, o.setAttribute("aria-label", u.texto);
1241
+ }
1242
+ const n = r.querySelector(".ui-tree-footer");
1243
+ n && (n.classList.toggle("tem-selecao", i), n.classList.toggle("sem-selecao", !i));
1244
+ const l = r.querySelector(".ui-footer-actions-gerais");
1245
+ l && (l.style.display = i ? "none" : "flex");
1246
+ const c = r.querySelector(".ui-footer-bulk-actions");
1247
+ c && (c.style.display = i ? "flex" : "none"), ["btn-footer-del"].forEach((u) => {
1248
+ const p = r.getElementById(u);
1249
+ p && (p.disabled = !i, p.classList.toggle("disabled", !i));
1250
+ });
1251
+ const s = r.querySelector(".ui-footer-move-wrapper");
1252
+ s && s.classList.toggle("disabled", !i);
1253
+ const d = r.getElementById("select-footer-move");
1254
+ d && (d.disabled = !i);
1255
+ }
1256
+ function De(e, r) {
1257
+ const a = we(e.camadas), i = new Map(e.camadas.map((o) => [o.id, o]));
1258
+ r.querySelectorAll(".ui-layer-row").forEach((o) => {
1259
+ const n = a.get(o.getAttribute("data-layer-row") || "");
1260
+ o.classList.toggle("herdado-oculto", (n == null ? void 0 : n.ocultaPorAncestral) === !0), o.classList.toggle("herdado-travado", (n == null ? void 0 : n.travadaPorAncestral) === !0);
1261
+ });
1262
+ const t = new Map(e.feicoes.map((o) => [o.id, o]));
1263
+ r.querySelectorAll(".ui-feat-row").forEach((o) => {
1264
+ const n = o.getAttribute("data-feat-layer") || "", l = i.get(n), c = a.get(n);
1265
+ o.classList.toggle("herdado-oculto", (l == null ? void 0 : l.visible) === !1 || (c == null ? void 0 : c.ocultaPorAncestral) === !0);
1266
+ const s = o.querySelector("[data-feat-lock]"), d = t.get(o.getAttribute("data-feat-row") || "");
1267
+ if (!s || !d) return;
1268
+ const u = (l == null ? void 0 : l.locked) === !0 || (c == null ? void 0 : c.travadaPorAncestral) === !0, p = d.locked === !0 || u;
1269
+ s.innerHTML = p ? b.cadeadoTrancado : b.cadeadoAberto, s.classList.toggle("ui-lock-open", !p), u ? s.setAttribute("data-locked-by-layer", "true") : s.removeAttribute("data-locked-by-layer"), B(
1270
+ s,
1271
+ u ? "Bloqueada pela camada" : p ? "Desbloquear Feição" : "Bloquear Feição"
1272
+ );
1273
+ });
1274
+ }
1275
+ function _a(e, r) {
1147
1276
  r.querySelectorAll("[data-layer-row]").forEach((t) => {
1148
1277
  t.addEventListener("click", (o) => {
1149
1278
  if (o.target.closest(
@@ -1165,7 +1294,7 @@ function za(e, r) {
1165
1294
  const d = l.querySelector(".ui-children-container");
1166
1295
  d && (d.style.display = s ? "block" : "none");
1167
1296
  }
1168
- D(t, s ? "Recolher grupo" : "Expandir grupo"), Ba(e, r), e.salvarLembrancaEstado();
1297
+ B(t, s ? "Recolher grupo" : "Expandir grupo"), Xa(e, r), e.salvarLembrancaEstado();
1169
1298
  });
1170
1299
  }), r.querySelectorAll("[data-layer-eye]").forEach((t) => {
1171
1300
  t.addEventListener("click", (o) => {
@@ -1174,9 +1303,9 @@ function za(e, r) {
1174
1303
  if (l) {
1175
1304
  l.visible = l.visible === !1;
1176
1305
  const c = l.visible !== !1;
1177
- t.innerHTML = c ? b.olhoAberto : b.olhoFechado, D(t, c ? "Ocultar Camada" : "Exibir Camada");
1306
+ t.innerHTML = c ? b.olhoAberto : b.olhoFechado, B(t, c ? "Ocultar Camada" : "Exibir Camada");
1178
1307
  const s = t.closest(".ui-layer-row");
1179
- s && s.classList.toggle("hidden-layer", !c), qa(e, r), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-visibilidade", {
1308
+ s && s.classList.toggle("hidden-layer", !c), Qa(e, r), De(e, r), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-visibilidade", {
1180
1309
  camadaId: l.id,
1181
1310
  visivel: c
1182
1311
  });
@@ -1186,7 +1315,7 @@ function za(e, r) {
1186
1315
  t.addEventListener("click", (o) => {
1187
1316
  o.stopPropagation();
1188
1317
  const n = t.getAttribute("data-layer-lock"), l = e.camadas.find((c) => c.id === n);
1189
- l && (l.locked = !l.locked, t.innerHTML = l.locked ? b.cadeadoTrancado : b.cadeadoAberto, t.classList.toggle("ui-lock-open", !l.locked), D(t, l.locked ? "Desbloquear Camada" : "Bloquear Camada"), Da(e, r, l.id, l.locked === !0), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-bloqueio", {
1318
+ l && (l.locked = !l.locked, t.innerHTML = l.locked ? b.cadeadoTrancado : b.cadeadoAberto, t.classList.toggle("ui-lock-open", !l.locked), B(t, l.locked ? "Desbloquear Camada" : "Bloquear Camada"), De(e, r), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-bloqueio", {
1190
1319
  camadaId: l.id,
1191
1320
  bloqueado: l.locked
1192
1321
  }));
@@ -1210,21 +1339,21 @@ function za(e, r) {
1210
1339
  });
1211
1340
  const a = (t, o, n) => {
1212
1341
  var m;
1213
- const l = e.camadas.find((u) => u.id === t);
1342
+ const l = e.camadas.find((f) => f.id === t);
1214
1343
  if (!l) return;
1215
- const c = V(o, l.color || "#00E08A");
1344
+ const c = K(o, l.color || "#00E08A");
1216
1345
  l.color = c;
1217
1346
  const s = r.getElementById(`sample-color-${t}`);
1218
1347
  s && (s.style.backgroundColor = c);
1219
1348
  const d = r.getElementById(`hex-color-${t}`);
1220
1349
  d && (d.textContent = c.toUpperCase());
1221
- const f = r.getElementById(`settings-drawer-${t}`);
1222
- f && f.style.setProperty("--drawer-cor-camada", c);
1350
+ const u = r.getElementById(`settings-drawer-${t}`);
1351
+ u && u.style.setProperty("--drawer-cor-camada", c);
1223
1352
  const p = T(r, "data-layer-row", t);
1224
1353
  if (p) {
1225
1354
  (m = p.closest(".ui-layer-group")) == null || m.style.setProperty("--layer-active-color", c);
1226
- const u = p.querySelector(".ui-col-colorbar");
1227
- u && (u.style.backgroundColor = c);
1355
+ const f = p.querySelector(".ui-col-colorbar");
1356
+ f && (f.style.backgroundColor = c);
1228
1357
  }
1229
1358
  n ? e.salvarLembrancaEstado() : e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-cor", { camadaId: l.id, cor: c });
1230
1359
  };
@@ -1240,11 +1369,11 @@ function za(e, r) {
1240
1369
  const o = (n) => {
1241
1370
  n.stopPropagation();
1242
1371
  const l = t.getAttribute("data-layer-color"), c = e.camadas.find((s) => s.id === l);
1243
- !l || !c || ra({
1372
+ !l || !c || ma({
1244
1373
  ancora: t,
1245
1374
  titulo: `Cor · ${c.name || "Camada"}`,
1246
1375
  modo: "simples",
1247
- cor: V(c.color, "#00E08A"),
1376
+ cor: K(c.color, "#00E08A"),
1248
1377
  mostrarOpacidade: !1,
1249
1378
  aoAlterar: (s) => a(l, s.cor, !1),
1250
1379
  aoConfirmar: (s) => a(l, s.cor, !0),
@@ -1288,7 +1417,7 @@ function za(e, r) {
1288
1417
  t.classList.add("confirming");
1289
1418
  const s = t.querySelector(".ui-btn-label");
1290
1419
  s && (s.textContent = "Confirmar Exclusão?"), o = setTimeout(() => {
1291
- t.classList.remove("confirming"), s && (s.textContent = "Excluir Camada");
1420
+ t.classList.remove("confirming"), s && (s.textContent = "Excluir");
1292
1421
  }, 3500);
1293
1422
  }
1294
1423
  });
@@ -1296,7 +1425,7 @@ function za(e, r) {
1296
1425
  t.addEventListener("change", (o) => {
1297
1426
  const n = o.target, l = n.getAttribute("data-layer-parent-select"), c = n.value || null, s = e.camadas.find((d) => d.id === l);
1298
1427
  if (s) {
1299
- if (c && (c === s.id || te(e.camadas, c, s.id))) {
1428
+ if (c && (c === s.id || _(e.camadas, c, s.id))) {
1300
1429
  n.value = s.parentId || "";
1301
1430
  return;
1302
1431
  }
@@ -1326,57 +1455,51 @@ function za(e, r) {
1326
1455
  o.stopPropagation();
1327
1456
  const n = o, l = t.getAttribute("data-layer-target");
1328
1457
  if (!l) return;
1329
- const c = re(e.camadas, e.feicoes, l), s = ae(c, e.searchQuery);
1458
+ const c = ne(e.camadas, e.feicoes, l), s = oe(c, e.searchQuery);
1330
1459
  if (s.length === 0) return;
1331
- s.every((f) => e.selectedFeatureIds.has(f.id)) ? s.forEach((f) => e.selectedFeatureIds.delete(f.id)) : (!n.ctrlKey && !n.metaKey && e.selectedFeatureIds.clear(), s.forEach((f) => e.selectedFeatureIds.add(f.id))), e.lastClickedFeatureId = s[s.length - 1].id, e.sincronizarSelecaoDOM(), e.notificarMudancaSelecao();
1460
+ s.every((u) => e.selectedFeatureIds.has(u.id)) ? s.forEach((u) => e.selectedFeatureIds.delete(u.id)) : (!n.ctrlKey && !n.metaKey && e.selectedFeatureIds.clear(), s.forEach((u) => e.selectedFeatureIds.add(u.id))), e.lastClickedFeatureId = s[s.length - 1].id, e.sincronizarSelecaoDOM(), e.notificarMudancaSelecao();
1332
1461
  });
1333
1462
  });
1334
1463
  }
1335
- function Ba(e, r) {
1464
+ function Xa(e, r) {
1336
1465
  const a = r.getElementById("btn-toggle-all-expand");
1337
1466
  if (!a) return;
1338
1467
  const i = e.camadas.length > 0 && e.camadas.every((o) => e.expandedLayers.has(o.id)), t = a.querySelector(".ui-chevron-icon");
1339
- t && t.classList.toggle("open", i), D(
1468
+ t && t.classList.toggle("open", i), B(
1340
1469
  a,
1341
1470
  i ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"
1342
1471
  );
1343
1472
  }
1344
- function qa(e, r) {
1473
+ function Qa(e, r) {
1345
1474
  const a = r.getElementById("btn-toggle-all-vis");
1346
1475
  if (!a) return;
1347
1476
  const i = e.camadas.every((t) => t.visible !== !1);
1348
- a.innerHTML = i ? b.olhoAberto : b.olhoFechado, D(a, i ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas");
1349
- }
1350
- function Da(e, r, a, i) {
1351
- e.feicoes.filter((t) => t.layerId === a).forEach((t) => {
1352
- const o = T(r, "data-feat-lock", t.id);
1353
- if (!o) return;
1354
- const n = t.locked === !0 || i;
1355
- o.innerHTML = n ? b.cadeadoTrancado : b.cadeadoAberto, o.classList.toggle("ui-lock-open", !n), i ? o.setAttribute("data-locked-by-layer", "true") : o.removeAttribute("data-locked-by-layer"), D(
1356
- o,
1357
- i ? "Bloqueada pela camada" : n ? "Desbloquear Feição" : "Bloquear Feição"
1358
- );
1359
- });
1477
+ a.innerHTML = i ? b.olhoAberto : b.olhoFechado, B(a, i ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas");
1360
1478
  }
1361
- function Pa(e, r) {
1479
+ function Ja(e, r) {
1362
1480
  const a = r.getElementById("select-footer-move");
1363
1481
  a && a.addEventListener("change", (n) => {
1364
1482
  const l = n.target.value;
1365
1483
  if (!l) return;
1366
- const c = e.feicoes.filter((d) => e.selectedFeatureIds.has(d.id));
1367
- if (c.length === 0) return;
1368
- const s = new Map(c.map((d) => [d.id, d.layerId]));
1369
- c.forEach((d) => d.layerId = l), c.forEach((d) => {
1370
- s.get(d.id) !== l && e.dispararEvento("ui-feicao-movida", {
1371
- feicaoId: d.id,
1372
- camadaOrigemId: s.get(d.id),
1484
+ const c = Ae(e.camadas);
1485
+ if (c.has(l)) {
1486
+ a.value = "";
1487
+ return;
1488
+ }
1489
+ const s = e.feicoes.filter((u) => e.selectedFeatureIds.has(u.id) && !c.has(u.layerId));
1490
+ if (s.length === 0) return;
1491
+ const d = new Map(s.map((u) => [u.id, u.layerId]));
1492
+ s.forEach((u) => u.layerId = l), s.forEach((u) => {
1493
+ d.get(u.id) !== l && e.dispararEvento("ui-feicao-movida", {
1494
+ feicaoId: u.id,
1495
+ camadaOrigemId: d.get(u.id),
1373
1496
  camadaDestinoId: l,
1374
- feicao: d
1497
+ feicao: u
1375
1498
  });
1376
1499
  }), e.dispararEvento("ui-acao-massa", {
1377
1500
  acao: "mover",
1378
- feicoesIds: c.map((d) => d.id),
1379
- feicoes: c,
1501
+ feicoesIds: s.map((u) => u.id),
1502
+ feicoes: s,
1380
1503
  valor: l
1381
1504
  }), e.solicitarRenderizacao();
1382
1505
  });
@@ -1396,8 +1519,8 @@ function Pa(e, r) {
1396
1519
  const c = Array.from(e.selectedFeatureIds);
1397
1520
  if (c.length === 0) return;
1398
1521
  if (!o.classList.contains("confirming")) {
1399
- o.classList.add("confirming"), D(o, `Clique novamente para excluir ${c.length} selecionado(s)`), n = setTimeout(() => {
1400
- o.classList.remove("confirming"), D(o, l);
1522
+ o.classList.add("confirming"), B(o, `Clique novamente para excluir ${c.length} selecionado(s)`), n = setTimeout(() => {
1523
+ o.classList.remove("confirming"), B(o, l);
1401
1524
  }, 3500);
1402
1525
  return;
1403
1526
  }
@@ -1411,23 +1534,23 @@ function Pa(e, r) {
1411
1534
  });
1412
1535
  }
1413
1536
  }
1414
- const Ta = [
1537
+ const Wa = [
1415
1538
  { tipo: "olho", atributo: "data-layer-eye", entidade: "camada" },
1416
1539
  { tipo: "olho", atributo: "data-feat-eye", entidade: "feicao" },
1417
1540
  { tipo: "cadeado", atributo: "data-layer-lock", entidade: "camada" },
1418
1541
  { tipo: "cadeado", atributo: "data-feat-lock", entidade: "feicao" },
1419
1542
  { tipo: "selecao", atributo: "data-layer-target", entidade: "camada" },
1420
1543
  { tipo: "selecao", atributo: "data-feat-target", entidade: "feicao" }
1421
- ], me = {
1544
+ ], he = {
1422
1545
  olho: "[data-layer-eye], [data-feat-eye]",
1423
1546
  cadeado: "[data-layer-lock], [data-feat-lock]",
1424
1547
  selecao: "[data-layer-target], [data-feat-target]"
1425
- }, Ra = 3;
1426
- function Oa(e) {
1427
- return Ta.find((r) => e.hasAttribute(r.atributo)) ?? null;
1548
+ }, Za = 3;
1549
+ function er(e) {
1550
+ return Wa.find((r) => e.hasAttribute(r.atributo)) ?? null;
1428
1551
  }
1429
- function pe(e, r) {
1430
- const a = Oa(r);
1552
+ function ge(e, r) {
1553
+ const a = er(r);
1431
1554
  if (!a) return null;
1432
1555
  const i = r.getAttribute(a.atributo);
1433
1556
  if (!i) return null;
@@ -1441,13 +1564,13 @@ function pe(e, r) {
1441
1564
  return o ? o.locked === !0 : null;
1442
1565
  }
1443
1566
  if (a.entidade === "feicao") return e.selectedFeatureIds.has(i);
1444
- const t = ae(
1445
- re(e.camadas, e.feicoes, i),
1567
+ const t = oe(
1568
+ ne(e.camadas, e.feicoes, i),
1446
1569
  e.searchQuery
1447
1570
  );
1448
1571
  return t.length === 0 ? null : t.every((o) => e.selectedFeatureIds.has(o.id));
1449
1572
  }
1450
- function Ie(e, r, a = !1) {
1573
+ function Te(e, r, a = !1) {
1451
1574
  e.dispatchEvent(
1452
1575
  new MouseEvent("click", {
1453
1576
  bubbles: !0,
@@ -1457,54 +1580,54 @@ function Ie(e, r, a = !1) {
1457
1580
  })
1458
1581
  );
1459
1582
  }
1460
- let B = null;
1461
- function ja(e) {
1462
- (B == null ? void 0 : B.host) === e && B.cancelar();
1583
+ let z = null;
1584
+ function ar(e) {
1585
+ (z == null ? void 0 : z.host) === e && z.cancelar();
1463
1586
  }
1464
- function Na(e, r) {
1465
- Object.keys(me).forEach((a) => {
1466
- r.querySelectorAll(me[a]).forEach((i) => {
1467
- i.addEventListener("pointerdown", (t) => Ha(e, r, a, i, t));
1587
+ function rr(e, r) {
1588
+ Object.keys(he).forEach((a) => {
1589
+ r.querySelectorAll(he[a]).forEach((i) => {
1590
+ i.addEventListener("pointerdown", (t) => tr(e, r, a, i, t));
1468
1591
  });
1469
1592
  });
1470
1593
  }
1471
- function Ha(e, r, a, i, t) {
1472
- if (t.pointerType === "mouse" && t.button !== 0 || e.editingLayerId || e.editingFeatureId || pe(e, i) === null) return;
1473
- B == null || B.cancelar();
1474
- const o = me[a], n = t.ctrlKey || t.metaKey, l = t.shiftKey;
1594
+ function tr(e, r, a, i, t) {
1595
+ if (t.pointerType === "mouse" && t.button !== 0 || e.editingLayerId || e.editingFeatureId || ge(e, i) === null) return;
1596
+ z == null || z.cancelar();
1597
+ const o = he[a], n = t.ctrlKey || t.metaKey, l = t.shiftKey;
1475
1598
  let c = !1, s = !1, d = t.clientY;
1476
- const f = /* @__PURE__ */ new Set([i]), p = (x) => {
1477
- x.preventDefault(), x.stopImmediatePropagation();
1478
- }, m = (x) => {
1479
- x.stopPropagation(), x.preventDefault();
1480
- }, u = (x) => x.preventDefault(), g = (x) => {
1481
- f.has(x) || (f.add(x), pe(e, x) !== s && Ie(x, a === "selecao"));
1599
+ const u = /* @__PURE__ */ new Set([i]), p = (y) => {
1600
+ y.preventDefault(), y.stopImmediatePropagation();
1601
+ }, m = (y) => {
1602
+ y.stopPropagation(), y.preventDefault();
1603
+ }, f = (y) => y.preventDefault(), g = (y) => {
1604
+ u.has(y) || (u.add(y), ge(e, y) !== s && Te(y, a === "selecao"));
1482
1605
  }, v = () => {
1483
- c = !0, Ie(i, n, l), s = pe(e, i) === !0, r.addEventListener("selectstart", u), document.body.style.userSelect = "none";
1484
- }, h = (x) => {
1485
- var $, w;
1606
+ c = !0, Te(i, n, l), s = ge(e, i) === !0, r.addEventListener("selectstart", f), document.body.style.userSelect = "none";
1607
+ }, h = (y) => {
1608
+ var J, S;
1486
1609
  if (!c) {
1487
- if (Math.hypot(x.clientX - t.clientX, x.clientY - t.clientY) < Ra) return;
1488
- const S = ($ = r.elementFromPoint(x.clientX, x.clientY)) == null ? void 0 : $.closest(o);
1489
- if (!S || S === i) return;
1610
+ if (Math.hypot(y.clientX - t.clientX, y.clientY - t.clientY) < Za) return;
1611
+ const x = (J = r.elementFromPoint(y.clientX, y.clientY)) == null ? void 0 : J.closest(o);
1612
+ if (!x || x === i) return;
1490
1613
  v();
1491
1614
  }
1492
- x.preventDefault();
1493
- const I = Math.min(d, x.clientY), L = Math.max(d, x.clientY);
1494
- r.querySelectorAll(o).forEach((S) => {
1495
- const q = S.getBoundingClientRect();
1496
- if (q.height === 0) return;
1497
- const N = q.top + q.height / 2;
1498
- N >= I && N <= L && g(S);
1615
+ y.preventDefault();
1616
+ const I = Math.min(d, y.clientY), L = Math.max(d, y.clientY);
1617
+ r.querySelectorAll(o).forEach((x) => {
1618
+ const M = x.getBoundingClientRect();
1619
+ if (M.height === 0) return;
1620
+ const P = M.top + M.height / 2;
1621
+ P >= I && P <= L && g(x);
1499
1622
  });
1500
- const P = (w = r.elementFromPoint(x.clientX, x.clientY)) == null ? void 0 : w.closest(o);
1501
- P && g(P), d = x.clientY;
1502
- }, k = (x = !1) => {
1503
- (B == null ? void 0 : B.cancelar) === F && (B = null), window.removeEventListener("pointermove", h), window.removeEventListener("pointerup", C), window.removeEventListener("pointercancel", C), window.removeEventListener("dragstart", p, !0), r.removeEventListener("selectstart", u), c && (document.body.style.userSelect = "", x || (window.addEventListener("click", m, { capture: !0, once: !0 }), setTimeout(() => window.removeEventListener("click", m, !0), 0)));
1504
- }, C = () => k(), F = () => k(!0);
1505
- B = { host: e, cancelar: F }, window.addEventListener("dragstart", p, !0), window.addEventListener("pointermove", h, { passive: !1 }), window.addEventListener("pointerup", C), window.addEventListener("pointercancel", C);
1506
- }
1507
- function Ga(e, r) {
1623
+ const q = (S = r.elementFromPoint(y.clientX, y.clientY)) == null ? void 0 : S.closest(o);
1624
+ q && g(q), d = y.clientY;
1625
+ }, k = (y = !1) => {
1626
+ (z == null ? void 0 : z.cancelar) === $ && (z = null), window.removeEventListener("pointermove", h), window.removeEventListener("pointerup", C), window.removeEventListener("pointercancel", C), window.removeEventListener("dragstart", p, !0), r.removeEventListener("selectstart", f), c && (document.body.style.userSelect = "", y || (window.addEventListener("click", m, { capture: !0, once: !0 }), setTimeout(() => window.removeEventListener("click", m, !0), 0)));
1627
+ }, C = () => k(), $ = () => k(!0);
1628
+ z = { host: e, cancelar: $ }, window.addEventListener("dragstart", p, !0), window.addEventListener("pointermove", h, { passive: !1 }), window.addEventListener("pointerup", C), window.addEventListener("pointercancel", C);
1629
+ }
1630
+ function ir(e, r) {
1508
1631
  const a = r.getElementById("btn-toggle-all-vis");
1509
1632
  a && a.addEventListener("click", () => e.alternarVisibilidadeTodas(!0));
1510
1633
  const i = r.getElementById("btn-toggle-all-expand");
@@ -1512,15 +1635,15 @@ function Ga(e, r) {
1512
1635
  o.stopPropagation(), e.camadas.length > 0 && e.camadas.every((l) => e.expandedLayers.has(l.id)) ? e.colapsarTodas() : e.expandirTodas();
1513
1636
  });
1514
1637
  const t = r.getElementById("btn-colapsar");
1515
- t && t.addEventListener("click", () => e.colapsar(!0)), Ua(e, r);
1638
+ t && t.addEventListener("click", () => e.colapsar(!0)), or(e, r);
1516
1639
  }
1517
- function Ua(e, r) {
1640
+ function or(e, r) {
1518
1641
  const a = r.getElementById("input-layer-search"), i = r.getElementById("btn-clear-layer-search"), t = () => {
1519
1642
  var o;
1520
1643
  e.searchQuery = "", e.solicitarRenderizacao(), (o = r.getElementById("input-layer-search")) == null || o.focus();
1521
1644
  };
1522
1645
  if (a) {
1523
- const o = Se(() => e.solicitarRenderizacao(), 75);
1646
+ const o = Ne(() => e.solicitarRenderizacao(), 75);
1524
1647
  a.addEventListener("input", (n) => {
1525
1648
  e.searchQuery = n.target.value, o();
1526
1649
  }), a.addEventListener("keydown", (n) => {
@@ -1529,7 +1652,7 @@ function Ua(e, r) {
1529
1652
  }
1530
1653
  i && i.addEventListener("click", t);
1531
1654
  }
1532
- function Va(e, r) {
1655
+ function nr(e, r) {
1533
1656
  r.querySelectorAll("[data-feat-select]").forEach((a) => {
1534
1657
  a.addEventListener("click", (i) => {
1535
1658
  if (e.editingFeatureId) return;
@@ -1554,7 +1677,7 @@ function Va(e, r) {
1554
1677
  if (o) {
1555
1678
  o.visible = o.visible === !1;
1556
1679
  const n = o.visible !== !1;
1557
- a.innerHTML = n ? b.olhoAberto : b.olhoFechado, D(a, n ? "Ocultar Feição" : "Exibir Feição");
1680
+ a.innerHTML = n ? b.olhoAberto : b.olhoFechado, B(a, n ? "Ocultar Feição" : "Exibir Feição");
1558
1681
  const l = a.closest(".ui-feat-row");
1559
1682
  l && l.classList.toggle("hidden-row", !n), e.dispararEvento("ui-feicao-visibilidade", {
1560
1683
  feicaoId: o.id,
@@ -1566,7 +1689,7 @@ function Va(e, r) {
1566
1689
  a.addEventListener("click", (i) => {
1567
1690
  if (i.stopPropagation(), a.hasAttribute("data-locked-by-layer")) return;
1568
1691
  const t = a.getAttribute("data-feat-lock"), o = e.feicoes.find((n) => n.id === t);
1569
- o && (o.locked = !o.locked, a.innerHTML = o.locked ? b.cadeadoTrancado : b.cadeadoAberto, a.classList.toggle("ui-lock-open", !o.locked), D(a, o.locked ? "Desbloquear Feição" : "Bloquear Feição"), e.dispararEvento("ui-feicao-bloqueio", {
1692
+ o && (o.locked = !o.locked, a.innerHTML = o.locked ? b.cadeadoTrancado : b.cadeadoAberto, a.classList.toggle("ui-lock-open", !o.locked), B(a, o.locked ? "Desbloquear Feição" : "Bloquear Feição"), e.dispararEvento("ui-feicao-bloqueio", {
1570
1693
  feicaoId: o.id,
1571
1694
  bloqueado: o.locked
1572
1695
  }));
@@ -1579,7 +1702,7 @@ function Va(e, r) {
1579
1702
  });
1580
1703
  });
1581
1704
  }
1582
- function Ya(e, r) {
1705
+ function sr(e, r) {
1583
1706
  var a;
1584
1707
  r.querySelectorAll("[data-basemap-thumb]").forEach((i) => {
1585
1708
  i.addEventListener(
@@ -1599,12 +1722,12 @@ function Ya(e, r) {
1599
1722
  });
1600
1723
  });
1601
1724
  }
1602
- function Ka(e, r) {
1603
- Ga(e, r), za(e, r), Va(e, r), Ya(e, r), Pa(e, r), Na(e, r);
1725
+ function lr(e, r) {
1726
+ ir(e, r), _a(e, r), nr(e, r), sr(e, r), Ja(e, r), rr(e, r);
1604
1727
  }
1605
- function _a(e, r, a, i) {
1728
+ function cr(e, r, a, i) {
1606
1729
  var g, v;
1607
- const t = ya({
1730
+ const t = Ba({
1608
1731
  camadas: e.camadas,
1609
1732
  feicoes: e.feicoes,
1610
1733
  camadaAtivaId: e.camadaAtivaId,
@@ -1618,37 +1741,37 @@ function _a(e, r, a, i) {
1618
1741
  mostrarBusca: e.mostrarBusca,
1619
1742
  limitesPorCamada: e.expandedFeatureLimits,
1620
1743
  mostrarBotaoColapsar: e.flutuante && e.getAttribute("colapsavel") !== "false"
1621
- }), o = e.mostrarMapasBase ? la(e.mapasBase, e.mapaBaseAtivo, e.mapasBaseRecolhido) : "", n = e.mostrarRodape ? ua(e.camadas, e.feicoes, e.selectedFeatureIds) : "", l = r.getElementById("ui-layer-tree-mount"), c = a.scrollTop, s = l ? l.scrollTop : 0, d = r.activeElement, f = d && a.contains(d) ? d.id : "", p = d && !f && a.contains(d) ? Array.from(d.attributes).find((h) => h.name.startsWith("data-") && h.value !== "") : void 0, m = d && "selectionStart" in d ? d.selectionStart : null;
1744
+ }), o = e.mostrarMapasBase ? ya(e.mapasBase, e.mapaBaseAtivo, e.mapasBaseRecolhido) : "", n = e.mostrarRodape ? Ea(e.camadas, e.feicoes, e.selectedFeatureIds) : "", l = r.getElementById("ui-layer-tree-mount"), c = a.scrollTop, s = l ? l.scrollTop : 0, d = r.activeElement, u = d && a.contains(d) ? d.id : "", p = d && !u && a.contains(d) ? Array.from(d.attributes).find((h) => h.name.startsWith("data-") && h.value !== "") : void 0, m = d && "selectionStart" in d ? d.selectionStart : null;
1622
1745
  a.innerHTML = `
1623
1746
  ${t}
1624
1747
  ${n}
1625
1748
  ${o}
1626
1749
  `, a.scrollTop = c;
1627
- const u = r.getElementById("ui-layer-tree-mount");
1628
- if (u && (u.scrollTop = s), f) {
1629
- const h = r.getElementById(f);
1750
+ const f = r.getElementById("ui-layer-tree-mount");
1751
+ if (f && (f.scrollTop = s), u) {
1752
+ const h = r.getElementById(u);
1630
1753
  if (h && (h.focus({ preventScroll: !0 }), m !== null && typeof h.setSelectionRange == "function"))
1631
1754
  try {
1632
1755
  h.setSelectionRange(m, m);
1633
1756
  } catch {
1634
1757
  }
1635
1758
  }
1636
- !f && p && ((g = T(a, p.name, p.value)) == null || g.focus({ preventScroll: !0 })), (v = r.querySelector("[data-layer-row], [data-feat-row]")) == null || v.setAttribute("tabindex", "0"), Ka(e, r), i.bindAll();
1759
+ !u && p && ((g = T(a, p.name, p.value)) == null || g.focus({ preventScroll: !0 })), (v = r.querySelector("[data-layer-row], [data-feat-row]")) == null || v.setAttribute("tabindex", "0"), lr(e, r), i.bindAll();
1637
1760
  }
1638
- const Xa = '[role="button"][tabindex]', Y = "[data-layer-row], [data-feat-row]", Qa = ["color", "range", "checkbox", "radio", "button"];
1639
- function Re(e) {
1640
- return !e || !(e instanceof Element) || e instanceof HTMLInputElement && Qa.includes(e.type) ? !1 : ta({ composedPath: () => [e] });
1761
+ const dr = '[role="button"][tabindex]', X = "[data-layer-row], [data-feat-row]", ur = ["color", "range", "checkbox", "radio", "button"];
1762
+ function Qe(e) {
1763
+ return !e || !(e instanceof Element) || e instanceof HTMLInputElement && ur.includes(e.type) ? !1 : ga({ composedPath: () => [e] });
1641
1764
  }
1642
- function Ja(e) {
1643
- return Array.from(e.querySelectorAll(Y)).filter((r) => {
1765
+ function pr(e) {
1766
+ return Array.from(e.querySelectorAll(X)).filter((r) => {
1644
1767
  const a = r.closest(".ui-children-container");
1645
1768
  return !(a && a.style.display === "none") && !r.classList.contains("ui-search-hidden");
1646
1769
  });
1647
1770
  }
1648
- function ee(e, r) {
1649
- r && (e.querySelectorAll(Y).forEach((a) => a.setAttribute("tabindex", "-1")), r.setAttribute("tabindex", "0"), r.focus());
1771
+ function ie(e, r) {
1772
+ r && (e.querySelectorAll(X).forEach((a) => a.setAttribute("tabindex", "-1")), r.setAttribute("tabindex", "0"), r.focus());
1650
1773
  }
1651
- function Wa(e, r) {
1774
+ function fr(e, r) {
1652
1775
  e.dispatchEvent(
1653
1776
  new MouseEvent("click", {
1654
1777
  bubbles: !0,
@@ -1657,9 +1780,9 @@ function Wa(e, r) {
1657
1780
  })
1658
1781
  );
1659
1782
  }
1660
- function Za(e, r, a) {
1783
+ function mr(e, r, a) {
1661
1784
  var t;
1662
- if (Re(a.composedPath()[0])) return;
1785
+ if (Qe(a.composedPath()[0])) return;
1663
1786
  const i = r.querySelector(".confirming");
1664
1787
  if (i) {
1665
1788
  a.preventDefault(), i.classList.remove("confirming");
@@ -1673,16 +1796,16 @@ function Za(e, r, a) {
1673
1796
  }
1674
1797
  e.selectedFeatureIds.size > 0 && (a.preventDefault(), e.limparSelecao(!0));
1675
1798
  }
1676
- function er(e, r, a, i) {
1799
+ function gr(e, r, a, i) {
1677
1800
  var l;
1678
1801
  const t = i.composedPath()[0];
1679
- if (!(t instanceof HTMLElement) || Re(t)) return;
1680
- if ((i.key === "Enter" || i.key === " ") && t.matches(Xa)) {
1802
+ if (!(t instanceof HTMLElement) || Qe(t)) return;
1803
+ if ((i.key === "Enter" || i.key === " ") && t.matches(dr)) {
1681
1804
  i.preventDefault(), t.click();
1682
1805
  return;
1683
1806
  }
1684
- if (!t.matches(Y)) return;
1685
- const o = Ja(r), n = o.indexOf(t);
1807
+ if (!t.matches(X)) return;
1808
+ const o = pr(r), n = o.indexOf(t);
1686
1809
  if (i.key === "F2") {
1687
1810
  i.preventDefault();
1688
1811
  const c = t.getAttribute("data-layer-row"), s = t.getAttribute("data-feat-row"), d = c ? T(t, "data-layer-name-trigger", c) : s ? T(t, "data-feat-name-trigger", s) : null;
@@ -1691,7 +1814,7 @@ function er(e, r, a, i) {
1691
1814
  }
1692
1815
  if ((i.ctrlKey || i.metaKey) && (i.key === "a" || i.key === "A")) {
1693
1816
  i.preventDefault();
1694
- const c = Pe(
1817
+ const c = _e(
1695
1818
  e.camadas,
1696
1819
  e.feicoes,
1697
1820
  e.expandedLayers,
@@ -1711,16 +1834,16 @@ function er(e, r, a, i) {
1711
1834
  }
1712
1835
  switch (i.key) {
1713
1836
  case "ArrowDown":
1714
- i.preventDefault(), ee(r, o[Math.min(o.length - 1, n + 1)]);
1837
+ i.preventDefault(), ie(r, o[Math.min(o.length - 1, n + 1)]);
1715
1838
  break;
1716
1839
  case "ArrowUp":
1717
- i.preventDefault(), ee(r, o[Math.max(0, n - 1)]);
1840
+ i.preventDefault(), ie(r, o[Math.max(0, n - 1)]);
1718
1841
  break;
1719
1842
  case "Home":
1720
- i.preventDefault(), ee(r, o[0]);
1843
+ i.preventDefault(), ie(r, o[0]);
1721
1844
  break;
1722
1845
  case "End":
1723
- i.preventDefault(), ee(r, o[o.length - 1]);
1846
+ i.preventDefault(), ie(r, o[o.length - 1]);
1724
1847
  break;
1725
1848
  case "ArrowRight":
1726
1849
  case "ArrowLeft": {
@@ -1732,58 +1855,20 @@ function er(e, r, a, i) {
1732
1855
  }
1733
1856
  case "Enter":
1734
1857
  case " ":
1735
- i.preventDefault(), Wa(t, i);
1858
+ i.preventDefault(), fr(t, i);
1736
1859
  break;
1737
1860
  }
1738
1861
  }
1739
- function ar(e, r, a, i, t) {
1862
+ function vr(e, r, a, i, t) {
1740
1863
  t.add(r, "keydown", (o) => {
1741
- o.key === "Escape" && Za(e, a, o);
1742
- }), t.add(i, "keydown", (o) => er(e, i, a, o)), t.add(i, "focusin", (o) => {
1864
+ o.key === "Escape" && mr(e, a, o);
1865
+ }), t.add(i, "keydown", (o) => gr(e, i, a, o)), t.add(i, "focusin", (o) => {
1743
1866
  const n = o.composedPath()[0];
1744
- n instanceof HTMLElement && n.matches(Y) && (i.querySelectorAll(Y).forEach((l) => l.setAttribute("tabindex", "-1")), n.setAttribute("tabindex", "0"));
1745
- });
1746
- }
1747
- function rr(e, r) {
1748
- r.querySelectorAll("[data-layer-row]").forEach((i) => {
1749
- const o = i.getAttribute("data-layer-row") === e.camadaAtivaId;
1750
- i.classList.toggle("active-drawing-layer", o), Le(i, "camada-ativa", o), o ? i.setAttribute("aria-current", "true") : i.removeAttribute("aria-current");
1867
+ n instanceof HTMLElement && n.matches(X) && (i.querySelectorAll(X).forEach((l) => l.setAttribute("tabindex", "-1")), n.setAttribute("tabindex", "0"));
1751
1868
  });
1752
1869
  }
1753
- function tr(e, r) {
1754
- r.querySelectorAll(".ui-feat-row").forEach((f) => {
1755
- const p = f.getAttribute("data-feat-row"), m = p ? e.selectedFeatureIds.has(p) : !1;
1756
- f.classList.toggle("selected-row", m), Le(f, "feicao-selecionada", m), f.setAttribute("aria-selected", String(m));
1757
- const u = f.querySelector(".ui-target-circle");
1758
- u && u.classList.toggle("selected", m);
1759
- }), r.querySelectorAll(".ui-layer-group").forEach((f) => {
1760
- const p = f.getAttribute("data-layer-id"), m = re(e.camadas, e.feicoes, p ?? ""), u = f.querySelector(".ui-layer-row .ui-target-circle");
1761
- if (u && m.length > 0) {
1762
- const g = m.every((h) => e.selectedFeatureIds.has(h.id)), v = !g && m.some((h) => e.selectedFeatureIds.has(h.id));
1763
- u.classList.toggle("selected", g), u.classList.toggle("partial", v);
1764
- } else u && u.classList.remove("selected", "partial");
1765
- });
1766
- const a = e.feicoes.filter((f) => e.selectedFeatureIds.has(f.id)), i = a.length > 0, t = r.getElementById("footer-count"), o = r.getElementById("footer-label");
1767
- if (t && (t.textContent = String(i ? a.length : e.camadas.length)), o) {
1768
- const f = ze(e.camadas.length, a.length);
1769
- o.innerHTML = f.icone, o.title = f.texto, o.setAttribute("aria-label", f.texto);
1770
- }
1771
- const n = r.querySelector(".ui-tree-footer");
1772
- n && (n.classList.toggle("tem-selecao", i), n.classList.toggle("sem-selecao", !i));
1773
- const l = r.querySelector(".ui-footer-actions-gerais");
1774
- l && (l.style.display = i ? "none" : "flex");
1775
- const c = r.querySelector(".ui-footer-bulk-actions");
1776
- c && (c.style.display = i ? "flex" : "none"), ["btn-footer-del"].forEach((f) => {
1777
- const p = r.getElementById(f);
1778
- p && (p.disabled = !i, p.classList.toggle("disabled", !i));
1779
- });
1780
- const s = r.querySelector(".ui-footer-move-wrapper");
1781
- s && s.classList.toggle("disabled", !i);
1782
- const d = r.getElementById("select-footer-move");
1783
- d && (d.disabled = !i);
1784
- }
1785
- function ir(e, r, a, i, t) {
1786
- const o = Pe(e.camadas, e.feicoes, e.expandedLayers, e.searchQuery), n = !i && !o.includes(r) && e.feicoes.some((c) => c.id === r), l = ma(
1870
+ function br(e, r, a, i, t) {
1871
+ const o = _e(e.camadas, e.feicoes, e.expandedLayers, e.searchQuery), n = !i && !o.includes(r) && e.feicoes.some((c) => c.id === r), l = La(
1787
1872
  n ? [...o, r] : o,
1788
1873
  e.selectedFeatureIds,
1789
1874
  e.lastClickedFeatureId,
@@ -1793,33 +1878,33 @@ function ir(e, r, a, i, t) {
1793
1878
  );
1794
1879
  l && (e.selectedFeatureIds = l.selecionados, e.lastClickedFeatureId = l.ultimoClicadoId, e.sincronizarSelecaoDOM(), t && e.notificarMudancaSelecao());
1795
1880
  }
1796
- function or(e, r, a) {
1881
+ function hr(e, r, a) {
1797
1882
  const i = r || [];
1798
1883
  i.length === e.selectedFeatureIds.size && i.every((n) => e.selectedFeatureIds.has(n)) || (e.selectedFeatureIds.clear(), i.forEach((n) => e.selectedFeatureIds.add(n)), e.lastClickedFeatureId = i.length > 0 ? i[i.length - 1] : null, e.sincronizarSelecaoDOM(), a && e.notificarMudancaSelecao());
1799
1884
  }
1800
- function nr(e, r) {
1885
+ function xr(e, r) {
1801
1886
  e.selectedFeatureIds.size !== 0 && (e.selectedFeatureIds.clear(), e.lastClickedFeatureId = null, e.sincronizarSelecaoDOM(), r && e.notificarMudancaSelecao());
1802
1887
  }
1803
- function sr(e) {
1888
+ function yr(e) {
1804
1889
  const r = e.feicoes.filter((a) => e.selectedFeatureIds.has(a.id));
1805
1890
  e.dispararEvento("ui-feicoes-selecionadas", {
1806
1891
  feicoesIds: Array.from(e.selectedFeatureIds),
1807
1892
  feicoes: r
1808
1893
  }), r.length === 1 ? e.dispararEvento("ui-feicao-selecionada", { feicaoId: r[0].id, feicao: r[0] }) : r.length === 0 && e.dispararEvento("ui-feicao-selecionada", { feicaoId: null, feicao: null });
1809
1894
  }
1810
- class lr {
1895
+ class wr {
1811
1896
  constructor(r) {
1812
- y(this, "origens", /* @__PURE__ */ new Map());
1813
- y(this, "removidas", /* @__PURE__ */ new Set());
1814
- y(this, "salvarComDebounce", Se(() => this.salvar(), 200));
1897
+ w(this, "origens", /* @__PURE__ */ new Map());
1898
+ w(this, "removidas", /* @__PURE__ */ new Set());
1899
+ w(this, "salvarComDebounce", Ne(() => this.salvar(), 200));
1815
1900
  this.instantaneo = r;
1816
1901
  }
1817
1902
  chaveAtual() {
1818
1903
  const r = this.instantaneo();
1819
- return La(r.storageKey, r.id);
1904
+ return Oa(r.storageKey, r.id);
1820
1905
  }
1821
1906
  carregar() {
1822
- return fe(this.chaveAtual());
1907
+ return be(this.chaveAtual());
1823
1908
  }
1824
1909
  /** Versão com debounce, para interações contínuas (seletor de cor, slider de opacidade). */
1825
1910
  agendar() {
@@ -1828,8 +1913,8 @@ class lr {
1828
1913
  salvar() {
1829
1914
  const r = this.instantaneo();
1830
1915
  if (!r.persistir || !r.conectado) return;
1831
- const a = this.chaveAtual(), i = Ma({
1832
- estadoAnterior: fe(a),
1916
+ const a = this.chaveAtual(), i = Ua({
1917
+ estadoAnterior: be(a),
1833
1918
  origensCamadas: this.origens,
1834
1919
  camadas: r.camadas,
1835
1920
  expandedLayers: r.expandedLayers,
@@ -1840,27 +1925,27 @@ class lr {
1840
1925
  altura: r.altura,
1841
1926
  camadasRemovidas: this.removidas
1842
1927
  });
1843
- this.removidas.clear(), Ca(a, i);
1928
+ this.removidas.clear(), Na(a, i);
1844
1929
  }
1845
1930
  limpar() {
1846
- $a(this.chaveAtual());
1931
+ Ha(this.chaveAtual());
1847
1932
  }
1848
1933
  // --- Origens (como a camada chegou do consumidor) e remoções ---
1849
1934
  limparOrigens() {
1850
1935
  this.origens.clear();
1851
1936
  }
1852
1937
  registrarOrigem(r) {
1853
- this.origens.set(r.id, Te(r));
1938
+ this.origens.set(r.id, Xe(r));
1854
1939
  }
1855
1940
  esquecerCamada(r) {
1856
1941
  this.origens.delete(r), this.removidas.add(r);
1857
1942
  }
1858
1943
  /** Aplica por cima de `camadas` o que foi lembrado (expansão, visibilidade, travas, opacidade, cor, ordem). */
1859
1944
  reidratar(r, a, i) {
1860
- Sa(r, a, i, this.origens);
1945
+ Ga(r, a, i, this.origens);
1861
1946
  }
1862
1947
  }
1863
- function Oe(e, r = null, a = /* @__PURE__ */ new Set()) {
1948
+ function ke(e, r = null, a = /* @__PURE__ */ new Set()) {
1864
1949
  const i = [];
1865
1950
  if (!Array.isArray(e)) return i;
1866
1951
  for (const t of e) {
@@ -1869,11 +1954,15 @@ function Oe(e, r = null, a = /* @__PURE__ */ new Set()) {
1869
1954
  if (a.has(o)) continue;
1870
1955
  a.add(o);
1871
1956
  const n = { ...t, id: o };
1872
- delete n.children, r && n.parentId === void 0 && (n.parentId = r), i.push(n), Array.isArray(t.children) && t.children.length > 0 && i.push(...Oe(t.children, o, a));
1957
+ delete n.children, r && n.parentId === void 0 && (n.parentId = r), i.push(n), Array.isArray(t.children) && t.children.length > 0 && i.push(...ke(t.children, o, a));
1873
1958
  }
1874
1959
  return i;
1875
1960
  }
1876
- function je(e) {
1961
+ function Je(e) {
1962
+ const r = e.lastClickedFeatureId;
1963
+ r && !e.feicoes.some((a) => a.id === r) && (e.lastClickedFeatureId = null);
1964
+ }
1965
+ function We(e) {
1877
1966
  if (!Array.isArray(e)) return [];
1878
1967
  const r = /* @__PURE__ */ new Set(), a = [];
1879
1968
  for (const i of e) {
@@ -1883,8 +1972,8 @@ function je(e) {
1883
1972
  }
1884
1973
  return a;
1885
1974
  }
1886
- function cr(e, r, a) {
1887
- if (e.camadas = Array.isArray(r) ? Oe(r) : [], e.lembranca.limparOrigens(), e.persistir) {
1975
+ function Ar(e, r, a) {
1976
+ if (e.camadas = Array.isArray(r) ? ke(r) : [], e.lembranca.limparOrigens(), e.persistir) {
1888
1977
  const t = e.lembranca.carregar();
1889
1978
  e.lembranca.reidratar(e.camadas, t, e.expandedLayers), t != null && t.camadaAtivaId && e.camadas.some((o) => o.id === t.camadaAtivaId) && (e.camadaAtivaId = t.camadaAtivaId);
1890
1979
  } else
@@ -1892,35 +1981,42 @@ function cr(e, r, a) {
1892
1981
  e.lembranca.registrarOrigem(t), e.expandedLayers.has(t.id) || e.expandedLayers.add(t.id);
1893
1982
  });
1894
1983
  if (Array.isArray(a)) {
1895
- e.feicoes = je(a);
1984
+ e.feicoes = We(a);
1896
1985
  const t = new Set(e.camadas.map((n) => n.id)), o = e.feicoes.filter((n) => n.layerId && !t.has(n.layerId));
1897
1986
  o.length > 0 && console.warn(
1898
1987
  `[UI-Camadas] ${o.length} feição(ões) possuem 'layerId' não cadastrado nas camadas:`,
1899
1988
  o.map((n) => ({ id: n.id, nome: n.name, layerId: n.layerId }))
1900
- ), be(e.selectedFeatureIds, e.feicoes);
1989
+ ), Ee(e.selectedFeatureIds, e.feicoes), Je(e);
1901
1990
  }
1902
1991
  const i = e.getAttribute("camada-ativa");
1903
1992
  e.camadas.length > 0 && (!i || !e.camadas.some((t) => t.id === i)) && (e.camadaAtivaId = e.camadas[0].id), e.salvarLembrancaEstado(), e.solicitarRenderizacao();
1904
1993
  }
1905
- function dr(e, r) {
1906
- e.feicoes = je(r), be(e.selectedFeatureIds, e.feicoes), e.solicitarRenderizacao();
1994
+ function Er(e, r) {
1995
+ e.feicoes = We(r), Ee(e.selectedFeatureIds, e.feicoes), Je(e), e.solicitarRenderizacao();
1907
1996
  }
1908
- function ur(e, r) {
1997
+ function kr(e, r) {
1909
1998
  if (!r || !r.id) return;
1910
1999
  if (e.camadas.some((i) => i.id === r.id)) {
1911
2000
  console.warn(`[UI-Camadas] adicionarCamada ignorado: já existe uma camada com id '${r.id}'.`);
1912
2001
  return;
1913
2002
  }
1914
- const a = { ...r };
1915
- e.camadas.push(a), e.lembranca.registrarOrigem(a), e.expandedLayers.add(a.id), a.parentId && e.expandedLayers.add(a.parentId), e.salvarLembrancaEstado(), e.solicitarRenderizacao();
2003
+ const a = new Set(e.camadas.map((i) => i.id));
2004
+ for (const i of ke([r])) {
2005
+ if (a.has(i.id)) {
2006
+ console.warn(`[UI-Camadas] adicionarCamada: subcamada '${i.id}' ignorada, o id já existe.`);
2007
+ continue;
2008
+ }
2009
+ a.add(i.id), e.camadas.push(i), e.lembranca.registrarOrigem(i), e.expandedLayers.add(i.id), i.parentId && e.expandedLayers.add(i.parentId);
2010
+ }
2011
+ e.salvarLembrancaEstado(), e.solicitarRenderizacao();
1916
2012
  }
1917
- function pr(e, r) {
2013
+ function Ir(e, r) {
1918
2014
  var a;
1919
2015
  e.camadas.forEach((i) => {
1920
2016
  i.parentId === r && (i.parentId = null);
1921
- }), e.camadas = e.camadas.filter((i) => i.id !== r), e.feicoes = e.feicoes.filter((i) => i.layerId !== r), e.lembranca.esquecerCamada(r), e.expandedLayers.delete(r), e.activeSettingsLayerId === r && (e.activeSettingsLayerId = null), be(e.selectedFeatureIds, e.feicoes), e.selectedFeatureIds.size === 0 && (e.lastClickedFeatureId = null), e.camadaAtivaId === r && (e.camadaAtivaId = ((a = e.camadas[0]) == null ? void 0 : a.id) ?? null), e.salvarLembrancaEstado(), e.solicitarRenderizacao();
2017
+ }), e.camadas = e.camadas.filter((i) => i.id !== r), e.feicoes = e.feicoes.filter((i) => i.layerId !== r), e.lembranca.esquecerCamada(r), e.expandedLayers.delete(r), e.activeSettingsLayerId === r && (e.activeSettingsLayerId = null), Ee(e.selectedFeatureIds, e.feicoes), e.selectedFeatureIds.size === 0 && (e.lastClickedFeatureId = null), e.camadaAtivaId === r && (e.camadaAtivaId = ((a = e.camadas[0]) == null ? void 0 : a.id) ?? null), e.salvarLembrancaEstado(), e.solicitarRenderizacao();
1922
2018
  }
1923
- function fr(e, r) {
2019
+ function Lr(e, r) {
1924
2020
  if (!(!r || !r.id)) {
1925
2021
  if (e.feicoes.some((a) => a.id === r.id)) {
1926
2022
  console.warn(`[UI-Camadas] adicionarFeicao ignorado: já existe uma feição com id '${r.id}'.`);
@@ -1929,15 +2025,15 @@ function fr(e, r) {
1929
2025
  e.feicoes.push({ ...r }), e.solicitarRenderizacao();
1930
2026
  }
1931
2027
  }
1932
- function mr(e, r) {
2028
+ function Cr(e, r) {
1933
2029
  if (!r || typeof r != "object" || !r.id) return;
1934
2030
  const a = e.feicoes.findIndex((i) => i.id === r.id);
1935
2031
  a !== -1 && (e.feicoes[a] = { ...e.feicoes[a], ...r }, e.solicitarRenderizacao());
1936
2032
  }
1937
- function gr(e, r) {
1938
- e.feicoes = e.feicoes.filter((a) => a.id !== r), e.selectedFeatureIds.delete(r), e.solicitarRenderizacao();
2033
+ function $r(e, r) {
2034
+ e.feicoes = e.feicoes.filter((a) => a.id !== r), e.selectedFeatureIds.delete(r), e.lastClickedFeatureId === r && (e.lastClickedFeatureId = null), e.solicitarRenderizacao();
1939
2035
  }
1940
- function vr(e) {
2036
+ function Sr(e) {
1941
2037
  function i() {
1942
2038
  return e.getMinAltura ? e.getMinAltura() : 140;
1943
2039
  }
@@ -1955,9 +2051,9 @@ function vr(e) {
1955
2051
  );
1956
2052
  return;
1957
2053
  }
1958
- const f = typeof s == "number" ? s : parseFloat(String(s));
1959
- if (isNaN(f)) return;
1960
- const p = Math.max(i(), Math.min(t(), Math.round(f)));
2054
+ const u = typeof s == "number" ? s : parseFloat(String(s));
2055
+ if (isNaN(u)) return;
2056
+ const p = Math.max(i(), Math.min(t(), Math.round(u)));
1961
2057
  e.hostElement.style.height = `${p}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${p}px`), d && e.hostElement.dispatchEvent(
1962
2058
  new CustomEvent("ui-redimensionar-altura", {
1963
2059
  bubbles: !0,
@@ -1969,23 +2065,23 @@ function vr(e) {
1969
2065
  let n = null;
1970
2066
  function l() {
1971
2067
  if (!e.resizerElement) return;
1972
- let s = !1, d = 0, f = 0;
1973
- const p = (u) => {
1974
- if (u.button !== 0) return;
1975
- u.preventDefault(), u.stopPropagation(), s = !0, d = u.clientY, f = e.hostElement.getBoundingClientRect().height, e.resizerElement.classList.add("ui-camadas-resizer--ativo"), e.hostElement.classList.add("ui-camadas--redimensionando");
2068
+ let s = !1, d = 0, u = 0;
2069
+ const p = (f) => {
2070
+ if (f.button !== 0) return;
2071
+ f.preventDefault(), f.stopPropagation(), s = !0, d = f.clientY, u = e.hostElement.getBoundingClientRect().height, e.resizerElement.classList.add("ui-camadas-resizer--ativo"), e.hostElement.classList.add("ui-camadas--redimensionando");
1976
2072
  try {
1977
- e.resizerElement.setPointerCapture(u.pointerId);
2073
+ e.resizerElement.setPointerCapture(f.pointerId);
1978
2074
  } catch {
1979
2075
  }
1980
2076
  const g = (k) => {
1981
2077
  if (!s) return;
1982
2078
  k.preventDefault();
1983
- const C = k.clientY - d, F = Math.max(i(), Math.min(t(), Math.round(f + C)));
1984
- e.hostElement.style.height = `${F}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${F}px`), e.onRedimensionando && e.onRedimensionando(F), e.hostElement.dispatchEvent(
2079
+ const C = k.clientY - d, $ = Math.max(i(), Math.min(t(), Math.round(u + C)));
2080
+ e.hostElement.style.height = `${$}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${$}px`), e.onRedimensionando && e.onRedimensionando($), e.hostElement.dispatchEvent(
1985
2081
  new CustomEvent("ui-redimensionando-altura", {
1986
2082
  bubbles: !0,
1987
2083
  composed: !0,
1988
- detail: { altura: F }
2084
+ detail: { altura: $ }
1989
2085
  })
1990
2086
  );
1991
2087
  }, v = () => {
@@ -1999,18 +2095,18 @@ function vr(e) {
1999
2095
  } catch {
2000
2096
  }
2001
2097
  window.removeEventListener("pointermove", g), window.removeEventListener("pointerup", h), window.removeEventListener("pointercancel", h);
2002
- const C = e.hostElement.getBoundingClientRect().height, F = Math.round(C);
2003
- e.onAlturaAlterada && e.onAlturaAlterada(F), e.hostElement.dispatchEvent(
2098
+ const C = e.hostElement.getBoundingClientRect().height, $ = Math.round(C);
2099
+ e.onAlturaAlterada && e.onAlturaAlterada($), e.hostElement.dispatchEvent(
2004
2100
  new CustomEvent("ui-redimensionar-altura", {
2005
2101
  bubbles: !0,
2006
2102
  composed: !0,
2007
- detail: { altura: F }
2103
+ detail: { altura: $ }
2008
2104
  })
2009
2105
  );
2010
2106
  };
2011
2107
  n = v, window.addEventListener("pointermove", g), window.addEventListener("pointerup", h), window.addEventListener("pointercancel", h);
2012
- }, m = (u) => {
2013
- u.preventDefault(), u.stopPropagation(), o(null, !0), e.onAlturaAlterada && e.onAlturaAlterada(null);
2108
+ }, m = (f) => {
2109
+ f.preventDefault(), f.stopPropagation(), o(null, !0), e.onAlturaAlterada && e.onAlturaAlterada(null);
2014
2110
  };
2015
2111
  e.listeners.add(e.resizerElement, "pointerdown", p), e.listeners.add(e.resizerElement, "dblclick", m);
2016
2112
  }
@@ -2023,19 +2119,19 @@ function vr(e) {
2023
2119
  destruir: c
2024
2120
  };
2025
2121
  }
2026
- const j = class j extends ea {
2122
+ const H = class H extends pa {
2027
2123
  constructor() {
2028
2124
  super();
2029
- y(this, "shadow");
2030
- y(this, "listeners", new aa());
2031
- y(this, "dragDropManager");
2032
- y(this, "resizerController");
2033
- y(this, "alturaCustomizada", null);
2034
- y(this, "conectado", !1);
2035
- y(this, "profundidadeLote", 0);
2036
- y(this, "renderPendente", !1);
2125
+ w(this, "shadow");
2126
+ w(this, "listeners", new fa());
2127
+ w(this, "dragDropManager");
2128
+ w(this, "resizerController");
2129
+ w(this, "alturaCustomizada", null);
2130
+ w(this, "conectado", !1);
2131
+ w(this, "profundidadeLote", 0);
2132
+ w(this, "renderPendente", !1);
2037
2133
  /** @internal */
2038
- y(this, "lembranca", new lr(() => ({
2134
+ w(this, "lembranca", new wr(() => ({
2039
2135
  persistir: this.persistir,
2040
2136
  conectado: this.conectado,
2041
2137
  storageKey: this.storageKey,
@@ -2049,21 +2145,21 @@ const j = class j extends ea {
2049
2145
  altura: this.alturaCustomizada
2050
2146
  })));
2051
2147
  // Estado interno
2052
- y(this, "camadas", []);
2053
- y(this, "feicoes", []);
2054
- y(this, "mapasBase", [...Me]);
2055
- y(this, "expandedLayers", /* @__PURE__ */ new Set());
2056
- y(this, "expandedFeatureLimits", /* @__PURE__ */ new Map());
2057
- y(this, "selectedFeatureIds", /* @__PURE__ */ new Set());
2058
- y(this, "lastClickedFeatureId", null);
2059
- y(this, "activeSettingsLayerId", null);
2060
- y(this, "editingLayerId", null);
2061
- y(this, "editingFeatureId", null);
2062
- y(this, "searchQuery", "");
2063
- y(this, "corpoElement");
2064
- y(this, "btnExpandirFlutuante");
2148
+ w(this, "camadas", []);
2149
+ w(this, "feicoes", []);
2150
+ w(this, "mapasBase", [...He]);
2151
+ w(this, "expandedLayers", /* @__PURE__ */ new Set());
2152
+ w(this, "expandedFeatureLimits", /* @__PURE__ */ new Map());
2153
+ w(this, "selectedFeatureIds", /* @__PURE__ */ new Set());
2154
+ w(this, "lastClickedFeatureId", null);
2155
+ w(this, "activeSettingsLayerId", null);
2156
+ w(this, "editingLayerId", null);
2157
+ w(this, "editingFeatureId", null);
2158
+ w(this, "searchQuery", "");
2159
+ w(this, "corpoElement");
2160
+ w(this, "btnExpandirFlutuante");
2065
2161
  this.shadow = this.attachShadow({ mode: "open" }), this.shadow.innerHTML = `
2066
- <style>${Fa}</style>
2162
+ <style>${Va}</style>
2067
2163
  <div class="ui-camadas-container" id="panel-container" part="base" role="region" aria-label="Painel de Camadas">
2068
2164
  <div class="ui-camadas-corpo" id="painel-corpo" part="corpo"></div>
2069
2165
  <div class="ui-camadas-resizer-altura" id="resizer-altura" part="resizer" title="Arraste para redimensionar a altura (duplo-clique para resetar)" aria-label="Redimensionar altura">
@@ -2073,9 +2169,9 @@ const j = class j extends ea {
2073
2169
  <button class="ui-camadas-toggle-flutuante" id="btn-expandir-flutuante" part="botao-expandir" title="Expandir Painel de Camadas" aria-label="Expandir Painel de Camadas">
2074
2170
  ${b.camadas}
2075
2171
  </button>
2076
- `, this.corpoElement = this.shadow.getElementById("painel-corpo"), this.btnExpandirFlutuante = this.shadow.getElementById("btn-expandir-flutuante"), this.dragDropManager = new ka(this, this.shadow);
2172
+ `, this.corpoElement = this.shadow.getElementById("painel-corpo"), this.btnExpandirFlutuante = this.shadow.getElementById("btn-expandir-flutuante"), this.dragDropManager = new Ta(this, this.shadow);
2077
2173
  const a = this.shadow.getElementById("resizer-altura");
2078
- this.resizerController = vr({
2174
+ this.resizerController = Sr({
2079
2175
  hostElement: this,
2080
2176
  resizerElement: a,
2081
2177
  listeners: this.listeners,
@@ -2117,16 +2213,16 @@ const j = class j extends ea {
2117
2213
  }
2118
2214
  connectedCallback() {
2119
2215
  if (this.persistir) {
2120
- const a = fe(this.obterChaveStorageAtual());
2216
+ const a = be(this.obterChaveStorageAtual());
2121
2217
  a && (a.painelColapsado === !0 && !this.hasAttribute("colapsado") && (this.colapsado = !0), a.camadaAtivaId && !this.getAttribute("camada-ativa") && (this.camadaAtivaId = a.camadaAtivaId), a.mapaBaseAtivo && !this.getAttribute("mapa-base-ativo") && (this.mapaBaseAtivo = a.mapaBaseAtivo), a.densidade && !this.getAttribute("densidade") && (this.densidade = a.densidade), typeof a.altura == "number" && !this.getAttribute("altura") && !this.style.height && (this.resizerController.definirAltura(a.altura, !1), this.alturaCustomizada = a.altura));
2122
2218
  }
2123
- this.hasAttribute("altura") && this.resizerController.definirAltura(this.getAttribute("altura"), !1), this.persistir && !this.storageKey && !this.id && (j.instanciasChavePadrao.size > 0 && console.warn(
2219
+ this.hasAttribute("altura") && this.resizerController.definirAltura(this.getAttribute("altura"), !1), this.persistir && !this.storageKey && !this.id && (H.instanciasChavePadrao.size > 0 && console.warn(
2124
2220
  "[UI-Camadas] Mais de um painel sem 'id' nem 'storage-key' divide a mesma chave de persistência e um sobrescreve o estado do outro. Defina 'storage-key' (ou 'id') em cada um."
2125
- ), j.instanciasChavePadrao.add(this)), this.resizerController.init(), this.render(), this.conectarEventosGerais(), ar(this, this, this.shadow, this.corpoElement, this.listeners), this.conectado = !0, this.camadas.length > 0 && this.salvarLembrancaEstado();
2221
+ ), H.instanciasChavePadrao.add(this)), this.resizerController.init(), this.render(), this.conectarEventosGerais(), vr(this, this, this.shadow, this.corpoElement, this.listeners), this.conectado = !0, this.camadas.length > 0 && this.salvarLembrancaEstado();
2126
2222
  }
2127
2223
  disconnectedCallback() {
2128
2224
  var a, i;
2129
- this.conectado = !1, j.instanciasChavePadrao.delete(this), (a = this.resizerController) == null || a.destruir(), (i = this.dragDropManager) == null || i.destruir(), ja(this), this.listeners.cleanup();
2225
+ this.conectado = !1, H.instanciasChavePadrao.delete(this), (a = this.resizerController) == null || a.destruir(), (i = this.dragDropManager) == null || i.destruir(), ar(this), this.listeners.cleanup();
2130
2226
  }
2131
2227
  attributeChangedCallback(a, i, t) {
2132
2228
  var o, n;
@@ -2161,7 +2257,7 @@ const j = class j extends ea {
2161
2257
  t.classList.toggle("active", o), t.setAttribute("aria-pressed", String(o));
2162
2258
  });
2163
2259
  const i = this.shadow.querySelector("[data-basemap-atual]");
2164
- i && (i.textContent = Fe(this.mapasBase, a));
2260
+ i && (i.textContent = Ge(this.mapasBase, a));
2165
2261
  }
2166
2262
  /** Seção "Mapa Base" recolhida (só o cabeçalho com o mapa ativo). Atributo `mapas-base-recolhido`. */
2167
2263
  get mapasBaseRecolhido() {
@@ -2295,10 +2391,10 @@ const j = class j extends ea {
2295
2391
  this.definirMapasBase(a);
2296
2392
  }
2297
2393
  definirCamadas(a, i) {
2298
- cr(this, a, i);
2394
+ Ar(this, a, i);
2299
2395
  }
2300
2396
  definirFeicoes(a) {
2301
- dr(this, a);
2397
+ Er(this, a);
2302
2398
  }
2303
2399
  definirMapasBase(a) {
2304
2400
  this.mapasBase = Array.isArray(a) ? [...a] : [], this.solicitarRenderizacao();
@@ -2322,28 +2418,28 @@ const j = class j extends ea {
2322
2418
  return this.feicoes.filter((a) => this.selectedFeatureIds.has(a.id));
2323
2419
  }
2324
2420
  adicionarCamada(a) {
2325
- ur(this, a);
2421
+ kr(this, a);
2326
2422
  }
2327
2423
  removerCamada(a) {
2328
- pr(this, a);
2424
+ Ir(this, a);
2329
2425
  }
2330
2426
  adicionarFeicao(a) {
2331
- fr(this, a);
2427
+ Lr(this, a);
2332
2428
  }
2333
2429
  atualizarFeicao(a) {
2334
- mr(this, a);
2430
+ Cr(this, a);
2335
2431
  }
2336
2432
  removerFeicao(a) {
2337
- gr(this, a);
2433
+ $r(this, a);
2338
2434
  }
2339
2435
  selecionarFeicao(a, i = !1, t = !1, o = !1) {
2340
- ir(this, a, i, t, o);
2436
+ br(this, a, i, t, o);
2341
2437
  }
2342
2438
  selecionarFeicoes(a, i = !1) {
2343
- or(this, a, i);
2439
+ hr(this, a, i);
2344
2440
  }
2345
2441
  limparSelecao(a = !1) {
2346
- nr(this, a);
2442
+ xr(this, a);
2347
2443
  }
2348
2444
  expandirTodas() {
2349
2445
  this.expandedLayers = new Set(this.camadas.map((a) => a.id)), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
@@ -2407,7 +2503,7 @@ const j = class j extends ea {
2407
2503
  );
2408
2504
  }
2409
2505
  render() {
2410
- this.corpoElement && _a(this, this.shadow, this.corpoElement, this.dragDropManager);
2506
+ this.corpoElement && cr(this, this.shadow, this.corpoElement, this.dragDropManager);
2411
2507
  }
2412
2508
  // --- Conexão de Eventos ---
2413
2509
  conectarEventosGerais() {
@@ -2415,27 +2511,27 @@ const j = class j extends ea {
2415
2511
  }
2416
2512
  // --- Sincronização de DOM (delegada) ---
2417
2513
  sincronizarCamadaAtivaDOM() {
2418
- rr(this, this.shadow);
2514
+ Ya(this, this.shadow);
2419
2515
  }
2420
2516
  sincronizarSelecaoDOM() {
2421
- tr(this, this.shadow);
2517
+ Ka(this, this.shadow);
2422
2518
  }
2423
2519
  // --- Auxiliares Internos ---
2424
2520
  notificarMudancaSelecao() {
2425
- sr(this);
2521
+ yr(this);
2426
2522
  }
2427
2523
  };
2428
2524
  /** Painéis conectados sem `id` nem `storage-key`: dividem a mesma chave de persistência. */
2429
- y(j, "instanciasChavePadrao", /* @__PURE__ */ new Set());
2430
- let K = j;
2431
- class br extends K {
2525
+ w(H, "instanciasChavePadrao", /* @__PURE__ */ new Set());
2526
+ let Q = H;
2527
+ class Mr extends Q {
2432
2528
  }
2433
- class hr extends K {
2529
+ class Fr extends Q {
2434
2530
  }
2435
- ge("ui-camadas", K);
2436
- ge("ui-painel-camadas", br);
2437
- ge("ui-layer-panel", hr);
2438
- function Cr(e) {
2531
+ xe("ui-camadas", Q);
2532
+ xe("ui-painel-camadas", Mr);
2533
+ xe("ui-layer-panel", Fr);
2534
+ function jr(e) {
2439
2535
  var r;
2440
2536
  return {
2441
2537
  id: e.id,
@@ -2452,7 +2548,7 @@ function Cr(e) {
2452
2548
  dados: e.dados
2453
2549
  };
2454
2550
  }
2455
- function $r(e, r = "levantamento", a = "feicoes") {
2551
+ function Nr(e, r = "levantamento", a = "feicoes") {
2456
2552
  return {
2457
2553
  id: e.id,
2458
2554
  nome: e.name,
@@ -2471,7 +2567,7 @@ function $r(e, r = "levantamento", a = "feicoes") {
2471
2567
  dados: typeof e.dados == "object" && e.dados !== null ? e.dados : void 0
2472
2568
  };
2473
2569
  }
2474
- function Sr(e, r = "") {
2570
+ function Hr(e, r = "") {
2475
2571
  var o, n, l, c;
2476
2572
  const a = ((o = e.geometria) == null ? void 0 : o.tipo) || ((n = e.geometria) == null ? void 0 : n.type) || e.tipo || e.type || "Polygon", i = ((l = e.geometria) == null ? void 0 : l.coordenadas) || ((c = e.geometria) == null ? void 0 : c.coordinates) || e.coordinates, t = e.cor || e.color;
2477
2573
  return {
@@ -2490,42 +2586,43 @@ function Sr(e, r = "") {
2490
2586
  };
2491
2587
  }
2492
2588
  export {
2493
- ka as CamadasDragDropManager,
2589
+ Ta as CamadasDragDropManager,
2494
2590
  b as ICONES,
2495
- qe as LIMITE_FEICOES_POR_CAMADA,
2496
- Me as MAPAS_BASE_PADRAO,
2497
- K as UICamadas,
2498
- hr as UILayerPanel,
2499
- zr as UIMapaBase,
2500
- br as UIPainelCamadas,
2501
- Br as UISeletorMapaBase,
2502
- ce as calcularAreaAnelSimples,
2503
- $e as calcularAreaPoligono,
2504
- Ce as calcularComprimentoLinha,
2505
- ia as calcularDistanciaPontos,
2506
- ma as calcularSelecaoFeicao,
2507
- fe as carregarEstadoPersistido,
2508
- ve as construirHierarquiaCamadas,
2509
- $r as converterCamadaItemParaCanvasLayer,
2510
- Cr as converterCanvasLayerParaCamadaItem,
2511
- Sr as converterFeicaoParaItem,
2512
- M as escapeHtml,
2513
- De as filtrarCamadasPorBusca,
2514
- ae as filtrarFeicoesPorBusca,
2515
- Lr as formatarMetricaFeicoes,
2516
- da as formatarOpcoesCamadasHierarquicas,
2517
- La as gerarChaveStorage,
2518
- $a as limparEstadoPersistido,
2519
- Ma as montarEstadoPersistido,
2520
- Fe as nomeDoMapaBase,
2521
- Pe as obterIdsVisiveisFeicoes,
2522
- Sa as reidratarCamadasComOverrides,
2523
- be as removerSelecoesInvalidas,
2524
- ya as renderizarArvoreCamadas,
2525
- la as renderizarGridMapasBase,
2526
- ua as renderizarRodapeAcoes,
2527
- fa as renderizarThumbGeometria,
2528
- ze as rotuloRodape,
2529
- Ca as salvarEstadoPersistido,
2530
- Te as snapshotCamada
2591
+ Ye as LIMITE_FEICOES_POR_CAMADA,
2592
+ He as MAPAS_BASE_PADRAO,
2593
+ Q as UICamadas,
2594
+ Fr as UILayerPanel,
2595
+ Vr as UIMapaBase,
2596
+ Mr as UIPainelCamadas,
2597
+ Yr as UISeletorMapaBase,
2598
+ ue as calcularAreaAnelSimples,
2599
+ je as calcularAreaPoligono,
2600
+ Oe as calcularComprimentoLinha,
2601
+ va as calcularDistanciaPontos,
2602
+ La as calcularSelecaoFeicao,
2603
+ be as carregarEstadoPersistido,
2604
+ ye as construirHierarquiaCamadas,
2605
+ Nr as converterCamadaItemParaCanvasLayer,
2606
+ jr as converterCanvasLayerParaCamadaItem,
2607
+ Hr as converterFeicaoParaItem,
2608
+ F as escapeHtml,
2609
+ Ke as filtrarCamadasPorBusca,
2610
+ oe as filtrarFeicoesPorBusca,
2611
+ Or as formatarMetricaFeicoes,
2612
+ Aa as formatarOpcoesCamadasHierarquicas,
2613
+ Oa as gerarChaveStorage,
2614
+ Ha as limparEstadoPersistido,
2615
+ Ua as montarEstadoPersistido,
2616
+ Ge as nomeDoMapaBase,
2617
+ ja as normalizarEstadoPersistido,
2618
+ _e as obterIdsVisiveisFeicoes,
2619
+ Ga as reidratarCamadasComOverrides,
2620
+ Ee as removerSelecoesInvalidas,
2621
+ Ba as renderizarArvoreCamadas,
2622
+ ya as renderizarGridMapasBase,
2623
+ Ea as renderizarRodapeAcoes,
2624
+ Ia as renderizarThumbGeometria,
2625
+ Ue as rotuloRodape,
2626
+ Na as salvarEstadoPersistido,
2627
+ Xe as snapshotCamada
2531
2628
  };