@thibezer/ui-components-kit 2.11.1 → 2.12.0

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 (39) hide show
  1. package/CHANGELOG.md +62 -1
  2. package/dist/alvo-digitavel-CzCvNVQ3.js +23 -0
  3. package/dist/alvo-digitavel-DbH0hYFf.cjs +1 -0
  4. package/dist/camadas.cjs +111 -106
  5. package/dist/camadas.js +1061 -892
  6. package/dist/canvas.cjs +27 -27
  7. package/dist/canvas.js +801 -819
  8. package/dist/components/ui-camadas/camadas-arvore-renderer.d.ts +3 -0
  9. package/dist/components/ui-camadas/camadas-colecao.d.ts +1 -1
  10. package/dist/components/ui-camadas/camadas-drop-ops.d.ts +3 -0
  11. package/dist/components/ui-camadas/camadas-eventos-camadas.d.ts +2 -0
  12. package/dist/components/ui-camadas/camadas-hierarquia.d.ts +12 -2
  13. package/dist/components/ui-camadas/camadas-host.d.ts +6 -0
  14. package/dist/components/ui-camadas/camadas-metricas.d.ts +2 -1
  15. package/dist/components/ui-camadas/camadas-selecao.d.ts +2 -2
  16. package/dist/components/ui-camadas/tipos.d.ts +1 -0
  17. package/dist/components/ui-camadas/ui-camadas.d.ts +3 -0
  18. package/dist/components/ui-tabela-propriedades/editores-basicos.d.ts +4 -1
  19. package/dist/components/ui-tabela-propriedades/propriedades-dom-utils.d.ts +2 -0
  20. package/dist/components/ui-tabela-propriedades/propriedades-gerenciador-valores.d.ts +3 -0
  21. package/dist/components/ui-tabela-propriedades/propriedades-painel-controles.d.ts +1 -0
  22. package/dist/components/ui-tabela-propriedades/tipos.d.ts +14 -0
  23. package/dist/components/ui-tabela-propriedades/ui-tabela-propriedades.d.ts +20 -0
  24. package/dist/custom-elements.json +28508 -25795
  25. package/dist/data.cjs +1 -1
  26. package/dist/data.js +79 -72
  27. package/dist/index.cjs +1 -1
  28. package/dist/index.d.ts +3 -3
  29. package/dist/index.js +163 -156
  30. package/dist/register.cjs +1 -1
  31. package/dist/register.js +1 -1
  32. package/dist/tabela.cjs +1 -1
  33. package/dist/tabela.js +71 -64
  34. package/dist/tipos-elementos.d.ts +111 -6
  35. package/dist/tipos-react.d.ts +4 -0
  36. package/dist/tipos-vue.d.ts +100 -6
  37. package/dist/ui-tabela-propriedades-CyPyKXtB.js +3013 -0
  38. package/dist/ui-tabela-propriedades-DqvPilK_.cjs +142 -0
  39. package/package.json +1 -1
package/dist/camadas.js CHANGED
@@ -1,12 +1,14 @@
1
- var Oe = Object.defineProperty;
2
- var je = (e, r, a) => r in e ? Oe(e, r, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[r] = a;
3
- var A = (e, r, a) => je(e, typeof r != "symbol" ? r + "" : r, a);
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);
4
4
  /* empty css */
