@thibezer/ui-components-kit 2.12.0 → 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 (44) hide show
  1. package/CHANGELOG.md +140 -84
  2. package/README.md +1 -1
  3. package/dist/camadas.cjs +91 -113
  4. package/dist/camadas.js +785 -762
  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-rodape.d.ts +5 -0
  9. package/dist/components/ui-camadas/camadas-sincronizacao-dom.d.ts +5 -0
  10. package/dist/components/ui-cores/ui-seletor-cor.d.ts +2 -0
  11. package/dist/components/ui-tabela-propriedades/editores-basicos.d.ts +6 -0
  12. package/dist/components/ui-tabela-propriedades/propriedades-gerenciador-valores.d.ts +5 -2
  13. package/dist/components/ui-tabela-propriedades/propriedades-render-arvore.d.ts +2 -0
  14. package/dist/components/ui-tabela-propriedades/tipos.d.ts +6 -0
  15. package/dist/components/ui-tabela-propriedades/ui-tabela-propriedades.d.ts +6 -1
  16. package/dist/components/ui-texto-editavel/index.d.ts +2 -0
  17. package/dist/components/ui-texto-editavel/texto-editavel-teclado.d.ts +12 -0
  18. package/dist/components/ui-texto-editavel/texto-editavel-template.d.ts +2 -0
  19. package/dist/components/ui-texto-editavel/tipos.d.ts +14 -0
  20. package/dist/components/ui-texto-editavel/ui-texto-editavel.d.ts +82 -0
  21. package/dist/cores.cjs +1 -1
  22. package/dist/cores.js +2 -2
  23. package/dist/custom-elements.json +15585 -14630
  24. package/dist/data.cjs +1 -1
  25. package/dist/data.js +39 -38
  26. package/dist/index.cjs +1 -1
  27. package/dist/index.d.ts +1 -0
  28. package/dist/index.js +195 -191
  29. package/dist/register.cjs +1 -1
  30. package/dist/register.js +4 -4
  31. package/dist/tabela.cjs +1 -1
  32. package/dist/tabela.js +31 -30
  33. package/dist/tipos-elementos.d.ts +29 -3
  34. package/dist/tipos-react.d.ts +2 -0
  35. package/dist/tipos-vue.d.ts +28 -3
  36. package/dist/ui-controle-cores-C_cVXxCn.js +291 -0
  37. package/dist/ui-controle-cores-CuDFS8Y8.cjs +32 -0
  38. package/dist/ui-linha-BxhEBn27.js +749 -0
  39. package/dist/ui-linha-CcalUBDw.cjs +38 -0
  40. package/dist/ui-seletor-cor-DPKqf5wb.cjs +82 -0
  41. package/dist/ui-seletor-cor-FYtRccnK.js +396 -0
  42. package/dist/ui-tabela-propriedades-C5YYnod1.js +3053 -0
  43. package/dist/ui-tabela-propriedades-DWOKznMN.cjs +142 -0
  44. package/package.json +187 -187
