@thibezer/ui-components-kit 2.11.1 → 2.12.2

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