5
- import { d as ne, S as He } from "./ssr-safe-5cWfJP-s.js";
6
- import { L as Ne } from "./listener-bag-DQgv7OON.js";
7
- import { a as Ge } from "./ui-seletor-cor-D2_C6Aor.js";
8
- import { UIMapaBase as vr, UISeletorMapaBase as br } from "./seletor-mapa-base.js";
9
- const v = {
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";
11
+ const b = {
10
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">
11
13
  <polygon points="12 2 2 7 12 12 22 7 12 2"></polygon>
12
14
  <polyline points="2 17 12 22 22 17"></polyline>
@@ -104,60 +106,75 @@ const v = {
104
106
  <line x1="9" y1="3" x2="9" y2="21"></line>
105
107
  <line x1="15" y1="3" x2="15" y2="21"></line>
106
108
  </svg>`
107
- }, te = 6378137;
108
- function Ve(e, r) {
109
- if (!e || !r) return 0;
110
- 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, s = o - i, l = Math.sin(n / 2) * Math.sin(n / 2) + Math.cos(a) * Math.cos(t) * Math.sin(s / 2) * Math.sin(s / 2);
111
- return te * 2 * Math.atan2(Math.sqrt(l), Math.sqrt(1 - l));
109
+ }, U = 6378137;
110
+ function oa(e, r) {
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
+ return 0;
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(
114
+ 1,
115
+ Math.max(
116
+ 0,
117
+ Math.sin(n / 2) * Math.sin(n / 2) + Math.cos(a) * Math.cos(t) * Math.sin(l / 2) * Math.sin(l / 2)
118
+ )
119
+ ), s = U * 2 * Math.atan2(Math.sqrt(c), Math.sqrt(1 - c));
120
+ return Number.isFinite(s) ? s : 0;
112
121
  }
113
- function be(e) {
122
+ function Ce(e) {
114
123
  if (!Array.isArray(e) || e.length < 2) return 0;
115
124
  if (Array.isArray(e[0]) && Array.isArray(e[0][0]))
116
- return e.reduce((a, i) => a + be(i), 0);
125
+ return e.reduce((a, i) => a + Ce(i), 0);
117
126
  let r = 0;
118
127
  for (let a = 0; a < e.length - 1; a++) {
119
128
  const i = e[a], t = e[a + 1];
120
- Array.isArray(i) && Array.isArray(t) && i.length >= 2 && t.length >= 2 && (r += Ve([i[0], i[1]], [t[0], t[1]]));
129
+ Array.isArray(i) && Array.isArray(t) && i.length >= 2 && t.length >= 2 && (r += oa([i[0], i[1]], [t[0], t[1]]));
121
130
  }
122
131
  return r;
123
132
  }
124
- function Z(e) {
133
+ function ce(e) {
125
134
  if (!Array.isArray(e)) return 0;
126
- const r = e.length;
127
- if (r < 3) return 0;
128
- let a = 0;
129
- for (let t = 0; t < r; t++) {
130
- const o = e[t], n = e[(t + 1) % r], s = e[(t + 2) % r];
131
- if (!Array.isArray(o) || !Array.isArray(n) || !Array.isArray(s)) continue;
132
- const l = (n[1] - o[1]) * (Math.PI / 180), c = (n[0] - o[0]) * (Math.PI / 180), d = (s[1] - n[1]) * (Math.PI / 180), p = (s[0] - n[0]) * (Math.PI / 180);
133
- a += l * p - c * d;
134
- }
135
- const i = Math.abs(a * (te * te) / 2);
136
- return isNaN(i) ? 0 : i;
137
- }
138
- function he(e) {
135
+ const r = [];
136
+ for (let f = 0; f < e.length; f++) {
137
+ const p = e[f];
138
+ Array.isArray(p) && p.length >= 2 && Number.isFinite(p[0]) && Number.isFinite(p[1]) && r.push([p[0], p[1]]);
139
+ }
140
+ r.length > 3 && r[0][0] === r[r.length - 1][0] && r[0][1] === r[r.length - 1][1] && r.pop();
141
+ const a = r.length;
142
+ if (a < 3) return 0;
143
+ let i = 0;
144
+ for (let f = 0; f < a; f++)
145
+ i += r[f][0];
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
+ 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;
151
+ }
152
+ const u = Math.abs(s) / 2;
153
+ return Number.isFinite(u) ? u : 0;
154
+ }
155
+ function $e(e) {
139
156
  if (!Array.isArray(e) || e.length === 0) return 0;
140
157
  if (Array.isArray(e[0]) && typeof e[0][0] == "number")
141
- return Z(e);
158
+ return ce(e);
142
159
  if (Array.isArray(e[0]) && Array.isArray(e[0][0])) {
143
160
  if (Array.isArray(e[0][0][0]))
144
- return e.reduce((i, t) => i + he(t), 0);
145
- const r = Z(e[0]);
161
+ return e.reduce((i, t) => i + $e(t), 0);
162
+ const r = ce(e[0]);
146
163
  let a = 0;
147
164
  for (let i = 1; i < e.length; i++)
148
- a += Z(e[i]);
165
+ a += ce(e[i]);
149
166
  return Math.max(0, r - a);
150
167
  }
151
168
  return 0;
152
169
  }
153
- function xe(e) {
170
+ function Se(e) {
154
171
  if (!e || e.length === 0) return "";
155
172
  const r = e.filter(
156
173
  (i) => i.type === "Polygon" || i.type === "MultiPolygon" || i.geometryType === "Polygon"
157
174
  );
158
175
  if (r.length > 0) {
159
176
  const i = r.reduce(
160
- (t, o) => t + (he(o.coordinates) || 0),
177
+ (t, o) => t + ($e(o.coordinates) || 0),
161
178
  0
162
179
  );
163
180
  return i >= 1e4 ? `${(i / 1e4).toLocaleString("pt-BR", {
@@ -170,7 +187,7 @@ function xe(e) {
170
187
  );
171
188
  if (a.length > 0) {
172
189
  const i = a.reduce(
173
- (t, o) => t + (be(o.coordinates) || 0),
190
+ (t, o) => t + (Ce(o.coordinates) || 0),
174
191
  0
175
192
  );
176
193
  return i >= 1e3 ? `${(i / 1e3).toLocaleString("pt-BR", {
@@ -180,23 +197,23 @@ function xe(e) {
180
197
  }
181
198
  return "";
182
199
  }
183
- function S(e) {
200
+ function F(e) {
184
201
  return e == null ? "" : String(e).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
185
202
  }
186
- const Ue = /^(#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})|(?:rgb|hsl)a?\(\s*[\w.%\s,/+-]+\)|[a-z]{3,30})$/i;
187
- function H(e, r = "#00E08A") {
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") {
188
205
  if (!e || typeof e != "string") return r;
189
206
  const a = e.trim();
190
- return Ue.test(a) ? a : r;
207
+ return na.test(a) ? a : r;
191
208
  }
192
- function ee(e) {
209
+ function de(e) {
193
210
  return Math.max(0, Math.min(255, Math.round(e))).toString(16).padStart(2, "0");
194
211
  }
195
- function Ye(e, r, a) {
196
- const i = r / 100, t = a / 100, o = (l) => (l + e / 30) % 12, n = i * Math.min(t, 1 - t), s = (l) => t - n * Math.max(-1, Math.min(o(l) - 3, Math.min(9 - o(l), 1)));
197
- return [s(0) * 255, s(8) * 255, s(4) * 255];
212
+ function sa(e, r, a) {
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
+ return [l(0) * 255, l(8) * 255, l(4) * 255];
198
215
  }
199
- function _e(e, r = "#000000") {
216
+ function Me(e, r = "#000000") {
200
217
  if (!e || typeof e != "string") return r;
201
218
  const a = e.trim().toLowerCase(), i = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.exec(a);
202
219
  if (i) {
@@ -207,19 +224,19 @@ function _e(e, r = "#000000") {
207
224
  if (t) {
208
225
  const o = t[2].split(/[\s,/]+/).filter(Boolean).map((n) => parseFloat(n));
209
226
  if (o.length >= 3 && o.slice(0, 3).every((n) => !isNaN(n))) {
210
- const [n, s, l] = o, [c, d, p] = t[1] === "rgb" ? [n, s, l] : Ye(n, s, l);
211
- return `#${ee(c)}${ee(d)}${ee(p)}`;
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)}`;
212
229
  }
213
230
  }
214
231
  return r;
215
232
  }
216
- function P(e, r, a) {
233
+ function T(e, r, a) {
217
234
  const i = e.querySelectorAll(`[${r}]`);
218
235
  for (let t = 0; t < i.length; t++)
219
236
  if (i[t].getAttribute(r) === a) return i[t];
220
237
  return null;
221
238
  }
222
- function ye(e, r = 80) {
239
+ function Fe(e, r = 80) {
223
240
  let a = null;
224
241
  return (...i) => {
225
242
  a && clearTimeout(a), a = setTimeout(() => {
@@ -227,10 +244,10 @@ function ye(e, r = 80) {
227
244
  }, r);
228
245
  };
229
246
  }
230
- function D(e, r) {
247
+ function P(e, r) {
231
248
  e.setAttribute("title", r), e.setAttribute("aria-label", r);
232
249
  }
233
- const we = [
250
+ const ze = [
234
251
  {
235
252
  id: "none",
236
253
  nome: "Sem Mapa",
@@ -273,28 +290,28 @@ const we = [
273
290
  thumbnailUrl: "https://images.unsplash.com/photo-1518709268805-4e9042af9f23?w=160&auto=format&fit=crop&q=80"
274
291
  }
275
292
  ];
276
- function Ee(e, r) {
293
+ function Be(e, r) {
277
294
  const a = Array.isArray(e) ? e.find((i) => i.id === r) : void 0;
278
295
  return a && typeof a.nome == "string" ? a.nome : "";
279
296
  }
280
- function Ke(e = we, r = "satelite", a = !1) {
297
+ function la(e = ze, r = "satelite", a = !1) {
281
298
  if (!e || e.length === 0) return "";
282
299
  const i = e.map((t) => {
283
- const o = r === t.id, n = S(t.id), s = S(t.nome), l = S(t.descricao || t.nome);
284
- let c = "";
285
- return t.thumbnailUrl ? c = `<img class="ui-basemap-preview" src="${S(t.thumbnailUrl)}" alt="" loading="lazy" referrerpolicy="no-referrer" data-basemap-thumb />` : c = `<div class="ui-basemap-preview-none">${v.gradeCad}</div>`, `
286
- <div class="ui-basemap-card ${o ? "active" : ""}" data-basemap-id="${n}" role="button" tabindex="0" aria-pressed="${o}" title="${l}">
287
- ${c}
288
- <span>${s}</span>
300
+ const o = r === t.id, n = F(t.id), l = F(t.nome), c = F(t.descricao || t.nome);
301
+ let s = "";
302
+ return t.thumbnailUrl ? s = `<img class="ui-basemap-preview" src="${F(t.thumbnailUrl)}" alt="" loading="lazy" referrerpolicy="no-referrer" data-basemap-thumb />` : s = `<div class="ui-basemap-preview-none">${b.gradeCad}</div>`, `
303
+ <div class="ui-basemap-card ${o ? "active" : ""}" data-basemap-id="${n}" role="button" tabindex="0" aria-pressed="${o}" title="${c}">
304
+ ${s}
305
+ <span>${l}</span>
289
306
  </div>
290
307
  `;
291
308
  }).join("");
292
309
  return `
293
- <div class="ui-basemap-section ${a ? "recolhido" : ""}">
310
+ <div class="ui-basemap-section ${a ? "recolhido" : ""}" part="mapas-base">
294
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"}">
295
312
  <span class="ui-basemap-title">Mapa Base</span>
296
- <span class="ui-basemap-atual" data-basemap-atual>${S(Ee(e, r))}</span>
297
- <span class="ui-chevron-icon ${a ? "" : "open"}">${v.chevronDir}</span>
313
+ <span class="ui-basemap-atual" data-basemap-atual>${F(Be(e, r))}</span>
314
+ <span class="ui-chevron-icon ${a ? "" : "open"}">${b.chevronDir}</span>
298
315
  </button>
299
316
  ${a ? "" : `<div class="ui-basemap-grid" id="ui-basemap-grid">
300
317
  ${i}
@@ -302,37 +319,98 @@ function Ke(e = we, r = "satelite", a = !1) {
302
319
  </div>
303
320
  `;
304
321
  }
305
- function Xe(e) {
306
- const r = /* @__PURE__ */ new Map();
307
- e.forEach((o) => r.set(o.id, o));
308
- const a = /* @__PURE__ */ new Map(), i = [];
309
- e.forEach((o) => {
310
- o.parentId && r.has(o.parentId) ? (a.has(o.parentId) || a.set(o.parentId, []), a.get(o.parentId).push(o)) : i.push(o);
322
+ function ve(e) {
323
+ if (!Array.isArray(e) || e.length === 0) return [];
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);
327
+ });
328
+ const t = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Set();
329
+ for (const s of r) {
330
+ if (o.has(s.id)) continue;
331
+ const u = [], f = /* @__PURE__ */ new Map();
332
+ let p = s;
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)
338
+ (i.get(v) ?? 1 / 0) < (i.get(g) ?? 1 / 0) && (g = v);
339
+ t.add(g);
340
+ break;
341
+ }
342
+ if (o.has(p.id)) break;
343
+ f.set(p.id, u.length), u.push(p.id), p = a.get(p.parentId);
344
+ }
345
+ for (const m of u) o.add(m);
346
+ }
347
+ const n = /* @__PURE__ */ new Map(), l = [];
348
+ r.forEach((s) => {
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);
311
350
  });
312
- const t = (o, n) => {
313
- const s = a.get(o.id) || (Array.isArray(o.children) ? o.children : []), l = n > 0 ? "&nbsp;&nbsp;".repeat(n) + "↳ " : s.length > 0 || o.isGroup ? "📁 " : "", c = `<option value="${S(o.id)}">${l}${S(o.name)}</option>`, d = s.map((p) => t(p, n + 1)).join("");
314
- return c + d;
351
+ function c(s, u, f) {
352
+ const p = new Set(f);
353
+ p.add(s.id);
354
+ const d = (n.get(s.id) || (Array.isArray(s.children) ? s.children : [])).filter(
355
+ (g) => !!(g && typeof g == "object" && g.id && !p.has(g.id))
356
+ );
357
+ return {
358
+ camada: s,
359
+ depth: u,
360
+ subcamadas: d.map((g) => c(g, u + 1, p))
361
+ };
362
+ }
363
+ return l.map((s) => c(s, 0, /* @__PURE__ */ new Set()));
364
+ }
365
+ function ca(e, r) {
366
+ const a = /* @__PURE__ */ new Set();
367
+ if (!r || !Array.isArray(e)) return a;
368
+ const i = /* @__PURE__ */ new Map();
369
+ for (const o of e)
370
+ !o || typeof o != "object" || !o.id || o.parentId && o.parentId !== o.id && (i.has(o.parentId) || i.set(o.parentId, []), i.get(o.parentId).push(o.id));
371
+ const t = [r];
372
+ for (; t.length > 0; ) {
373
+ const o = t.pop();
374
+ if (a.has(o)) continue;
375
+ a.add(o);
376
+ const n = i.get(o);
377
+ if (n)
378
+ for (const l of n)
379
+ a.has(l) || t.push(l);
380
+ }
381
+ return a;
382
+ }
383
+ function re(e, r, a) {
384
+ if (!a || !Array.isArray(r) || r.length === 0) return [];
385
+ const i = ca(e, a);
386
+ return r.filter((t) => !!(t && t.layerId && i.has(t.layerId)));
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;
315
392
  };
316
- return i.map((o) => t(o, 0)).join("");
393
+ return r.map((i) => a(i)).join("");
317
394
  }
318
- function Qe(e, r, a) {
319
- const i = r.filter((c) => a.has(c.id)), t = i.length > 0, o = xe(i), n = t ? i.length : e.length, s = t ? i.length > 1 ? "selecionados" : "selecionado" : e.length > 1 ? "camadas" : "camada", l = Xe(e);
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);
320
398
  return `
321
- <div class="ui-tree-footer ${t ? "tem-selecao" : "sem-selecao"}">
399
+ <div class="ui-tree-footer ${t ? "tem-selecao" : "sem-selecao"}" part="rodape">
322
400
  <div class="ui-footer-left">
323
- <span class="ui-footer-count" id="footer-count">${n}</span>
401
+ <span class="ui-footer-count" id="footer-count">${c}</span>
324
402
  <span class="ui-footer-label" id="footer-label">${s}</span>
325
- <span class="ui-footer-metric" id="footer-metric" style="display: ${o ? "inline-flex" : "none"};">${o ? `${v.reguaMetrica} ${o}` : ""}</span>
403
+ <span class="ui-footer-metric" id="footer-metric" style="display: ${o ? "inline-flex" : "none"};">${o ? `${b.reguaMetrica} ${o}` : ""}</span>
326
404
  </div>
327
405
 
328
406
  <!-- Ações de topo/gerais quando não há nada selecionado -->
329
407
  <div class="ui-footer-actions-gerais" style="display: ${t ? "none" : "flex"};">
330
408
  <button class="ui-footer-chip-btn" id="btn-footer-new-group" title="Criar Nova Pasta/Grupo de Camadas" aria-label="Criar Grupo de Camadas">
331
- ${v.moverPasta}
409
+ ${b.moverPasta}
332
410
  <span>+ Grupo</span>
333
411
  </button>
334
412
  <button class="ui-footer-chip-btn primario" id="btn-footer-new-layer" title="Criar Nova Camada Vetorial" aria-label="Criar Nova Camada">
335
- ${v.mais}
413
+ ${b.mais}
336
414
  <span>+ Camada</span>
337
415
  </button>
338
416
  </div>
@@ -340,173 +418,204 @@ function Qe(e, r, a) {
340
418
  <!-- Ações em massa ativadas quando há seleção -->
341
419
  <div class="ui-footer-right ui-footer-bulk-actions" style="display: ${t ? "flex" : "none"};">
342
420
  <button class="ui-footer-btn ${t ? "" : "disabled"}" id="btn-footer-vis" title="Alternar visibilidade coletiva" aria-label="Alternar visibilidade coletiva" ${t ? "" : "disabled"}>
343
- ${v.olhoAberto}
421
+ ${b.olhoAberto}
344
422
  </button>
345
423
 
346
424
  <button class="ui-footer-btn ${t ? "" : "disabled"}" id="btn-footer-lock" title="Alternar bloqueio coletivo" aria-label="Alternar bloqueio coletivo" ${t ? "" : "disabled"}>
347
- ${v.cadeadoTrancado}
425
+ ${b.cadeadoTrancado}
348
426
  </button>
349
427
 
350
428
  <div class="ui-footer-color-wrapper ${t ? "" : "disabled"}" title="Alterar cor dos selecionados">
351
- <span class="ui-footer-color-preview" id="preview-footer-color" style="background-color: #00E08A;"></span>
352
- <input type="color" id="input-footer-color" aria-label="Cor dos selecionados" value="#00E08A" class="ui-footer-color" ${t ? "" : "disabled"} />
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"} />
353
431
  </div>
354
432
 
355
433
  <div class="ui-footer-move-wrapper ${t ? "" : "disabled"}" title="Mover selecionados para outra camada">
356
434
  <select id="select-footer-move" aria-label="Mover selecionados para outra camada" class="ui-footer-select" ${t ? "" : "disabled"}>
357
435
  <option value="" disabled selected>📂 Mover para...</option>
358
- ${l}
436
+ ${u}
359
437
  </select>
360
438
  </div>
361
439
 
362
440
  <button class="ui-footer-btn btn-danger-footer ${t ? "" : "disabled"}" id="btn-footer-del" title="Excluir selecionados" aria-label="Excluir selecionados" ${t ? "" : "disabled"}>
363
- ${v.lixeira}
441
+ ${b.lixeira}
364
442
  </button>
365
443
 
366
- ${t ? `<button class="ui-footer-btn btn-clear-footer" id="btn-footer-clear" title="Limpar seleção" aria-label="Limpar seleção">${v.fechar}</button>` : ""}
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>` : ""}
367
445
  </div>
368
446
  </div>
369
447
  `;
370
448
  }
371
- const ae = 64;
372
- function me(e) {
449
+ const ue = 64;
450
+ function Ee(e) {
373
451
  return Array.isArray(e) && e.length >= 2 && Number.isFinite(e[0]) && Number.isFinite(e[1]);
374
452
  }
375
- function Ae(e) {
376
- return !Array.isArray(e) || e.length === 0 ? [] : me(e[0]) ? [e.filter(me)] : e.flatMap(Ae);
453
+ function qe(e) {
454
+ return !Array.isArray(e) || e.length === 0 ? [] : Ee(e[0]) ? [e.filter(Ee)] : e.flatMap(qe);
377
455
  }
378
- function ge(e) {
379
- if (e.length <= ae) return e;
380
- const r = e.length / ae, a = [];
381
- for (let i = 0; i < ae; i++) a.push(e[Math.floor(i * r)]);
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)]);
382
460
  return a.push(e[e.length - 1]), a;
383
461
  }
384
- function Je(e, r, a) {
385
- const i = Ae(r).filter((h) => h.length > 0);
462
+ function pa(e, r, a) {
463
+ const i = qe(r).filter((E) => E.length > 0);
386
464
  if (i.length === 0) return "";
387
- let t = 1 / 0, o = -1 / 0, n = 1 / 0, s = -1 / 0;
388
- for (const h of i)
389
- for (const [y, $] of h)
390
- $ < t && (t = $), $ > o && (o = $), -y < n && (n = -y), -y > s && (s = -y);
391
- const l = 16, c = 2, d = l - c * 2, p = o - t, f = s - n, m = Math.max(p, f), u = m > 0 ? d / m : 0, g = c + (d - p * u) / 2, k = c + (d - f * u) / 2, x = (h) => Math.round(h * 100) / 100, w = ([h, y]) => `${x(g + (y - t) * u)},${x(k + (-h - n) * u)}`, C = e === "polygon" || e === "multipolygon", L = e === "linestring" || e === "multilinestring", b = (h) => `<svg viewBox="0 0 ${l} ${l}" width="100%" height="100%" aria-hidden="true">${h}</svg>`;
392
- if (C) {
393
- const h = i.filter((y) => y.length >= 3).map((y) => `M${ge(y).map(w).join("L")}Z`).join("");
394
- return h ? b(
395
- `<path d="${h}" fill="${a}" fill-opacity="0.45" fill-rule="evenodd" stroke="${a}" stroke-width="1.2" stroke-linejoin="round"/>`
465
+ 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"/>`
396
474
  ) : "";
397
475
  }
398
- if (L) {
399
- const h = i.filter((y) => y.length >= 2).map((y) => `M${ge(y).map(w).join("L")}`).join("");
400
- return h ? b(
401
- `<path d="${h}" fill="none" stroke="${a}" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>`
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"/>`
402
480
  ) : "";
403
481
  }
404
482
  return "";
405
483
  }
406
- function We(e, r, a) {
407
- const i = H(r, "#00E08A"), t = (e || "").toLowerCase(), o = a !== void 0 ? Je(t, a, i) : "";
484
+ function fa(e, r, a) {
485
+ const i = N(r, "#00E08A"), t = (e || "").toLowerCase(), o = a !== void 0 ? pa(t, a, i) : "";
408
486
  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>`);
409
487
  }
410
- function Ze(e) {
411
- const r = /* @__PURE__ */ new Map();
412
- e.forEach((o) => r.set(o.id, o));
413
- const a = /* @__PURE__ */ new Map(), i = [];
414
- e.forEach((o) => {
415
- o.parentId && r.has(o.parentId) && o.parentId !== o.id ? (a.has(o.parentId) || a.set(o.parentId, []), a.get(o.parentId).push(o)) : i.push(o);
416
- });
417
- function t(o, n) {
418
- const s = a.get(o.id) || (Array.isArray(o.children) ? o.children : []);
419
- return {
420
- camada: o,
421
- depth: n,
422
- subcamadas: s.map((l) => t(l, n + 1))
423
- };
424
- }
425
- return i.map((o) => t(o, 0));
426
- }
427
- const ke = 80;
428
- function K(e, r) {
488
+ const De = 80;
489
+ function ae(e, r) {
429
490
  const a = (r || "").trim().toLowerCase();
430
491
  return a ? e.filter(
431
492
  (i) => (i.name || "").toLowerCase().includes(a) || (i.category || "").toLowerCase().includes(a) || (i.type || "").toLowerCase().includes(a)
432
493
  ) : e;
433
494
  }
434
- function Ie(e, r, a) {
435
- var f, m;
495
+ function Pe(e, r, a) {
496
+ var p, m;
436
497
  const i = (a || "").trim().toLowerCase();
437
498
  if (!i) return null;
438
499
  const t = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map();
439
- for (const u of e)
440
- t.set(u.id, u), u.parentId && u.parentId !== u.id && (o.has(u.parentId) || o.set(u.parentId, []), o.get(u.parentId).push(u.id));
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));
441
502
  const n = /* @__PURE__ */ new Map();
442
- for (const u of r) {
443
- const g = u.layerId || "";
444
- n.has(g) || n.set(g, []), n.get(g).push(u);
445
- }
446
- const s = /* @__PURE__ */ new Set(), l = /* @__PURE__ */ new Set();
447
- for (const u of e)
448
- (typeof u.name == "string" ? u.name.toLowerCase() : "").includes(i) ? (s.add(u.id), l.add(u.id)) : K(n.get(u.id) || [], i).length > 0 && l.add(u.id);
449
- const c = new Set(l);
450
- for (const u of l) {
451
- const g = /* @__PURE__ */ new Set([u]);
452
- let k = (f = t.get(u)) == null ? void 0 : f.parentId;
453
- for (; k && t.has(k) && !g.has(k); )
454
- g.add(k), c.add(k), k = (m = t.get(k)) == null ? void 0 : m.parentId;
455
- }
456
- const d = [...s];
457
- for (; d.length > 0; ) {
458
- const u = d.pop();
459
- for (const g of o.get(u) || [])
460
- c.has(g) || (c.add(g), d.push(g));
461
- }
462
- const p = /* @__PURE__ */ new Map();
463
- for (const u of c) {
464
- const g = n.get(u) || [];
465
- p.set(u, s.has(u) ? g : K(g, i));
466
- }
467
- return { camadasVisiveis: c, feicoesPorCamada: p };
468
- }
469
- function ea(e, r, a, i = "", t = ke) {
470
- const o = Ie(e, r, i), n = [], s = /* @__PURE__ */ new Map();
471
- for (let l = 0; l < r.length; l++) {
472
- const c = r[l], d = c.layerId || "";
473
- s.has(d) || s.set(d, []), s.get(d).push(c);
474
- }
475
- for (let l = 0; l < e.length; l++) {
476
- const c = e[l];
477
- let d;
478
- if (o) {
479
- if (!o.camadasVisiveis.has(c.id)) continue;
480
- d = o.feicoesPorCamada.get(c.id) || [];
481
- } else if (a.has(c.id))
482
- d = s.get(c.id) || [];
483
- else
484
- continue;
485
- const p = d.slice(0, t);
486
- for (let f = 0; f < p.length; f++)
487
- n.push(p[f].id);
488
- }
489
- return n;
490
- }
491
- function aa(e, r, a, i, t, o) {
503
+ for (const d of r) {
504
+ const g = d.layerId || "";
505
+ n.has(g) || n.set(g, []), n.get(g).push(d);
506
+ }
507
+ 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);
510
+ 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;
514
+ for (; v && t.has(v) && !g.has(v); )
515
+ g.add(v), s.add(v), v = (m = t.get(v)) == null ? void 0 : m.parentId;
516
+ }
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));
522
+ }
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));
527
+ }
528
+ return { camadasVisiveis: s, feicoesPorCamada: f };
529
+ }
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];
534
+ if (!p || !p.id) continue;
535
+ const m = p.layerId || "";
536
+ c.has(m) || c.set(m, []), c.get(m).push(p);
537
+ }
538
+ const s = ve(e);
539
+ function u(f) {
540
+ const p = f.camada;
541
+ 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);
550
+ return l;
551
+ }
552
+ function ma(e, r, a, i, t, o) {
492
553
  if (!e.includes(i)) return null;
493
554
  const n = new Set(r);
494
- let s = a;
555
+ let l = a;
495
556
  if (o && a && e.includes(a)) {
496
- const l = e.indexOf(a), c = e.indexOf(i), d = Math.min(l, c), p = Math.max(l, c);
557
+ const c = e.indexOf(a), s = e.indexOf(i), u = Math.min(c, s), f = Math.max(c, s);
497
558
  t || n.clear();
498
- for (let f = d; f <= p; f++)
499
- n.add(e[f]);
500
- } else t ? (n.has(i) ? n.delete(i) : n.add(i), s = i) : (n.clear(), n.add(i), s = i);
501
- return { selecionados: n, ultimoClicadoId: s };
559
+ for (let p = u; p <= f; p++)
560
+ n.add(e[p]);
561
+ } else t ? (n.has(i) ? n.delete(i) : n.add(i), l = i) : (n.clear(), n.add(i), l = i);
562
+ return { selecionados: n, ultimoClicadoId: l };
502
563
  }
503
- function se(e, r) {
564
+ function be(e, r) {
504
565
  if (e.size === 0) return;
505
566
  const a = new Set(r.map((i) => i.id));
506
567
  for (const i of e)
507
568
  a.has(i) || e.delete(i);
508
569
  }
509
- function ra(e) {
570
+ function te(e, r, a) {
571
+ const i = /* @__PURE__ */ new Set();
572
+ let t = e.find((o) => o.id === r);
573
+ for (; t && t.parentId; ) {
574
+ if (i.has(t.id) || (i.add(t.id), t.parentId === a)) return !0;
575
+ t = e.find((o) => o.id === (t == null ? void 0 : t.parentId));
576
+ }
577
+ return !1;
578
+ }
579
+ function ga(e) {
580
+ return Number.isFinite(e) ? e < 0.25 ? "acima" : e > 0.75 ? "abaixo" : "dentro" : "dentro";
581
+ }
582
+ function va(e, r, a, i) {
583
+ if (!r || !a || r === a) return null;
584
+ const t = e.find((s) => s.id === r), o = e.find((s) => s.id === a);
585
+ if (!t || !o) return null;
586
+ const n = t.parentId !== void 0 ? t.parentId : null;
587
+ 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 });
589
+ const l = e.findIndex((s) => s.id === r);
590
+ e.splice(l, 1);
591
+ const c = e.findIndex((s) => s.id === a);
592
+ 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
+ }
594
+ function ba(e, r, a, i) {
595
+ if (!r || !a || r === a) return !1;
596
+ const t = e.findIndex((l) => l.id === r);
597
+ if (t === -1) return !1;
598
+ const [o] = e.splice(t, 1), n = e.findIndex((l) => l.id === a);
599
+ return n === -1 ? e.push(o) : e.splice(i ? n : n + 1, 0, o), !0;
600
+ }
601
+ function ha(e, r, a, i) {
602
+ const t = e.find((l) => l.id === a), o = r.find((l) => l.id === i);
603
+ if (!t || !o || t.layerId === i) return null;
604
+ const n = t.layerId;
605
+ return t.layerId = i, { feicao: t, camadaOrigemId: n, camadaDestinoId: i, mudouDeCamada: !0 };
606
+ }
607
+ function xa(e, r, a, i) {
608
+ if (!r || !a || r === a) return null;
609
+ const t = e.findIndex((f) => f.id === r);
610
+ if (t === -1) return null;
611
+ const o = e.find((f) => f.id === a);
612
+ if (!o) return null;
613
+ const [n] = e.splice(t, 1), l = n.layerId, c = o.layerId, s = l !== c;
614
+ 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 };
617
+ }
618
+ function ya(e) {
510
619
  const {
511
620
  camadas: r,
512
621
  feicoes: a,
@@ -514,91 +623,101 @@ function ra(e) {
514
623
  expandedLayers: t,
515
624
  selectedFeatureIds: o,
516
625
  activeSettingsLayerId: n,
517
- editingLayerId: s,
518
- editingFeatureId: l,
519
- searchQuery: c,
520
- limiteFeicoesPorCamada: d = ke,
521
- mostrarBotaoColapsar: p = !1
522
- } = e, f = (c || "").trim().toLowerCase(), m = Ie(r, a, f), u = /* @__PURE__ */ new Map();
523
- for (let b = 0; b < a.length; b++) {
524
- const h = a[b], y = h.layerId || "";
525
- u.has(y) || u.set(y, []), u.get(y).push(h);
526
- }
527
- const g = r.every((b) => b.visible !== !1), k = r.length > 0 && r.every((b) => t.has(b.id)), x = `
528
- <div class="ui-tree-toolbar">
626
+ editingLayerId: l,
627
+ editingFeatureId: c,
628
+ searchQuery: s,
629
+ titulo: u = "CAMADAS",
630
+ mostrarBusca: f = !0,
631
+ 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();
635
+ 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);
640
+ }
641
+ const L = r.every((S) => S.visible !== !1), $ = r.length > 0 && r.every((S) => t.has(S.id)), y = f ? `
642
+ <div class="ui-tree-search-wrapper" part="busca">
643
+ <span class="ui-tree-search-icon">${b.busca}</span>
644
+ <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(
645
+ s
646
+ )}" />
647
+ ${s ? `<button class="ui-tree-search-clear" id="btn-clear-layer-search" title="Limpar busca" aria-label="Limpar busca">${b.fechar}</button>` : ""}
648
+ </div>
649
+ ` : "", h = `
650
+ <div class="ui-tree-toolbar" part="toolbar">
529
651
  <div class="ui-tree-title-group">
530
- <span class="ui-tree-section-title">CAMADAS</span>
652
+ <span class="ui-tree-section-title">${F(u || "CAMADAS")}</span>
531
653
  <span class="ui-tree-count-badge">${r.length}</span>
532
654
  </div>
533
655
  <div class="ui-tree-actions">
534
- <button id="btn-toggle-all-vis" class="ui-tree-action-btn" title="${g ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas"}" aria-label="${g ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas"}">
535
- ${g ? v.olhoAberto : v.olhoFechado}
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}
536
658
  </button>
537
- <button id="btn-toggle-all-expand" class="ui-tree-action-btn" aria-label="${k ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}" title="${k ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}">
538
- <span class="ui-chevron-icon ${k ? "open" : ""}">${v.chevronDir}</span>
659
+ <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
+ <span class="ui-chevron-icon ${$ ? "open" : ""}">${b.chevronDir}</span>
539
661
  </button>
540
662
  <button id="btn-add-group" class="ui-tree-btn-group" title="Criar grupo / pasta de camadas" aria-label="Criar grupo de camadas">
541
- ${v.moverPasta} Grupo
663
+ ${b.moverPasta} Grupo
542
664
  </button>
543
665
  <button id="btn-add-layer" class="ui-tree-btn-new" title="Adicionar nova camada vetorial">
544
- ${v.mais} Camada
666
+ ${b.mais} Camada
545
667
  </button>
546
- ${p ? `<button id="btn-colapsar" class="ui-camadas-btn-colapsar" title="Recolher painel" aria-label="Recolher painel">${v.recolherPainel}</button>` : ""}
668
+ ${d ? `<button id="btn-colapsar" class="ui-camadas-btn-colapsar" title="Recolher painel" aria-label="Recolher painel">${b.recolherPainel}</button>` : ""}
547
669
  </div>
548
670
  </div>
549
-
550
- <div class="ui-tree-search-wrapper">
551
- <span class="ui-tree-search-icon">${v.busca}</span>
552
- <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="${S(
553
- c
554
- )}" />
555
- ${c ? `<button class="ui-tree-search-clear" id="btn-clear-layer-search" title="Limpar busca" aria-label="Limpar busca">${v.fechar}</button>` : ""}
556
- </div>
557
- `, w = (b) => {
558
- const h = b.camada;
559
- if (m && !m.camadasVisiveis.has(h.id)) return "";
560
- const y = b.depth, $ = b.subcamadas, O = m ? $.filter((I) => m.camadasVisiveis.has(I.camada.id)) : $, B = !!(h.isGroup || $.length > 0), E = S(h.id), T = S(h.name || (B ? "Novo Grupo" : "Camada")), F = H(h.color, "#00E08A"), V = h.visible !== !1, j = h.locked === !0, U = f ? !0 : t.has(h.id), X = n === h.id, le = i === h.id, M = m ? m.feicoesPorCamada.get(h.id) || [] : u.get(h.id) || [], ce = M.length > 0 && M.every((I) => o.has(I.id)), Se = !ce && M.some((I) => o.has(I.id)), Me = M.slice(0, d), ze = M.length > d, Fe = Me.map((I) => {
561
- const q = S(I.id), ue = S(I.name || "Feição"), pe = H(I.color, F), Y = I.visible !== !1, Q = j, J = I.locked === !0 || Q, fe = Q ? "Bloqueada pela camada" : J ? "Desbloquear Feição" : "Bloquear Feição", W = o.has(I.id), Re = I.status === "previa" ? '<span class="ui-previa-dot" title="Geometria prévia" aria-label="Geometria prévia"></span>' : "";
671
+ ${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>' : "";
562
677
  return `
563
- <div class="ui-feat-row ${W ? "selected-row" : ""} ${Y ? "" : "hidden-row"}" data-feat-row="${q}" data-feat-select="${q}" data-feat-layer="${E}" role="treeitem" aria-selected="${W}" tabindex="-1" draggable="true" style="--layer-depth: ${y + 1};" title="Clique para selecionar | Arraste para reordenar">
564
- <div class="ui-col ui-col-eye" data-feat-eye="${q}" role="button" tabindex="0" aria-label="${Y ? "Ocultar Feição" : "Exibir Feição"}" title="${Y ? "Ocultar Feição" : "Exibir Feição"}">
565
- ${Y ? v.olhoAberto : v.olhoFechado}
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}
566
681
  </div>
567
682
 
568
- <div class="ui-col ui-col-lock ${J ? "" : "ui-lock-open"}" data-feat-lock="${q}" ${Q ? 'data-locked-by-layer="true"' : ""} role="button" tabindex="0" aria-label="${fe}" title="${fe}">
569
- ${J ? v.cadeadoTrancado : v.cadeadoAberto}
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}
570
685
  </div>
571
686
 
572
- <div class="ui-col ui-col-colorbar" style="background: ${pe};"></div>
687
+ <div class="ui-col ui-col-colorbar" style="background: ${we};"></div>
573
688
  <div class="ui-col ui-col-branch"><span style="opacity: 0.35;">└─</span></div>
574
689
  <div class="ui-col ui-col-thumb">
575
- <div class="ui-thumb-box">${We(I.type || I.geometryType, pe, I.coordinates)}</div>
690
+ <div class="ui-thumb-box">${fa(I.type || I.geometryType, we, I.coordinates)}</div>
576
691
  </div>
577
692
 
578
- <div class="ui-col ui-col-name" data-feat-name-trigger="${q}" title="Duplo clique para renomear">
579
- ${l === I.id ? `<input type="text" class="ui-inline-rename-input" data-inline-feat-input="${q}" value="${ue}" />` : `<span class="ui-name-text">${ue}</span>${Re}`}
693
+ <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}`}
580
695
  </div>
581
696
 
582
697
  <div class="ui-col ui-col-actions">
583
- <button class="ui-micro-btn" data-feat-fit="${q}" title="Enquadrar no mapa" aria-label="Enquadrar feição no mapa">${v.alvoEnquadrar}</button>
698
+ <button class="ui-micro-btn" data-feat-fit="${R}" title="Enquadrar no mapa" aria-label="Enquadrar feição no mapa">${b.alvoEnquadrar}</button>
584
699
  </div>
585
700
 
586
- <div class="ui-col ui-col-target" data-feat-target="${q}" role="button" tabindex="0" aria-label="Selecionar feição" title="Selecionar feição">
587
- <div class="ui-target-circle ${W ? "selected" : ""}"></div>
701
+ <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>
588
703
  </div>
589
704
  </div>
590
705
  `;
591
- }).join(""), Be = ze ? `<div style="padding: 4px 10px; font-size: 10px; color: var(--ui-cor-texto-secundario, #888899); font-style: italic; background: rgba(0,0,0,0.2);">Exibindo ${d} de ${M.length} feições. Use a busca acima para filtrar.</div>` : "", de = h.opacity !== void 0 ? h.opacity : 1, qe = Math.round(de * 100), De = r.filter((I) => I.id !== h.id).map(
592
- (I) => `<option value="${S(I.id)}" ${h.parentId === I.id ? "selected" : ""}>${I.isGroup ? "📁 " : ""}${S(I.name)}</option>`
593
- ).join(""), Pe = X ? `
594
- <div class="ui-layer-settings-drawer" id="settings-drawer-${E}" style="--drawer-cor-camada: ${F};">
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};">
595
713
  <div class="ui-drawer-header">
596
714
  <div class="ui-drawer-header-left">
597
- <span class="ui-drawer-icon">${v.engrenagem}</span>
715
+ <span class="ui-drawer-icon">${b.engrenagem}</span>
598
716
  <span class="ui-drawer-title">Configurações da Camada</span>
717
+ <span class="ui-drawer-layer-chip" title="${_}">${_}</span>
599
718
  </div>
600
- <button type="button" class="ui-drawer-btn-fechar" data-layer-settings-close="${E}" title="Fechar configurações (Esc)" aria-label="Fechar configurações">
601
- ${v.fechar}
719
+ <button type="button" class="ui-drawer-btn-fechar" data-layer-settings-close="${C}" title="Fechar configurações (Esc)" aria-label="Fechar configurações">
720
+ ${b.fechar}
602
721
  </button>
603
722
  </div>
604
723
 
@@ -610,9 +729,9 @@ function ra(e) {
610
729
  </div>
611
730
  <div class="ui-drawer-color-group">
612
731
  <label class="ui-drawer-color-pill" title="Clique para alterar a cor da camada">
613
- <span class="ui-drawer-color-sample" id="sample-color-${E}" style="background-color: ${F};"></span>
614
- <span class="ui-drawer-color-hex" id="hex-color-${E}">${F.toUpperCase()}</span>
615
- <input type="color" aria-label="Cor da camada" data-layer-color-picker="${E}" value="${_e(F, "#00e08a")}" class="ui-drawer-color-native" />
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" />
616
735
  </label>
617
736
  </div>
618
737
  </div>
@@ -621,10 +740,10 @@ function ra(e) {
621
740
  <div class="ui-drawer-row">
622
741
  <div class="ui-drawer-row-label">
623
742
  <span>Opacidade</span>
624
- <span class="ui-drawer-badge" id="badge-op-${E}">${qe}%</span>
743
+ <span class="ui-drawer-badge" id="badge-op-${C}">${_e}%</span>
625
744
  </div>
626
745
  <div class="ui-drawer-slider-container">
627
- <input type="range" aria-label="Opacidade da camada" min="0.05" max="1" step="0.05" value="${Number(de) || 0}" data-layer-opacity-slider="${E}" class="ui-drawer-slider" />
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" />
628
747
  </div>
629
748
  </div>
630
749
 
@@ -634,9 +753,9 @@ function ra(e) {
634
753
  <span>Pertence ao Grupo</span>
635
754
  </div>
636
755
  <div class="ui-drawer-select-wrapper">
637
- <select class="ui-drawer-select" data-layer-parent-select="${E}" aria-label="Grupo pai da camada">
638
- <option value="" ${h.parentId ? "" : "selected"}>(Nenhum - Nível Principal)</option>
639
- ${De}
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}
640
759
  </select>
641
760
  </div>
642
761
  </div>
@@ -644,76 +763,76 @@ function ra(e) {
644
763
 
645
764
  <div class="ui-drawer-footer">
646
765
  <div class="ui-drawer-meta-info">
647
- <span>${$.length > 0 ? `${$.length} subcamadas · ` : ""}${M.length} ${M.length === 1 ? "feição" : "feições"}</span>
766
+ <span>${D.length > 0 ? `${D.length} subcamadas · ` : ""}${B.length} ${B.length === 1 ? "feição" : "feições"}</span>
648
767
  </div>
649
768
  <div class="ui-drawer-actions">
650
- <button type="button" class="ui-drawer-btn-sublayer" data-add-sublayer="${E}" title="Adicionar nova camada dentro desta">
651
- ${v.mais} Subcamada
769
+ <button type="button" class="ui-drawer-btn-sublayer" data-add-sublayer="${C}" title="Adicionar nova camada dentro desta">
770
+ ${b.mais} Subcamada
652
771
  </button>
653
- <button type="button" class="ui-drawer-btn-danger" data-delete-layer="${E}" title="Excluir esta camada e suas feições">
654
- ${v.lixeira}
772
+ <button type="button" class="ui-drawer-btn-danger" data-delete-layer="${C}" title="Excluir esta camada e suas feições">
773
+ ${b.lixeira}
655
774
  <span class="ui-btn-label">Excluir</span>
656
775
  </button>
657
776
  </div>
658
777
  </div>
659
778
  </div>
660
- ` : "", Te = O.map((I) => w(I)).join("");
779
+ ` : "", We = H.map((I) => E(I)).join("");
661
780
  return `
662
- <div class="ui-layer-group ${y > 0 ? "is-sublayer-group" : ""}" data-layer-id="${E}" data-layer-depth="${y}" role="treeitem" aria-expanded="${U}" style="--layer-active-color: ${F};">
663
- <div class="ui-layer-row ${V ? "" : "hidden-layer"} ${le ? "active-drawing-layer" : ""} ${y > 0 ? "is-sublayer" : ""} ${B ? "is-group-row" : ""}" data-layer-row="${E}" data-layer-id="${E}" tabindex="-1" draggable="true" ${le ? 'aria-current="true"' : ""} style="--layer-depth: ${y};">
664
- <div class="ui-col ui-col-drag" title="Arrastar para reordenar Z-Index">${v.dragHandle}</div>
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};">
783
+ <div class="ui-col ui-col-drag" title="Arrastar para reordenar Z-Index">${b.dragHandle}</div>
665
784
 
666
- <div class="ui-col ui-col-eye" data-layer-eye="${E}" role="button" tabindex="0" aria-label="${V ? "Ocultar Camada" : "Exibir Camada"}" title="${V ? "Ocultar Camada" : "Exibir Camada"}">
667
- ${V ? v.olhoAberto : v.olhoFechado}
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}
668
787
  </div>
669
788
 
670
- <div class="ui-col ui-col-lock ${j ? "" : "ui-lock-open"}" data-layer-lock="${E}" role="button" tabindex="0" aria-label="${j ? "Desbloquear Camada" : "Bloquear Camada"}" title="${j ? "Desbloquear Camada" : "Bloquear Camada"}">
671
- ${j ? v.cadeadoTrancado : v.cadeadoAberto}
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"}">
790
+ ${V ? b.cadeadoTrancado : b.cadeadoAberto}
672
791
  </div>
673
792
 
674
- <div class="ui-col ui-col-colorbar ui-col-colorbar-editavel" data-layer-color="${E}" role="button" tabindex="0" style="background: ${F};" aria-label="Alterar cor da camada" title="Alterar cor da camada (usada no destaque de seleção)"></div>
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>
675
794
 
676
- <div class="ui-col ui-col-chevron" data-layer-expand="${E}" role="button" tabindex="0" aria-label="${U ? "Recolher grupo" : "Expandir grupo"}">
677
- <span class="ui-chevron-icon ${U ? "open" : ""}">${v.chevronDir}</span>
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>
678
797
  </div>
679
798
 
680
- <div class="ui-col ui-col-name" data-layer-name-trigger="${E}" title="Clique para ativar camada de desenho | Duplo clique para renomear">
681
- ${s === h.id ? `<input type="text" class="ui-inline-rename-input" data-inline-layer-input="${E}" value="${T}" />` : `${B ? `<span class="ui-group-folder-icon" title="Grupo/Pasta">${v.moverPasta}</span>` : ""}
682
- <span class="ui-name-text">${T}</span>
683
- ${M.length > 0 || !B ? `<span class="ui-count-chip" title="${M.length} ${M.length === 1 ? "feição" : "feições"}${$.length > 0 ? ` · ${$.length} subcamadas` : ""}">${M.length}</span>` : ""}`}
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>` : ""}`}
684
803
  </div>
685
804
 
686
805
  <div class="ui-col ui-col-actions">
687
- <button class="ui-micro-btn" data-layer-fit="${E}" title="Enquadrar camada no mapa" aria-label="Enquadrar camada no mapa">${v.alvoEnquadrar}</button>
688
- <button class="ui-micro-btn ${X ? "active" : ""}" data-layer-settings="${E}" title="Ajustar cor, hierarquia, opacidade e excluir" aria-label="Configurações da camada" aria-expanded="${X}">${v.engrenagem}</button>
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>
689
808
  </div>
690
809
 
691
- <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">
692
- <div class="ui-target-circle ${ce ? "selected" : Se ? "partial" : ""}"></div>
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>
693
812
  </div>
694
813
  </div>
695
814
 
696
- ${Pe}
815
+ ${Qe}
697
816
 
698
- <div class="ui-children-container ${y > 0 ? "is-subchildren" : ""}" role="group" style="display: ${U ? "block" : "none"};">
699
- ${Te}
700
- ${Fe}
701
- ${Be}
702
- ${O.length === 0 && M.length === 0 ? `<div class="ui-empty-row"><span>${B ? "Grupo vazio (adicione subcamadas ou feições)" : "Nenhum elemento neste grupo"}</span></div>` : ""}
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>` : ""}
703
822
  </div>
704
823
  </div>
705
824
  `;
706
- }, C = Ze(r), L = m && m.camadasVisiveis.size === 0 ? `<div class="ui-search-empty" role="status">Nenhum resultado para “${S((c || "").trim())}”</div>` : C.map((b) => w(b)).join("");
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("");
707
826
  return `
708
- ${x}
827
+ ${h}
709
828
  <div class="ui-panel-box">
710
- <div class="ui-layer-tree" id="ui-layer-tree-mount" role="tree" aria-label="Camadas e feições" aria-multiselectable="true">
711
- ${L}
829
+ <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}
712
831
  </div>
713
832
  </div>
714
833
  `;
715
834
  }
716
- function ta(e) {
835
+ function wa(e) {
717
836
  return [
718
837
  {
719
838
  gatilho: "data-layer-name-trigger",
@@ -741,83 +860,36 @@ function ta(e) {
741
860
  }
742
861
  ];
743
862
  }
744
- function ia(e, r) {
745
- for (const a of ta(e))
863
+ function Aa(e, r) {
864
+ for (const a of wa(e))
746
865
  r.querySelectorAll(`[${a.gatilho}]`).forEach((i) => {
747
866
  i.addEventListener("dblclick", (t) => {
748
867
  t.stopPropagation();
749
868
  const o = i.getAttribute(a.gatilho);
750
869
  if (!o) return;
751
870
  a.marcarEditando(o), e.solicitarRenderizacao();
752
- const n = P(r, a.input, o);
871
+ const n = T(r, a.input, o);
753
872
  if (!n) return;
754
873
  n.focus(), n.select();
755
- let s = !1;
756
- const l = (c) => {
757
- var d;
758
- if (!s) {
759
- if (s = !0, a.marcarEditando(null), c) {
760
- const p = a.aplicar(o, n.value.trim());
761
- p && (p.salvar && ((d = e.salvarLembrancaEstado) == null || d.call(e)), a.emitir(p.detalhe));
874
+ let l = !1;
875
+ const c = (s) => {
876
+ var u;
877
+ if (!l) {
878
+ 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));
762
881
  }
763
882
  e.solicitarRenderizacao();
764
883
  }
765
884
  };
766
- n.addEventListener("keydown", (c) => {
767
- c.key === "Enter" ? (c.preventDefault(), l(!0)) : c.key === "Escape" && (c.preventDefault(), l(!1));
768
- }), n.addEventListener("blur", () => l(!0));
885
+ n.addEventListener("keydown", (s) => {
886
+ s.key === "Enter" ? (s.preventDefault(), c(!0)) : s.key === "Escape" && (s.preventDefault(), c(!1));
887
+ }), n.addEventListener("blur", () => c(!0));
769
888
  });
770
889
  });
771
890
  }
772
- function oa(e, r, a) {
773
- const i = /* @__PURE__ */ new Set();
774
- let t = e.find((o) => o.id === r);
775
- for (; t && t.parentId; ) {
776
- if (i.has(t.id) || (i.add(t.id), t.parentId === a)) return !0;
777
- t = e.find((o) => o.id === (t == null ? void 0 : t.parentId));
778
- }
779
- return !1;
780
- }
781
- function na(e) {
782
- return Number.isFinite(e) ? e < 0.25 ? "acima" : e > 0.75 ? "abaixo" : "dentro" : "dentro";
783
- }
784
- function sa(e, r, a, i) {
785
- if (!r || !a || r === a) return null;
786
- const t = e.find((l) => l.id === r), o = e.find((l) => l.id === a);
787
- if (!t || !o) return null;
788
- if (i === "dentro")
789
- return oa(e, o.id, t.id) ? null : (t.parentId = o.id, { tipo: "hierarquia", camada: t, novoParentId: o.id });
790
- const n = e.findIndex((l) => l.id === r);
791
- e.splice(n, 1);
792
- const s = e.findIndex((l) => l.id === a);
793
- return s === -1 ? e.push(t) : e.splice(i === "acima" ? s : s + 1, 0, t), t.parentId = o.parentId ?? null, { tipo: "ordem", camada: t };
794
- }
795
- function la(e, r, a, i) {
796
- if (!r || !a || r === a) return !1;
797
- const t = e.findIndex((s) => s.id === r);
798
- if (t === -1) return !1;
799
- const [o] = e.splice(t, 1), n = e.findIndex((s) => s.id === a);
800
- return n === -1 ? e.push(o) : e.splice(i ? n : n + 1, 0, o), !0;
801
- }
802
- function ca(e, r, a, i) {
803
- const t = e.find((s) => s.id === a), o = r.find((s) => s.id === i);
804
- if (!t || !o || t.layerId === i) return null;
805
- const n = t.layerId;
806
- return t.layerId = i, { feicao: t, camadaOrigemId: n, camadaDestinoId: i, mudouDeCamada: !0 };
807
- }
808
- function da(e, r, a, i) {
809
- if (!r || !a || r === a) return null;
810
- const t = e.findIndex((p) => p.id === r);
811
- if (t === -1) return null;
812
- const o = e.find((p) => p.id === a);
813
- if (!o) return null;
814
- const [n] = e.splice(t, 1), s = n.layerId, l = o.layerId, c = s !== l;
815
- c && (n.layerId = l);
816
- const d = e.findIndex((p) => p.id === a);
817
- return d === -1 ? e.push(n) : e.splice(i ? d : d + 1, 0, n), { feicao: n, camadaOrigemId: s, camadaDestinoId: l, mudouDeCamada: c };
818
- }
819
- const ua = ["dragging", "drop-above", "drop-below", "drop-into"];
820
- class pa {
891
+ const Ea = ["dragging", "drop-above", "drop-below", "drop-into"];
892
+ class ka {
821
893
  constructor(r, a) {
822
894
  A(this, "host");
823
895
  A(this, "shadow");
@@ -834,11 +906,11 @@ class pa {
834
906
  (r = this.cancelarToque) == null || r.call(this), this.cancelarToque = null;
835
907
  }
836
908
  bindInlineRename() {
837
- ia(this.host, this.shadow);
909
+ Aa(this.host, this.shadow);
838
910
  }
839
911
  limparClassesDeArraste() {
840
912
  this.shadow.querySelectorAll(".ui-layer-row, .ui-feat-row, .ui-layer-group").forEach((r) => {
841
- r.classList.remove(...ua);
913
+ r.classList.remove(...Ea);
842
914
  });
843
915
  }
844
916
  /** Depois de qualquer mudança na ordem/hierarquia de camadas. */
@@ -862,71 +934,77 @@ class pa {
862
934
  this.shadow.querySelectorAll('.ui-layer-row[draggable="true"]').forEach((t) => {
863
935
  const o = t.getAttribute("data-layer-id");
864
936
  o && (t.addEventListener("dragstart", (n) => {
865
- const s = n;
866
- if (this.arrasteBloqueado(s.target)) {
867
- s.preventDefault();
937
+ const l = n;
938
+ if (this.arrasteBloqueado(l.target)) {
939
+ l.preventDefault();
868
940
  return;
869
941
  }
870
- r = "layer", a = o, s.dataTransfer && (s.dataTransfer.setData("text/plain", JSON.stringify({ type: "layer", id: o })), s.dataTransfer.effectAllowed = "move"), t.classList.add("dragging");
942
+ r = "layer", a = o, l.dataTransfer && (l.dataTransfer.setData("text/plain", JSON.stringify({ type: "layer", id: o })), l.dataTransfer.effectAllowed = "move"), t.classList.add("dragging");
871
943
  }), t.addEventListener("dragover", (n) => {
872
- const s = n;
873
- if (s.preventDefault(), s.stopPropagation(), s.dataTransfer && (s.dataTransfer.dropEffect = "move"), r === "layer") {
944
+ const l = n;
945
+ if (l.preventDefault(), l.stopPropagation(), l.dataTransfer && (l.dataTransfer.dropEffect = "move"), r === "layer") {
874
946
  if (a === o) return;
875
- const l = t.getBoundingClientRect(), c = na((s.clientY - l.top) / l.height);
876
- t.classList.toggle("drop-above", c === "acima"), t.classList.toggle("drop-below", c === "abaixo"), t.classList.toggle("drop-into", c === "dentro");
947
+ const c = t.getBoundingClientRect(), s = ga((l.clientY - c.top) / c.height);
948
+ t.classList.toggle("drop-above", s === "acima"), t.classList.toggle("drop-below", s === "abaixo"), t.classList.toggle("drop-into", s === "dentro");
877
949
  } else r === "feature" && t.classList.add("drop-into");
878
950
  }), t.addEventListener("dragleave", (n) => {
879
- const s = n.relatedTarget;
880
- s && t.contains(s) || t.classList.remove("drop-above", "drop-below", "drop-into");
951
+ const l = n.relatedTarget;
952
+ l && t.contains(l) || t.classList.remove("drop-above", "drop-below", "drop-into");
881
953
  }), t.addEventListener("drop", (n) => {
882
- var c;
883
- const s = n;
884
- s.preventDefault(), s.stopPropagation();
885
- const l = t.classList.contains("drop-into") ? "dentro" : t.classList.contains("drop-above") ? "acima" : "abaixo";
954
+ var s;
955
+ const l = n;
956
+ l.preventDefault(), l.stopPropagation();
957
+ const c = t.classList.contains("drop-into") ? "dentro" : t.classList.contains("drop-above") ? "acima" : "abaixo";
886
958
  if (this.limparClassesDeArraste(), r === "layer") {
887
- if (!a || a === o || !this.host.camadas.some((p) => p.id === a) || !this.host.camadas.some((p) => p.id === o)) return;
888
- const d = sa(this.host.camadas, a, o, l);
889
- (d == null ? void 0 : d.tipo) === "hierarquia" && ((c = this.host.expandedLayers) == null || c.add(d.novoParentId), this.host.dispararEvento("ui-camada-mover-hierarquia", {
890
- camadaId: d.camada.id,
891
- novoParentId: d.novoParentId,
892
- camada: d.camada
893
- })), this.aposReordenarCamadas();
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
971
+ }), this.aposReordenarCamadas();
894
972
  } else if (r === "feature") {
895
973
  if (!i) return;
896
- const d = ca(this.host.feicoes, this.host.camadas, i, o);
897
- d && (this.emitirFeicaoMovida(d), this.host.solicitarRenderizacao());
974
+ const u = ha(this.host.feicoes, this.host.camadas, i, o);
975
+ u && (this.emitirFeicaoMovida(u), this.host.solicitarRenderizacao());
898
976
  }
899
977
  }), t.addEventListener("dragend", () => {
900
978
  r = null, a = null, i = null, this.limparClassesDeArraste();
901
979
  }));
902
980
  }), this.shadow.querySelectorAll('.ui-feat-row[draggable="true"]').forEach((t) => {
903
981
  const o = t.getAttribute("data-feat-row"), n = t.getAttribute("data-feat-layer");
904
- o && (t.addEventListener("dragstart", (s) => {
905
- const l = s;
906
- if (this.arrasteBloqueado(l.target)) {
907
- l.preventDefault();
982
+ o && (t.addEventListener("dragstart", (l) => {
983
+ const c = l;
984
+ if (this.arrasteBloqueado(c.target)) {
985
+ c.preventDefault();
908
986
  return;
909
987
  }
910
- l.stopPropagation(), r = "feature", i = o, a = n, l.dataTransfer && (l.dataTransfer.setData("text/plain", JSON.stringify({ type: "feature", id: o, layerId: n })), l.dataTransfer.effectAllowed = "move"), t.classList.add("dragging");
911
- }), t.addEventListener("dragover", (s) => {
912
- const l = s;
988
+ c.stopPropagation(), r = "feature", i = o, a = n, c.dataTransfer && (c.dataTransfer.setData("text/plain", JSON.stringify({ type: "feature", id: o, layerId: n })), c.dataTransfer.effectAllowed = "move"), t.classList.add("dragging");
989
+ }), t.addEventListener("dragover", (l) => {
990
+ const c = l;
913
991
  if (r !== "feature" || i === o) return;
914
- l.preventDefault(), l.stopPropagation(), l.dataTransfer && (l.dataTransfer.dropEffect = "move");
915
- const c = t.getBoundingClientRect(), d = l.clientY - c.top < c.height / 2;
916
- t.classList.toggle("drop-above", d), t.classList.toggle("drop-below", !d);
917
- }), t.addEventListener("dragleave", (s) => {
918
- const l = s.relatedTarget;
919
- l && t.contains(l) || t.classList.remove("drop-above", "drop-below");
920
- }), t.addEventListener("drop", (s) => {
921
- const l = s;
992
+ 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);
995
+ }), t.addEventListener("dragleave", (l) => {
996
+ const c = l.relatedTarget;
997
+ c && t.contains(c) || t.classList.remove("drop-above", "drop-below");
998
+ }), t.addEventListener("drop", (l) => {
999
+ const c = l;
922
1000
  if (r !== "feature" || !i || i === o) return;
923
- l.preventDefault(), l.stopPropagation();
924
- const c = t.classList.contains("drop-above");
1001
+ c.preventDefault(), c.stopPropagation();
1002
+ const s = t.classList.contains("drop-above");
925
1003
  this.limparClassesDeArraste();
926
- const d = da(this.host.feicoes, i, o, c);
927
- d && (d.mudouDeCamada && this.emitirFeicaoMovida(d), this.host.dispararEvento("ui-feicoes-reordenadas", { feicoes: [...this.host.feicoes] }), this.host.solicitarRenderizacao());
928
- }), t.addEventListener("dragend", (s) => {
929
- s.stopPropagation(), r = null, i = null, a = null, 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());
1006
+ }), t.addEventListener("dragend", (l) => {
1007
+ l.stopPropagation(), r = null, i = null, a = null, this.limparClassesDeArraste();
930
1008
  }));
931
1009
  });
932
1010
  }
@@ -940,40 +1018,40 @@ class pa {
940
1018
  if (!a) return;
941
1019
  const i = a.getAttribute("data-layer-id");
942
1020
  i && r.addEventListener("pointerdown", (t) => {
943
- var p;
1021
+ var f;
944
1022
  const o = t;
945
1023
  if (o.pointerType === "mouse" && o.button !== 0 || this.host.editingLayerId || this.host.editingFeatureId) return;
946
- (p = this.cancelarToque) == null || p.call(this);
947
- let n = null, s = !1;
948
- const l = (f) => {
949
- f.preventDefault(), a.classList.add("dragging");
950
- const m = this.shadow.elementFromPoint(f.clientX, f.clientY), u = m ? m.closest(".ui-layer-row") : null;
951
- if (n && n !== u && n.classList.remove("drop-above", "drop-below"), u && u !== a) {
952
- n = u;
953
- const g = u.getBoundingClientRect();
954
- s = f.clientY - g.top < g.height / 2, u.classList.toggle("drop-above", s), u.classList.toggle("drop-below", !s);
1024
+ (f = this.cancelarToque) == null || f.call(this);
1025
+ let n = null, l = !1;
1026
+ const c = (p) => {
1027
+ 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);
955
1033
  } else
956
1034
  n = null;
957
- }, c = () => {
958
- window.removeEventListener("pointermove", l), window.removeEventListener("pointerup", d), window.removeEventListener("pointercancel", d), this.cancelarToque = null;
959
- }, d = () => {
960
- c();
961
- const f = n == null ? void 0 : n.getAttribute("data-layer-id");
962
- this.limparClassesDeArraste(), f && la(this.host.camadas, i, f, s) && this.aposReordenarCamadas();
1035
+ }, s = () => {
1036
+ window.removeEventListener("pointermove", c), window.removeEventListener("pointerup", u), window.removeEventListener("pointercancel", u), this.cancelarToque = null;
1037
+ }, u = () => {
1038
+ s();
1039
+ const p = n == null ? void 0 : n.getAttribute("data-layer-id");
1040
+ this.limparClassesDeArraste(), p && ba(this.host.camadas, i, p, l) && this.aposReordenarCamadas();
963
1041
  };
964
1042
  this.cancelarToque = () => {
965
- c(), this.limparClassesDeArraste();
966
- }, window.addEventListener("pointermove", l, { passive: !1 }), window.addEventListener("pointerup", d), window.addEventListener("pointercancel", d);
1043
+ s(), this.limparClassesDeArraste();
1044
+ }, window.addEventListener("pointermove", c, { passive: !1 }), window.addEventListener("pointerup", u), window.addEventListener("pointercancel", u);
967
1045
  });
968
1046
  });
969
1047
  }
970
1048
  }
971
- const fa = "ui_camadas_estado_";
972
- function ma(e, r) {
1049
+ const Ia = "ui_camadas_estado_";
1050
+ function La(e, r) {
973
1051
  const a = (e || r || "default").trim();
974
- return `${fa}${a}`;
1052
+ return `${Ia}${a}`;
975
1053
  }
976
- function ie(e) {
1054
+ function fe(e) {
977
1055
  if (typeof window > "u" || typeof localStorage > "u")
978
1056
  return null;
979
1057
  try {
@@ -987,7 +1065,7 @@ function ie(e) {
987
1065
  }
988
1066
  return null;
989
1067
  }
990
- function ga(e, r) {
1068
+ function Ca(e, r) {
991
1069
  if (!(typeof window > "u" || typeof localStorage > "u"))
992
1070
  try {
993
1071
  localStorage.setItem(e, JSON.stringify(r));
@@ -995,14 +1073,14 @@ function ga(e, r) {
995
1073
  console.warn(`[UI-Camadas] Não foi possível salvar o estado persistido (${e}):`, a);
996
1074
  }
997
1075
  }
998
- function va(e) {
1076
+ function $a(e) {
999
1077
  if (!(typeof window > "u" || typeof localStorage > "u"))
1000
1078
  try {
1001
1079
  localStorage.removeItem(e);
1002
1080
  } catch {
1003
1081
  }
1004
1082
  }
1005
- function Le(e) {
1083
+ function Re(e) {
1006
1084
  return {
1007
1085
  name: e.name,
1008
1086
  visible: e.visible !== !1,
@@ -1012,51 +1090,57 @@ function Le(e) {
1012
1090
  parentId: e.parentId !== void 0 ? e.parentId : null
1013
1091
  };
1014
1092
  }
1015
- function ba(e, r, a, i) {
1093
+ function Sa(e, r, a, i) {
1094
+ var f;
1016
1095
  if (!Array.isArray(e)) return;
1017
- 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) || []), s = o.size > 0 || n.size > 0;
1096
+ 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;
1018
1097
  for (let p = 0; p < e.length; p++) {
1019
- const f = e[p], m = t[f.id];
1020
- if (i == null || i.set(f.id, Le(f)), m) {
1021
- const u = m.origem, g = (k) => {
1022
- var w;
1023
- const x = (w = i == null ? void 0 : i.get(f.id)) == null ? void 0 : w[k];
1024
- return u !== void 0 && u[k] !== x;
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;
1025
1104
  };
1026
- typeof m.name == "string" && m.name.trim() && !g("name") && (f.name = m.name), typeof m.visible == "boolean" && !g("visible") && (f.visible = m.visible), typeof m.locked == "boolean" && !g("locked") && (f.locked = m.locked), typeof m.opacity == "number" && !g("opacity") && (f.opacity = m.opacity), typeof m.color == "string" && !g("color") && (f.color = m.color), m.parentId !== void 0 && !g("parentId") && (f.parentId = m.parentId);
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);
1027
1106
  }
1028
- s ? o.has(f.id) ? a.add(f.id) : n.has(f.id) ? a.delete(f.id) : a.add(f.id) : a.add(f.id);
1107
+ 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);
1029
1108
  }
1030
- const l = new Set(e.map((p) => p.id)), c = r == null ? void 0 : r.ordemOrigemIds;
1031
- if (!(Array.isArray(c) && (() => {
1032
- const p = new Set(c), f = (m) => m.filter((u) => l.has(u) && p.has(u)).join("|");
1033
- return f(c) !== f(e.map((m) => m.id));
1109
+ for (let p = 0; p < e.length; p++) {
1110
+ 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);
1112
+ }
1113
+ const c = new Set(e.map((p) => p.id)), s = r == null ? void 0 : r.ordemOrigemIds;
1114
+ 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));
1034
1117
  })()) && Array.isArray(r == null ? void 0 : r.ordemCamadasIds) && r.ordemCamadasIds.length > 0) {
1035
1118
  const p = /* @__PURE__ */ new Map();
1036
- r.ordemCamadasIds.forEach((f, m) => p.set(f, m)), e.sort((f, m) => {
1037
- const u = p.has(f.id) ? p.get(f.id) : 9999, g = p.has(m.id) ? p.get(m.id) : 9999;
1038
- return u - g;
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;
1121
+ return g - v;
1039
1122
  });
1040
1123
  }
1041
1124
  }
1042
- function ha(e) {
1125
+ function Ma(e) {
1043
1126
  const { estadoAnterior: r, camadas: a, expandedLayers: i } = e;
1044
- let t = (r == null ? void 0 : r.expandedLayerIds) || [], o = (r == null ? void 0 : r.collapsedLayerIds) || [], n = (r == null ? void 0 : r.ordemCamadasIds) || [], s = r == null ? void 0 : r.ordemOrigemIds;
1045
- const l = {
1127
+ 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
+ const c = {
1046
1129
  ...(r == null ? void 0 : r.camadasOverrides) || {}
1047
1130
  };
1048
- a.length > 0 && (t = [], o = [], n = a.map((c) => c.id), s = e.origensCamadas ? [...e.origensCamadas.keys()] : n, a.forEach((c) => {
1049
- var d, p;
1050
- i.has(c.id) ? t.push(c.id) : o.push(c.id), l[c.id] = {
1051
- name: c.name,
1052
- visible: c.visible !== !1,
1053
- locked: !!c.locked,
1054
- opacity: typeof c.opacity == "number" ? c.opacity : 1,
1055
- color: c.color || "#00E08A",
1056
- origem: ((d = e.origensCamadas) == null ? void 0 : d.get(c.id)) ?? ((p = l[c.id]) == null ? void 0 : p.origem)
1131
+ 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;
1133
+ i.has(s.id) ? t.push(s.id) : o.push(s.id), c[s.id] = {
1134
+ name: s.name,
1135
+ visible: s.visible !== !1,
1136
+ locked: !!s.locked,
1137
+ opacity: typeof s.opacity == "number" ? s.opacity : 1,
1138
+ color: s.color || "#00E08A",
1139
+ 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)
1057
1141
  };
1058
1142
  }));
1059
- for (const c of e.camadasRemovidas ?? []) delete l[c];
1143
+ for (const s of e.camadasRemovidas ?? []) delete c[s];
1060
1144
  return {
1061
1145
  versao: 1,
1062
1146
  expandedLayerIds: t,
@@ -1064,24 +1148,24 @@ function ha(e) {
1064
1148
  camadaAtivaId: e.camadaAtivaId,
1065
1149
  painelColapsado: e.painelColapsado,
1066
1150
  ordemCamadasIds: n,
1067
- ordemOrigemIds: s,
1151
+ ordemOrigemIds: l,
1068
1152
  mapaBaseAtivo: e.mapaBaseAtivo,
1069
1153
  densidade: e.densidade,
1070
1154
  altura: e.altura,
1071
- camadasOverrides: l,
1155
+ camadasOverrides: c,
1072
1156
  ultimaAtualizacao: Date.now()
1073
1157
  };
1074
1158
  }
1075
- const xa = ':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}';
1076
- function ya(e, r) {
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) {
1077
1161
  r.querySelectorAll("[data-layer-row]").forEach((t) => {
1078
1162
  t.addEventListener("click", (o) => {
1079
1163
  if (o.target.closest(
1080
1164
  "[data-layer-eye], [data-layer-lock], [data-layer-expand], [data-layer-target], [data-layer-fit], [data-layer-settings], [data-layer-color], input, button"
1081
1165
  ))
1082
1166
  return;
1083
- const s = t.getAttribute("data-layer-row");
1084
- s && e.definirCamadaAtiva(s, !0);
1167
+ const l = t.getAttribute("data-layer-row");
1168
+ l && e.definirCamadaAtiva(l, !0);
1085
1169
  });
1086
1170
  }), r.querySelectorAll("[data-layer-expand]").forEach((t) => {
1087
1171
  t.addEventListener("click", (o) => {
@@ -1089,35 +1173,36 @@ function ya(e, r) {
1089
1173
  const n = t.getAttribute("data-layer-expand");
1090
1174
  if (!n) return;
1091
1175
  e.expandedLayers.has(n) ? e.expandedLayers.delete(n) : e.expandedLayers.add(n);
1092
- const s = t.closest(".ui-layer-group"), l = t.querySelector(".ui-chevron-icon"), c = e.expandedLayers.has(n);
1093
- if (l && l.classList.toggle("open", c), s) {
1094
- const d = s.querySelector(".ui-children-container");
1095
- d && (d.style.display = c ? "block" : "none");
1176
+ const l = t.closest(".ui-layer-group"), c = t.querySelector(".ui-chevron-icon"), s = e.expandedLayers.has(n);
1177
+ if (c && c.classList.toggle("open", s), l) {
1178
+ l.setAttribute("aria-expanded", String(s));
1179
+ const u = l.querySelector(".ui-children-container");
1180
+ u && (u.style.display = s ? "block" : "none");
1096
1181
  }
1097
- e.salvarLembrancaEstado();
1182
+ P(t, s ? "Recolher grupo" : "Expandir grupo"), Ba(e, r), e.salvarLembrancaEstado();
1098
1183
  });
1099
1184
  }), r.querySelectorAll("[data-layer-eye]").forEach((t) => {
1100
1185
  t.addEventListener("click", (o) => {
1101
1186
  o.stopPropagation();
1102
- const n = t.getAttribute("data-layer-eye"), s = e.camadas.find((l) => l.id === n);
1103
- if (s) {
1104
- s.visible = s.visible === !1;
1105
- const l = s.visible !== !1;
1106
- t.innerHTML = l ? v.olhoAberto : v.olhoFechado, D(t, l ? "Ocultar Camada" : "Exibir Camada");
1107
- const c = t.closest(".ui-layer-row");
1108
- c && c.classList.toggle("hidden-layer", !l), wa(e, r), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-visibilidade", {
1109
- camadaId: s.id,
1110
- visivel: l
1187
+ const n = t.getAttribute("data-layer-eye"), l = e.camadas.find((c) => c.id === n);
1188
+ if (l) {
1189
+ l.visible = l.visible === !1;
1190
+ const c = l.visible !== !1;
1191
+ t.innerHTML = c ? b.olhoAberto : b.olhoFechado, P(t, c ? "Ocultar Camada" : "Exibir Camada");
1192
+ 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", {
1194
+ camadaId: l.id,
1195
+ visivel: c
1111
1196
  });
1112
1197
  }
1113
1198
  });
1114
1199
  }), r.querySelectorAll("[data-layer-lock]").forEach((t) => {
1115
1200
  t.addEventListener("click", (o) => {
1116
1201
  o.stopPropagation();
1117
- const n = t.getAttribute("data-layer-lock"), s = e.camadas.find((l) => l.id === n);
1118
- s && (s.locked = !s.locked, t.innerHTML = s.locked ? v.cadeadoTrancado : v.cadeadoAberto, t.classList.toggle("ui-lock-open", !s.locked), D(t, s.locked ? "Desbloquear Camada" : "Bloquear Camada"), Ea(e, r, s.id, s.locked === !0), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-bloqueio", {
1119
- camadaId: s.id,
1120
- bloqueado: s.locked
1202
+ 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", {
1204
+ camadaId: l.id,
1205
+ bloqueado: l.locked
1121
1206
  }));
1122
1207
  });
1123
1208
  }), r.querySelectorAll("[data-layer-fit]").forEach((t) => {
@@ -1139,96 +1224,104 @@ function ya(e, r) {
1139
1224
  });
1140
1225
  const a = (t, o, n) => {
1141
1226
  var m;
1142
- const s = e.camadas.find((u) => u.id === t);
1143
- if (!s) return;
1144
- const l = H(o, s.color || "#00E08A");
1145
- s.color = l;
1146
- const c = r.getElementById(`sample-color-${t}`);
1147
- c && (c.style.backgroundColor = l);
1148
- const d = r.getElementById(`hex-color-${t}`);
1149
- d && (d.textContent = l.toUpperCase());
1150
- const p = r.getElementById(`settings-drawer-${t}`);
1151
- p && p.style.setProperty("--drawer-cor-camada", l);
1152
- const f = P(r, "data-layer-row", t);
1153
- if (f) {
1154
- (m = f.closest(".ui-layer-group")) == null || m.style.setProperty("--layer-active-color", l);
1155
- const u = f.querySelector(".ui-col-colorbar");
1156
- u && (u.style.backgroundColor = l);
1227
+ const l = e.camadas.find((d) => d.id === t);
1228
+ if (!l) return;
1229
+ const c = N(o, l.color || "#00E08A");
1230
+ l.color = c;
1231
+ const s = r.getElementById(`sample-color-${t}`);
1232
+ 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);
1237
+ const p = T(r, "data-layer-row", t);
1238
+ if (p) {
1239
+ (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);
1157
1242
  }
1158
- n ? e.salvarLembrancaEstado() : e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-cor", { camadaId: s.id, cor: l });
1243
+ n ? e.salvarLembrancaEstado() : e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-cor", { camadaId: l.id, cor: c });
1159
1244
  };
1160
1245
  r.querySelectorAll("[data-layer-color-picker]").forEach((t) => {
1161
- const o = t, n = (s) => (l) => {
1162
- const c = o.getAttribute("data-layer-color-picker");
1163
- if (!c) return;
1164
- const d = l.target.value;
1165
- a(c, d, s);
1246
+ const o = t, n = (l) => (c) => {
1247
+ const s = o.getAttribute("data-layer-color-picker");
1248
+ if (!s) return;
1249
+ const u = c.target.value;
1250
+ a(s, u, l);
1166
1251
  };
1167
1252
  o.addEventListener("input", n(!1)), o.addEventListener("change", n(!0));
1168
1253
  }), r.querySelectorAll("[data-layer-color]").forEach((t) => {
1169
1254
  const o = (n) => {
1170
1255
  n.stopPropagation();
1171
- const s = t.getAttribute("data-layer-color"), l = e.camadas.find((c) => c.id === s);
1172
- !s || !l || Ge({
1256
+ const l = t.getAttribute("data-layer-color"), c = e.camadas.find((s) => s.id === l);
1257
+ !l || !c || ta({
1173
1258
  ancora: t,
1174
- titulo: `Cor · ${l.name || "Camada"}`,
1259
+ titulo: `Cor · ${c.name || "Camada"}`,
1175
1260
  modo: "simples",
1176
- cor: H(l.color, "#00E08A"),
1261
+ cor: N(c.color, "#00E08A"),
1177
1262
  mostrarOpacidade: !1,
1178
- aoAlterar: (c) => a(s, c.cor, !1),
1179
- aoConfirmar: (c) => a(s, c.cor, !0),
1180
- aoCancelar: (c) => a(s, c.cor, !0)
1263
+ aoAlterar: (s) => a(l, s.cor, !1),
1264
+ aoConfirmar: (s) => a(l, s.cor, !0),
1265
+ aoCancelar: (s) => a(l, s.cor, !0)
1181
1266
  });
1182
1267
  };
1183
1268
  t.addEventListener("click", o), t.addEventListener("keydown", (n) => {
1184
- const s = n.key;
1185
- (s === "Enter" || s === " ") && (n.preventDefault(), o(n));
1269
+ const l = n.key;
1270
+ (l === "Enter" || l === " ") && (n.preventDefault(), o(n));
1186
1271
  });
1187
1272
  });
1188
1273
  const i = (t, o) => {
1189
- const n = e.camadas.find((c) => c.id === t);
1274
+ const n = e.camadas.find((s) => s.id === t);
1190
1275
  if (!n) return;
1191
1276
  n.opacity = o;
1192
- const s = r.getElementById(`badge-op-${t}`);
1193
- s && (s.textContent = `${Math.round(o * 100)}%`);
1194
- const l = P(r, "data-layer-opacity-slider", t);
1195
- l && parseFloat(l.value) !== o && (l.value = String(o)), e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-opacidade", { camadaId: n.id, opacidade: o });
1277
+ const l = r.getElementById(`badge-op-${t}`);
1278
+ l && (l.textContent = `${Math.round(o * 100)}%`);
1279
+ const c = T(r, "data-layer-opacity-slider", t);
1280
+ c && parseFloat(c.value) !== o && (c.value = String(o)), e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-opacidade", { camadaId: n.id, opacidade: o });
1196
1281
  };
1197
1282
  r.querySelectorAll("[data-layer-opacity-slider]").forEach((t) => {
1198
1283
  t.addEventListener("input", (o) => {
1199
1284
  const n = t.getAttribute("data-layer-opacity-slider");
1200
1285
  if (!n) return;
1201
- const s = parseFloat(o.target.value);
1202
- i(n, s);
1286
+ const l = parseFloat(o.target.value);
1287
+ i(n, l);
1203
1288
  });
1204
1289
  }), r.querySelectorAll("[data-delete-layer]").forEach((t) => {
1205
1290
  let o = null;
1206
1291
  t.addEventListener("click", (n) => {
1207
1292
  n.stopPropagation();
1208
- const s = t.getAttribute("data-delete-layer");
1209
- if (!s) return;
1293
+ const l = t.getAttribute("data-delete-layer");
1294
+ if (!l) return;
1210
1295
  if (t.classList.contains("confirming")) {
1211
- o && clearTimeout(o), e.dispararEvento("ui-camada-excluida", { camadaId: s });
1212
- const c = e.selectedFeatureIds.size;
1213
- e.camadas.forEach((d) => {
1214
- d.parentId === s && (d.parentId = null);
1215
- }), e.removerCamada(s), e.selectedFeatureIds.size !== c && e.notificarMudancaSelecao();
1296
+ o && clearTimeout(o), e.dispararEvento("ui-camada-excluida", { camadaId: l });
1297
+ const s = e.selectedFeatureIds.size;
1298
+ e.camadas.forEach((u) => {
1299
+ u.parentId === l && (u.parentId = null);
1300
+ }), e.removerCamada(l), e.selectedFeatureIds.size !== s && e.notificarMudancaSelecao();
1216
1301
  } else {
1217
1302
  t.classList.add("confirming");
1218
- const c = t.querySelector(".ui-btn-label");
1219
- c && (c.textContent = "Confirmar Exclusão?"), o = setTimeout(() => {
1220
- t.classList.remove("confirming"), c && (c.textContent = "Excluir Camada");
1303
+ const s = t.querySelector(".ui-btn-label");
1304
+ s && (s.textContent = "Confirmar Exclusão?"), o = setTimeout(() => {
1305
+ t.classList.remove("confirming"), s && (s.textContent = "Excluir Camada");
1221
1306
  }, 3500);
1222
1307
  }
1223
1308
  });
1224
1309
  }), r.querySelectorAll("[data-layer-parent-select]").forEach((t) => {
1225
1310
  t.addEventListener("change", (o) => {
1226
- const n = o.target, s = n.getAttribute("data-layer-parent-select"), l = n.value || null, c = e.camadas.find((d) => d.id === s);
1227
- c && (c.parentId = l, e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-mover-hierarquia", {
1228
- camadaId: c.id,
1229
- novoParentId: l,
1230
- camada: c
1231
- }), e.solicitarRenderizacao());
1311
+ const n = o.target, l = n.getAttribute("data-layer-parent-select"), c = n.value || null, s = e.camadas.find((u) => u.id === l);
1312
+ if (s) {
1313
+ if (c && (c === s.id || te(e.camadas, c, s.id))) {
1314
+ n.value = s.parentId || "";
1315
+ return;
1316
+ }
1317
+ const u = s.parentId ?? null;
1318
+ s.parentId = c, c && e.expandedLayers.add(c), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-mover-hierarquia", {
1319
+ camadaId: s.id,
1320
+ novoParentId: c,
1321
+ parentAnteriorId: u,
1322
+ camada: s
1323
+ }), e.solicitarRenderizacao();
1324
+ }
1232
1325
  });
1233
1326
  }), r.querySelectorAll("[data-add-sublayer]").forEach((t) => {
1234
1327
  t.addEventListener("click", (o) => {
@@ -1236,148 +1329,162 @@ function ya(e, r) {
1236
1329
  const n = t.getAttribute("data-add-sublayer");
1237
1330
  e.dispararEvento("ui-camada-adicionar", { parentId: n });
1238
1331
  });
1332
+ }), r.querySelectorAll("[data-layer-show-more]").forEach((t) => {
1333
+ t.addEventListener("click", (o) => {
1334
+ o.stopPropagation();
1335
+ const n = t.getAttribute("data-layer-show-more");
1336
+ n && e.incrementarLimiteFeicoes(n);
1337
+ });
1239
1338
  }), r.querySelectorAll("[data-layer-target]").forEach((t) => {
1240
1339
  t.addEventListener("click", (o) => {
1241
1340
  o.stopPropagation();
1242
- const n = o, s = t.getAttribute("data-layer-target"), l = K(
1243
- e.feicoes.filter((d) => d.layerId === s),
1244
- e.searchQuery
1245
- );
1246
- if (l.length === 0) return;
1247
- l.every((d) => e.selectedFeatureIds.has(d.id)) ? l.forEach((d) => e.selectedFeatureIds.delete(d.id)) : (!n.ctrlKey && !n.metaKey && e.selectedFeatureIds.clear(), l.forEach((d) => e.selectedFeatureIds.add(d.id))), e.lastClickedFeatureId = l[l.length - 1].id, e.sincronizarSelecaoDOM(), e.notificarMudancaSelecao();
1341
+ const n = o, l = t.getAttribute("data-layer-target");
1342
+ if (!l) return;
1343
+ const c = re(e.camadas, e.feicoes, l), s = ae(c, e.searchQuery);
1344
+ 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();
1248
1346
  });
1249
1347
  });
1250
1348
  }
1251
- function wa(e, r) {
1349
+ function Ba(e, r) {
1350
+ const a = r.getElementById("btn-toggle-all-expand");
1351
+ if (!a) return;
1352
+ 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(
1354
+ a,
1355
+ i ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"
1356
+ );
1357
+ }
1358
+ function qa(e, r) {
1252
1359
  const a = r.getElementById("btn-toggle-all-vis");
1253
1360
  if (!a) return;
1254
1361
  const i = e.camadas.every((t) => t.visible !== !1);
1255
- a.innerHTML = i ? v.olhoAberto : v.olhoFechado, D(a, i ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas");
1362
+ a.innerHTML = i ? b.olhoAberto : b.olhoFechado, P(a, i ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas");
1256
1363
  }
1257
- function Ea(e, r, a, i) {
1364
+ function Da(e, r, a, i) {
1258
1365
  e.feicoes.filter((t) => t.layerId === a).forEach((t) => {
1259
- const o = P(r, "data-feat-lock", t.id);
1366
+ const o = T(r, "data-feat-lock", t.id);
1260
1367
  if (!o) return;
1261
1368
  const n = t.locked === !0 || i;
1262
- o.innerHTML = n ? v.cadeadoTrancado : v.cadeadoAberto, o.classList.toggle("ui-lock-open", !n), i ? o.setAttribute("data-locked-by-layer", "true") : o.removeAttribute("data-locked-by-layer"), D(
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(
1263
1370
  o,
1264
1371
  i ? "Bloqueada pela camada" : n ? "Desbloquear Feição" : "Bloquear Feição"
1265
1372
  );
1266
1373
  });
1267
1374
  }
1268
- function Aa(e, r) {
1375
+ function Pa(e, r) {
1269
1376
  const a = r.getElementById("btn-footer-vis");
1270
1377
  a && a.addEventListener("click", () => {
1271
- const p = e.feicoes.filter((u) => e.selectedFeatureIds.has(u.id));
1272
- if (p.length === 0) return;
1273
- const m = !p.some((u) => u.visible !== !1);
1274
- p.forEach((u) => u.visible = m), e.dispararEvento("ui-acao-massa", {
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", {
1275
1382
  acao: "visibilidade",
1276
- feicoesIds: p.map((u) => u.id),
1277
- feicoes: p,
1383
+ feicoesIds: f.map((d) => d.id),
1384
+ feicoes: f,
1278
1385
  valor: m
1279
1386
  }), e.solicitarRenderizacao();
1280
1387
  });
1281
1388
  const i = r.getElementById("btn-footer-lock");
1282
1389
  i && i.addEventListener("click", () => {
1283
- const p = e.feicoes.filter((u) => e.selectedFeatureIds.has(u.id));
1284
- if (p.length === 0) return;
1285
- const m = !p.some((u) => u.locked === !0);
1286
- p.forEach((u) => u.locked = m), e.dispararEvento("ui-acao-massa", {
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", {
1287
1394
  acao: "bloqueio",
1288
- feicoesIds: p.map((u) => u.id),
1289
- feicoes: p,
1395
+ feicoesIds: f.map((d) => d.id),
1396
+ feicoes: f,
1290
1397
  valor: m
1291
1398
  }), e.solicitarRenderizacao();
1292
1399
  });
1293
1400
  const t = r.getElementById("input-footer-color"), o = r.getElementById("preview-footer-color");
1294
- t && (t.addEventListener("input", (p) => {
1295
- const f = p.target.value;
1296
- o && (o.style.backgroundColor = f);
1297
- }), t.addEventListener("change", (p) => {
1298
- const f = p.target.value;
1299
- o && (o.style.backgroundColor = f);
1300
- const m = e.feicoes.filter((u) => e.selectedFeatureIds.has(u.id));
1301
- m.length !== 0 && (m.forEach((u) => {
1302
- u.color = f, u.style = { ...u.style || {}, fillColor: f, strokeColor: f };
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 };
1303
1410
  }), e.dispararEvento("ui-acao-massa", {
1304
1411
  acao: "cor",
1305
- feicoesIds: m.map((u) => u.id),
1412
+ feicoesIds: m.map((d) => d.id),
1306
1413
  feicoes: m,
1307
- valor: f
1414
+ valor: p
1308
1415
  }), e.solicitarRenderizacao());
1309
1416
  }));
1310
1417
  const n = r.getElementById("select-footer-move");
1311
- n && n.addEventListener("change", (p) => {
1312
- const f = p.target.value;
1313
- if (!f) return;
1418
+ n && n.addEventListener("change", (f) => {
1419
+ const p = f.target.value;
1420
+ if (!p) return;
1314
1421
  const m = e.feicoes.filter((g) => e.selectedFeatureIds.has(g.id));
1315
1422
  if (m.length === 0) return;
1316
- const u = new Map(m.map((g) => [g.id, g.layerId]));
1317
- m.forEach((g) => g.layerId = f), m.forEach((g) => {
1318
- u.get(g.id) !== f && e.dispararEvento("ui-feicao-movida", {
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", {
1319
1426
  feicaoId: g.id,
1320
- camadaOrigemId: u.get(g.id),
1321
- camadaDestinoId: f,
1427
+ camadaOrigemId: d.get(g.id),
1428
+ camadaDestinoId: p,
1322
1429
  feicao: g
1323
1430
  });
1324
1431
  }), e.dispararEvento("ui-acao-massa", {
1325
1432
  acao: "mover",
1326
1433
  feicoesIds: m.map((g) => g.id),
1327
1434
  feicoes: m,
1328
- valor: f
1435
+ valor: p
1329
1436
  }), e.solicitarRenderizacao();
1330
1437
  });
1331
- const s = r.getElementById("btn-footer-new-layer");
1332
- s && s.addEventListener("click", () => {
1438
+ const l = r.getElementById("btn-footer-new-layer");
1439
+ l && l.addEventListener("click", () => {
1333
1440
  e.dispararEvento("ui-camada-adicionar", {});
1334
1441
  });
1335
- const l = r.getElementById("btn-footer-new-group");
1336
- l && l.addEventListener("click", () => {
1442
+ const c = r.getElementById("btn-footer-new-group");
1443
+ c && c.addEventListener("click", () => {
1337
1444
  e.dispararEvento("ui-camada-grupo-adicionar", { isGroup: !0 });
1338
1445
  });
1339
- const c = r.getElementById("btn-footer-del");
1340
- if (c) {
1341
- let p = null;
1342
- const f = "Excluir selecionados";
1343
- c.addEventListener("click", () => {
1446
+ const s = r.getElementById("btn-footer-del");
1447
+ if (s) {
1448
+ let f = null;
1449
+ const p = "Excluir selecionados";
1450
+ s.addEventListener("click", () => {
1344
1451
  const m = Array.from(e.selectedFeatureIds);
1345
1452
  if (m.length === 0) return;
1346
- if (!c.classList.contains("confirming")) {
1347
- c.classList.add("confirming"), D(c, `Clique novamente para excluir ${m.length} selecionado(s)`), p = setTimeout(() => {
1348
- c.classList.remove("confirming"), D(c, f);
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);
1349
1456
  }, 3500);
1350
1457
  return;
1351
1458
  }
1352
- p && clearTimeout(p);
1353
- const u = e.feicoes.filter((g) => e.selectedFeatureIds.has(g.id));
1459
+ f && clearTimeout(f);
1460
+ const d = e.feicoes.filter((g) => e.selectedFeatureIds.has(g.id));
1354
1461
  e.feicoes = e.feicoes.filter((g) => !e.selectedFeatureIds.has(g.id)), e.selectedFeatureIds.clear(), e.lastClickedFeatureId = null, e.dispararEvento("ui-acao-massa", {
1355
1462
  acao: "excluir",
1356
1463
  feicoesIds: m,
1357
- feicoes: u
1464
+ feicoes: d
1358
1465
  }), e.notificarMudancaSelecao(), e.solicitarRenderizacao();
1359
1466
  });
1360
1467
  }
1361
- const d = r.getElementById("btn-footer-clear");
1362
- d && d.addEventListener("click", () => e.limparSelecao(!0));
1468
+ const u = r.getElementById("btn-footer-clear");
1469
+ u && u.addEventListener("click", () => e.limparSelecao(!0));
1363
1470
  }
1364
- const ka = [
1471
+ const Ta = [
1365
1472
  { tipo: "olho", atributo: "data-layer-eye", entidade: "camada" },
1366
1473
  { tipo: "olho", atributo: "data-feat-eye", entidade: "feicao" },
1367
1474
  { tipo: "cadeado", atributo: "data-layer-lock", entidade: "camada" },
1368
1475
  { tipo: "cadeado", atributo: "data-feat-lock", entidade: "feicao" },
1369
1476
  { tipo: "selecao", atributo: "data-layer-target", entidade: "camada" },
1370
1477
  { tipo: "selecao", atributo: "data-feat-target", entidade: "feicao" }
1371
- ], oe = {
1478
+ ], me = {
1372
1479
  olho: "[data-layer-eye], [data-feat-eye]",
1373
1480
  cadeado: "[data-layer-lock], [data-feat-lock]",
1374
1481
  selecao: "[data-layer-target], [data-feat-target]"
1375
- }, Ia = 3;
1376
- function La(e) {
1377
- return ka.find((r) => e.hasAttribute(r.atributo)) ?? null;
1482
+ }, Ra = 3;
1483
+ function Oa(e) {
1484
+ return Ta.find((r) => e.hasAttribute(r.atributo)) ?? null;
1378
1485
  }
1379
- function re(e, r) {
1380
- const a = La(r);
1486
+ function pe(e, r) {
1487
+ const a = Oa(r);
1381
1488
  if (!a) return null;
1382
1489
  const i = r.getAttribute(a.atributo);
1383
1490
  if (!i) return null;
@@ -1391,13 +1498,13 @@ function re(e, r) {
1391
1498
  return o ? o.locked === !0 : null;
1392
1499
  }
1393
1500
  if (a.entidade === "feicao") return e.selectedFeatureIds.has(i);
1394
- const t = K(
1395
- e.feicoes.filter((o) => o.layerId === i),
1501
+ const t = ae(
1502
+ re(e.camadas, e.feicoes, i),
1396
1503
  e.searchQuery
1397
1504
  );
1398
1505
  return t.length === 0 ? null : t.every((o) => e.selectedFeatureIds.has(o.id));
1399
1506
  }
1400
- function ve(e, r, a = !1) {
1507
+ function Ie(e, r, a = !1) {
1401
1508
  e.dispatchEvent(
1402
1509
  new MouseEvent("click", {
1403
1510
  bubbles: !0,
@@ -1407,59 +1514,59 @@ function ve(e, r, a = !1) {
1407
1514
  })
1408
1515
  );
1409
1516
  }
1410
- let z = null;
1411
- function Ca(e) {
1412
- (z == null ? void 0 : z.host) === e && z.cancelar();
1517
+ let q = null;
1518
+ function ja(e) {
1519
+ (q == null ? void 0 : q.host) === e && q.cancelar();
1413
1520
  }
1414
- function $a(e, r) {
1415
- Object.keys(oe).forEach((a) => {
1416
- r.querySelectorAll(oe[a]).forEach((i) => {
1417
- i.addEventListener("pointerdown", (t) => Sa(e, r, a, i, t));
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));
1418
1525
  });
1419
1526
  });
1420
1527
  }
1421
- function Sa(e, r, a, i, t) {
1422
- if (t.pointerType === "mouse" && t.button !== 0 || e.editingLayerId || e.editingFeatureId || re(e, i) === null) return;
1423
- z == null || z.cancelar();
1424
- const o = oe[a], n = t.ctrlKey || t.metaKey, s = t.shiftKey;
1425
- let l = !1, c = !1, d = t.clientY;
1426
- const p = /* @__PURE__ */ new Set([i]), f = (b) => {
1427
- b.preventDefault(), b.stopImmediatePropagation();
1428
- }, m = (b) => {
1429
- b.stopPropagation(), b.preventDefault();
1430
- }, u = (b) => b.preventDefault(), g = (b) => {
1431
- p.has(b) || (p.add(b), re(e, b) !== c && ve(b, a === "selecao"));
1432
- }, k = () => {
1433
- l = !0, ve(i, n, s), c = re(e, i) === !0, r.addEventListener("selectstart", u), document.body.style.userSelect = "none";
1434
- }, x = (b) => {
1435
- var O, B;
1436
- if (!l) {
1437
- if (Math.hypot(b.clientX - t.clientX, b.clientY - t.clientY) < Ia) return;
1438
- const E = (O = r.elementFromPoint(b.clientX, b.clientY)) == null ? void 0 : O.closest(o);
1439
- if (!E || E === i) return;
1440
- k();
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"));
1539
+ }, 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;
1543
+ 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;
1547
+ v();
1441
1548
  }
1442
- b.preventDefault();
1443
- const h = Math.min(d, b.clientY), y = Math.max(d, b.clientY);
1444
- r.querySelectorAll(o).forEach((E) => {
1445
- const T = E.getBoundingClientRect();
1446
- if (T.height === 0) return;
1447
- const F = T.top + T.height / 2;
1448
- F >= h && F <= y && g(E);
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);
1449
1556
  });
1450
- const $ = (B = r.elementFromPoint(b.clientX, b.clientY)) == null ? void 0 : B.closest(o);
1451
- $ && g($), d = b.clientY;
1452
- }, w = (b = !1) => {
1453
- (z == null ? void 0 : z.cancelar) === L && (z = null), window.removeEventListener("pointermove", x), window.removeEventListener("pointerup", C), window.removeEventListener("pointercancel", C), window.removeEventListener("dragstart", f, !0), r.removeEventListener("selectstart", u), l && (document.body.style.userSelect = "", b || (window.addEventListener("click", m, { capture: !0, once: !0 }), setTimeout(() => window.removeEventListener("click", m, !0), 0)));
1454
- }, C = () => w(), L = () => w(!0);
1455
- z = { host: e, cancelar: L }, window.addEventListener("dragstart", f, !0), window.addEventListener("pointermove", x, { passive: !1 }), window.addEventListener("pointerup", C), window.addEventListener("pointercancel", C);
1456
- }
1457
- function Ma(e, r) {
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) {
1458
1565
  const a = r.getElementById("btn-toggle-all-vis");
1459
1566
  a && a.addEventListener("click", () => e.alternarVisibilidadeTodas(!0));
1460
1567
  const i = r.getElementById("btn-toggle-all-expand");
1461
- i && i.addEventListener("click", (s) => {
1462
- s.stopPropagation(), e.camadas.length > 0 && e.camadas.every((c) => e.expandedLayers.has(c.id)) ? e.colapsarTodas() : e.expandirTodas();
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();
1463
1570
  });
1464
1571
  const t = r.getElementById("btn-add-layer");
1465
1572
  t && t.addEventListener("click", () => {
@@ -1470,15 +1577,15 @@ function Ma(e, r) {
1470
1577
  e.dispararEvento("ui-camada-grupo-adicionar", { isGroup: !0 });
1471
1578
  });
1472
1579
  const n = r.getElementById("btn-colapsar");
1473
- n && n.addEventListener("click", () => e.colapsar(!0)), za(e, r);
1580
+ n && n.addEventListener("click", () => e.colapsar(!0)), Va(e, r);
1474
1581
  }
1475
- function za(e, r) {
1582
+ function Va(e, r) {
1476
1583
  const a = r.getElementById("input-layer-search"), i = r.getElementById("btn-clear-layer-search"), t = () => {
1477
1584
  var o;
1478
1585
  e.searchQuery = "", e.solicitarRenderizacao(), (o = r.getElementById("input-layer-search")) == null || o.focus();
1479
1586
  };
1480
1587
  if (a) {
1481
- const o = ye(() => e.solicitarRenderizacao(), 75);
1588
+ const o = Fe(() => e.solicitarRenderizacao(), 75);
1482
1589
  a.addEventListener("input", (n) => {
1483
1590
  e.searchQuery = n.target.value, o();
1484
1591
  }), a.addEventListener("keydown", (n) => {
@@ -1487,7 +1594,7 @@ function za(e, r) {
1487
1594
  }
1488
1595
  i && i.addEventListener("click", t);
1489
1596
  }
1490
- function Fa(e, r) {
1597
+ function Ua(e, r) {
1491
1598
  r.querySelectorAll("[data-feat-select]").forEach((a) => {
1492
1599
  a.addEventListener("click", (i) => {
1493
1600
  if (e.editingFeatureId) return;
@@ -1512,9 +1619,9 @@ function Fa(e, r) {
1512
1619
  if (o) {
1513
1620
  o.visible = o.visible === !1;
1514
1621
  const n = o.visible !== !1;
1515
- a.innerHTML = n ? v.olhoAberto : v.olhoFechado, D(a, n ? "Ocultar Feição" : "Exibir Feição");
1516
- const s = a.closest(".ui-feat-row");
1517
- s && s.classList.toggle("hidden-row", !n), e.dispararEvento("ui-feicao-visibilidade", {
1622
+ a.innerHTML = n ? b.olhoAberto : b.olhoFechado, P(a, n ? "Ocultar Feição" : "Exibir Feição");
1623
+ const l = a.closest(".ui-feat-row");
1624
+ l && l.classList.toggle("hidden-row", !n), e.dispararEvento("ui-feicao-visibilidade", {
1518
1625
  feicaoId: o.id,
1519
1626
  visivel: n
1520
1627
  });
@@ -1524,7 +1631,7 @@ function Fa(e, r) {
1524
1631
  a.addEventListener("click", (i) => {
1525
1632
  if (i.stopPropagation(), a.hasAttribute("data-locked-by-layer")) return;
1526
1633
  const t = a.getAttribute("data-feat-lock"), o = e.feicoes.find((n) => n.id === t);
1527
- o && (o.locked = !o.locked, a.innerHTML = o.locked ? v.cadeadoTrancado : v.cadeadoAberto, a.classList.toggle("ui-lock-open", !o.locked), D(a, o.locked ? "Desbloquear Feição" : "Bloquear Feição"), e.dispararEvento("ui-feicao-bloqueio", {
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", {
1528
1635
  feicaoId: o.id,
1529
1636
  bloqueado: o.locked
1530
1637
  }));
@@ -1537,14 +1644,14 @@ function Fa(e, r) {
1537
1644
  });
1538
1645
  });
1539
1646
  }
1540
- function Ba(e, r) {
1647
+ function Ya(e, r) {
1541
1648
  var a;
1542
1649
  r.querySelectorAll("[data-basemap-thumb]").forEach((i) => {
1543
1650
  i.addEventListener(
1544
1651
  "error",
1545
1652
  () => {
1546
1653
  const t = document.createElement("div");
1547
- t.className = "ui-basemap-preview-none", t.innerHTML = v.mapa, i.replaceWith(t);
1654
+ t.className = "ui-basemap-preview-none", t.innerHTML = b.mapa, i.replaceWith(t);
1548
1655
  },
1549
1656
  { once: !0 }
1550
1657
  );
@@ -1557,12 +1664,12 @@ function Ba(e, r) {
1557
1664
  });
1558
1665
  });
1559
1666
  }
1560
- function qa(e, r) {
1561
- Ma(e, r), ya(e, r), Fa(e, r), Ba(e, r), Aa(e, r), $a(e, r);
1667
+ function Ka(e, r) {
1668
+ Ga(e, r), za(e, r), Ua(e, r), Ya(e, r), Pa(e, r), Na(e, r);
1562
1669
  }
1563
- function Da(e, r, a, i) {
1564
- var g, k;
1565
- const t = ra({
1670
+ function _a(e, r, a, i) {
1671
+ var g, v;
1672
+ const t = ya({
1566
1673
  camadas: e.camadas,
1567
1674
  feicoes: e.feicoes,
1568
1675
  camadaAtivaId: e.camadaAtivaId,
@@ -1572,38 +1679,41 @@ function Da(e, r, a, i) {
1572
1679
  editingLayerId: e.editingLayerId,
1573
1680
  editingFeatureId: e.editingFeatureId,
1574
1681
  searchQuery: e.searchQuery,
1682
+ titulo: e.titulo,
1683
+ mostrarBusca: e.mostrarBusca,
1684
+ limitesPorCamada: e.expandedFeatureLimits,
1575
1685
  mostrarBotaoColapsar: e.flutuante && e.getAttribute("colapsavel") !== "false"
1576
- }), o = e.mostrarMapasBase ? Ke(e.mapasBase, e.mapaBaseAtivo, e.mapasBaseRecolhido) : "", n = e.mostrarRodape ? Qe(e.camadas, e.feicoes, e.selectedFeatureIds) : "", s = r.getElementById("ui-layer-tree-mount"), l = a.scrollTop, c = s ? s.scrollTop : 0, d = r.activeElement, p = d && a.contains(d) ? d.id : "", f = d && !p && a.contains(d) ? Array.from(d.attributes).find((x) => x.name.startsWith("data-") && x.value !== "") : void 0, m = d && "selectionStart" in d ? d.selectionStart : null;
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;
1577
1687
  a.innerHTML = `
1578
1688
  ${t}
1579
1689
  ${n}
1580
1690
  ${o}
1581
- `, a.scrollTop = l;
1582
- const u = r.getElementById("ui-layer-tree-mount");
1583
- if (u && (u.scrollTop = c), p) {
1584
- const x = r.getElementById(p);
1691
+ `, 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);
1585
1695
  if (x && (x.focus({ preventScroll: !0 }), m !== null && typeof x.setSelectionRange == "function"))
1586
1696
  try {
1587
1697
  x.setSelectionRange(m, m);
1588
1698
  } catch {
1589
1699
  }
1590
1700
  }
1591
- !p && f && ((g = P(a, f.name, f.value)) == null || g.focus({ preventScroll: !0 })), (k = r.querySelector("[data-layer-row], [data-feat-row]")) == null || k.setAttribute("tabindex", "0"), qa(e, r), i.bindAll();
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();
1592
1702
  }
1593
- const Pa = '[role="button"][tabindex]', N = "[data-layer-row], [data-feat-row]", Ta = ["color", "range", "checkbox", "radio", "button"];
1594
- function Ce(e) {
1595
- return e instanceof HTMLSelectElement || e instanceof HTMLTextAreaElement ? !0 : e instanceof HTMLInputElement && !Ta.includes(e.type);
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] });
1596
1706
  }