package/dist/camadas.js CHANGED
@@ -1,13 +1,13 @@
1
- var Ze = Object.defineProperty;
2
- var ea = (e, r, a) => r in e ? Ze(e, r, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[r] = a;
3
- var A = (e, r, a) => ea(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 aa } from "./ssr-safe-5cWfJP-s.js";
6
- import { L as ra } from "./listener-bag-DQgv7OON.js";
7
- import { a as ta } from "./ui-seletor-cor-D2_C6Aor.js";
8
- import { f as ia } from "./alvo-digitavel-CzCvNVQ3.js";
9
- import { a as Le } from "./parts-CaoQiCfI.js";
10
- import { UIMapaBase as Fr, UISeletorMapaBase as zr } 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 oa(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 oa(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 += oa([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], d = (p[1] - c) * n * U * o, g = (p[0] - l) * n * U, v = (m[1] - c) * n * U * o, x = (m[0] - l) * n * U;
150
- s += d * x - 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
- const u = Math.abs(s) / 2;
153
- return Number.isFinite(u) ? u : 0;
152
+ const d = Math.abs(s) / 2;
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 Se(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 Se(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", {
@@ -200,20 +200,20 @@ function Se(e) {
200
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 na = /^(#(?:[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 N(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 na.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 sa(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 Me(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 Me(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, u, f] = t[1] === "rgb" ? [n, l, c] : sa(n, l, c);
228
- return `#${de(s)}${de(u)}${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 Fe(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 Fe(e, r = 80) {
244
244
  }, r);
245
245
  };
246
246
  }
247
- function P(e, r) {
247
+ function B(e, r) {
248
248
  e.setAttribute("title", r), e.setAttribute("aria-label", r);
249
249
  }
250
- const ze = [
250
+ const He = [
251
251
  {
252
252
  id: "none",
253
253
  nome: "Sem Mapa",
@@ -290,11 +290,11 @@ const ze = [
290
290
  thumbnailUrl: "https://images.unsplash.com/photo-1518709268805-4e9042af9f23?w=160&auto=format&fit=crop&q=80"
291
291
  }
292
292
  ];
293
- function Be(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 = ze, 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
300
  const o = r === t.id, n = F(t.id), l = F(t.nome), c = F(t.descricao || t.nome);
@@ -310,7 +310,7 @@ function la(e = ze, 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>${F(Be(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,50 +319,50 @@ function la(e = ze, 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
- r.forEach((s, u) => {
326
- a.set(s.id, s), i.set(s.id, u);
325
+ r.forEach((s, d) => {
326
+ a.set(s.id, s), i.set(s.id, d);
327
327
  });
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 u = [], 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), d = u.slice(m);
336
- let g = d[0];
337
- for (const v of d)
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, u.length), u.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
- for (const m of u) o.add(m);
345
+ for (const m of d) o.add(m);
346
346
  }
347
347
  const n = /* @__PURE__ */ new Map(), l = [];
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, u, 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 d = (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
- depth: u,
360
- subcamadas: d.map((g) => c(g, u + 1, p))
359
+ depth: d,
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,194 +380,209 @@ 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="${F(t.id)}">${l}${F(t.name)}</option>`, s = n.map((u) => a(u)).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;
415
+ };
416
+ return r.map((t) => i(t)).join("");
417
+ }
418
+ function Ue(e, r) {
419
+ return r > 0 ? {
420
+ icone: b.alvoEnquadrar,
421
+ texto: `${r} ${r > 1 ? "selecionados" : "selecionado"}`
422
+ } : {
423
+ icone: b.camadas,
424
+ texto: `${e} ${e > 1 ? "camadas" : "camada"}`
392
425
  };
393
- return r.map((i) => a(i)).join("");
394
426
  }
395
- function ua(e, r, a) {
396
- var f;
397
- const i = r.filter((p) => a.has(p.id)), t = i.length > 0, o = Se(i), n = N((f = i[0]) == null ? void 0 : f.color, "#00E08A"), l = Me(n, "#00E08A"), c = t ? i.length : e.length, s = t ? i.length > 1 ? "selecionados" : "selecionado" : e.length > 1 ? "camadas" : "camada", u = 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);
398
429
  return `
399
430
  <div class="ui-tree-footer ${t ? "tem-selecao" : "sem-selecao"}" part="rodape">
400
431
  <div class="ui-footer-left">
401
- <span class="ui-footer-count" id="footer-count">${c}</span>
402
- <span class="ui-footer-label" id="footer-label">${s}</span>
403
- <span class="ui-footer-metric" id="footer-metric" style="display: ${o ? "inline-flex" : "none"};">${o ? `${b.reguaMetrica} ${o}` : ""}</span>
432
+ <span class="ui-footer-count" id="footer-count">${o}</span>
433
+ <span class="ui-footer-label" id="footer-label" role="img" title="${n.texto}" aria-label="${n.texto}">${n.icone}</span>
404
434
  </div>
405
435
 
406
- <!-- Ações de topo/gerais quando não há nada selecionado -->
436
+ <!-- Criação de camadas/grupos quando não há nada selecionado -->
407
437
  <div class="ui-footer-actions-gerais" style="display: ${t ? "none" : "flex"};">
408
438
  <button class="ui-footer-chip-btn" id="btn-footer-new-group" title="Criar Nova Pasta/Grupo de Camadas" aria-label="Criar Grupo de Camadas">
409
439
  ${b.moverPasta}
410
- <span>+ Grupo</span>
440
+ <span>Grupo</span>
411
441
  </button>
412
442
  <button class="ui-footer-chip-btn primario" id="btn-footer-new-layer" title="Criar Nova Camada Vetorial" aria-label="Criar Nova Camada">
413
443
  ${b.mais}
414
- <span>+ Camada</span>
444
+ <span>Camada</span>
415
445
  </button>
416
446
  </div>
417
447
 
418
448
  <!-- Ações em massa ativadas quando há seleção -->
419
449
  <div class="ui-footer-right ui-footer-bulk-actions" style="display: ${t ? "flex" : "none"};">
420
- <button class="ui-footer-btn ${t ? "" : "disabled"}" id="btn-footer-vis" title="Alternar visibilidade coletiva" aria-label="Alternar visibilidade coletiva" ${t ? "" : "disabled"}>
421
- ${b.olhoAberto}
422
- </button>
423
-
424
- <button class="ui-footer-btn ${t ? "" : "disabled"}" id="btn-footer-lock" title="Alternar bloqueio coletivo" aria-label="Alternar bloqueio coletivo" ${t ? "" : "disabled"}>
425
- ${b.cadeadoTrancado}
426
- </button>
427
-
428
- <div class="ui-footer-color-wrapper ${t ? "" : "disabled"}" title="Alterar cor dos selecionados">
429
- <span class="ui-footer-color-preview" id="preview-footer-color" style="background-color: ${n};"></span>
430
- <input type="color" id="input-footer-color" aria-label="Cor dos selecionados" value="${l}" class="ui-footer-color" ${t ? "" : "disabled"} />
431
- </div>
432
-
433
450
  <div class="ui-footer-move-wrapper ${t ? "" : "disabled"}" title="Mover selecionados para outra camada">
434
451
  <select id="select-footer-move" aria-label="Mover selecionados para outra camada" class="ui-footer-select" ${t ? "" : "disabled"}>
435
- <option value="" disabled selected>📂 Mover para...</option>
436
- ${u}
452
+ <option value="" disabled selected>Mover para...</option>
453
+ ${l}
437
454
  </select>
438
455
  </div>
439
456
 
440
457
  <button class="ui-footer-btn btn-danger-footer ${t ? "" : "disabled"}" id="btn-footer-del" title="Excluir selecionados" aria-label="Excluir selecionados" ${t ? "" : "disabled"}>
441
458
  ${b.lixeira}
442
459
  </button>
443
-
444
- ${t ? `<button class="ui-footer-btn btn-clear-footer" id="btn-footer-clear" title="Limpar seleção" aria-label="Limpar seleção">${b.fechar}</button>` : ""}
445
460
  </div>
446
461
  </div>
447
462
  `;
448
463
  }
449
- const ue = 64;
450
- function Ee(e) {
464
+ const fe = 64;
465
+ function Be(e) {
451
466
  return Array.isArray(e) && e.length >= 2 && Number.isFinite(e[0]) && Number.isFinite(e[1]);
452
467
  }
453
- function qe(e) {
454
- return !Array.isArray(e) || e.length === 0 ? [] : Ee(e[0]) ? [e.filter(Ee)] : e.flatMap(qe);
468
+ function Ve(e) {
469
+ return !Array.isArray(e) || e.length === 0 ? [] : Be(e[0]) ? [e.filter(Be)] : e.flatMap(Ve);
455
470
  }
456
- function ke(e) {
457
- if (e.length <= ue) return e;
458
- const r = e.length / ue, a = [];
459
- 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)]);
460
475
  return a.push(e[e.length - 1]), a;
461
476
  }
462
- function pa(e, r, a) {
463
- const i = qe(r).filter((E) => E.length > 0);
477
+ function ka(e, r, a) {
478
+ const i = Ve(r).filter((I) => I.length > 0);
464
479
  if (i.length === 0) return "";
465
480
  let t = 1 / 0, o = -1 / 0, n = 1 / 0, l = -1 / 0;
466
- for (const E of i)
467
- for (const [k, z] of E)
468
- z < t && (t = z), z > o && (o = z), -k < n && (n = -k), -k > l && (l = -k);
469
- const c = 16, s = 2, u = c - s * 2, f = o - t, p = l - n, m = Math.max(f, p), d = m > 0 ? u / m : 0, g = s + (u - f * d) / 2, v = s + (u - p * d) / 2, x = (E) => Math.round(E * 100) / 100, L = ([E, k]) => `${x(g + (k - t) * d)},${x(v + (-E - n) * d)}`, $ = e === "polygon" || e === "multipolygon", y = e === "linestring" || e === "multilinestring", h = (E) => `<svg viewBox="0 0 ${c} ${c}" width="100%" height="100%" aria-hidden="true">${E}</svg>`;
470
- if ($) {
471
- const E = i.filter((k) => k.length >= 3).map((k) => `M${ke(k).map(L).join("L")}Z`).join("");
472
- return E ? h(
473
- `<path d="${E}" fill="${a}" fill-opacity="0.45" fill-rule="evenodd" stroke="${a}" stroke-width="1.2" stroke-linejoin="round"/>`
481
+ for (const I of i)
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>`;
485
+ if (C) {
486
+ const I = i.filter((L) => L.length >= 3).map((L) => `M${qe(L).map(k).join("L")}Z`).join("");
487
+ return I ? y(
488
+ `<path d="${I}" fill="${a}" fill-opacity="0.45" fill-rule="evenodd" stroke="${a}" stroke-width="1.2" stroke-linejoin="round"/>`
474
489
  ) : "";
475
490
  }
476
- if (y) {
477
- const E = i.filter((k) => k.length >= 2).map((k) => `M${ke(k).map(L).join("L")}`).join("");
478
- return E ? h(
479
- `<path d="${E}" fill="none" stroke="${a}" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>`
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(
494
+ `<path d="${I}" fill="none" stroke="${a}" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>`
480
495
  ) : "";
481
496
  }
482
497
  return "";
483
498
  }
484
- function fa(e, r, a) {
485
- const i = N(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) : "";
486
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>`);
487
502
  }
488
- const De = 80;
489
- function ae(e, r) {
503
+ const Ye = 80;
504
+ function oe(e, r) {
490
505
  const a = (r || "").trim().toLowerCase();
491
506
  return a ? e.filter(
492
507
  (i) => (i.name || "").toLowerCase().includes(a) || (i.category || "").toLowerCase().includes(a) || (i.type || "").toLowerCase().includes(a)
493
508
  ) : e;
494
509
  }
495
- function Pe(e, r, a) {
510
+ function Ke(e, r, a) {
496
511
  var p, m;
497
512
  const i = (a || "").trim().toLowerCase();
498
513
  if (!i) return null;
499
514
  const t = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map();
500
- for (const d of e)
501
- t.set(d.id, d), d.parentId && d.parentId !== d.id && (o.has(d.parentId) || o.set(d.parentId, []), o.get(d.parentId).push(d.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));
502
517
  const n = /* @__PURE__ */ new Map();
503
- for (const d of r) {
504
- const g = d.layerId || "";
505
- n.has(g) || n.set(g, []), n.get(g).push(d);
518
+ for (const f of r) {
519
+ const g = f.layerId || "";
520
+ n.has(g) || n.set(g, []), n.get(g).push(f);
506
521
  }
507
522
  const l = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Set();
508
- for (const d of e)
509
- (typeof d.name == "string" ? d.name.toLowerCase() : "").includes(i) ? (l.add(d.id), c.add(d.id)) : ae(n.get(d.id) || [], i).length > 0 && c.add(d.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);
510
525
  const s = new Set(c);
511
- for (const d of c) {
512
- const g = /* @__PURE__ */ new Set([d]);
513
- let v = (p = t.get(d)) == 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;
514
529
  for (; v && t.has(v) && !g.has(v); )
515
530
  g.add(v), s.add(v), v = (m = t.get(v)) == null ? void 0 : m.parentId;
516
531
  }
517
- const u = [...l];
518
- for (; u.length > 0; ) {
519
- const d = u.pop();
520
- for (const g of o.get(d) || [])
521
- s.has(g) || (s.add(g), u.push(g));
532
+ const d = [...l];
533
+ for (; d.length > 0; ) {
534
+ const f = d.pop();
535
+ for (const g of o.get(f) || [])
536
+ s.has(g) || (s.add(g), d.push(g));
522
537
  }
523
- const f = /* @__PURE__ */ new Map();
524
- for (const d of s) {
525
- const g = n.get(d) || [];
526
- f.set(d, l.has(d) ? 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));
527
542
  }
528
- return { camadasVisiveis: s, feicoesPorCamada: f };
543
+ return { camadasVisiveis: s, feicoesPorCamada: u };
529
544
  }
530
- function Te(e, r, a, i = "", t = De, o) {
531
- const n = Pe(e, r, i), l = [], c = /* @__PURE__ */ new Map();
532
- for (let f = 0; f < r.length; f++) {
533
- 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];
534
549
  if (!p || !p.id) continue;
535
550
  const m = p.layerId || "";
536
551
  c.has(m) || c.set(m, []), c.get(m).push(p);
537
552
  }
538
- const s = ve(e);
539
- function u(f) {
540
- const p = f.camada;
553
+ const s = ye(e);
554
+ function d(u) {
555
+ const p = u.camada;
541
556
  if (n && !n.camadasVisiveis.has(p.id) || !(n ? !0 : a.has(p.id))) return;
542
- for (const x of f.subcamadas)
543
- u(x);
544
- const d = n ? n.feicoesPorCamada.get(p.id) || [] : c.get(p.id) || [], g = (o == null ? void 0 : o.get(p.id)) ?? t, v = d.slice(0, g);
545
- for (let x = 0; x < v.length; x++)
546
- l.push(v[x].id);
547
- }
548
- for (const f of s)
549
- u(f);
557
+ for (const h of u.subcamadas)
558
+ d(h);
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);
560
+ for (let h = 0; h < v.length; h++)
561
+ l.push(v[h].id);
562
+ }
563
+ for (const u of s)
564
+ d(u);
550
565
  return l;
551
566
  }
552
- function ma(e, r, a, i, t, o) {
567
+ function La(e, r, a, i, t, o) {
553
568
  if (!e.includes(i)) return null;
554
569
  const n = new Set(r);
555
570
  let l = a;
556
571
  if (o && a && e.includes(a)) {
557
- const c = e.indexOf(a), s = e.indexOf(i), u = 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);
558
573
  t || n.clear();
559
- for (let p = u; p <= f; p++)
574
+ for (let p = d; p <= u; p++)
560
575
  n.add(e[p]);
561
576
  } else t ? (n.has(i) ? n.delete(i) : n.add(i), l = i) : (n.clear(), n.add(i), l = i);
562
577
  return { selecionados: n, ultimoClicadoId: l };
563
578
  }
564
- function be(e, r) {
579
+ function Ee(e, r) {
565
580
  if (e.size === 0) return;
566
581
  const a = new Set(r.map((i) => i.id));
567
582
  for (const i of e)
568
583
  a.has(i) || e.delete(i);
569
584
  }
570
- function te(e, r, a) {
585
+ function _(e, r, a) {
571
586
  const i = /* @__PURE__ */ new Set();
572
587
  let t = e.find((o) => o.id === r);
573
588
  for (; t && t.parentId; ) {
@@ -576,46 +591,51 @@ function te(e, r, a) {
576
591
  }
577
592
  return !1;
578
593
  }
579
- function ga(e) {
594
+ function Ca(e) {
580
595
  return Number.isFinite(e) ? e < 0.25 ? "acima" : e > 0.75 ? "abaixo" : "dentro" : "dentro";
581
596
  }
582
- function va(e, r, a, i) {
597
+ function $a(e, r, a, i) {
583
598
  if (!r || !a || r === a) return null;
584
599
  const t = e.find((s) => s.id === r), o = e.find((s) => s.id === a);
585
600
  if (!t || !o) return null;
586
601
  const n = t.parentId !== void 0 ? t.parentId : null;
587
602
  if (i === "dentro")
588
- 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;
589
605
  const l = e.findIndex((s) => s.id === r);
590
606
  e.splice(l, 1);
591
607
  const c = e.findIndex((s) => s.id === a);
592
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 };
593
609
  }
594
- function ba(e, r, a, i) {
610
+ function Sa(e, r, a, i) {
595
611
  if (!r || !a || r === a) return !1;
596
612
  const t = e.findIndex((l) => l.id === r);
597
613
  if (t === -1) return !1;
598
614
  const [o] = e.splice(t, 1), n = e.findIndex((l) => l.id === a);
599
615
  return n === -1 ? e.push(o) : e.splice(i ? n : n + 1, 0, o), !0;
600
616
  }
601
- function ha(e, r, a, i) {
617
+ function Ma(e, r, a, i) {
602
618
  const t = e.find((l) => l.id === a), o = r.find((l) => l.id === i);
603
619
  if (!t || !o || t.layerId === i) return null;
604
620
  const n = t.layerId;
605
621
  return t.layerId = i, { feicao: t, camadaOrigemId: n, camadaDestinoId: i, mudouDeCamada: !0 };
606
622
  }
607
- function xa(e, r, a, i) {
623
+ function Fa(e, r, a, i) {
608
624
  if (!r || !a || r === a) return null;
609
- const t = e.findIndex((f) => f.id === r);
625
+ const t = e.findIndex((u) => u.id === r);
610
626
  if (t === -1) return null;
611
- const o = e.find((f) => f.id === a);
627
+ const o = e.find((u) => u.id === a);
612
628
  if (!o) return null;
613
629
  const [n] = e.splice(t, 1), l = n.layerId, c = o.layerId, s = l !== c;
614
630
  s && (n.layerId = c);
615
- const u = e.findIndex((f) => f.id === a);
616
- return u === -1 ? e.push(n) : e.splice(i ? u : u + 1, 0, n), { feicao: n, camadaOrigemId: l, camadaDestinoId: c, mudouDeCamada: s };
631
+ const d = e.findIndex((u) => u.id === a);
632
+ return d === -1 ? e.push(n) : e.splice(i ? d : d + 1, 0, n), { feicao: n, camadaOrigemId: l, camadaDestinoId: c, mudouDeCamada: s };
633
+ }
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")}`;
617
637
  }
618
- function ya(e) {
638
+ function Ba(e) {
619
639
  const {
620
640
  camadas: r,
621
641
  feicoes: a,
@@ -626,19 +646,19 @@ function ya(e) {
626
646
  editingLayerId: l,
627
647
  editingFeatureId: c,
628
648
  searchQuery: s,
629
- titulo: u = "CAMADAS",
630
- mostrarBusca: f = !0,
649
+ titulo: d = "CAMADAS",
650
+ mostrarBusca: u = !0,
631
651
  limitesPorCamada: p,
632
- limiteFeicoesPorCamada: m = De,
633
- mostrarBotaoColapsar: d = !1
634
- } = e, g = (s || "").trim().toLowerCase(), v = Pe(r, a, g), x = /* @__PURE__ */ new Map();
652
+ limiteFeicoesPorCamada: m = Ye,
653
+ mostrarBotaoColapsar: f = !1
654
+ } = e, g = (s || "").trim().toLowerCase(), v = Ke(r, a, g), h = /* @__PURE__ */ new Map();
635
655
  for (let S = 0; S < a.length; S++) {
636
- const w = a[S];
637
- if (!w || !w.id) continue;
638
- const M = w.layerId || "";
639
- x.has(M) || x.set(M, []), x.get(M).push(w);
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);
640
660
  }
641
- const L = r.every((S) => S.visible !== !1), $ = r.length > 0 && r.every((S) => t.has(S.id)), y = f ? `
661
+ const k = we(r), C = r.every((S) => S.visible !== !1), $ = r.length > 0 && r.every((S) => t.has(S.id)), y = u ? `
642
662
  <div class="ui-tree-search-wrapper" part="busca">
643
663
  <span class="ui-tree-search-icon">${b.busca}</span>
644
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(
@@ -646,52 +666,46 @@ function ya(e) {
646
666
  )}" />
647
667
  ${s ? `<button class="ui-tree-search-clear" id="btn-clear-layer-search" title="Limpar busca" aria-label="Limpar busca">${b.fechar}</button>` : ""}
648
668
  </div>
649
- ` : "", h = `
669
+ ` : "", I = `
650
670
  <div class="ui-tree-toolbar" part="toolbar">
651
671
  <div class="ui-tree-title-group">
652
- <span class="ui-tree-section-title">${F(u || "CAMADAS")}</span>
672
+ <span class="ui-tree-section-title">${F(d || "CAMADAS")}</span>
653
673
  <span class="ui-tree-count-badge">${r.length}</span>
654
674
  </div>
655
675
  <div class="ui-tree-actions">
656
- <button id="btn-toggle-all-vis" class="ui-tree-action-btn" title="${L ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas"}" aria-label="${L ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas"}">
657
- ${L ? 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}
658
678
  </button>
659
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"}">
660
680
  <span class="ui-chevron-icon ${$ ? "open" : ""}">${b.chevronDir}</span>
661
681
  </button>
662
- <button id="btn-add-group" class="ui-tree-btn-group" title="Criar grupo / pasta de camadas" aria-label="Criar grupo de camadas">
663
- ${b.moverPasta} Grupo
664
- </button>
665
- <button id="btn-add-layer" class="ui-tree-btn-new" title="Adicionar nova camada vetorial">
666
- ${b.mais} Camada
667
- </button>
668
- ${d ? `<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>` : ""}
669
683
  </div>
670
684
  </div>
671
685
  ${y}
672
- `, E = (S) => {
673
- const w = S.camada;
674
- if (v && !v.camadasVisiveis.has(w.id)) return "";
675
- const M = S.depth, D = S.subcamadas, H = v ? D.filter((I) => v.camadasVisiveis.has(I.camada.id)) : D, G = !!(w.isGroup || D.length > 0), C = F(w.id), _ = F(w.name || (G ? "Novo Grupo" : "Camada")), O = N(w.color, "#00E08A"), X = w.visible !== !1, V = w.locked === !0, Q = g ? !0 : t.has(w.id), ie = n === w.id, oe = i === w.id, B = v ? v.feicoesPorCamada.get(w.id) || [] : x.get(w.id) || [], ne = v ? B : re(r, a, w.id), he = ne.length > 0 && ne.every((I) => o.has(I.id)), He = !he && ne.some((I) => o.has(I.id)), W = (p == null ? void 0 : p.get(w.id)) ?? m, Ge = B.slice(0, W), Ve = B.length > W, Ue = B.length - W, Ye = Ge.map((I) => {
676
- const R = F(I.id), ye = F(I.name || "Feição"), we = N(I.color, O), J = I.visible !== !1, se = V, le = I.locked === !0 || se, Ae = se ? "Bloqueada pela camada" : le ? "Desbloquear Feição" : "Bloquear Feição", Z = o.has(I.id), Je = I.status === "previa" ? '<span class="ui-previa-dot" title="Geometria prévia" aria-label="Geometria prévia"></span>' : "";
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>' : "";
677
691
  return `
678
- <div class="ui-feat-row ${Z ? "selected-row" : ""} ${J ? "" : "hidden-row"}" data-feat-row="${R}" data-feat-select="${R}" data-feat-layer="${C}" role="treeitem" aria-selected="${Z}" tabindex="-1" draggable="true" part="${Z ? "feicao feicao-selecionada" : "feicao"}" style="--layer-depth: ${M + 1};" title="Clique para selecionar | Arraste para reordenar">
679
- <div class="ui-col ui-col-eye" data-feat-eye="${R}" role="button" tabindex="0" aria-label="${J ? "Ocultar Feição" : "Exibir Feição"}" title="${J ? "Ocultar Feição" : "Exibir Feição"}">
680
- ${J ? 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}
681
695
  </div>
682
696
 
683
- <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}">
684
- ${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}
685
699
  </div>
686
700
 
687
- <div class="ui-col ui-col-colorbar" style="background: ${we};"></div>
701
+ <div class="ui-col ui-col-colorbar" style="background: ${Fe};"></div>
688
702
  <div class="ui-col ui-col-branch"><span style="opacity: 0.35;">└─</span></div>
689
703
  <div class="ui-col ui-col-thumb">
690
- <div class="ui-thumb-box">${fa(I.type || I.geometryType, we, I.coordinates)}</div>
704
+ <div class="ui-thumb-box">${Ia(A.type || A.geometryType, Fe, A.coordinates)}</div>
691
705
  </div>
692
706
 
693
707
  <div class="ui-col ui-col-name" data-feat-name-trigger="${R}" title="Duplo clique para renomear">
694
- ${c === I.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}`}
695
709
  </div>
696
710
 
697
711
  <div class="ui-col ui-col-actions">
@@ -699,24 +713,24 @@ function ya(e) {
699
713
  </div>
700
714
 
701
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">
702
- <div class="ui-target-circle ${Z ? "selected" : ""}"></div>
716
+ <div class="ui-target-circle ${re ? "selected" : ""}"></div>
703
717
  </div>
704
718
  </div>
705
719
  `;
706
- }).join(""), Ke = Ve ? `<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));">
707
- <span>Exibindo ${W} de ${B.length} feições. Use a busca acima para filtrar.</span>
708
- <button type="button" class="ui-truncate-more-btn" data-layer-show-more="${C}" 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>
709
- </div>` : "", xe = w.opacity !== void 0 ? w.opacity : 1, _e = Math.round(xe * 100), Xe = r.filter((I) => I.id !== w.id && !te(r, I.id, w.id)).map(
710
- (I) => `<option value="${F(I.id)}" ${w.parentId === I.id ? "selected" : ""}>${I.isGroup ? "📁 " : ""}${F(I.name)}</option>`
711
- ).join(""), Qe = ie ? `
712
- <div class="ui-layer-settings-drawer" id="settings-drawer-${C}" part="drawer" style="--drawer-cor-camada: ${O};">
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 ? `
726
+ <div class="ui-layer-settings-drawer" id="settings-drawer-${E}" part="drawer" style="--drawer-cor-camada: ${O};">
713
727
  <div class="ui-drawer-header">
714
728
  <div class="ui-drawer-header-left">
715
729
  <span class="ui-drawer-icon">${b.engrenagem}</span>
716
730
  <span class="ui-drawer-title">Configurações da Camada</span>
717
- <span class="ui-drawer-layer-chip" title="${_}">${_}</span>
731
+ <span class="ui-drawer-layer-chip" title="${W}">${W}</span>
718
732
  </div>
719
- <button type="button" class="ui-drawer-btn-fechar" data-layer-settings-close="${C}" title="Fechar configurações (Esc)" aria-label="Fechar configurações">
733
+ <button type="button" class="ui-drawer-btn-fechar" data-layer-settings-close="${E}" title="Fechar configurações (Esc)" aria-label="Fechar configurações">
720
734
  ${b.fechar}
721
735
  </button>
722
736
  </div>
@@ -729,9 +743,9 @@ function ya(e) {
729
743
  </div>
730
744
  <div class="ui-drawer-color-group">
731
745
  <label class="ui-drawer-color-pill" title="Clique para alterar a cor da camada">
732
- <span class="ui-drawer-color-sample" id="sample-color-${C}" style="background-color: ${O};"></span>
733
- <span class="ui-drawer-color-hex" id="hex-color-${C}">${O.toUpperCase()}</span>
734
- <input type="color" aria-label="Cor da camada" data-layer-color-picker="${C}" value="${Me(O, "#00e08a")}" class="ui-drawer-color-native" />
746
+ <span class="ui-drawer-color-sample" id="sample-color-${E}" style="background-color: ${O};"></span>
747
+ <span class="ui-drawer-color-hex" id="hex-color-${E}">${O.toUpperCase()}</span>
748
+ <input type="color" aria-label="Cor da camada" data-layer-color-picker="${E}" value="${xa(O, "#00e08a")}" class="ui-drawer-color-native" />
735
749
  </label>
736
750
  </div>
737
751
  </div>
@@ -740,10 +754,10 @@ function ya(e) {
740
754
  <div class="ui-drawer-row">
741
755
  <div class="ui-drawer-row-label">
742
756
  <span>Opacidade</span>
743
- <span class="ui-drawer-badge" id="badge-op-${C}">${_e}%</span>
757
+ <span class="ui-drawer-badge" id="badge-op-${E}">${oa}%</span>
744
758
  </div>
745
759
  <div class="ui-drawer-slider-container">
746
- <input type="range" aria-label="Opacidade da camada" min="0.05" max="1" step="0.05" value="${Number(xe) || 0}" data-layer-opacity-slider="${C}" 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" />
747
761
  </div>
748
762
  </div>
749
763
 
@@ -753,9 +767,9 @@ function ya(e) {
753
767
  <span>Pertence ao Grupo</span>
754
768
  </div>
755
769
  <div class="ui-drawer-select-wrapper">
756
- <select class="ui-drawer-select" data-layer-parent-select="${C}" aria-label="Grupo pai da camada">
757
- <option value="" ${w.parentId ? "" : "selected"}>(Nenhum - Nível Principal)</option>
758
- ${Xe}
770
+ <select class="ui-drawer-select" data-layer-parent-select="${E}" aria-label="Grupo pai da camada">
771
+ <option value="" ${x.parentId ? "" : "selected"}>(Nenhum - Nível Principal)</option>
772
+ ${na}
759
773
  </select>
760
774
  </div>
761
775
  </div>
@@ -763,80 +777,81 @@ function ya(e) {
763
777
 
764
778
  <div class="ui-drawer-footer">
765
779
  <div class="ui-drawer-meta-info">
766
- <span>${D.length > 0 ? `${D.length} subcamadas · ` : ""}${B.length} ${B.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>
767
781
  </div>
768
782
  <div class="ui-drawer-actions">
769
- <button type="button" class="ui-drawer-btn-sublayer" data-add-sublayer="${C}" title="Adicionar nova camada dentro desta">
783
+ <button type="button" class="ui-drawer-btn-sublayer" data-add-sublayer="${E}" title="Adicionar nova camada dentro desta">
770
784
  ${b.mais} Subcamada
771
785
  </button>
772
- <button type="button" class="ui-drawer-btn-danger" data-delete-layer="${C}" title="Excluir esta camada e suas feições">
786
+ <button type="button" class="ui-drawer-btn-danger" data-delete-layer="${E}" title="Excluir esta camada e suas feições">
773
787
  ${b.lixeira}
774
788
  <span class="ui-btn-label">Excluir</span>
775
789
  </button>
776
790
  </div>
777
791
  </div>
778
792
  </div>
779
- ` : "", We = H.map((I) => E(I)).join("");
793
+ ` : "", la = Ie.map((A) => L(A)).join("");
780
794
  return `
781
- <div class="ui-layer-group ${M > 0 ? "is-sublayer-group" : ""}" data-layer-id="${C}" data-layer-depth="${M}" role="treeitem" aria-expanded="${Q}" part="grupo" style="--layer-active-color: ${O};">
782
- <div class="ui-layer-row ${X ? "" : "hidden-layer"} ${oe ? "active-drawing-layer" : ""} ${M > 0 ? "is-sublayer" : ""} ${G ? "is-group-row" : ""}" data-layer-row="${C}" data-layer-id="${C}" tabindex="-1" draggable="true" part="${oe ? "camada camada-ativa" : "camada"}" ${oe ? 'aria-current="true"' : ""} style="--layer-depth: ${M};">
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};">
783
797
  <div class="ui-col ui-col-drag" title="Arrastar para reordenar Z-Index">${b.dragHandle}</div>
784
798
 
785
- <div class="ui-col ui-col-eye" data-layer-eye="${C}" role="button" tabindex="0" aria-label="${X ? "Ocultar Camada" : "Exibir Camada"}" title="${X ? "Ocultar Camada" : "Exibir Camada"}">
786
- ${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}
787
801
  </div>
788
802
 
789
- <div class="ui-col ui-col-lock ${V ? "" : "ui-lock-open"}" data-layer-lock="${C}" role="button" tabindex="0" aria-label="${V ? "Desbloquear Camada" : "Bloquear Camada"}" title="${V ? "Desbloquear Camada" : "Bloquear Camada"}">
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"}">
790
804
  ${V ? b.cadeadoTrancado : b.cadeadoAberto}
791
805
  </div>
792
806
 
793
- <div class="ui-col ui-col-colorbar ui-col-colorbar-editavel" data-layer-color="${C}" 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>
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>
794
808
 
795
- <div class="ui-col ui-col-chevron" data-layer-expand="${C}" role="button" tabindex="0" aria-label="${Q ? "Recolher grupo" : "Expandir grupo"}">
796
- <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>
797
811
  </div>
798
812
 
799
- <div class="ui-col ui-col-name" data-layer-name-trigger="${C}" title="Clique para ativar camada de desenho | Duplo clique para renomear">
800
- ${l === w.id ? `<input type="text" class="ui-inline-rename-input" data-inline-layer-input="${C}" value="${_}" />` : `${G ? `<span class="ui-group-folder-icon" title="Grupo/Pasta">${b.moverPasta}</span>` : ""}
801
- <span class="ui-name-text">${_}</span>
802
- ${B.length > 0 || !G ? `<span class="ui-count-chip" title="${B.length} ${B.length === 1 ? "feição" : "feições"}${D.length > 0 ? ` · ${D.length} subcamadas` : ""}">${B.length}</span>` : ""}`}
813
+ <div class="ui-col ui-col-name" data-layer-name-trigger="${E}" title="Clique para ativar camada de desenho | Duplo clique para renomear">
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>` : ""}`}
803
817
  </div>
804
818
 
805
819
  <div class="ui-col ui-col-actions">
806
- <button class="ui-micro-btn" data-layer-fit="${C}" title="Enquadrar camada no mapa" aria-label="Enquadrar camada no mapa">${b.alvoEnquadrar}</button>
807
- <button class="ui-micro-btn ${ie ? "active" : ""}" data-layer-settings="${C}" title="Ajustar cor, hierarquia, opacidade e excluir" aria-label="Configurações da camada" aria-expanded="${ie}">${b.engrenagem}</button>
820
+ <button class="ui-micro-btn" data-layer-fit="${E}" title="Enquadrar camada no mapa" aria-label="Enquadrar camada no mapa">${b.alvoEnquadrar}</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>
808
822
  </div>
809
823
 
810
- <div class="ui-col ui-col-target" data-layer-target="${C}" role="button" tabindex="0" aria-label="Selecionar todas as feições deste grupo" title="Selecionar todas as feições deste grupo">
811
- <div class="ui-target-circle ${he ? "selected" : He ? "partial" : ""}"></div>
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">
825
+ <div class="ui-target-circle ${$e ? "selected" : Ze ? "partial" : ""}"></div>
812
826
  </div>
813
827
  </div>
814
828
 
815
- ${Qe}
829
+ ${sa}
816
830
 
817
- <div class="ui-children-container ${M > 0 ? "is-subchildren" : ""}" role="group" style="display: ${Q ? "block" : "none"};">
818
- ${We}
819
- ${Ye}
820
- ${Ke}
821
- ${H.length === 0 && B.length === 0 ? `<div class="ui-empty-row"><span>${G ? "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>` : ""}
822
836
  </div>
823
837
  </div>
824
838
  `;
825
- }, k = ve(r), z = v && v.camadasVisiveis.size === 0 ? `<div class="ui-search-empty" role="status">Nenhum resultado para “${F((s || "").trim())}”</div>` : k.map((S) => E(S)).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("");
826
840
  return `
827
- ${h}
841
+ ${I}
828
842
  <div class="ui-panel-box">
829
843
  <div class="ui-layer-tree" id="ui-layer-tree-mount" role="tree" aria-label="Camadas e feições" aria-multiselectable="true" part="arvore">
830
- ${z}
844
+ ${J}
831
845
  </div>
832
846
  </div>
833
847
  `;
834
848
  }
835
- function wa(e) {
849
+ function qa(e) {
836
850
  return [
837
851
  {
838
852
  gatilho: "data-layer-name-trigger",
839
853
  input: "data-inline-layer-input",
854
+ linha: "data-layer-row",
840
855
  marcarEditando: (r) => {
841
856
  e.editingLayerId = r;
842
857
  },
@@ -849,6 +864,7 @@ function wa(e) {
849
864
  {
850
865
  gatilho: "data-feat-name-trigger",
851
866
  input: "data-inline-feat-input",
867
+ linha: "data-feat-row",
852
868
  marcarEditando: (r) => {
853
869
  e.editingFeatureId = r;
854
870
  },
@@ -860,8 +876,8 @@ function wa(e) {
860
876
  }
861
877
  ];
862
878
  }
863
- function Aa(e, r) {
864
- for (const a of wa(e))
879
+ function Pa(e, r) {
880
+ for (const a of qa(e))
865
881
  r.querySelectorAll(`[${a.gatilho}]`).forEach((i) => {
866
882
  i.addEventListener("dblclick", (t) => {
867
883
  t.stopPropagation();
@@ -872,29 +888,29 @@ function Aa(e, r) {
872
888
  if (!n) return;
873
889
  n.focus(), n.select();
874
890
  let l = !1;
875
- const c = (s) => {
876
- var u;
891
+ const c = (s, d = !1) => {
892
+ var u, p;
877
893
  if (!l) {
878
894
  if (l = !0, a.marcarEditando(null), s) {
879
- const f = a.aplicar(o, n.value.trim());
880
- f && (f.salvar && ((u = e.salvarLembrancaEstado) == null || u.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));
881
897
  }
882
- e.solicitarRenderizacao();
898
+ e.solicitarRenderizacao(), d && ((p = T(r, a.linha, o)) == null || p.focus());
883
899
  }
884
900
  };
885
901
  n.addEventListener("keydown", (s) => {
886
- 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));
887
903
  }), n.addEventListener("blur", () => c(!0));
888
904
  });
889
905
  });
890
906
  }
891
- const Ea = ["dragging", "drop-above", "drop-below", "drop-into"];
892
- class ka {
907
+ const Da = ["dragging", "drop-above", "drop-below", "drop-into"];
908
+ class Ta {
893
909
  constructor(r, a) {
894
- A(this, "host");
895
- A(this, "shadow");
910
+ w(this, "host");
911
+ w(this, "shadow");
896
912
  /** Cancela um arraste por toque em andamento (remove os ouvintes de `window`). */
897
- A(this, "cancelarToque", null);
913
+ w(this, "cancelarToque", null);
898
914
  this.host = r, this.shadow = a;
899
915
  }
900
916
  bindAll() {
@@ -906,11 +922,11 @@ class ka {
906
922
  (r = this.cancelarToque) == null || r.call(this), this.cancelarToque = null;
907
923
  }
908
924
  bindInlineRename() {
909
- Aa(this.host, this.shadow);
925
+ Pa(this.host, this.shadow);
910
926
  }
911
927
  limparClassesDeArraste() {
912
928
  this.shadow.querySelectorAll(".ui-layer-row, .ui-feat-row, .ui-layer-group").forEach((r) => {
913
- r.classList.remove(...Ea);
929
+ r.classList.remove(...Da);
914
930
  });
915
931
  }
916
932
  /** Depois de qualquer mudança na ordem/hierarquia de camadas. */
@@ -926,6 +942,14 @@ class ka {
926
942
  feicao: r.feicao
927
943
  });
928
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
+ }
929
953
  arrasteBloqueado(r) {
930
954
  return !!r.closest("input, button, select") || !!this.host.editingLayerId || !!this.host.editingFeatureId;
931
955
  }
@@ -944,7 +968,7 @@ class ka {
944
968
  const l = n;
945
969
  if (l.preventDefault(), l.stopPropagation(), l.dataTransfer && (l.dataTransfer.dropEffect = "move"), r === "layer") {
946
970
  if (a === o) return;
947
- 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);
948
972
  t.classList.toggle("drop-above", s === "acima"), t.classList.toggle("drop-below", s === "abaixo"), t.classList.toggle("drop-into", s === "dentro");
949
973
  } else r === "feature" && t.classList.add("drop-into");
950
974
  }), t.addEventListener("dragleave", (n) => {
@@ -956,23 +980,23 @@ class ka {
956
980
  l.preventDefault(), l.stopPropagation();
957
981
  const c = t.classList.contains("drop-into") ? "dentro" : t.classList.contains("drop-above") ? "acima" : "abaixo";
958
982
  if (this.limparClassesDeArraste(), r === "layer") {
959
- if (!a || a === o || !this.host.camadas.some((f) => f.id === a) || !this.host.camadas.some((f) => f.id === o)) return;
960
- const u = va(this.host.camadas, a, o, c);
961
- (u == null ? void 0 : u.tipo) === "hierarquia" ? ((s = this.host.expandedLayers) == null || s.add(u.novoParentId), this.host.dispararEvento("ui-camada-mover-hierarquia", {
962
- camadaId: u.camada.id,
963
- novoParentId: u.novoParentId,
964
- parentAnteriorId: u.parentAnteriorId,
965
- camada: u.camada
966
- })) : u && u.parentAnteriorId !== u.novoParentId && this.host.dispararEvento("ui-camada-mover-hierarquia", {
967
- camadaId: u.camada.id,
968
- novoParentId: u.novoParentId,
969
- parentAnteriorId: u.parentAnteriorId,
970
- camada: u.camada
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);
985
+ (d == null ? void 0 : d.tipo) === "hierarquia" ? ((s = this.host.expandedLayers) == null || s.add(d.novoParentId), this.host.dispararEvento("ui-camada-mover-hierarquia", {
986
+ camadaId: d.camada.id,
987
+ novoParentId: d.novoParentId,
988
+ parentAnteriorId: d.parentAnteriorId,
989
+ camada: d.camada
990
+ })) : d && d.parentAnteriorId !== d.novoParentId && this.host.dispararEvento("ui-camada-mover-hierarquia", {
991
+ camadaId: d.camada.id,
992
+ novoParentId: d.novoParentId,
993
+ parentAnteriorId: d.parentAnteriorId,
994
+ camada: d.camada
971
995
  }), this.aposReordenarCamadas();
972
996
  } else if (r === "feature") {
973
- if (!i) return;
974
- const u = ha(this.host.feicoes, this.host.camadas, i, o);
975
- u && (this.emitirFeicaoMovida(u), this.host.solicitarRenderizacao());
997
+ if (!i || this.trocaEntreCamadasTravada(i, o)) return;
998
+ const d = Ma(this.host.feicoes, this.host.camadas, i, o);
999
+ d && (this.emitirFeicaoMovida(d), this.host.solicitarRenderizacao());
976
1000
  }
977
1001
  }), t.addEventListener("dragend", () => {
978
1002
  r = null, a = null, i = null, this.limparClassesDeArraste();
@@ -990,8 +1014,8 @@ class ka {
990
1014
  const c = l;
991
1015
  if (r !== "feature" || i === o) return;
992
1016
  c.preventDefault(), c.stopPropagation(), c.dataTransfer && (c.dataTransfer.dropEffect = "move");
993
- const s = t.getBoundingClientRect(), u = c.clientY - s.top < s.height / 2;
994
- t.classList.toggle("drop-above", u), t.classList.toggle("drop-below", !u);
1017
+ const s = t.getBoundingClientRect(), d = c.clientY - s.top < s.height / 2;
1018
+ t.classList.toggle("drop-above", d), t.classList.toggle("drop-below", !d);
995
1019
  }), t.addEventListener("dragleave", (l) => {
996
1020
  const c = l.relatedTarget;
997
1021
  c && t.contains(c) || t.classList.remove("drop-above", "drop-below");
@@ -1000,9 +1024,9 @@ class ka {
1000
1024
  if (r !== "feature" || !i || i === o) return;
1001
1025
  c.preventDefault(), c.stopPropagation();
1002
1026
  const s = t.classList.contains("drop-above");
1003
- this.limparClassesDeArraste();
1004
- const u = xa(this.host.feicoes, i, o, s);
1005
- u && (u.mudouDeCamada && this.emitirFeicaoMovida(u), this.host.dispararEvento("ui-feicoes-reordenadas", { feicoes: [...this.host.feicoes] }), this.host.solicitarRenderizacao());
1027
+ if (this.limparClassesDeArraste(), this.trocaEntreCamadasTravada(i, n)) return;
1028
+ const d = Fa(this.host.feicoes, i, o, s);
1029
+ d && (d.mudouDeCamada && this.emitirFeicaoMovida(d), this.host.dispararEvento("ui-feicoes-reordenadas", { feicoes: [...this.host.feicoes] }), this.host.solicitarRenderizacao());
1006
1030
  }), t.addEventListener("dragend", (l) => {
1007
1031
  l.stopPropagation(), r = null, i = null, a = null, this.limparClassesDeArraste();
1008
1032
  }));
@@ -1018,54 +1042,88 @@ class ka {
1018
1042
  if (!a) return;
1019
1043
  const i = a.getAttribute("data-layer-id");
1020
1044
  i && r.addEventListener("pointerdown", (t) => {
1021
- var f;
1045
+ var u;
1022
1046
  const o = t;
1023
1047
  if (o.pointerType === "mouse" && o.button !== 0 || this.host.editingLayerId || this.host.editingFeatureId) return;
1024
- (f = this.cancelarToque) == null || f.call(this);
1048
+ (u = this.cancelarToque) == null || u.call(this);
1025
1049
  let n = null, l = !1;
1026
1050
  const c = (p) => {
1027
1051
  p.preventDefault(), a.classList.add("dragging");
1028
- const m = this.shadow.elementFromPoint(p.clientX, p.clientY), d = m ? m.closest(".ui-layer-row") : null;
1029
- if (n && n !== d && n.classList.remove("drop-above", "drop-below"), d && d !== a) {
1030
- n = d;
1031
- const g = d.getBoundingClientRect();
1032
- l = p.clientY - g.top < g.height / 2, d.classList.toggle("drop-above", l), d.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);
1033
1057
  } else
1034
1058
  n = null;
1035
1059
  }, s = () => {
1036
- window.removeEventListener("pointermove", c), window.removeEventListener("pointerup", u), window.removeEventListener("pointercancel", u), this.cancelarToque = null;
1037
- }, u = () => {
1060
+ window.removeEventListener("pointermove", c), window.removeEventListener("pointerup", d), window.removeEventListener("pointercancel", d), this.cancelarToque = null;
1061
+ }, d = () => {
1038
1062
  s();
1039
1063
  const p = n == null ? void 0 : n.getAttribute("data-layer-id");
1040
- 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();
1041
1065
  };
1042
1066
  this.cancelarToque = () => {
1043
1067
  s(), this.limparClassesDeArraste();
1044
- }, window.addEventListener("pointermove", c, { passive: !1 }), window.addEventListener("pointerup", u), window.addEventListener("pointercancel", u);
1068
+ }, window.addEventListener("pointermove", c, { passive: !1 }), window.addEventListener("pointerup", d), window.addEventListener("pointercancel", d);
1045
1069
  });
1046
1070
  });
1047
1071
  }
1048
1072
  }
1049
- const Ia = "ui_camadas_estado_";
1050
- function La(e, r) {
1073
+ const Ra = "ui_camadas_estado_";
1074
+ function Oa(e, r) {
1051
1075
  const a = (e || r || "default").trim();
1052
- 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
+ };
1053
1114
  }
1054
- function fe(e) {
1115
+ function be(e) {
1055
1116
  if (typeof window > "u" || typeof localStorage > "u")
1056
1117
  return null;
1057
1118
  try {
1058
1119
  const r = localStorage.getItem(e);
1059
- if (!r) return null;
1060
- const a = JSON.parse(r);
1061
- if (a && typeof a == "object")
1062
- return a;
1120
+ return r ? ja(JSON.parse(r)) : null;
1063
1121
  } catch (r) {
1064
1122
  console.warn(`[UI-Camadas] Não foi possível carregar o estado persistido (${e}):`, r);
1065
1123
  }
1066
1124
  return null;
1067
1125
  }
1068
- function Ca(e, r) {
1126
+ function Na(e, r) {
1069
1127
  if (!(typeof window > "u" || typeof localStorage > "u"))
1070
1128
  try {
1071
1129
  localStorage.setItem(e, JSON.stringify(r));
@@ -1073,14 +1131,14 @@ function Ca(e, r) {
1073
1131
  console.warn(`[UI-Camadas] Não foi possível salvar o estado persistido (${e}):`, a);
1074
1132
  }
1075
1133
  }
1076
- function $a(e) {
1134
+ function Ha(e) {
1077
1135
  if (!(typeof window > "u" || typeof localStorage > "u"))
1078
1136
  try {
1079
1137
  localStorage.removeItem(e);
1080
1138
  } catch {
1081
1139
  }
1082
1140
  }
1083
- function Re(e) {
1141
+ function Xe(e) {
1084
1142
  return {
1085
1143
  name: e.name,
1086
1144
  visible: e.visible !== !1,
@@ -1090,46 +1148,46 @@ function Re(e) {
1090
1148
  parentId: e.parentId !== void 0 ? e.parentId : null
1091
1149
  };
1092
1150
  }
1093
- function Sa(e, r, a, i) {
1094
- var f;
1151
+ function Ga(e, r, a, i) {
1152
+ var u;
1095
1153
  if (!Array.isArray(e)) return;
1096
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;
1097
1155
  for (let p = 0; p < e.length; p++) {
1098
- const m = e[p], d = t[m.id];
1099
- if (i == null || i.set(m.id, Re(m)), d) {
1100
- const g = d.origem, v = (x) => {
1101
- var $;
1102
- const L = ($ = i == null ? void 0 : i.get(m.id)) == null ? void 0 : $[x];
1103
- return g !== void 0 && g[x] !== L;
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) => {
1159
+ var C;
1160
+ const k = (C = i == null ? void 0 : i.get(m.id)) == null ? void 0 : C[h];
1161
+ return g !== void 0 && g[h] !== k;
1104
1162
  };
1105
- typeof d.name == "string" && d.name.trim() && !v("name") && (m.name = d.name), typeof d.visible == "boolean" && !v("visible") && (m.visible = d.visible), typeof d.locked == "boolean" && !v("locked") && (m.locked = d.locked), typeof d.opacity == "number" && !v("opacity") && (m.opacity = d.opacity), typeof d.color == "string" && !v("color") && (m.color = d.color), d.parentId !== void 0 && !v("parentId") && (m.parentId = d.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);
1106
1164
  }
1107
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);
1108
1166
  }
1109
1167
  for (let p = 0; p < e.length; p++) {
1110
1168
  const m = e[p];
1111
- 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);
1112
1170
  }
1113
1171
  const c = new Set(e.map((p) => p.id)), s = r == null ? void 0 : r.ordemOrigemIds;
1114
1172
  if (!(Array.isArray(s) && (() => {
1115
- const p = new Set(s), m = (d) => d.filter((g) => c.has(g) && p.has(g)).join("|");
1116
- return m(s) !== m(e.map((d) => d.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));
1117
1175
  })()) && Array.isArray(r == null ? void 0 : r.ordemCamadasIds) && r.ordemCamadasIds.length > 0) {
1118
1176
  const p = /* @__PURE__ */ new Map();
1119
- r.ordemCamadasIds.forEach((m, d) => p.set(m, d)), e.sort((m, d) => {
1120
- const g = p.has(m.id) ? p.get(m.id) : 9999, v = p.has(d.id) ? p.get(d.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;
1121
1179
  return g - v;
1122
1180
  });
1123
1181
  }
1124
1182
  }
1125
- function Ma(e) {
1183
+ function Ua(e) {
1126
1184
  const { estadoAnterior: r, camadas: a, expandedLayers: i } = e;
1127
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;
1128
1186
  const c = {
1129
1187
  ...(r == null ? void 0 : r.camadasOverrides) || {}
1130
1188
  };
1131
1189
  a.length > 0 && (t = [], o = [], n = a.map((s) => s.id), l = e.origensCamadas ? [...e.origensCamadas.keys()] : n, a.forEach((s) => {
1132
- var u, f;
1190
+ var d, u;
1133
1191
  i.has(s.id) ? t.push(s.id) : o.push(s.id), c[s.id] = {
1134
1192
  name: s.name,
1135
1193
  visible: s.visible !== !1,
@@ -1137,7 +1195,7 @@ function Ma(e) {
1137
1195
  opacity: typeof s.opacity == "number" ? s.opacity : 1,
1138
1196
  color: s.color || "#00E08A",
1139
1197
  parentId: s.parentId !== void 0 ? s.parentId : null,
1140
- origem: ((u = e.origensCamadas) == null ? void 0 : u.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)
1141
1199
  };
1142
1200
  }));
1143
1201
  for (const s of e.camadasRemovidas ?? []) delete c[s];
@@ -1156,8 +1214,65 @@ function Ma(e) {
1156
1214
  ultimaAtualizacao: Date.now()
1157
1215
  };
1158
1216
  }
1159
- 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-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:32px;min-height:32px;max-height:32px;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:6px 6px 4px;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;padding:1px 2px 3px;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:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));color:var(--ui-cor-texto-secundario, #888899);border-radius:var(--ui-raio-sm, 4px);width:22px;height:22px;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);border-color:var(--ui-cor-primaria, #00E08A);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) 12%,transparent);border:1px solid color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent);color:var(--ui-cor-primaria, #00E08A);border-radius:var(--ui-raio-sm, 4px);height:22px;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);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.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:32px;min-height:32px;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 8px;gap:6px;box-sizing:border-box;overflow:hidden;position:relative}.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{font-size:10px;font-weight:500;color:var(--ui-cor-texto-secundario, #888899);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-footer-metric{font-size:9.5px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;color:var(--ui-cor-primaria, #00E08A);display:inline-flex;align-items:center;gap:3px;white-space:nowrap;background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);padding:1px 5px;border-radius:3px;border:1px solid color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 24%,transparent);flex-shrink:0}.ui-footer-actions-gerais{display:flex;align-items:center;gap:4px;flex-shrink:0}.ui-footer-chip-btn{background:#ffffff0a;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));color:var(--ui-cor-texto-secundario, #a0a0b0);font-size:10px;font-weight:600;height:22px;padding:0 7px;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-footer-chip-btn:hover{background:#ffffff1a;color:var(--ui-cor-texto, #ffffff);border-color:#fff3}.ui-footer-chip-btn.primario{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);border-color:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 32%,transparent);color:var(--ui-cor-primaria, #00E08A)}.ui-footer-chip-btn.primario:hover{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 22%,transparent);border-color:var(--ui-cor-primaria, #00E08A);color:#fff}.ui-footer-right{display:flex;align-items:center;gap:3px;flex-shrink: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-btn.btn-clear-footer{color:var(--ui-cor-texto-secundario, #888899);margin-left:2px}.ui-footer-btn.btn-clear-footer:hover{color:#fff;background:#ffffff1f}.ui-footer-color-wrapper{position:relative;display:flex;align-items:center;justify-content:center;width:18px;height:18px;cursor:pointer;flex-shrink:0}.ui-footer-color-preview{width:14px;height:14px;border-radius:50%;border:1.5px solid rgba(255,255,255,.35);box-shadow:0 0 4px #0006;pointer-events:none;transition:transform .15s ease,border-color .15s ease}.ui-footer-color-wrapper:hover .ui-footer-color-preview{transform:scale(1.15);border-color:#fff}.ui-footer-color{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer;padding:0;margin:0;border:none}.ui-footer-move-wrapper{position:relative;display:flex;align-items:center;max-width:95px;flex-shrink:0}.ui-footer-select{background:var(--ui-cor-fundo, #16161c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #e1e1e6);border-radius:4px;font-size:10px;height:22px;padding:0 4px;cursor:pointer;max-width:95px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-footer-select:hover:not(:disabled){border-color:#ffffff40}.ui-footer-select:focus{outline:none;border-color:var(--ui-cor-primaria, #00E08A)}.ui-tree-btn-group{background:#ffffff0a;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto-secundario, #a0a0b0);border-radius:var(--ui-raio-sm, 4px);height:22px;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:#ffffff1a;color:var(--ui-cor-texto, #ffffff);border-color:#ffffff40}.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}';
1160
- 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) {
1161
1276
  r.querySelectorAll("[data-layer-row]").forEach((t) => {
1162
1277
  t.addEventListener("click", (o) => {
1163
1278
  if (o.target.closest(
@@ -1176,10 +1291,10 @@ function za(e, r) {
1176
1291
  const l = t.closest(".ui-layer-group"), c = t.querySelector(".ui-chevron-icon"), s = e.expandedLayers.has(n);
1177
1292
  if (c && c.classList.toggle("open", s), l) {
1178
1293
  l.setAttribute("aria-expanded", String(s));
1179
- const u = l.querySelector(".ui-children-container");
1180
- u && (u.style.display = s ? "block" : "none");
1294
+ const d = l.querySelector(".ui-children-container");
1295
+ d && (d.style.display = s ? "block" : "none");
1181
1296
  }
1182
- P(t, s ? "Recolher grupo" : "Expandir grupo"), Ba(e, r), e.salvarLembrancaEstado();
1297
+ B(t, s ? "Recolher grupo" : "Expandir grupo"), Xa(e, r), e.salvarLembrancaEstado();
1183
1298
  });
1184
1299
  }), r.querySelectorAll("[data-layer-eye]").forEach((t) => {
1185
1300
  t.addEventListener("click", (o) => {
@@ -1188,9 +1303,9 @@ function za(e, r) {
1188
1303
  if (l) {
1189
1304
  l.visible = l.visible === !1;
1190
1305
  const c = l.visible !== !1;
1191
- t.innerHTML = c ? b.olhoAberto : b.olhoFechado, P(t, c ? "Ocultar Camada" : "Exibir Camada");
1306
+ t.innerHTML = c ? b.olhoAberto : b.olhoFechado, B(t, c ? "Ocultar Camada" : "Exibir Camada");
1192
1307
  const s = t.closest(".ui-layer-row");
1193
- 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", {
1194
1309
  camadaId: l.id,
1195
1310
  visivel: c
1196
1311
  });
@@ -1200,7 +1315,7 @@ function za(e, r) {
1200
1315
  t.addEventListener("click", (o) => {
1201
1316
  o.stopPropagation();
1202
1317
  const n = t.getAttribute("data-layer-lock"), l = e.camadas.find((c) => c.id === n);
1203
- l && (l.locked = !l.locked, t.innerHTML = l.locked ? b.cadeadoTrancado : b.cadeadoAberto, t.classList.toggle("ui-lock-open", !l.locked), P(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", {
1204
1319
  camadaId: l.id,
1205
1320
  bloqueado: l.locked
1206
1321
  }));
@@ -1224,21 +1339,21 @@ function za(e, r) {
1224
1339
  });
1225
1340
  const a = (t, o, n) => {
1226
1341
  var m;
1227
- const l = e.camadas.find((d) => d.id === t);
1342
+ const l = e.camadas.find((f) => f.id === t);
1228
1343
  if (!l) return;
1229
- const c = N(o, l.color || "#00E08A");
1344
+ const c = K(o, l.color || "#00E08A");
1230
1345
  l.color = c;
1231
1346
  const s = r.getElementById(`sample-color-${t}`);
1232
1347
  s && (s.style.backgroundColor = c);
1233
- const u = r.getElementById(`hex-color-${t}`);
1234
- u && (u.textContent = c.toUpperCase());
1235
- const f = r.getElementById(`settings-drawer-${t}`);
1236
- f && f.style.setProperty("--drawer-cor-camada", c);
1348
+ const d = r.getElementById(`hex-color-${t}`);
1349
+ d && (d.textContent = c.toUpperCase());
1350
+ const u = r.getElementById(`settings-drawer-${t}`);
1351
+ u && u.style.setProperty("--drawer-cor-camada", c);
1237
1352
  const p = T(r, "data-layer-row", t);
1238
1353
  if (p) {
1239
1354
  (m = p.closest(".ui-layer-group")) == null || m.style.setProperty("--layer-active-color", c);
1240
- const d = p.querySelector(".ui-col-colorbar");
1241
- d && (d.style.backgroundColor = c);
1355
+ const f = p.querySelector(".ui-col-colorbar");
1356
+ f && (f.style.backgroundColor = c);
1242
1357
  }
1243
1358
  n ? e.salvarLembrancaEstado() : e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-cor", { camadaId: l.id, cor: c });
1244
1359
  };
@@ -1246,19 +1361,19 @@ function za(e, r) {
1246
1361
  const o = t, n = (l) => (c) => {
1247
1362
  const s = o.getAttribute("data-layer-color-picker");
1248
1363
  if (!s) return;
1249
- const u = c.target.value;
1250
- a(s, u, l);
1364
+ const d = c.target.value;
1365
+ a(s, d, l);
1251
1366
  };
1252
1367
  o.addEventListener("input", n(!1)), o.addEventListener("change", n(!0));
1253
1368
  }), r.querySelectorAll("[data-layer-color]").forEach((t) => {
1254
1369
  const o = (n) => {
1255
1370
  n.stopPropagation();
1256
1371
  const l = t.getAttribute("data-layer-color"), c = e.camadas.find((s) => s.id === l);
1257
- !l || !c || ta({
1372
+ !l || !c || ma({
1258
1373
  ancora: t,
1259
1374
  titulo: `Cor · ${c.name || "Camada"}`,
1260
1375
  modo: "simples",
1261
- cor: N(c.color, "#00E08A"),
1376
+ cor: K(c.color, "#00E08A"),
1262
1377
  mostrarOpacidade: !1,
1263
1378
  aoAlterar: (s) => a(l, s.cor, !1),
1264
1379
  aoConfirmar: (s) => a(l, s.cor, !0),
@@ -1295,30 +1410,30 @@ function za(e, r) {
1295
1410
  if (t.classList.contains("confirming")) {
1296
1411
  o && clearTimeout(o), e.dispararEvento("ui-camada-excluida", { camadaId: l });
1297
1412
  const s = e.selectedFeatureIds.size;
1298
- e.camadas.forEach((u) => {
1299
- u.parentId === l && (u.parentId = null);
1413
+ e.camadas.forEach((d) => {
1414
+ d.parentId === l && (d.parentId = null);
1300
1415
  }), e.removerCamada(l), e.selectedFeatureIds.size !== s && e.notificarMudancaSelecao();
1301
1416
  } else {
1302
1417
  t.classList.add("confirming");
1303
1418
  const s = t.querySelector(".ui-btn-label");
1304
1419
  s && (s.textContent = "Confirmar Exclusão?"), o = setTimeout(() => {
1305
- t.classList.remove("confirming"), s && (s.textContent = "Excluir Camada");
1420
+ t.classList.remove("confirming"), s && (s.textContent = "Excluir");
1306
1421
  }, 3500);
1307
1422
  }
1308
1423
  });
1309
1424
  }), r.querySelectorAll("[data-layer-parent-select]").forEach((t) => {
1310
1425
  t.addEventListener("change", (o) => {
1311
- const n = o.target, l = n.getAttribute("data-layer-parent-select"), c = n.value || null, s = e.camadas.find((u) => u.id === l);
1426
+ const n = o.target, l = n.getAttribute("data-layer-parent-select"), c = n.value || null, s = e.camadas.find((d) => d.id === l);
1312
1427
  if (s) {
1313
- if (c && (c === s.id || te(e.camadas, c, s.id))) {
1428
+ if (c && (c === s.id || _(e.camadas, c, s.id))) {
1314
1429
  n.value = s.parentId || "";
1315
1430
  return;
1316
1431
  }
1317
- const u = s.parentId ?? null;
1432
+ const d = s.parentId ?? null;
1318
1433
  s.parentId = c, c && e.expandedLayers.add(c), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-mover-hierarquia", {
1319
1434
  camadaId: s.id,
1320
1435
  novoParentId: c,
1321
- parentAnteriorId: u,
1436
+ parentAnteriorId: d,
1322
1437
  camada: s
1323
1438
  }), e.solicitarRenderizacao();
1324
1439
  }
@@ -1340,151 +1455,102 @@ function za(e, r) {
1340
1455
  o.stopPropagation();
1341
1456
  const n = o, l = t.getAttribute("data-layer-target");
1342
1457
  if (!l) return;
1343
- 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);
1344
1459
  if (s.length === 0) return;
1345
- 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();
1346
1461
  });
1347
1462
  });
1348
1463
  }
1349
- function Ba(e, r) {
1464
+ function Xa(e, r) {
1350
1465
  const a = r.getElementById("btn-toggle-all-expand");
1351
1466
  if (!a) return;
1352
1467
  const i = e.camadas.length > 0 && e.camadas.every((o) => e.expandedLayers.has(o.id)), t = a.querySelector(".ui-chevron-icon");
1353
- t && t.classList.toggle("open", i), P(
1468
+ t && t.classList.toggle("open", i), B(
1354
1469
  a,
1355
1470
  i ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"
1356
1471
  );
1357
1472
  }
1358
- function qa(e, r) {
1473
+ function Qa(e, r) {
1359
1474
  const a = r.getElementById("btn-toggle-all-vis");
1360
1475
  if (!a) return;
1361
1476
  const i = e.camadas.every((t) => t.visible !== !1);
1362
- a.innerHTML = i ? b.olhoAberto : b.olhoFechado, P(a, i ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas");
1363
- }
1364
- function Da(e, r, a, i) {
1365
- e.feicoes.filter((t) => t.layerId === a).forEach((t) => {
1366
- const o = T(r, "data-feat-lock", t.id);
1367
- if (!o) return;
1368
- const n = t.locked === !0 || i;
1369
- 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"), P(
1370
- o,
1371
- i ? "Bloqueada pela camada" : n ? "Desbloquear Feição" : "Bloquear Feição"
1372
- );
1373
- });
1477
+ a.innerHTML = i ? b.olhoAberto : b.olhoFechado, B(a, i ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas");
1374
1478
  }
1375
- function Pa(e, r) {
1376
- const a = r.getElementById("btn-footer-vis");
1377
- a && a.addEventListener("click", () => {
1378
- const f = e.feicoes.filter((d) => e.selectedFeatureIds.has(d.id));
1379
- if (f.length === 0) return;
1380
- const m = !f.some((d) => d.visible !== !1);
1381
- f.forEach((d) => d.visible = m), e.dispararEvento("ui-acao-massa", {
1382
- acao: "visibilidade",
1383
- feicoesIds: f.map((d) => d.id),
1384
- feicoes: f,
1385
- valor: m
1386
- }), e.solicitarRenderizacao();
1387
- });
1388
- const i = r.getElementById("btn-footer-lock");
1389
- i && i.addEventListener("click", () => {
1390
- const f = e.feicoes.filter((d) => e.selectedFeatureIds.has(d.id));
1391
- if (f.length === 0) return;
1392
- const m = !f.some((d) => d.locked === !0);
1393
- f.forEach((d) => d.locked = m), e.dispararEvento("ui-acao-massa", {
1394
- acao: "bloqueio",
1395
- feicoesIds: f.map((d) => d.id),
1396
- feicoes: f,
1397
- valor: m
1398
- }), e.solicitarRenderizacao();
1399
- });
1400
- const t = r.getElementById("input-footer-color"), o = r.getElementById("preview-footer-color");
1401
- t && (t.addEventListener("input", (f) => {
1402
- const p = f.target.value;
1403
- o && (o.style.backgroundColor = p);
1404
- }), t.addEventListener("change", (f) => {
1405
- const p = f.target.value;
1406
- o && (o.style.backgroundColor = p);
1407
- const m = e.feicoes.filter((d) => e.selectedFeatureIds.has(d.id));
1408
- m.length !== 0 && (m.forEach((d) => {
1409
- d.color = p, d.style = { ...d.style || {}, fillColor: p, strokeColor: p };
1410
- }), e.dispararEvento("ui-acao-massa", {
1411
- acao: "cor",
1412
- feicoesIds: m.map((d) => d.id),
1413
- feicoes: m,
1414
- valor: p
1415
- }), e.solicitarRenderizacao());
1416
- }));
1417
- const n = r.getElementById("select-footer-move");
1418
- n && n.addEventListener("change", (f) => {
1419
- const p = f.target.value;
1420
- if (!p) return;
1421
- const m = e.feicoes.filter((g) => e.selectedFeatureIds.has(g.id));
1422
- if (m.length === 0) return;
1423
- const d = new Map(m.map((g) => [g.id, g.layerId]));
1424
- m.forEach((g) => g.layerId = p), m.forEach((g) => {
1425
- d.get(g.id) !== p && e.dispararEvento("ui-feicao-movida", {
1426
- feicaoId: g.id,
1427
- camadaOrigemId: d.get(g.id),
1428
- camadaDestinoId: p,
1429
- feicao: g
1479
+ function Ja(e, r) {
1480
+ const a = r.getElementById("select-footer-move");
1481
+ a && a.addEventListener("change", (n) => {
1482
+ const l = n.target.value;
1483
+ if (!l) return;
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),
1496
+ camadaDestinoId: l,
1497
+ feicao: u
1430
1498
  });
1431
1499
  }), e.dispararEvento("ui-acao-massa", {
1432
1500
  acao: "mover",
1433
- feicoesIds: m.map((g) => g.id),
1434
- feicoes: m,
1435
- valor: p
1501
+ feicoesIds: s.map((u) => u.id),
1502
+ feicoes: s,
1503
+ valor: l
1436
1504
  }), e.solicitarRenderizacao();
1437
1505
  });
1438
- const l = r.getElementById("btn-footer-new-layer");
1439
- l && l.addEventListener("click", () => {
1506
+ const i = r.getElementById("btn-footer-new-layer");
1507
+ i && i.addEventListener("click", () => {
1440
1508
  e.dispararEvento("ui-camada-adicionar", {});
1441
1509
  });
1442
- const c = r.getElementById("btn-footer-new-group");
1443
- c && c.addEventListener("click", () => {
1510
+ const t = r.getElementById("btn-footer-new-group");
1511
+ t && t.addEventListener("click", () => {
1444
1512
  e.dispararEvento("ui-camada-grupo-adicionar", { isGroup: !0 });
1445
1513
  });
1446
- const s = r.getElementById("btn-footer-del");
1447
- if (s) {
1448
- let f = null;
1449
- const p = "Excluir selecionados";
1450
- s.addEventListener("click", () => {
1451
- const m = Array.from(e.selectedFeatureIds);
1452
- if (m.length === 0) return;
1453
- if (!s.classList.contains("confirming")) {
1454
- s.classList.add("confirming"), P(s, `Clique novamente para excluir ${m.length} selecionado(s)`), f = setTimeout(() => {
1455
- s.classList.remove("confirming"), P(s, p);
1514
+ const o = r.getElementById("btn-footer-del");
1515
+ if (o) {
1516
+ let n = null;
1517
+ const l = "Excluir selecionados";
1518
+ o.addEventListener("click", () => {
1519
+ const c = Array.from(e.selectedFeatureIds);
1520
+ if (c.length === 0) return;
1521
+ if (!o.classList.contains("confirming")) {
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);
1456
1524
  }, 3500);
1457
1525
  return;
1458
1526
  }
1459
- f && clearTimeout(f);
1460
- const d = e.feicoes.filter((g) => e.selectedFeatureIds.has(g.id));
1461
- e.feicoes = e.feicoes.filter((g) => !e.selectedFeatureIds.has(g.id)), e.selectedFeatureIds.clear(), e.lastClickedFeatureId = null, e.dispararEvento("ui-acao-massa", {
1527
+ n && clearTimeout(n);
1528
+ const s = e.feicoes.filter((d) => e.selectedFeatureIds.has(d.id));
1529
+ e.feicoes = e.feicoes.filter((d) => !e.selectedFeatureIds.has(d.id)), e.selectedFeatureIds.clear(), e.lastClickedFeatureId = null, e.dispararEvento("ui-acao-massa", {
1462
1530
  acao: "excluir",
1463
- feicoesIds: m,
1464
- feicoes: d
1531
+ feicoesIds: c,
1532
+ feicoes: s
1465
1533
  }), e.notificarMudancaSelecao(), e.solicitarRenderizacao();
1466
1534
  });
1467
1535
  }
1468
- const u = r.getElementById("btn-footer-clear");
1469
- u && u.addEventListener("click", () => e.limparSelecao(!0));
1470
1536
  }
1471
- const Ta = [
1537
+ const Wa = [
1472
1538
  { tipo: "olho", atributo: "data-layer-eye", entidade: "camada" },
1473
1539
  { tipo: "olho", atributo: "data-feat-eye", entidade: "feicao" },
1474
1540
  { tipo: "cadeado", atributo: "data-layer-lock", entidade: "camada" },
1475
1541
  { tipo: "cadeado", atributo: "data-feat-lock", entidade: "feicao" },
1476
1542
  { tipo: "selecao", atributo: "data-layer-target", entidade: "camada" },
1477
1543
  { tipo: "selecao", atributo: "data-feat-target", entidade: "feicao" }
1478
- ], me = {
1544
+ ], he = {
1479
1545
  olho: "[data-layer-eye], [data-feat-eye]",
1480
1546
  cadeado: "[data-layer-lock], [data-feat-lock]",
1481
1547
  selecao: "[data-layer-target], [data-feat-target]"
1482
- }, Ra = 3;
1483
- function Oa(e) {
1484
- 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;
1485
1551
  }
1486
- function pe(e, r) {
1487
- const a = Oa(r);
1552
+ function ge(e, r) {
1553
+ const a = er(r);
1488
1554
  if (!a) return null;
1489
1555
  const i = r.getAttribute(a.atributo);
1490
1556
  if (!i) return null;
@@ -1498,13 +1564,13 @@ function pe(e, r) {
1498
1564
  return o ? o.locked === !0 : null;
1499
1565
  }
1500
1566
  if (a.entidade === "feicao") return e.selectedFeatureIds.has(i);
1501
- const t = ae(
1502
- re(e.camadas, e.feicoes, i),
1567
+ const t = oe(
1568
+ ne(e.camadas, e.feicoes, i),
1503
1569
  e.searchQuery
1504
1570
  );
1505
1571
  return t.length === 0 ? null : t.every((o) => e.selectedFeatureIds.has(o.id));
1506
1572
  }
1507
- function Ie(e, r, a = !1) {
1573
+ function Te(e, r, a = !1) {
1508
1574
  e.dispatchEvent(
1509
1575
  new MouseEvent("click", {
1510
1576
  bubbles: !0,
@@ -1514,78 +1580,70 @@ function Ie(e, r, a = !1) {
1514
1580
  })
1515
1581
  );
1516
1582
  }
1517
- let q = null;
1518
- function ja(e) {
1519
- (q == null ? void 0 : q.host) === e && q.cancelar();
1583
+ let z = null;
1584
+ function ar(e) {
1585
+ (z == null ? void 0 : z.host) === e && z.cancelar();
1520
1586
  }
1521
- function Na(e, r) {
1522
- Object.keys(me).forEach((a) => {
1523
- r.querySelectorAll(me[a]).forEach((i) => {
1524
- 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));
1525
1591
  });
1526
1592
  });
1527
1593
  }
1528
- function Ha(e, r, a, i, t) {
1529
- if (t.pointerType === "mouse" && t.button !== 0 || e.editingLayerId || e.editingFeatureId || pe(e, i) === null) return;
1530
- q == null || q.cancelar();
1531
- const o = me[a], n = t.ctrlKey || t.metaKey, l = t.shiftKey;
1532
- let c = !1, s = !1, u = t.clientY;
1533
- const f = /* @__PURE__ */ new Set([i]), p = (h) => {
1534
- h.preventDefault(), h.stopImmediatePropagation();
1535
- }, m = (h) => {
1536
- h.stopPropagation(), h.preventDefault();
1537
- }, d = (h) => h.preventDefault(), g = (h) => {
1538
- f.has(h) || (f.add(h), pe(e, h) !== s && Ie(h, a === "selecao"));
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;
1598
+ let c = !1, s = !1, d = t.clientY;
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"));
1539
1605
  }, v = () => {
1540
- c = !0, Ie(i, n, l), s = pe(e, i) === !0, r.addEventListener("selectstart", d), document.body.style.userSelect = "none";
1541
- }, x = (h) => {
1542
- var S, 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;
1543
1609
  if (!c) {
1544
- if (Math.hypot(h.clientX - t.clientX, h.clientY - t.clientY) < Ra) return;
1545
- const M = (S = r.elementFromPoint(h.clientX, h.clientY)) == null ? void 0 : S.closest(o);
1546
- if (!M || M === 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;
1547
1613
  v();
1548
1614
  }
1549
- h.preventDefault();
1550
- const E = Math.min(u, h.clientY), k = Math.max(u, h.clientY);
1551
- r.querySelectorAll(o).forEach((M) => {
1552
- const D = M.getBoundingClientRect();
1553
- if (D.height === 0) return;
1554
- const H = D.top + D.height / 2;
1555
- H >= E && H <= k && g(M);
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);
1556
1622
  });
1557
- const z = (w = r.elementFromPoint(h.clientX, h.clientY)) == null ? void 0 : w.closest(o);
1558
- z && g(z), u = h.clientY;
1559
- }, L = (h = !1) => {
1560
- (q == null ? void 0 : q.cancelar) === y && (q = null), window.removeEventListener("pointermove", x), window.removeEventListener("pointerup", $), window.removeEventListener("pointercancel", $), window.removeEventListener("dragstart", p, !0), r.removeEventListener("selectstart", d), c && (document.body.style.userSelect = "", h || (window.addEventListener("click", m, { capture: !0, once: !0 }), setTimeout(() => window.removeEventListener("click", m, !0), 0)));
1561
- }, $ = () => L(), y = () => L(!0);
1562
- q = { host: e, cancelar: y }, window.addEventListener("dragstart", p, !0), window.addEventListener("pointermove", x, { passive: !1 }), window.addEventListener("pointerup", $), window.addEventListener("pointercancel", $);
1563
- }
1564
- 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) {
1565
1631
  const a = r.getElementById("btn-toggle-all-vis");
1566
1632
  a && a.addEventListener("click", () => e.alternarVisibilidadeTodas(!0));
1567
1633
  const i = r.getElementById("btn-toggle-all-expand");
1568
- i && i.addEventListener("click", (l) => {
1569
- l.stopPropagation(), e.camadas.length > 0 && e.camadas.every((s) => e.expandedLayers.has(s.id)) ? e.colapsarTodas() : e.expandirTodas();
1634
+ i && i.addEventListener("click", (o) => {
1635
+ o.stopPropagation(), e.camadas.length > 0 && e.camadas.every((l) => e.expandedLayers.has(l.id)) ? e.colapsarTodas() : e.expandirTodas();
1570
1636
  });
1571
- const t = r.getElementById("btn-add-layer");
1572
- t && t.addEventListener("click", () => {
1573
- e.dispararEvento("ui-camada-adicionar", {});
1574
- });
1575
- const o = r.getElementById("btn-add-group");
1576
- o && o.addEventListener("click", () => {
1577
- e.dispararEvento("ui-camada-grupo-adicionar", { isGroup: !0 });
1578
- });
1579
- const n = r.getElementById("btn-colapsar");
1580
- n && n.addEventListener("click", () => e.colapsar(!0)), Va(e, r);
1637
+ const t = r.getElementById("btn-colapsar");
1638
+ t && t.addEventListener("click", () => e.colapsar(!0)), or(e, r);
1581
1639
  }
1582
- function Va(e, r) {
1640
+ function or(e, r) {
1583
1641
  const a = r.getElementById("input-layer-search"), i = r.getElementById("btn-clear-layer-search"), t = () => {
1584
1642
  var o;
1585
1643
  e.searchQuery = "", e.solicitarRenderizacao(), (o = r.getElementById("input-layer-search")) == null || o.focus();
1586
1644
  };
1587
1645
  if (a) {
1588
- const o = Fe(() => e.solicitarRenderizacao(), 75);
1646
+ const o = Ne(() => e.solicitarRenderizacao(), 75);
1589
1647
  a.addEventListener("input", (n) => {
1590
1648
  e.searchQuery = n.target.value, o();
1591
1649
  }), a.addEventListener("keydown", (n) => {
@@ -1594,7 +1652,7 @@ function Va(e, r) {
1594
1652
  }
1595
1653
  i && i.addEventListener("click", t);
1596
1654
  }
1597
- function Ua(e, r) {
1655
+ function nr(e, r) {
1598
1656
  r.querySelectorAll("[data-feat-select]").forEach((a) => {
1599
1657
  a.addEventListener("click", (i) => {
1600
1658
  if (e.editingFeatureId) return;
@@ -1619,7 +1677,7 @@ function Ua(e, r) {
1619
1677
  if (o) {
1620
1678
  o.visible = o.visible === !1;
1621
1679
  const n = o.visible !== !1;
1622
- a.innerHTML = n ? b.olhoAberto : b.olhoFechado, P(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");
1623
1681
  const l = a.closest(".ui-feat-row");
1624
1682
  l && l.classList.toggle("hidden-row", !n), e.dispararEvento("ui-feicao-visibilidade", {
1625
1683
  feicaoId: o.id,
@@ -1631,7 +1689,7 @@ function Ua(e, r) {
1631
1689
  a.addEventListener("click", (i) => {
1632
1690
  if (i.stopPropagation(), a.hasAttribute("data-locked-by-layer")) return;
1633
1691
  const t = a.getAttribute("data-feat-lock"), o = e.feicoes.find((n) => n.id === t);
1634
- o && (o.locked = !o.locked, a.innerHTML = o.locked ? b.cadeadoTrancado : b.cadeadoAberto, a.classList.toggle("ui-lock-open", !o.locked), P(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", {
1635
1693
  feicaoId: o.id,
1636
1694
  bloqueado: o.locked
1637
1695
  }));
@@ -1644,7 +1702,7 @@ function Ua(e, r) {
1644
1702
  });
1645
1703
  });
1646
1704
  }
1647
- function Ya(e, r) {
1705
+ function sr(e, r) {
1648
1706
  var a;
1649
1707
  r.querySelectorAll("[data-basemap-thumb]").forEach((i) => {
1650
1708
  i.addEventListener(
@@ -1664,12 +1722,12 @@ function Ya(e, r) {
1664
1722
  });
1665
1723
  });
1666
1724
  }
1667
- function Ka(e, r) {
1668
- Ga(e, r), za(e, r), Ua(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);
1669
1727
  }
1670
- function _a(e, r, a, i) {
1728
+ function cr(e, r, a, i) {
1671
1729
  var g, v;
1672
- const t = ya({
1730
+ const t = Ba({
1673
1731
  camadas: e.camadas,
1674
1732
  feicoes: e.feicoes,
1675
1733
  camadaAtivaId: e.camadaAtivaId,
@@ -1683,37 +1741,37 @@ function _a(e, r, a, i) {
1683
1741
  mostrarBusca: e.mostrarBusca,
1684
1742
  limitesPorCamada: e.expandedFeatureLimits,
1685
1743
  mostrarBotaoColapsar: e.flutuante && e.getAttribute("colapsavel") !== "false"
1686
- }), 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, u = r.activeElement, f = u && a.contains(u) ? u.id : "", p = u && !f && a.contains(u) ? Array.from(u.attributes).find((x) => x.name.startsWith("data-") && x.value !== "") : void 0, m = u && "selectionStart" in u ? u.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;
1687
1745
  a.innerHTML = `
1688
1746
  ${t}
1689
1747
  ${n}
1690
1748
  ${o}
1691
1749
  `, a.scrollTop = c;
1692
- const d = r.getElementById("ui-layer-tree-mount");
1693
- if (d && (d.scrollTop = s), f) {
1694
- const x = r.getElementById(f);
1695
- if (x && (x.focus({ preventScroll: !0 }), m !== null && typeof x.setSelectionRange == "function"))
1750
+ const f = r.getElementById("ui-layer-tree-mount");
1751
+ if (f && (f.scrollTop = s), u) {
1752
+ const h = r.getElementById(u);
1753
+ if (h && (h.focus({ preventScroll: !0 }), m !== null && typeof h.setSelectionRange == "function"))
1696
1754
  try {
1697
- x.setSelectionRange(m, m);
1755
+ h.setSelectionRange(m, m);
1698
1756
  } catch {
1699
1757
  }
1700
1758
  }
1701
- !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();
1702
1760
  }
1703
- const Xa = '[role="button"][tabindex]', Y = "[data-layer-row], [data-feat-row]", Qa = ["color", "range", "checkbox", "radio", "button"];
1704
- function Oe(e) {
1705
- return !e || !(e instanceof Element) || e instanceof HTMLInputElement && Qa.includes(e.type) ? !1 : ia({ 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] });
1706
1764
  }
1707
- function Wa(e) {
1708
- return Array.from(e.querySelectorAll(Y)).filter((r) => {
1765
+ function pr(e) {
1766
+ return Array.from(e.querySelectorAll(X)).filter((r) => {
1709
1767
  const a = r.closest(".ui-children-container");
1710
1768
  return !(a && a.style.display === "none") && !r.classList.contains("ui-search-hidden");
1711
1769
  });
1712
1770
  }
1713
- function ee(e, r) {
1714
- 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());
1715
1773
  }
1716
- function Ja(e, r) {
1774
+ function fr(e, r) {
1717
1775
  e.dispatchEvent(
1718
1776
  new MouseEvent("click", {
1719
1777
  bubbles: !0,
@@ -1722,9 +1780,9 @@ function Ja(e, r) {
1722
1780
  })
1723
1781
  );
1724
1782
  }
1725
- function Za(e, r, a) {
1783
+ function mr(e, r, a) {
1726
1784
  var t;
1727
- if (Oe(a.composedPath()[0])) return;
1785
+ if (Qe(a.composedPath()[0])) return;
1728
1786
  const i = r.querySelector(".confirming");
1729
1787
  if (i) {
1730
1788
  a.preventDefault(), i.classList.remove("confirming");
@@ -1738,25 +1796,25 @@ function Za(e, r, a) {
1738
1796
  }
1739
1797
  e.selectedFeatureIds.size > 0 && (a.preventDefault(), e.limparSelecao(!0));
1740
1798
  }
1741
- function er(e, r, a, i) {
1799
+ function gr(e, r, a, i) {
1742
1800
  var l;
1743
1801
  const t = i.composedPath()[0];
1744
- if (!(t instanceof HTMLElement) || Oe(t)) return;
1745
- 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)) {
1746
1804
  i.preventDefault(), t.click();
1747
1805
  return;
1748
1806
  }
1749
- if (!t.matches(Y)) return;
1750
- const o = Wa(r), n = o.indexOf(t);
1807
+ if (!t.matches(X)) return;
1808
+ const o = pr(r), n = o.indexOf(t);
1751
1809
  if (i.key === "F2") {
1752
1810
  i.preventDefault();
1753
- const c = t.getAttribute("data-layer-row"), s = t.getAttribute("data-feat-row"), u = c ? T(t, "data-layer-name-trigger", c) : s ? T(t, "data-feat-name-trigger", s) : null;
1754
- u && u.dispatchEvent(new MouseEvent("dblclick", { bubbles: !0 }));
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;
1812
+ d && d.dispatchEvent(new MouseEvent("dblclick", { bubbles: !0 }));
1755
1813
  return;
1756
1814
  }
1757
1815
  if ((i.ctrlKey || i.metaKey) && (i.key === "a" || i.key === "A")) {
1758
1816
  i.preventDefault();
1759
- const c = Te(
1817
+ const c = _e(
1760
1818
  e.camadas,
1761
1819
  e.feicoes,
1762
1820
  e.expandedLayers,
@@ -1776,89 +1834,41 @@ function er(e, r, a, i) {
1776
1834
  }
1777
1835
  switch (i.key) {
1778
1836
  case "ArrowDown":
1779
- 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)]);
1780
1838
  break;
1781
1839
  case "ArrowUp":
1782
- i.preventDefault(), ee(r, o[Math.max(0, n - 1)]);
1840
+ i.preventDefault(), ie(r, o[Math.max(0, n - 1)]);
1783
1841
  break;
1784
1842
  case "Home":
1785
- i.preventDefault(), ee(r, o[0]);
1843
+ i.preventDefault(), ie(r, o[0]);
1786
1844
  break;
1787
1845
  case "End":
1788
- i.preventDefault(), ee(r, o[o.length - 1]);
1846
+ i.preventDefault(), ie(r, o[o.length - 1]);
1789
1847
  break;
1790
1848
  case "ArrowRight":
1791
1849
  case "ArrowLeft": {
1792
1850
  const c = t.getAttribute("data-layer-row");
1793
1851
  if (!c) return;
1794
- const s = t.closest(".ui-layer-group"), u = (s == null ? void 0 : s.getAttribute("aria-expanded")) === "true";
1795
- i.key === "ArrowRight" !== u && (i.preventDefault(), (l = T(a, "data-layer-expand", c)) == null || l.click());
1852
+ const s = t.closest(".ui-layer-group"), d = (s == null ? void 0 : s.getAttribute("aria-expanded")) === "true";
1853
+ i.key === "ArrowRight" !== d && (i.preventDefault(), (l = T(a, "data-layer-expand", c)) == null || l.click());
1796
1854
  break;
1797
1855
  }
1798
1856
  case "Enter":
1799
1857
  case " ":
1800
- i.preventDefault(), Ja(t, i);
1858
+ i.preventDefault(), fr(t, i);
1801
1859
  break;
1802
1860
  }
1803
1861
  }
1804
- function ar(e, r, a, i, t) {
1862
+ function vr(e, r, a, i, t) {
1805
1863
  t.add(r, "keydown", (o) => {
1806
- o.key === "Escape" && Za(e, a, o);
1807
- }), 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) => {
1808
1866
  const n = o.composedPath()[0];
1809
- n instanceof HTMLElement && n.matches(Y) && (i.querySelectorAll(Y).forEach((l) => l.setAttribute("tabindex", "-1")), n.setAttribute("tabindex", "0"));
1810
- });
1811
- }
1812
- function rr(e, r) {
1813
- r.querySelectorAll("[data-layer-row]").forEach((i) => {
1814
- const o = i.getAttribute("data-layer-row") === e.camadaAtivaId;
1815
- 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"));
1816
1868
  });
1817
1869
  }
1818
- function tr(e, r) {
1819
- var L, $;
1820
- r.querySelectorAll(".ui-feat-row").forEach((y) => {
1821
- const h = y.getAttribute("data-feat-row"), E = h ? e.selectedFeatureIds.has(h) : !1;
1822
- y.classList.toggle("selected-row", E), Le(y, "feicao-selecionada", E), y.setAttribute("aria-selected", String(E));
1823
- const k = y.querySelector(".ui-target-circle");
1824
- k && k.classList.toggle("selected", E);
1825
- }), r.querySelectorAll(".ui-layer-group").forEach((y) => {
1826
- const h = y.getAttribute("data-layer-id"), E = re(e.camadas, e.feicoes, h ?? ""), k = y.querySelector(".ui-layer-row .ui-target-circle");
1827
- if (k && E.length > 0) {
1828
- const z = E.every((w) => e.selectedFeatureIds.has(w.id)), S = !z && E.some((w) => e.selectedFeatureIds.has(w.id));
1829
- k.classList.toggle("selected", z), k.classList.toggle("partial", S);
1830
- } else k && k.classList.remove("selected", "partial");
1831
- });
1832
- const a = e.feicoes.filter((y) => e.selectedFeatureIds.has(y.id)), i = a.length > 0, t = r.getElementById("footer-count"), o = r.getElementById("footer-label");
1833
- t && (t.textContent = String(i ? a.length : e.camadas.length)), o && (o.textContent = i ? a.length > 1 ? "selecionados" : "selecionado" : e.camadas.length > 1 ? "camadas" : "camada");
1834
- const n = r.querySelector(".ui-footer-metric"), l = Se(a);
1835
- n && (l ? (n.innerHTML = `${b.reguaMetrica} ${l}`, n.style.display = "inline-flex") : n.style.display = "none");
1836
- const c = r.querySelector(".ui-tree-footer");
1837
- c && (c.classList.toggle("tem-selecao", i), c.classList.toggle("sem-selecao", !i));
1838
- const s = r.querySelector(".ui-footer-actions-gerais");
1839
- s && (s.style.display = i ? "none" : "flex");
1840
- const u = r.querySelector(".ui-footer-bulk-actions");
1841
- u && (u.style.display = i ? "flex" : "none"), ["btn-footer-vis", "btn-footer-lock", "btn-footer-del"].forEach((y) => {
1842
- const h = r.getElementById(y);
1843
- h && (h.disabled = !i, h.classList.toggle("disabled", !i));
1844
- });
1845
- const f = r.querySelector(".ui-footer-move-wrapper");
1846
- f && f.classList.toggle("disabled", !i);
1847
- const p = r.getElementById("select-footer-move");
1848
- p && (p.disabled = !i);
1849
- const m = r.querySelector(".ui-footer-color-wrapper");
1850
- m && m.classList.toggle("disabled", !i);
1851
- const d = r.getElementById("input-footer-color"), g = r.getElementById("preview-footer-color");
1852
- if (d && (d.disabled = !i, i)) {
1853
- const y = a[0], h = ((L = y == null ? void 0 : y.properties) == null ? void 0 : L.color) || (($ = y == null ? void 0 : y.properties) == null ? void 0 : $.cor) || "#3b82f6";
1854
- d.value = h.startsWith("#") && h.length === 7 ? h : "#3b82f6", g && (g.style.backgroundColor = d.value);
1855
- }
1856
- let v = r.getElementById("btn-footer-clear");
1857
- const x = r.querySelector(".ui-footer-right");
1858
- i && !v && x ? (v = document.createElement("button"), v.id = "btn-footer-clear", v.className = "ui-footer-btn btn-clear-footer", v.title = "Limpar seleção", v.innerHTML = b.fechar, v.addEventListener("click", () => e.limparSelecao(!0)), x.appendChild(v)) : !i && v && v.remove();
1859
- }
1860
- function ir(e, r, a, i, t) {
1861
- const o = Te(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(
1862
1872
  n ? [...o, r] : o,
1863
1873
  e.selectedFeatureIds,
1864
1874
  e.lastClickedFeatureId,
@@ -1868,33 +1878,33 @@ function ir(e, r, a, i, t) {
1868
1878
  );
1869
1879
  l && (e.selectedFeatureIds = l.selecionados, e.lastClickedFeatureId = l.ultimoClicadoId, e.sincronizarSelecaoDOM(), t && e.notificarMudancaSelecao());
1870
1880
  }
1871
- function or(e, r, a) {
1881
+ function hr(e, r, a) {
1872
1882
  const i = r || [];
1873
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());
1874
1884
  }
1875
- function nr(e, r) {
1885
+ function xr(e, r) {
1876
1886
  e.selectedFeatureIds.size !== 0 && (e.selectedFeatureIds.clear(), e.lastClickedFeatureId = null, e.sincronizarSelecaoDOM(), r && e.notificarMudancaSelecao());
1877
1887
  }
1878
- function sr(e) {
1888
+ function yr(e) {
1879
1889
  const r = e.feicoes.filter((a) => e.selectedFeatureIds.has(a.id));
1880
1890
  e.dispararEvento("ui-feicoes-selecionadas", {
1881
1891
  feicoesIds: Array.from(e.selectedFeatureIds),
1882
1892
  feicoes: r
1883
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 });
1884
1894
  }
1885
- class lr {
1895
+ class wr {
1886
1896
  constructor(r) {
1887
- A(this, "origens", /* @__PURE__ */ new Map());
1888
- A(this, "removidas", /* @__PURE__ */ new Set());
1889
- A(this, "salvarComDebounce", Fe(() => 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));
1890
1900
  this.instantaneo = r;
1891
1901
  }
1892
1902
  chaveAtual() {
1893
1903
  const r = this.instantaneo();
1894
- return La(r.storageKey, r.id);
1904
+ return Oa(r.storageKey, r.id);
1895
1905
  }
1896
1906
  carregar() {
1897
- return fe(this.chaveAtual());
1907
+ return be(this.chaveAtual());
1898
1908
  }
1899
1909
  /** Versão com debounce, para interações contínuas (seletor de cor, slider de opacidade). */
1900
1910
  agendar() {
@@ -1903,8 +1913,8 @@ class lr {
1903
1913
  salvar() {
1904
1914
  const r = this.instantaneo();
1905
1915
  if (!r.persistir || !r.conectado) return;
1906
- const a = this.chaveAtual(), i = Ma({
1907
- estadoAnterior: fe(a),
1916
+ const a = this.chaveAtual(), i = Ua({
1917
+ estadoAnterior: be(a),
1908
1918
  origensCamadas: this.origens,
1909
1919
  camadas: r.camadas,
1910
1920
  expandedLayers: r.expandedLayers,
@@ -1915,27 +1925,27 @@ class lr {
1915
1925
  altura: r.altura,
1916
1926
  camadasRemovidas: this.removidas
1917
1927
  });
1918
- this.removidas.clear(), Ca(a, i);
1928
+ this.removidas.clear(), Na(a, i);
1919
1929
  }
1920
1930
  limpar() {
1921
- $a(this.chaveAtual());
1931
+ Ha(this.chaveAtual());
1922
1932
  }
1923
1933
  // --- Origens (como a camada chegou do consumidor) e remoções ---
1924
1934
  limparOrigens() {
1925
1935
  this.origens.clear();
1926
1936
  }
1927
1937
  registrarOrigem(r) {
1928
- this.origens.set(r.id, Re(r));
1938
+ this.origens.set(r.id, Xe(r));
1929
1939
  }
1930
1940
  esquecerCamada(r) {
1931
1941
  this.origens.delete(r), this.removidas.add(r);
1932
1942
  }
1933
1943
  /** Aplica por cima de `camadas` o que foi lembrado (expansão, visibilidade, travas, opacidade, cor, ordem). */
1934
1944
  reidratar(r, a, i) {
1935
- Sa(r, a, i, this.origens);
1945
+ Ga(r, a, i, this.origens);
1936
1946
  }
1937
1947
  }
1938
- function je(e, r = null, a = /* @__PURE__ */ new Set()) {
1948
+ function ke(e, r = null, a = /* @__PURE__ */ new Set()) {
1939
1949
  const i = [];
1940
1950
  if (!Array.isArray(e)) return i;
1941
1951
  for (const t of e) {
@@ -1944,11 +1954,15 @@ function je(e, r = null, a = /* @__PURE__ */ new Set()) {
1944
1954
  if (a.has(o)) continue;
1945
1955
  a.add(o);
1946
1956
  const n = { ...t, id: o };
1947
- delete n.children, r && n.parentId === void 0 && (n.parentId = r), i.push(n), Array.isArray(t.children) && t.children.length > 0 && i.push(...je(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));
1948
1958
  }
1949
1959
  return i;
1950
1960
  }
1951
- function Ne(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) {
1952
1966
  if (!Array.isArray(e)) return [];
1953
1967
  const r = /* @__PURE__ */ new Set(), a = [];
1954
1968
  for (const i of e) {
@@ -1958,8 +1972,8 @@ function Ne(e) {
1958
1972
  }
1959
1973
  return a;
1960
1974
  }
1961
- function cr(e, r, a) {
1962
- if (e.camadas = Array.isArray(r) ? je(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) {
1963
1977
  const t = e.lembranca.carregar();
1964
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);
1965
1979
  } else
@@ -1967,35 +1981,42 @@ function cr(e, r, a) {
1967
1981
  e.lembranca.registrarOrigem(t), e.expandedLayers.has(t.id) || e.expandedLayers.add(t.id);
1968
1982
  });
1969
1983
  if (Array.isArray(a)) {
1970
- e.feicoes = Ne(a);
1984
+ e.feicoes = We(a);
1971
1985
  const t = new Set(e.camadas.map((n) => n.id)), o = e.feicoes.filter((n) => n.layerId && !t.has(n.layerId));
1972
1986
  o.length > 0 && console.warn(
1973
1987
  `[UI-Camadas] ${o.length} feição(ões) possuem 'layerId' não cadastrado nas camadas:`,
1974
1988
  o.map((n) => ({ id: n.id, nome: n.name, layerId: n.layerId }))
1975
- ), be(e.selectedFeatureIds, e.feicoes);
1989
+ ), Ee(e.selectedFeatureIds, e.feicoes), Je(e);
1976
1990
  }
1977
1991
  const i = e.getAttribute("camada-ativa");
1978
1992
  e.camadas.length > 0 && (!i || !e.camadas.some((t) => t.id === i)) && (e.camadaAtivaId = e.camadas[0].id), e.salvarLembrancaEstado(), e.solicitarRenderizacao();
1979
1993
  }
1980
- function dr(e, r) {
1981
- e.feicoes = Ne(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();
1982
1996
  }
1983
- function ur(e, r) {
1997
+ function kr(e, r) {
1984
1998
  if (!r || !r.id) return;
1985
1999
  if (e.camadas.some((i) => i.id === r.id)) {
1986
2000
  console.warn(`[UI-Camadas] adicionarCamada ignorado: já existe uma camada com id '${r.id}'.`);
1987
2001
  return;
1988
2002
  }
1989
- const a = { ...r };
1990
- 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();
1991
2012
  }
1992
- function pr(e, r) {
2013
+ function Ir(e, r) {
1993
2014
  var a;
1994
2015
  e.camadas.forEach((i) => {
1995
2016
  i.parentId === r && (i.parentId = null);
1996
- }), 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();
1997
2018
  }
1998
- function fr(e, r) {
2019
+ function Lr(e, r) {
1999
2020
  if (!(!r || !r.id)) {
2000
2021
  if (e.feicoes.some((a) => a.id === r.id)) {
2001
2022
  console.warn(`[UI-Camadas] adicionarFeicao ignorado: já existe uma feição com id '${r.id}'.`);
@@ -2004,24 +2025,24 @@ function fr(e, r) {
2004
2025
  e.feicoes.push({ ...r }), e.solicitarRenderizacao();
2005
2026
  }
2006
2027
  }
2007
- function mr(e, r) {
2028
+ function Cr(e, r) {
2008
2029
  if (!r || typeof r != "object" || !r.id) return;
2009
2030
  const a = e.feicoes.findIndex((i) => i.id === r.id);
2010
2031
  a !== -1 && (e.feicoes[a] = { ...e.feicoes[a], ...r }, e.solicitarRenderizacao());
2011
2032
  }
2012
- function gr(e, r) {
2013
- 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();
2014
2035
  }
2015
- function vr(e) {
2036
+ function Sr(e) {
2016
2037
  function i() {
2017
2038
  return e.getMinAltura ? e.getMinAltura() : 140;
2018
2039
  }
2019
2040
  function t() {
2020
2041
  return e.getMaxAltura ? e.getMaxAltura() : 1600;
2021
2042
  }
2022
- function o(s, u = !1) {
2043
+ function o(s, d = !1) {
2023
2044
  if (s == null || s === "") {
2024
- e.hostElement.style.removeProperty("height"), e.hostElement.style.removeProperty("--ui-camadas-altura"), u && e.hostElement.dispatchEvent(
2045
+ e.hostElement.style.removeProperty("height"), e.hostElement.style.removeProperty("--ui-camadas-altura"), d && e.hostElement.dispatchEvent(
2025
2046
  new CustomEvent("ui-redimensionar-altura", {
2026
2047
  bubbles: !0,
2027
2048
  composed: !0,
@@ -2030,10 +2051,10 @@ function vr(e) {
2030
2051
  );
2031
2052
  return;
2032
2053
  }
2033
- const f = typeof s == "number" ? s : parseFloat(String(s));
2034
- if (isNaN(f)) return;
2035
- const p = Math.max(i(), Math.min(t(), Math.round(f)));
2036
- e.hostElement.style.height = `${p}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${p}px`), u && e.hostElement.dispatchEvent(
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)));
2057
+ e.hostElement.style.height = `${p}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${p}px`), d && e.hostElement.dispatchEvent(
2037
2058
  new CustomEvent("ui-redimensionar-altura", {
2038
2059
  bubbles: !0,
2039
2060
  composed: !0,
@@ -2044,48 +2065,48 @@ function vr(e) {
2044
2065
  let n = null;
2045
2066
  function l() {
2046
2067
  if (!e.resizerElement) return;
2047
- let s = !1, u = 0, f = 0;
2048
- const p = (d) => {
2049
- if (d.button !== 0) return;
2050
- d.preventDefault(), d.stopPropagation(), s = !0, u = d.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");
2051
2072
  try {
2052
- e.resizerElement.setPointerCapture(d.pointerId);
2073
+ e.resizerElement.setPointerCapture(f.pointerId);
2053
2074
  } catch {
2054
2075
  }
2055
- const g = (L) => {
2076
+ const g = (k) => {
2056
2077
  if (!s) return;
2057
- L.preventDefault();
2058
- const $ = L.clientY - u, y = Math.max(i(), Math.min(t(), Math.round(f + $)));
2059
- e.hostElement.style.height = `${y}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${y}px`), e.onRedimensionando && e.onRedimensionando(y), e.hostElement.dispatchEvent(
2078
+ k.preventDefault();
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(
2060
2081
  new CustomEvent("ui-redimensionando-altura", {
2061
2082
  bubbles: !0,
2062
2083
  composed: !0,
2063
- detail: { altura: y }
2084
+ detail: { altura: $ }
2064
2085
  })
2065
2086
  );
2066
2087
  }, v = () => {
2067
- var L;
2068
- s = !1, n = null, window.removeEventListener("pointermove", g), window.removeEventListener("pointerup", x), window.removeEventListener("pointercancel", x), (L = e.resizerElement) == null || L.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
2069
- }, x = (L) => {
2088
+ var k;
2089
+ s = !1, n = null, window.removeEventListener("pointermove", g), window.removeEventListener("pointerup", h), window.removeEventListener("pointercancel", h), (k = e.resizerElement) == null || k.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
2090
+ }, h = (k) => {
2070
2091
  if (!s) return;
2071
2092
  s = !1, e.resizerElement.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
2072
2093
  try {
2073
- e.resizerElement.hasPointerCapture(L.pointerId) && e.resizerElement.releasePointerCapture(L.pointerId);
2094
+ e.resizerElement.hasPointerCapture(k.pointerId) && e.resizerElement.releasePointerCapture(k.pointerId);
2074
2095
  } catch {
2075
2096
  }
2076
- window.removeEventListener("pointermove", g), window.removeEventListener("pointerup", x), window.removeEventListener("pointercancel", x);
2077
- const $ = e.hostElement.getBoundingClientRect().height, y = Math.round($);
2078
- e.onAlturaAlterada && e.onAlturaAlterada(y), e.hostElement.dispatchEvent(
2097
+ window.removeEventListener("pointermove", g), window.removeEventListener("pointerup", h), window.removeEventListener("pointercancel", h);
2098
+ const C = e.hostElement.getBoundingClientRect().height, $ = Math.round(C);
2099
+ e.onAlturaAlterada && e.onAlturaAlterada($), e.hostElement.dispatchEvent(
2079
2100
  new CustomEvent("ui-redimensionar-altura", {
2080
2101
  bubbles: !0,
2081
2102
  composed: !0,
2082
- detail: { altura: y }
2103
+ detail: { altura: $ }
2083
2104
  })
2084
2105
  );
2085
2106
  };
2086
- n = v, window.addEventListener("pointermove", g), window.addEventListener("pointerup", x), window.addEventListener("pointercancel", x);
2087
- }, m = (d) => {
2088
- d.preventDefault(), d.stopPropagation(), o(null, !0), e.onAlturaAlterada && e.onAlturaAlterada(null);
2107
+ n = v, window.addEventListener("pointermove", g), window.addEventListener("pointerup", h), window.addEventListener("pointercancel", h);
2108
+ }, m = (f) => {
2109
+ f.preventDefault(), f.stopPropagation(), o(null, !0), e.onAlturaAlterada && e.onAlturaAlterada(null);
2089
2110
  };
2090
2111
  e.listeners.add(e.resizerElement, "pointerdown", p), e.listeners.add(e.resizerElement, "dblclick", m);
2091
2112
  }
@@ -2098,19 +2119,19 @@ function vr(e) {
2098
2119
  destruir: c
2099
2120
  };
2100
2121
  }
2101
- const j = class j extends aa {
2122
+ const H = class H extends pa {
2102
2123
  constructor() {
2103
2124
  super();
2104
- A(this, "shadow");
2105
- A(this, "listeners", new ra());
2106
- A(this, "dragDropManager");
2107
- A(this, "resizerController");
2108
- A(this, "alturaCustomizada", null);
2109
- A(this, "conectado", !1);
2110
- A(this, "profundidadeLote", 0);
2111
- A(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);
2112
2133
  /** @internal */
2113
- A(this, "lembranca", new lr(() => ({
2134
+ w(this, "lembranca", new wr(() => ({
2114
2135
  persistir: this.persistir,
2115
2136
  conectado: this.conectado,
2116
2137
  storageKey: this.storageKey,
@@ -2124,21 +2145,21 @@ const j = class j extends aa {
2124
2145
  altura: this.alturaCustomizada
2125
2146
  })));
2126
2147
  // Estado interno
2127
- A(this, "camadas", []);
2128
- A(this, "feicoes", []);
2129
- A(this, "mapasBase", [...ze]);
2130
- A(this, "expandedLayers", /* @__PURE__ */ new Set());
2131
- A(this, "expandedFeatureLimits", /* @__PURE__ */ new Map());
2132
- A(this, "selectedFeatureIds", /* @__PURE__ */ new Set());
2133
- A(this, "lastClickedFeatureId", null);
2134
- A(this, "activeSettingsLayerId", null);
2135
- A(this, "editingLayerId", null);
2136
- A(this, "editingFeatureId", null);
2137
- A(this, "searchQuery", "");
2138
- A(this, "corpoElement");
2139
- A(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");
2140
2161
  this.shadow = this.attachShadow({ mode: "open" }), this.shadow.innerHTML = `
2141
- <style>${Fa}</style>
2162
+ <style>${Va}</style>
2142
2163
  <div class="ui-camadas-container" id="panel-container" part="base" role="region" aria-label="Painel de Camadas">
2143
2164
  <div class="ui-camadas-corpo" id="painel-corpo" part="corpo"></div>
2144
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">
@@ -2148,9 +2169,9 @@ const j = class j extends aa {
2148
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">
2149
2170
  ${b.camadas}
2150
2171
  </button>
2151
- `, 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);
2152
2173
  const a = this.shadow.getElementById("resizer-altura");
2153
- this.resizerController = vr({
2174
+ this.resizerController = Sr({
2154
2175
  hostElement: this,
2155
2176
  resizerElement: a,
2156
2177
  listeners: this.listeners,
@@ -2192,16 +2213,16 @@ const j = class j extends aa {
2192
2213
  }
2193
2214
  connectedCallback() {
2194
2215
  if (this.persistir) {
2195
- const a = fe(this.obterChaveStorageAtual());
2216
+ const a = be(this.obterChaveStorageAtual());
2196
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));
2197
2218
  }
2198
- 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(
2199
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."
2200
- ), 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();
2201
2222
  }
2202
2223
  disconnectedCallback() {
2203
2224
  var a, i;
2204
- 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();
2205
2226
  }
2206
2227
  attributeChangedCallback(a, i, t) {
2207
2228
  var o, n;
@@ -2236,7 +2257,7 @@ const j = class j extends aa {
2236
2257
  t.classList.toggle("active", o), t.setAttribute("aria-pressed", String(o));
2237
2258
  });
2238
2259
  const i = this.shadow.querySelector("[data-basemap-atual]");
2239
- i && (i.textContent = Be(this.mapasBase, a));
2260
+ i && (i.textContent = Ge(this.mapasBase, a));
2240
2261
  }
2241
2262
  /** Seção "Mapa Base" recolhida (só o cabeçalho com o mapa ativo). Atributo `mapas-base-recolhido`. */
2242
2263
  get mapasBaseRecolhido() {
@@ -2370,10 +2391,10 @@ const j = class j extends aa {
2370
2391
  this.definirMapasBase(a);
2371
2392
  }
2372
2393
  definirCamadas(a, i) {
2373
- cr(this, a, i);
2394
+ Ar(this, a, i);
2374
2395
  }
2375
2396
  definirFeicoes(a) {
2376
- dr(this, a);
2397
+ Er(this, a);
2377
2398
  }
2378
2399
  definirMapasBase(a) {
2379
2400
  this.mapasBase = Array.isArray(a) ? [...a] : [], this.solicitarRenderizacao();
@@ -2397,28 +2418,28 @@ const j = class j extends aa {
2397
2418
  return this.feicoes.filter((a) => this.selectedFeatureIds.has(a.id));
2398
2419
  }
2399
2420
  adicionarCamada(a) {
2400
- ur(this, a);
2421
+ kr(this, a);
2401
2422
  }
2402
2423
  removerCamada(a) {
2403
- pr(this, a);
2424
+ Ir(this, a);
2404
2425
  }
2405
2426
  adicionarFeicao(a) {
2406
- fr(this, a);
2427
+ Lr(this, a);
2407
2428
  }
2408
2429
  atualizarFeicao(a) {
2409
- mr(this, a);
2430
+ Cr(this, a);
2410
2431
  }
2411
2432
  removerFeicao(a) {
2412
- gr(this, a);
2433
+ $r(this, a);
2413
2434
  }
2414
2435
  selecionarFeicao(a, i = !1, t = !1, o = !1) {
2415
- ir(this, a, i, t, o);
2436
+ br(this, a, i, t, o);
2416
2437
  }
2417
2438
  selecionarFeicoes(a, i = !1) {
2418
- or(this, a, i);
2439
+ hr(this, a, i);
2419
2440
  }
2420
2441
  limparSelecao(a = !1) {
2421
- nr(this, a);
2442
+ xr(this, a);
2422
2443
  }
2423
2444
  expandirTodas() {
2424
2445
  this.expandedLayers = new Set(this.camadas.map((a) => a.id)), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
@@ -2482,7 +2503,7 @@ const j = class j extends aa {
2482
2503
  );
2483
2504
  }
2484
2505
  render() {
2485
- this.corpoElement && _a(this, this.shadow, this.corpoElement, this.dragDropManager);
2506
+ this.corpoElement && cr(this, this.shadow, this.corpoElement, this.dragDropManager);
2486
2507
  }
2487
2508
  // --- Conexão de Eventos ---
2488
2509
  conectarEventosGerais() {
@@ -2490,27 +2511,27 @@ const j = class j extends aa {
2490
2511
  }
2491
2512
  // --- Sincronização de DOM (delegada) ---
2492
2513
  sincronizarCamadaAtivaDOM() {
2493
- rr(this, this.shadow);
2514
+ Ya(this, this.shadow);
2494
2515
  }
2495
2516
  sincronizarSelecaoDOM() {
2496
- tr(this, this.shadow);
2517
+ Ka(this, this.shadow);
2497
2518
  }
2498
2519
  // --- Auxiliares Internos ---
2499
2520
  notificarMudancaSelecao() {
2500
- sr(this);
2521
+ yr(this);
2501
2522
  }
2502
2523
  };
2503
2524
  /** Painéis conectados sem `id` nem `storage-key`: dividem a mesma chave de persistência. */
2504
- A(j, "instanciasChavePadrao", /* @__PURE__ */ new Set());
2505
- let K = j;
2506
- class br extends K {
2525
+ w(H, "instanciasChavePadrao", /* @__PURE__ */ new Set());
2526
+ let Q = H;
2527
+ class Mr extends Q {
2507
2528
  }
2508
- class hr extends K {
2529
+ class Fr extends Q {
2509
2530
  }
2510
- ge("ui-camadas", K);
2511
- ge("ui-painel-camadas", br);
2512
- ge("ui-layer-panel", hr);
2513
- function Lr(e) {
2531
+ xe("ui-camadas", Q);
2532
+ xe("ui-painel-camadas", Mr);
2533
+ xe("ui-layer-panel", Fr);
2534
+ function jr(e) {
2514
2535
  var r;
2515
2536
  return {
2516
2537
  id: e.id,
@@ -2527,7 +2548,7 @@ function Lr(e) {
2527
2548
  dados: e.dados
2528
2549
  };
2529
2550
  }
2530
- function Cr(e, r = "levantamento", a = "feicoes") {
2551
+ function Nr(e, r = "levantamento", a = "feicoes") {
2531
2552
  return {
2532
2553
  id: e.id,
2533
2554
  nome: e.name,
@@ -2546,7 +2567,7 @@ function Cr(e, r = "levantamento", a = "feicoes") {
2546
2567
  dados: typeof e.dados == "object" && e.dados !== null ? e.dados : void 0
2547
2568
  };
2548
2569
  }
2549
- function $r(e, r = "") {
2570
+ function Hr(e, r = "") {
2550
2571
  var o, n, l, c;
2551
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;
2552
2573
  return {
@@ -2565,41 +2586,43 @@ function $r(e, r = "") {
2565
2586
  };
2566
2587
  }
2567
2588
  export {
2568
- ka as CamadasDragDropManager,
2589
+ Ta as CamadasDragDropManager,
2569
2590
  b as ICONES,
2570
- De as LIMITE_FEICOES_POR_CAMADA,
2571
- ze as MAPAS_BASE_PADRAO,
2572
- K as UICamadas,
2573
- hr as UILayerPanel,
2574
- Fr as UIMapaBase,
2575
- br as UIPainelCamadas,
2576
- zr as UISeletorMapaBase,
2577
- ce as calcularAreaAnelSimples,
2578
- $e as calcularAreaPoligono,
2579
- Ce as calcularComprimentoLinha,
2580
- oa as calcularDistanciaPontos,
2581
- ma as calcularSelecaoFeicao,
2582
- fe as carregarEstadoPersistido,
2583
- ve as construirHierarquiaCamadas,
2584
- Cr as converterCamadaItemParaCanvasLayer,
2585
- Lr as converterCanvasLayerParaCamadaItem,
2586
- $r as converterFeicaoParaItem,
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,
2587
2608
  F as escapeHtml,
2588
- Pe as filtrarCamadasPorBusca,
2589
- ae as filtrarFeicoesPorBusca,
2590
- Se as formatarMetricaFeicoes,
2591
- da as formatarOpcoesCamadasHierarquicas,
2592
- La as gerarChaveStorage,
2593
- $a as limparEstadoPersistido,
2594
- Ma as montarEstadoPersistido,
2595
- Be as nomeDoMapaBase,
2596
- Te as obterIdsVisiveisFeicoes,
2597
- Sa as reidratarCamadasComOverrides,
2598
- be as removerSelecoesInvalidas,
2599
- ya as renderizarArvoreCamadas,
2600
- la as renderizarGridMapasBase,
2601
- ua as renderizarRodapeAcoes,
2602
- fa as renderizarThumbGeometria,
2603
- Ca as salvarEstadoPersistido,
2604
- Re as snapshotCamada
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
2605
2628
  };