1597
- function Ra(e) {
1598
- return Array.from(e.querySelectorAll(N)).filter((r) => {
1707
+ function Wa(e) {
1708
+ return Array.from(e.querySelectorAll(Y)).filter((r) => {
1599
1709
  const a = r.closest(".ui-children-container");
1600
1710
  return !(a && a.style.display === "none") && !r.classList.contains("ui-search-hidden");
1601
1711
  });
1602
1712
  }
1603
- function _(e, r) {
1604
- r && (e.querySelectorAll(N).forEach((a) => a.setAttribute("tabindex", "-1")), r.setAttribute("tabindex", "0"), r.focus());
1713
+ function ee(e, r) {
1714
+ r && (e.querySelectorAll(Y).forEach((a) => a.setAttribute("tabindex", "-1")), r.setAttribute("tabindex", "0"), r.focus());
1605
1715
  }
1606
- function Oa(e, r) {
1716
+ function Ja(e, r) {
1607
1717
  e.dispatchEvent(
1608
1718
  new MouseEvent("click", {
1609
1719
  bubbles: !0,
@@ -1612,109 +1722,143 @@ function Oa(e, r) {
1612
1722
  })
1613
1723
  );
1614
1724
  }
1615
- function ja(e, r, a) {
1616
- var i;
1617
- if (!Ce(a.composedPath()[0])) {
1618
- if (e.activeSettingsLayerId) {
1619
- a.preventDefault();
1620
- const t = e.activeSettingsLayerId;
1621
- e.activeSettingsLayerId = null, e.solicitarRenderizacao(), (i = P(r, "data-layer-settings", t)) == null || i.focus();
1622
- return;
1623
- }
1624
- e.selectedFeatureIds.size > 0 && (a.preventDefault(), e.limparSelecao(!0));
1725
+ function Za(e, r, a) {
1726
+ var t;
1727
+ if (Oe(a.composedPath()[0])) return;
1728
+ const i = r.querySelector(".confirming");
1729
+ if (i) {
1730
+ a.preventDefault(), i.classList.remove("confirming");
1731
+ return;
1732
+ }
1733
+ if (e.activeSettingsLayerId) {
1734
+ a.preventDefault();
1735
+ const o = e.activeSettingsLayerId;
1736
+ e.activeSettingsLayerId = null, e.solicitarRenderizacao(), (t = T(r, "data-layer-settings", o)) == null || t.focus();
1737
+ return;
1625
1738
  }
1739
+ e.selectedFeatureIds.size > 0 && (a.preventDefault(), e.limparSelecao(!0));
1626
1740
  }
1627
- function Ha(e, r, a) {
1628
- var n;
1629
- const i = a.composedPath()[0];
1630
- if (!(i instanceof HTMLElement) || Ce(i)) return;
1631
- if ((a.key === "Enter" || a.key === " ") && i.matches(Pa)) {
1632
- a.preventDefault(), i.click();
1741
+ function er(e, r, a, i) {
1742
+ var l;
1743
+ const t = i.composedPath()[0];
1744
+ if (!(t instanceof HTMLElement) || Oe(t)) return;
1745
+ if ((i.key === "Enter" || i.key === " ") && t.matches(Xa)) {
1746
+ i.preventDefault(), t.click();
1747
+ return;
1748
+ }
1749
+ if (!t.matches(Y)) return;
1750
+ const o = Wa(r), n = o.indexOf(t);
1751
+ if (i.key === "F2") {
1752
+ 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 }));
1633
1755
  return;
1634
1756
  }
1635
- if (!i.matches(N)) return;
1636
- const t = Ra(e), o = t.indexOf(i);
1637
- switch (a.key) {
1757
+ if ((i.ctrlKey || i.metaKey) && (i.key === "a" || i.key === "A")) {
1758
+ i.preventDefault();
1759
+ const c = Te(
1760
+ e.camadas,
1761
+ e.feicoes,
1762
+ e.expandedLayers,
1763
+ e.searchQuery,
1764
+ void 0,
1765
+ e.expandedFeatureLimits
1766
+ );
1767
+ c.length > 0 && e.selecionarFeicoes(c, !0);
1768
+ return;
1769
+ }
1770
+ if (i.key === "Delete") {
1771
+ const c = a.getElementById("btn-footer-del");
1772
+ if (c && !c.hasAttribute("disabled") && e.selectedFeatureIds.size > 0) {
1773
+ i.preventDefault(), c.click();
1774
+ return;
1775
+ }
1776
+ }
1777
+ switch (i.key) {
1638
1778
  case "ArrowDown":
1639
- a.preventDefault(), _(e, t[Math.min(t.length - 1, o + 1)]);
1779
+ i.preventDefault(), ee(r, o[Math.min(o.length - 1, n + 1)]);
1640
1780
  break;
1641
1781
  case "ArrowUp":
1642
- a.preventDefault(), _(e, t[Math.max(0, o - 1)]);
1782
+ i.preventDefault(), ee(r, o[Math.max(0, n - 1)]);
1643
1783
  break;
1644
1784
  case "Home":
1645
- a.preventDefault(), _(e, t[0]);
1785
+ i.preventDefault(), ee(r, o[0]);
1646
1786
  break;
1647
1787
  case "End":
1648
- a.preventDefault(), _(e, t[t.length - 1]);
1788
+ i.preventDefault(), ee(r, o[o.length - 1]);
1649
1789
  break;
1650
1790
  case "ArrowRight":
1651
1791
  case "ArrowLeft": {
1652
- const s = i.getAttribute("data-layer-row");
1653
- if (!s) return;
1654
- const l = i.closest(".ui-layer-group"), c = (l == null ? void 0 : l.getAttribute("aria-expanded")) === "true";
1655
- a.key === "ArrowRight" !== c && (a.preventDefault(), (n = P(r, "data-layer-expand", s)) == null || n.click());
1792
+ const c = t.getAttribute("data-layer-row");
1793
+ 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());
1656
1796
  break;
1657
1797
  }
1658
1798
  case "Enter":
1659
1799
  case " ":
1660
- a.preventDefault(), Oa(i, a);
1800
+ i.preventDefault(), Ja(t, i);
1661
1801
  break;
1662
1802
  }
1663
1803
  }
1664
- function Na(e, r, a, i, t) {
1804
+ function ar(e, r, a, i, t) {
1665
1805
  t.add(r, "keydown", (o) => {
1666
- o.key === "Escape" && ja(e, a, o);
1667
- }), t.add(i, "keydown", (o) => Ha(i, a, o)), t.add(i, "focusin", (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) => {
1668
1808
  const n = o.composedPath()[0];
1669
- n instanceof HTMLElement && n.matches(N) && (i.querySelectorAll(N).forEach((s) => s.setAttribute("tabindex", "-1")), n.setAttribute("tabindex", "0"));
1809
+ n instanceof HTMLElement && n.matches(Y) && (i.querySelectorAll(Y).forEach((l) => l.setAttribute("tabindex", "-1")), n.setAttribute("tabindex", "0"));
1670
1810
  });
1671
1811
  }
1672
- function Ga(e, r) {
1812
+ function rr(e, r) {
1673
1813
  r.querySelectorAll("[data-layer-row]").forEach((i) => {
1674
1814
  const o = i.getAttribute("data-layer-row") === e.camadaAtivaId;
1675
- i.classList.toggle("active-drawing-layer", o), o ? i.setAttribute("aria-current", "true") : i.removeAttribute("aria-current");
1815
+ i.classList.toggle("active-drawing-layer", o), Le(i, "camada-ativa", o), o ? i.setAttribute("aria-current", "true") : i.removeAttribute("aria-current");
1676
1816
  });
1677
1817
  }
1678
- function Va(e, r) {
1679
- r.querySelectorAll(".ui-feat-row").forEach((x) => {
1680
- const w = x.getAttribute("data-feat-row"), C = w ? e.selectedFeatureIds.has(w) : !1;
1681
- x.classList.toggle("selected-row", C), x.setAttribute("aria-selected", String(C));
1682
- const L = x.querySelector(".ui-target-circle");
1683
- L && L.classList.toggle("selected", C);
1684
- }), r.querySelectorAll(".ui-layer-group").forEach((x) => {
1685
- const w = x.getAttribute("data-layer-id"), C = e.feicoes.filter((b) => b.layerId === w), L = x.querySelector(".ui-layer-row .ui-target-circle");
1686
- if (L && C.length > 0) {
1687
- const b = C.every((y) => e.selectedFeatureIds.has(y.id)), h = !b && C.some((y) => e.selectedFeatureIds.has(y.id));
1688
- L.classList.toggle("selected", b), L.classList.toggle("partial", h);
1689
- } else L && L.classList.remove("selected", "partial");
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");
1690
1831
  });
1691
- const a = e.feicoes.filter((x) => e.selectedFeatureIds.has(x.id)), i = a.length > 0, t = r.getElementById("footer-count"), o = r.getElementById("footer-label");
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");
1692
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");
1693
- const n = r.querySelector(".ui-footer-metric"), s = xe(a);
1694
- n && (s ? (n.innerHTML = `${v.reguaMetrica} ${s}`, n.style.display = "inline-flex") : n.style.display = "none");
1695
- const l = r.querySelector(".ui-tree-footer");
1696
- l && (l.classList.toggle("tem-selecao", i), l.classList.toggle("sem-selecao", !i));
1697
- const c = r.querySelector(".ui-footer-actions-gerais");
1698
- c && (c.style.display = i ? "none" : "flex");
1699
- const d = r.querySelector(".ui-footer-bulk-actions");
1700
- d && (d.style.display = i ? "flex" : "none"), ["btn-footer-vis", "btn-footer-lock", "btn-footer-del"].forEach((x) => {
1701
- const w = r.getElementById(x);
1702
- w && (w.disabled = !i, w.classList.toggle("disabled", !i));
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));
1703
1844
  });
1704
- const p = r.querySelector(".ui-footer-move-wrapper");
1705
- p && p.classList.toggle("disabled", !i);
1706
- const f = r.getElementById("select-footer-move");
1707
- f && (f.disabled = !i);
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);
1708
1849
  const m = r.querySelector(".ui-footer-color-wrapper");
1709
1850
  m && m.classList.toggle("disabled", !i);
1710
- const u = r.getElementById("input-footer-color");
1711
- u && (u.disabled = !i);
1712
- let g = r.getElementById("btn-footer-clear");
1713
- const k = r.querySelector(".ui-footer-right");
1714
- i && !g && k ? (g = document.createElement("button"), g.id = "btn-footer-clear", g.className = "ui-footer-btn btn-clear-footer", g.title = "Limpar seleção", g.innerHTML = v.fechar, g.addEventListener("click", () => e.limparSelecao(!0)), k.appendChild(g)) : !i && g && g.remove();
1715
- }
1716
- function Ua(e, r, a, i, t) {
1717
- const o = ea(e.camadas, e.feicoes, e.expandedLayers, e.searchQuery), n = !i && !o.includes(r) && e.feicoes.some((l) => l.id === r), s = aa(
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(
1718
1862
  n ? [...o, r] : o,
1719
1863
  e.selectedFeatureIds,
1720
1864
  e.lastClickedFeatureId,
@@ -1722,35 +1866,35 @@ function Ua(e, r, a, i, t) {
1722
1866
  a,
1723
1867
  i
1724
1868
  );
1725
- s && (e.selectedFeatureIds = s.selecionados, e.lastClickedFeatureId = s.ultimoClicadoId, e.sincronizarSelecaoDOM(), t && e.notificarMudancaSelecao());
1869
+ l && (e.selectedFeatureIds = l.selecionados, e.lastClickedFeatureId = l.ultimoClicadoId, e.sincronizarSelecaoDOM(), t && e.notificarMudancaSelecao());
1726
1870
  }
1727
- function Ya(e, r, a) {
1871
+ function or(e, r, a) {
1728
1872
  const i = r || [];
1729
1873
  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());
1730
1874
  }
1731
- function _a(e, r) {
1875
+ function nr(e, r) {
1732
1876
  e.selectedFeatureIds.size !== 0 && (e.selectedFeatureIds.clear(), e.lastClickedFeatureId = null, e.sincronizarSelecaoDOM(), r && e.notificarMudancaSelecao());
1733
1877
  }
1734
- function Ka(e) {
1878
+ function sr(e) {
1735
1879
  const r = e.feicoes.filter((a) => e.selectedFeatureIds.has(a.id));
1736
1880
  e.dispararEvento("ui-feicoes-selecionadas", {
1737
1881
  feicoesIds: Array.from(e.selectedFeatureIds),
1738
1882
  feicoes: r
1739
1883
  }), 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 });
1740
1884
  }
1741
- class Xa {
1885
+ class lr {
1742
1886
  constructor(r) {
1743
1887
  A(this, "origens", /* @__PURE__ */ new Map());
1744
1888
  A(this, "removidas", /* @__PURE__ */ new Set());
1745
- A(this, "salvarComDebounce", ye(() => this.salvar(), 200));
1889
+ A(this, "salvarComDebounce", Fe(() => this.salvar(), 200));
1746
1890
  this.instantaneo = r;
1747
1891
  }
1748
1892
  chaveAtual() {
1749
1893
  const r = this.instantaneo();
1750
- return ma(r.storageKey, r.id);
1894
+ return La(r.storageKey, r.id);
1751
1895
  }
1752
1896
  carregar() {
1753
- return ie(this.chaveAtual());
1897
+ return fe(this.chaveAtual());
1754
1898
  }
1755
1899
  /** Versão com debounce, para interações contínuas (seletor de cor, slider de opacidade). */
1756
1900
  agendar() {
@@ -1759,8 +1903,8 @@ class Xa {
1759
1903
  salvar() {
1760
1904
  const r = this.instantaneo();
1761
1905
  if (!r.persistir || !r.conectado) return;
1762
- const a = this.chaveAtual(), i = ha({
1763
- estadoAnterior: ie(a),
1906
+ const a = this.chaveAtual(), i = Ma({
1907
+ estadoAnterior: fe(a),
1764
1908
  origensCamadas: this.origens,
1765
1909
  camadas: r.camadas,
1766
1910
  expandedLayers: r.expandedLayers,
@@ -1771,36 +1915,51 @@ class Xa {
1771
1915
  altura: r.altura,
1772
1916
  camadasRemovidas: this.removidas
1773
1917
  });
1774
- this.removidas.clear(), ga(a, i);
1918
+ this.removidas.clear(), Ca(a, i);
1775
1919
  }
1776
1920
  limpar() {
1777
- va(this.chaveAtual());
1921
+ $a(this.chaveAtual());
1778
1922
  }
1779
1923
  // --- Origens (como a camada chegou do consumidor) e remoções ---
1780
1924
  limparOrigens() {
1781
1925
  this.origens.clear();
1782
1926
  }
1783
1927
  registrarOrigem(r) {
1784
- this.origens.set(r.id, Le(r));
1928
+ this.origens.set(r.id, Re(r));
1785
1929
  }
1786
1930
  esquecerCamada(r) {
1787
1931
  this.origens.delete(r), this.removidas.add(r);
1788
1932
  }
1789
1933
  /** Aplica por cima de `camadas` o que foi lembrado (expansão, visibilidade, travas, opacidade, cor, ordem). */
1790
1934
  reidratar(r, a, i) {
1791
- ba(r, a, i, this.origens);
1935
+ Sa(r, a, i, this.origens);
1792
1936
  }
1793
1937
  }
1794
- function $e(e, r = null) {
1795
- const a = [];
1938
+ function je(e, r = null, a = /* @__PURE__ */ new Set()) {
1939
+ const i = [];
1940
+ if (!Array.isArray(e)) return i;
1941
+ for (const t of e) {
1942
+ if (!t || typeof t != "object" || !t.id) continue;
1943
+ const o = String(t.id);
1944
+ if (a.has(o)) continue;
1945
+ a.add(o);
1946
+ 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));
1948
+ }
1949
+ return i;
1950
+ }
1951
+ function Ne(e) {
1952
+ if (!Array.isArray(e)) return [];
1953
+ const r = /* @__PURE__ */ new Set(), a = [];
1796
1954
  for (const i of e) {
1797
- const t = { ...i };
1798
- r && t.parentId === void 0 && (t.parentId = r), a.push(t), Array.isArray(i.children) && i.children.length > 0 && a.push(...$e(i.children, i.id));
1955
+ if (!i || typeof i != "object" || !i.id) continue;
1956
+ const t = String(i.id);
1957
+ r.has(t) || (r.add(t), a.push({ ...i, id: t }));
1799
1958
  }
1800
1959
  return a;
1801
1960
  }
1802
- function Qa(e, r, a) {
1803
- if (e.camadas = Array.isArray(r) ? $e(r) : [], e.lembranca.limparOrigens(), e.persistir) {
1961
+ function cr(e, r, a) {
1962
+ if (e.camadas = Array.isArray(r) ? je(r) : [], e.lembranca.limparOrigens(), e.persistir) {
1804
1963
  const t = e.lembranca.carregar();
1805
1964
  e.lembranca.reidratar(e.camadas, t, e.expandedLayers), t != null && t.camadaAtivaId && e.camadas.some((o) => o.id === t.camadaAtivaId) && (e.camadaAtivaId = t.camadaAtivaId);
1806
1965
  } else
@@ -1808,20 +1967,20 @@ function Qa(e, r, a) {
1808
1967
  e.lembranca.registrarOrigem(t), e.expandedLayers.has(t.id) || e.expandedLayers.add(t.id);
1809
1968
  });
1810
1969
  if (Array.isArray(a)) {
1811
- e.feicoes = a.map((n) => ({ ...n }));
1970
+ e.feicoes = Ne(a);
1812
1971
  const t = new Set(e.camadas.map((n) => n.id)), o = e.feicoes.filter((n) => n.layerId && !t.has(n.layerId));
1813
1972
  o.length > 0 && console.warn(
1814
1973
  `[UI-Camadas] ${o.length} feição(ões) possuem 'layerId' não cadastrado nas camadas:`,
1815
1974
  o.map((n) => ({ id: n.id, nome: n.name, layerId: n.layerId }))
1816
- ), se(e.selectedFeatureIds, e.feicoes);
1975
+ ), be(e.selectedFeatureIds, e.feicoes);
1817
1976
  }
1818
1977
  const i = e.getAttribute("camada-ativa");
1819
1978
  e.camadas.length > 0 && (!i || !e.camadas.some((t) => t.id === i)) && (e.camadaAtivaId = e.camadas[0].id), e.salvarLembrancaEstado(), e.solicitarRenderizacao();
1820
1979
  }
1821
- function Ja(e, r) {
1822
- e.feicoes = Array.isArray(r) ? r.map((a) => ({ ...a })) : [], se(e.selectedFeatureIds, e.feicoes), e.solicitarRenderizacao();
1980
+ function dr(e, r) {
1981
+ e.feicoes = Ne(r), be(e.selectedFeatureIds, e.feicoes), e.solicitarRenderizacao();
1823
1982
  }
1824
- function Wa(e, r) {
1983
+ function ur(e, r) {
1825
1984
  if (!r || !r.id) return;
1826
1985
  if (e.camadas.some((i) => i.id === r.id)) {
1827
1986
  console.warn(`[UI-Camadas] adicionarCamada ignorado: já existe uma camada com id '${r.id}'.`);
@@ -1830,13 +1989,13 @@ function Wa(e, r) {
1830
1989
  const a = { ...r };
1831
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();
1832
1991
  }
1833
- function Za(e, r) {
1992
+ function pr(e, r) {
1834
1993
  var a;
1835
1994
  e.camadas.forEach((i) => {
1836
1995
  i.parentId === r && (i.parentId = null);
1837
- }), 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), se(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();
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();
1838
1997
  }
1839
- function er(e, r) {
1998
+ function fr(e, r) {
1840
1999
  if (!(!r || !r.id)) {
1841
2000
  if (e.feicoes.some((a) => a.id === r.id)) {
1842
2001
  console.warn(`[UI-Camadas] adicionarFeicao ignorado: já existe uma feição com id '${r.id}'.`);
@@ -1845,23 +2004,24 @@ function er(e, r) {
1845
2004
  e.feicoes.push({ ...r }), e.solicitarRenderizacao();
1846
2005
  }
1847
2006
  }
1848
- function ar(e, r) {
2007
+ function mr(e, r) {
2008
+ if (!r || typeof r != "object" || !r.id) return;
1849
2009
  const a = e.feicoes.findIndex((i) => i.id === r.id);
1850
2010
  a !== -1 && (e.feicoes[a] = { ...e.feicoes[a], ...r }, e.solicitarRenderizacao());
1851
2011
  }
1852
- function rr(e, r) {
2012
+ function gr(e, r) {
1853
2013
  e.feicoes = e.feicoes.filter((a) => a.id !== r), e.selectedFeatureIds.delete(r), e.solicitarRenderizacao();
1854
2014
  }
1855
- function tr(e) {
2015
+ function vr(e) {
1856
2016
  function i() {
1857
2017
  return e.getMinAltura ? e.getMinAltura() : 140;
1858
2018
  }
1859
2019
  function t() {
1860
2020
  return e.getMaxAltura ? e.getMaxAltura() : 1600;
1861
2021
  }
1862
- function o(c, d = !1) {
1863
- if (c == null || c === "") {
1864
- e.hostElement.style.removeProperty("height"), e.hostElement.style.removeProperty("--ui-camadas-altura"), d && e.hostElement.dispatchEvent(
2022
+ function o(s, u = !1) {
2023
+ if (s == null || s === "") {
2024
+ e.hostElement.style.removeProperty("height"), e.hostElement.style.removeProperty("--ui-camadas-altura"), u && e.hostElement.dispatchEvent(
1865
2025
  new CustomEvent("ui-redimensionar-altura", {
1866
2026
  bubbles: !0,
1867
2027
  composed: !0,
@@ -1870,79 +2030,79 @@ function tr(e) {
1870
2030
  );
1871
2031
  return;
1872
2032
  }
1873
- const p = typeof c == "number" ? c : parseFloat(String(c));
1874
- if (isNaN(p)) return;
1875
- const f = Math.max(i(), Math.min(t(), Math.round(p)));
1876
- e.hostElement.style.height = `${f}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${f}px`), d && e.hostElement.dispatchEvent(
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(
1877
2037
  new CustomEvent("ui-redimensionar-altura", {
1878
2038
  bubbles: !0,
1879
2039
  composed: !0,
1880
- detail: { altura: f }
2040
+ detail: { altura: p }
1881
2041
  })
1882
2042
  );
1883
2043
  }
1884
2044
  let n = null;
1885
- function s() {
2045
+ function l() {
1886
2046
  if (!e.resizerElement) return;
1887
- let c = !1, d = 0, p = 0;
1888
- const f = (u) => {
1889
- if (u.button !== 0) return;
1890
- u.preventDefault(), u.stopPropagation(), c = !0, d = u.clientY, p = e.hostElement.getBoundingClientRect().height, e.resizerElement.classList.add("ui-camadas-resizer--ativo"), e.hostElement.classList.add("ui-camadas--redimensionando");
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");
1891
2051
  try {
1892
- e.resizerElement.setPointerCapture(u.pointerId);
2052
+ e.resizerElement.setPointerCapture(d.pointerId);
1893
2053
  } catch {
1894
2054
  }
1895
- const g = (w) => {
1896
- if (!c) return;
1897
- w.preventDefault();
1898
- const C = w.clientY - d, L = Math.max(i(), Math.min(t(), Math.round(p + C)));
1899
- e.hostElement.style.height = `${L}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${L}px`), e.onRedimensionando && e.onRedimensionando(L), e.hostElement.dispatchEvent(
2055
+ const g = (L) => {
2056
+ 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(
1900
2060
  new CustomEvent("ui-redimensionando-altura", {
1901
2061
  bubbles: !0,
1902
2062
  composed: !0,
1903
- detail: { altura: L }
2063
+ detail: { altura: y }
1904
2064
  })
1905
2065
  );
1906
- }, k = () => {
1907
- var w;
1908
- c = !1, n = null, window.removeEventListener("pointermove", g), window.removeEventListener("pointerup", x), window.removeEventListener("pointercancel", x), (w = e.resizerElement) == null || w.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
1909
- }, x = (w) => {
1910
- if (!c) return;
1911
- c = !1, e.resizerElement.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
2066
+ }, 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) => {
2070
+ if (!s) return;
2071
+ s = !1, e.resizerElement.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
1912
2072
  try {
1913
- e.resizerElement.hasPointerCapture(w.pointerId) && e.resizerElement.releasePointerCapture(w.pointerId);
2073
+ e.resizerElement.hasPointerCapture(L.pointerId) && e.resizerElement.releasePointerCapture(L.pointerId);
1914
2074
  } catch {
1915
2075
  }
1916
2076
  window.removeEventListener("pointermove", g), window.removeEventListener("pointerup", x), window.removeEventListener("pointercancel", x);
1917
- const C = e.hostElement.getBoundingClientRect().height, L = Math.round(C);
1918
- e.onAlturaAlterada && e.onAlturaAlterada(L), e.hostElement.dispatchEvent(
2077
+ const $ = e.hostElement.getBoundingClientRect().height, y = Math.round($);
2078
+ e.onAlturaAlterada && e.onAlturaAlterada(y), e.hostElement.dispatchEvent(
1919
2079
  new CustomEvent("ui-redimensionar-altura", {
1920
2080
  bubbles: !0,
1921
2081
  composed: !0,
1922
- detail: { altura: L }
2082
+ detail: { altura: y }
1923
2083
  })
1924
2084
  );
1925
2085
  };
1926
- n = k, window.addEventListener("pointermove", g), window.addEventListener("pointerup", x), window.addEventListener("pointercancel", x);
1927
- }, m = (u) => {
1928
- u.preventDefault(), u.stopPropagation(), o(null, !0), e.onAlturaAlterada && e.onAlturaAlterada(null);
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);
1929
2089
  };
1930
- e.listeners.add(e.resizerElement, "pointerdown", f), e.listeners.add(e.resizerElement, "dblclick", m);
2090
+ e.listeners.add(e.resizerElement, "pointerdown", p), e.listeners.add(e.resizerElement, "dblclick", m);
1931
2091
  }
1932
- function l() {
2092
+ function c() {
1933
2093
  n == null || n(), e.listeners.cleanup();
1934
2094
  }
1935
2095
  return {
1936
- init: s,
2096
+ init: l,
1937
2097
  definirAltura: o,
1938
- destruir: l
2098
+ destruir: c
1939
2099
  };
1940
2100
  }
1941
- const R = class R extends He {
2101
+ const j = class j extends aa {
1942
2102
  constructor() {
1943
2103
  super();
1944
2104
  A(this, "shadow");
1945
- A(this, "listeners", new Ne());
2105
+ A(this, "listeners", new ra());
1946
2106
  A(this, "dragDropManager");
1947
2107
  A(this, "resizerController");
1948
2108
  A(this, "alturaCustomizada", null);
@@ -1950,7 +2110,7 @@ const R = class R extends He {
1950
2110
  A(this, "profundidadeLote", 0);
1951
2111
  A(this, "renderPendente", !1);
1952
2112
  /** @internal */
1953
- A(this, "lembranca", new Xa(() => ({
2113
+ A(this, "lembranca", new lr(() => ({
1954
2114
  persistir: this.persistir,
1955
2115
  conectado: this.conectado,
1956
2116
  storageKey: this.storageKey,
@@ -1966,8 +2126,9 @@ const R = class R extends He {
1966
2126
  // Estado interno
1967
2127
  A(this, "camadas", []);
1968
2128
  A(this, "feicoes", []);
1969
- A(this, "mapasBase", [...we]);
2129
+ A(this, "mapasBase", [...ze]);
1970
2130
  A(this, "expandedLayers", /* @__PURE__ */ new Set());
2131
+ A(this, "expandedFeatureLimits", /* @__PURE__ */ new Map());
1971
2132
  A(this, "selectedFeatureIds", /* @__PURE__ */ new Set());
1972
2133
  A(this, "lastClickedFeatureId", null);
1973
2134
  A(this, "activeSettingsLayerId", null);
@@ -1977,19 +2138,19 @@ const R = class R extends He {
1977
2138
  A(this, "corpoElement");
1978
2139
  A(this, "btnExpandirFlutuante");
1979
2140
  this.shadow = this.attachShadow({ mode: "open" }), this.shadow.innerHTML = `
1980
- <style>${xa}</style>
1981
- <div class="ui-camadas-container" id="panel-container" role="region" aria-label="Painel de Camadas">
1982
- <div class="ui-camadas-corpo" id="painel-corpo"></div>
1983
- <div class="ui-camadas-resizer-altura" id="resizer-altura" title="Arraste para redimensionar a altura (duplo-clique para resetar)" aria-label="Redimensionar altura">
2141
+ <style>${Fa}</style>
2142
+ <div class="ui-camadas-container" id="panel-container" part="base" role="region" aria-label="Painel de Camadas">
2143
+ <div class="ui-camadas-corpo" id="painel-corpo" part="corpo"></div>
2144
+ <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">
1984
2145
  <span class="ui-camadas-resizer-grip"></span>
1985
2146
  </div>
1986
2147
  </div>
1987
- <button class="ui-camadas-toggle-flutuante" id="btn-expandir-flutuante" title="Expandir Painel de Camadas" aria-label="Expandir Painel de Camadas">
1988
- ${v.camadas}
2148
+ <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
+ ${b.camadas}
1989
2150
  </button>
1990
- `, this.corpoElement = this.shadow.getElementById("painel-corpo"), this.btnExpandirFlutuante = this.shadow.getElementById("btn-expandir-flutuante"), this.dragDropManager = new pa(this, this.shadow);
2151
+ `, this.corpoElement = this.shadow.getElementById("painel-corpo"), this.btnExpandirFlutuante = this.shadow.getElementById("btn-expandir-flutuante"), this.dragDropManager = new ka(this, this.shadow);
1991
2152
  const a = this.shadow.getElementById("resizer-altura");
1992
- this.resizerController = tr({
2153
+ this.resizerController = vr({
1993
2154
  hostElement: this,
1994
2155
  resizerElement: a,
1995
2156
  listeners: this.listeners,
@@ -2031,20 +2192,20 @@ const R = class R extends He {
2031
2192
  }
2032
2193
  connectedCallback() {
2033
2194
  if (this.persistir) {
2034
- const a = ie(this.obterChaveStorageAtual());
2195
+ const a = fe(this.obterChaveStorageAtual());
2035
2196
  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));
2036
2197
  }
2037
- this.hasAttribute("altura") && this.resizerController.definirAltura(this.getAttribute("altura"), !1), this.persistir && !this.storageKey && !this.id && (R.instanciasChavePadrao.size > 0 && console.warn(
2198
+ this.hasAttribute("altura") && this.resizerController.definirAltura(this.getAttribute("altura"), !1), this.persistir && !this.storageKey && !this.id && (j.instanciasChavePadrao.size > 0 && console.warn(
2038
2199
  "[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."
2039
- ), R.instanciasChavePadrao.add(this)), this.resizerController.init(), this.render(), this.conectarEventosGerais(), Na(this, this, this.shadow, this.corpoElement, this.listeners), this.conectado = !0, this.camadas.length > 0 && this.salvarLembrancaEstado();
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();
2040
2201
  }
2041
2202
  disconnectedCallback() {
2042
2203
  var a, i;
2043
- this.conectado = !1, R.instanciasChavePadrao.delete(this), (a = this.resizerController) == null || a.destruir(), (i = this.dragDropManager) == null || i.destruir(), Ca(this), this.listeners.cleanup();
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();
2044
2205
  }
2045
2206
  attributeChangedCallback(a, i, t) {
2046
- var o;
2047
- i !== t && (a === "colapsado" ? this.salvarLembrancaEstado() : a === "camada-ativa" ? (this.sincronizarCamadaAtivaDOM(), this.salvarLembrancaEstado()) : a === "mapa-base-ativo" ? t && this.marcarMapaBaseAtivoNoDOM(t) : a === "mostrar-mapas-base" || a === "mapas-base-recolhido" || a === "mostrar-rodape" || a === "mostrar-busca" || a === "colapsavel" || a === "flutuante" ? this.solicitarRenderizacao() : a === "altura" && ((o = this.resizerController) == null || o.definirAltura(t, !1)));
2207
+ var o, n;
2208
+ i !== t && (a === "colapsado" ? this.salvarLembrancaEstado() : a === "camada-ativa" ? (this.sincronizarCamadaAtivaDOM(), this.salvarLembrancaEstado()) : a === "densidade" ? this.salvarLembrancaEstado() : a === "mapa-base-ativo" ? t && this.marcarMapaBaseAtivoNoDOM(t) : a === "titulo" || a === "mostrar-mapas-base" || a === "mapas-base-recolhido" || a === "mostrar-rodape" || a === "mostrar-busca" || a === "colapsavel" || a === "flutuante" ? this.solicitarRenderizacao() : a === "altura" ? (o = this.resizerController) == null || o.definirAltura(t, !1) : (a === "min-altura" || a === "max-altura") && this.alturaCustomizada !== null && ((n = this.resizerController) == null || n.definirAltura(this.alturaCustomizada, !1)));
2048
2209
  }
2049
2210
  // --- Getters e Setters de Propriedades Reativas ---
2050
2211
  get titulo() {
@@ -2075,7 +2236,7 @@ const R = class R extends He {
2075
2236
  t.classList.toggle("active", o), t.setAttribute("aria-pressed", String(o));
2076
2237
  });
2077
2238
  const i = this.shadow.querySelector("[data-basemap-atual]");
2078
- i && (i.textContent = Ee(this.mapasBase, a));
2239
+ i && (i.textContent = Be(this.mapasBase, a));
2079
2240
  }
2080
2241
  /** Seção "Mapa Base" recolhida (só o cabeçalho com o mapa ativo). Atributo `mapas-base-recolhido`. */
2081
2242
  get mapasBaseRecolhido() {
@@ -2178,7 +2339,7 @@ const R = class R extends He {
2178
2339
  this.lembranca.salvar();
2179
2340
  }
2180
2341
  limparLembranca() {
2181
- this.lembranca.limpar();
2342
+ this.expandedFeatureLimits.clear(), this.lembranca.limpar();
2182
2343
  }
2183
2344
  // --- API Pública de Alta Ergonomia ---
2184
2345
  //
@@ -2209,10 +2370,10 @@ const R = class R extends He {
2209
2370
  this.definirMapasBase(a);
2210
2371
  }
2211
2372
  definirCamadas(a, i) {
2212
- Qa(this, a, i);
2373
+ cr(this, a, i);
2213
2374
  }
2214
2375
  definirFeicoes(a) {
2215
- Ja(this, a);
2376
+ dr(this, a);
2216
2377
  }
2217
2378
  definirMapasBase(a) {
2218
2379
  this.mapasBase = Array.isArray(a) ? [...a] : [], this.solicitarRenderizacao();
@@ -2236,28 +2397,28 @@ const R = class R extends He {
2236
2397
  return this.feicoes.filter((a) => this.selectedFeatureIds.has(a.id));
2237
2398
  }
2238
2399
  adicionarCamada(a) {
2239
- Wa(this, a);
2400
+ ur(this, a);
2240
2401
  }
2241
2402
  removerCamada(a) {
2242
- Za(this, a);
2403
+ pr(this, a);
2243
2404
  }
2244
2405
  adicionarFeicao(a) {
2245
- er(this, a);
2406
+ fr(this, a);
2246
2407
  }
2247
2408
  atualizarFeicao(a) {
2248
- ar(this, a);
2409
+ mr(this, a);
2249
2410
  }
2250
2411
  removerFeicao(a) {
2251
- rr(this, a);
2412
+ gr(this, a);
2252
2413
  }
2253
2414
  selecionarFeicao(a, i = !1, t = !1, o = !1) {
2254
- Ua(this, a, i, t, o);
2415
+ ir(this, a, i, t, o);
2255
2416
  }
2256
2417
  selecionarFeicoes(a, i = !1) {
2257
- Ya(this, a, i);
2418
+ or(this, a, i);
2258
2419
  }
2259
2420
  limparSelecao(a = !1) {
2260
- _a(this, a);
2421
+ nr(this, a);
2261
2422
  }
2262
2423
  expandirTodas() {
2263
2424
  this.expandedLayers = new Set(this.camadas.map((a) => a.id)), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
@@ -2265,6 +2426,14 @@ const R = class R extends He {
2265
2426
  colapsarTodas() {
2266
2427
  this.expandedLayers.clear(), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
2267
2428
  }
2429
+ alternarExpansao(a) {
2430
+ a && (this.expandedLayers.has(a) ? this.expandedLayers.delete(a) : this.expandedLayers.add(a), this.salvarLembrancaEstado(), this.solicitarRenderizacao());
2431
+ }
2432
+ incrementarLimiteFeicoes(a) {
2433
+ if (!a) return;
2434
+ const i = this.expandedFeatureLimits.get(a) ?? 80;
2435
+ this.expandedFeatureLimits.set(a, i + 80), this.solicitarRenderizacao();
2436
+ }
2268
2437
  alternarVisibilidadeTodas(a = !1) {
2269
2438
  const t = !this.camadas.some((o) => o.visible !== !1);
2270
2439
  this.camadas.forEach((o) => {
@@ -2313,7 +2482,7 @@ const R = class R extends He {
2313
2482
  );
2314
2483
  }
2315
2484
  render() {
2316
- this.corpoElement && Da(this, this.shadow, this.corpoElement, this.dragDropManager);
2485
+ this.corpoElement && _a(this, this.shadow, this.corpoElement, this.dragDropManager);
2317
2486
  }
2318
2487
  // --- Conexão de Eventos ---
2319
2488
  conectarEventosGerais() {
@@ -2321,27 +2490,27 @@ const R = class R extends He {
2321
2490
  }
2322
2491
  // --- Sincronização de DOM (delegada) ---
2323
2492
  sincronizarCamadaAtivaDOM() {
2324
- Ga(this, this.shadow);
2493
+ rr(this, this.shadow);
2325
2494
  }
2326
2495
  sincronizarSelecaoDOM() {
2327
- Va(this, this.shadow);
2496
+ tr(this, this.shadow);
2328
2497
  }
2329
2498
  // --- Auxiliares Internos ---
2330
2499
  notificarMudancaSelecao() {
2331
- Ka(this);
2500
+ sr(this);
2332
2501
  }
2333
2502
  };
2334
2503
  /** Painéis conectados sem `id` nem `storage-key`: dividem a mesma chave de persistência. */
2335
- A(R, "instanciasChavePadrao", /* @__PURE__ */ new Set());
2336
- let G = R;
2337
- class ir extends G {
2504
+ A(j, "instanciasChavePadrao", /* @__PURE__ */ new Set());
2505
+ let K = j;
2506
+ class br extends K {
2338
2507
  }
2339
- class or extends G {
2508
+ class hr extends K {
2340
2509
  }
2341
- ne("ui-camadas", G);
2342
- ne("ui-painel-camadas", ir);
2343
- ne("ui-layer-panel", or);
2344
- function ur(e) {
2510
+ ge("ui-camadas", K);
2511
+ ge("ui-painel-camadas", br);
2512
+ ge("ui-layer-panel", hr);
2513
+ function Lr(e) {
2345
2514
  var r;
2346
2515
  return {
2347
2516
  id: e.id,
@@ -2358,7 +2527,7 @@ function ur(e) {
2358
2527
  dados: e.dados
2359
2528
  };
2360
2529
  }
2361
- function pr(e, r = "levantamento", a = "feicoes") {
2530
+ function Cr(e, r = "levantamento", a = "feicoes") {
2362
2531
  return {
2363
2532
  id: e.id,
2364
2533
  nome: e.name,
@@ -2377,9 +2546,9 @@ function pr(e, r = "levantamento", a = "feicoes") {
2377
2546
  dados: typeof e.dados == "object" && e.dados !== null ? e.dados : void 0
2378
2547
  };
2379
2548
  }
2380
- function fr(e, r = "") {
2381
- var o, n, s, l;
2382
- const a = ((o = e.geometria) == null ? void 0 : o.tipo) || ((n = e.geometria) == null ? void 0 : n.type) || e.tipo || e.type || "Polygon", i = ((s = e.geometria) == null ? void 0 : s.coordenadas) || ((l = e.geometria) == null ? void 0 : l.coordinates) || e.coordinates, t = e.cor || e.color;
2549
+ function $r(e, r = "") {
2550
+ var o, n, l, c;
2551
+ 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;
2383
2552
  return {
2384
2553
  id: String(e.id),
2385
2554
  name: e.nome || e.name || `Feição ${e.id}`,
@@ -2396,41 +2565,41 @@ function fr(e, r = "") {
2396
2565
  };
2397
2566
  }
2398
2567
  export {
2399
- pa as CamadasDragDropManager,
2400
- v as ICONES,
2401
- ke as LIMITE_FEICOES_POR_CAMADA,
2402
- we as MAPAS_BASE_PADRAO,
2403
- G as UICamadas,
2404
- or as UILayerPanel,
2405
- vr as UIMapaBase,
2406
- ir as UIPainelCamadas,
2407
- br as UISeletorMapaBase,
2408
- Z as calcularAreaAnelSimples,
2409
- he as calcularAreaPoligono,
2410
- be as calcularComprimentoLinha,
2411
- Ve as calcularDistanciaPontos,
2412
- aa as calcularSelecaoFeicao,
2413
- ie as carregarEstadoPersistido,
2414
- Ze as construirHierarquiaCamadas,
2415
- pr as converterCamadaItemParaCanvasLayer,
2416
- ur as converterCanvasLayerParaCamadaItem,
2417
- fr as converterFeicaoParaItem,
2418
- S as escapeHtml,
2419
- Ie as filtrarCamadasPorBusca,
2420
- K as filtrarFeicoesPorBusca,
2421
- xe as formatarMetricaFeicoes,
2422
- Xe as formatarOpcoesCamadasHierarquicas,
2423
- ma as gerarChaveStorage,
2424
- va as limparEstadoPersistido,
2425
- ha as montarEstadoPersistido,
2426
- Ee as nomeDoMapaBase,
2427
- ea as obterIdsVisiveisFeicoes,
2428
- ba as reidratarCamadasComOverrides,
2429
- se as removerSelecoesInvalidas,
2430
- ra as renderizarArvoreCamadas,
2431
- Ke as renderizarGridMapasBase,
2432
- Qe as renderizarRodapeAcoes,
2433
- We as renderizarThumbGeometria,
2434
- ga as salvarEstadoPersistido,
2435
- Le as snapshotCamada
2568
+ ka as CamadasDragDropManager,
2569
+ 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,
2587
+ 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
2436
2605
  };