@thibezer/ui-components-kit 2.12.4 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/CHANGELOG.md +668 -639
  2. package/dist/camadas.cjs +106 -106
  3. package/dist/camadas.js +1341 -1023
  4. package/dist/canvas.cjs +31 -31
  5. package/dist/canvas.js +1946 -1806
  6. package/dist/components/ui-camadas/camadas-arraste-controles.d.ts +2 -1
  7. package/dist/components/ui-camadas/camadas-atualizacao-incremental.d.ts +24 -0
  8. package/dist/components/ui-camadas/camadas-colecao.d.ts +3 -1
  9. package/dist/components/ui-camadas/camadas-drag-drop.d.ts +10 -0
  10. package/dist/components/ui-camadas/camadas-eventos-arvore.d.ts +5 -0
  11. package/dist/components/ui-camadas/camadas-eventos-camadas.d.ts +2 -0
  12. package/dist/components/ui-camadas/camadas-linha-feicao.d.ts +29 -0
  13. package/dist/components/ui-camadas/camadas-render.d.ts +8 -1
  14. package/dist/components/ui-camadas/camadas-renomear.d.ts +2 -1
  15. package/dist/components/ui-camadas/camadas-sincronizacao-dom.d.ts +5 -0
  16. package/dist/components/ui-camadas/tipos.d.ts +37 -0
  17. package/dist/components/ui-camadas/ui-camadas.d.ts +11 -2
  18. package/dist/components/ui-canvas-cad/ui-canvas-cad.d.ts +13 -0
  19. package/dist/custom-elements.json +16951 -16143
  20. package/dist/gerencigeo-canvas/motor/motor-formas.d.ts +10 -0
  21. package/dist/gerencigeo-canvas/qualidade.d.ts +52 -0
  22. package/dist/gerencigeo-canvas/renderers/canvas_formas_leaflet.d.ts +11 -0
  23. package/dist/gerencigeo-canvas/renderers/renderizador_formas.d.ts +3 -0
  24. package/dist/gerencigeo-canvas/renderers/tile_renderer.d.ts +1 -1
  25. package/dist/gerencigeo-canvas/types.d.ts +2 -0
  26. package/dist/motor-By2te6PZ.js +1400 -0
  27. package/dist/motor-CkMxd378.cjs +1 -0
  28. package/dist/motor.cjs +1 -1
  29. package/dist/motor.js +1 -1
  30. package/dist/tipos-elementos.d.ts +1 -0
  31. package/dist/tipos-vue.d.ts +1 -0
  32. package/package.json +1 -1
package/dist/camadas.js CHANGED
@@ -1,14 +1,14 @@
1
- var da = Object.defineProperty;
2
- var ua = (e, r, a) => r in e ? da(e, r, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[r] = a;
3
- var w = (e, r, a) => ua(e, typeof r != "symbol" ? r + "" : r, a);
1
+ var ya = Object.defineProperty;
2
+ var xa = (e, r, a) => r in e ? ya(e, r, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[r] = a;
3
+ var A = (e, r, a) => xa(e, typeof r != "symbol" ? r + "" : r, a);
4
4
  /* empty css */
5
- import { d as xe, S as pa } from "./ssr-safe-5cWfJP-s.js";
6
- import { L as fa } from "./listener-bag-DQgv7OON.js";
7
- import { a as Re } from "./parts-CaoQiCfI.js";
8
- import { a as ma } from "./ui-seletor-cor-FYtRccnK.js";
9
- import { f as ga } from "./alvo-digitavel-CzCvNVQ3.js";
10
- import { UIMapaBase as Vr, UISeletorMapaBase as Yr } from "./seletor-mapa-base.js";
11
- const b = {
5
+ import { d as ye, S as wa } from "./ssr-safe-5cWfJP-s.js";
6
+ import { L as Aa } from "./listener-bag-DQgv7OON.js";
7
+ import { a as qe } from "./parts-CaoQiCfI.js";
8
+ import { a as Ea } from "./ui-seletor-cor-FYtRccnK.js";
9
+ import { f as ka } from "./alvo-digitavel-CzCvNVQ3.js";
10
+ import { UIMapaBase as ut, UISeletorMapaBase as pt } from "./seletor-mapa-base.js";
11
+ const h = {
12
12
  camadas: `<svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
13
13
  <polygon points="12 2 2 7 12 12 22 7 12 2"></polygon>
14
14
  <polyline points="2 17 12 22 22 17"></polyline>
@@ -106,27 +106,27 @@ const b = {
106
106
  <line x1="9" y1="3" x2="9" y2="21"></line>
107
107
  <line x1="15" y1="3" x2="15" y2="21"></line>
108
108
  </svg>`
109
- }, Y = 6378137;
110
- function va(e, r) {
109
+ }, V = 6378137;
110
+ function Ia(e, r) {
111
111
  if (!Array.isArray(e) || !Array.isArray(r) || e.length < 2 || r.length < 2 || !Number.isFinite(e[0]) || !Number.isFinite(e[1]) || !Number.isFinite(r[0]) || !Number.isFinite(r[1]))
112
112
  return 0;
113
- 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(
113
+ const a = e[0] * Math.PI / 180, t = e[1] * Math.PI / 180, i = r[0] * Math.PI / 180, o = r[1] * Math.PI / 180, n = i - a, l = o - t, c = Math.min(
114
114
  1,
115
115
  Math.max(
116
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)
117
+ Math.sin(n / 2) * Math.sin(n / 2) + Math.cos(a) * Math.cos(i) * Math.sin(l / 2) * Math.sin(l / 2)
118
118
  )
119
- ), s = Y * 2 * Math.atan2(Math.sqrt(c), Math.sqrt(1 - c));
119
+ ), s = V * 2 * Math.atan2(Math.sqrt(c), Math.sqrt(1 - c));
120
120
  return Number.isFinite(s) ? s : 0;
121
121
  }
122
- function Oe(e) {
122
+ function Pe(e) {
123
123
  if (!Array.isArray(e) || e.length < 2) return 0;
124
124
  if (Array.isArray(e[0]) && Array.isArray(e[0][0]))
125
- return e.reduce((a, i) => a + Oe(i), 0);
125
+ return e.reduce((a, t) => a + Pe(t), 0);
126
126
  let r = 0;
127
127
  for (let a = 0; a < e.length - 1; a++) {
128
- const i = e[a], t = e[a + 1];
129
- Array.isArray(i) && Array.isArray(t) && i.length >= 2 && t.length >= 2 && (r += va([i[0], i[1]], [t[0], t[1]]));
128
+ const t = e[a], i = e[a + 1];
129
+ Array.isArray(t) && Array.isArray(i) && t.length >= 2 && i.length >= 2 && (r += Ia([t[0], t[1]], [i[0], i[1]]));
130
130
  }
131
131
  return r;
132
132
  }
@@ -134,120 +134,120 @@ function ue(e) {
134
134
  if (!Array.isArray(e)) return 0;
135
135
  const r = [];
136
136
  for (let u = 0; u < e.length; u++) {
137
- const p = e[u];
138
- Array.isArray(p) && p.length >= 2 && Number.isFinite(p[0]) && Number.isFinite(p[1]) && r.push([p[0], p[1]]);
137
+ const d = e[u];
138
+ Array.isArray(d) && d.length >= 2 && Number.isFinite(d[0]) && Number.isFinite(d[1]) && r.push([d[0], d[1]]);
139
139
  }
140
140
  r.length > 3 && r[0][0] === r[r.length - 1][0] && r[0][1] === r[r.length - 1][1] && r.pop();
141
141
  const a = r.length;
142
142
  if (a < 3) return 0;
143
- let i = 0;
143
+ let t = 0;
144
144
  for (let u = 0; u < a; u++)
145
- i += r[u][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];
145
+ t += r[u][0];
146
+ const i = t / a * Math.PI / 180, o = Math.cos(i), n = Math.PI / 180, l = r[0][0], c = r[0][1];
147
147
  let s = 0;
148
148
  for (let u = 0; u < a; u++) {
149
- const p = r[u], m = r[(u + 1) % a], f = (p[1] - c) * n * Y * o, g = (p[0] - l) * n * Y, v = (m[1] - c) * n * Y * o, h = (m[0] - l) * n * Y;
150
- s += f * h - v * g;
149
+ const d = r[u], m = r[(u + 1) % a], f = (d[1] - c) * n * V * o, g = (d[0] - l) * n * V, v = (m[1] - c) * n * V * o, y = (m[0] - l) * n * V;
150
+ s += f * y - v * g;
151
151
  }
152
- const d = Math.abs(s) / 2;
153
- return Number.isFinite(d) ? d : 0;
152
+ const p = Math.abs(s) / 2;
153
+ return Number.isFinite(p) ? p : 0;
154
154
  }
155
- function je(e) {
155
+ function De(e) {
156
156
  if (!Array.isArray(e) || e.length === 0) return 0;
157
157
  if (Array.isArray(e[0]) && typeof e[0][0] == "number")
158
158
  return ue(e);
159
159
  if (Array.isArray(e[0]) && Array.isArray(e[0][0])) {
160
160
  if (Array.isArray(e[0][0][0]))
161
- return e.reduce((i, t) => i + je(t), 0);
161
+ return e.reduce((t, i) => t + De(i), 0);
162
162
  const r = ue(e[0]);
163
163
  let a = 0;
164
- for (let i = 1; i < e.length; i++)
165
- a += ue(e[i]);
164
+ for (let t = 1; t < e.length; t++)
165
+ a += ue(e[t]);
166
166
  return Math.max(0, r - a);
167
167
  }
168
168
  return 0;
169
169
  }
170
- function Or(e) {
170
+ function ot(e) {
171
171
  if (!e || e.length === 0) return "";
172
172
  const r = e.filter(
173
- (i) => i.type === "Polygon" || i.type === "MultiPolygon" || i.geometryType === "Polygon"
173
+ (t) => t.type === "Polygon" || t.type === "MultiPolygon" || t.geometryType === "Polygon"
174
174
  );
175
175
  if (r.length > 0) {
176
- const i = r.reduce(
177
- (t, o) => t + (je(o.coordinates) || 0),
176
+ const t = r.reduce(
177
+ (i, o) => i + (De(o.coordinates) || 0),
178
178
  0
179
179
  );
180
- return i >= 1e4 ? `${(i / 1e4).toLocaleString("pt-BR", {
180
+ return t >= 1e4 ? `${(t / 1e4).toLocaleString("pt-BR", {
181
181
  minimumFractionDigits: 1,
182
182
  maximumFractionDigits: 2
183
- })} ha` : `${Math.round(i).toLocaleString("pt-BR")} m²`;
183
+ })} ha` : `${Math.round(t).toLocaleString("pt-BR")} m²`;
184
184
  }
185
185
  const a = e.filter(
186
- (i) => i.type === "LineString" || i.type === "MultiLineString" || i.geometryType === "LineString"
186
+ (t) => t.type === "LineString" || t.type === "MultiLineString" || t.geometryType === "LineString"
187
187
  );
188
188
  if (a.length > 0) {
189
- const i = a.reduce(
190
- (t, o) => t + (Oe(o.coordinates) || 0),
189
+ const t = a.reduce(
190
+ (i, o) => i + (Pe(o.coordinates) || 0),
191
191
  0
192
192
  );
193
- return i >= 1e3 ? `${(i / 1e3).toLocaleString("pt-BR", {
193
+ return t >= 1e3 ? `${(t / 1e3).toLocaleString("pt-BR", {
194
194
  minimumFractionDigits: 1,
195
195
  maximumFractionDigits: 2
196
- })} km` : `${Math.round(i).toLocaleString("pt-BR")} m`;
196
+ })} km` : `${Math.round(t).toLocaleString("pt-BR")} m`;
197
197
  }
198
198
  return "";
199
199
  }
200
- function F(e) {
200
+ function z(e) {
201
201
  return e == null ? "" : String(e).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
202
202
  }
203
- const ba = /^(#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})|(?:rgb|hsl)a?\(\s*[\w.%\s,/+-]+\)|[a-z]{3,30})$/i;
204
- function K(e, r = "#00E08A") {
203
+ const Ca = /^(#(?:[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 H(e, r = "#00E08A") {
205
205
  if (!e || typeof e != "string") return r;
206
206
  const a = e.trim();
207
- return ba.test(a) ? a : r;
207
+ return Ca.test(a) ? a : r;
208
208
  }
209
209
  function pe(e) {
210
210
  return Math.max(0, Math.min(255, Math.round(e))).toString(16).padStart(2, "0");
211
211
  }
212
- function ha(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)));
212
+ function La(e, r, a) {
213
+ const t = r / 100, i = a / 100, o = (c) => (c + e / 30) % 12, n = t * Math.min(i, 1 - i), l = (c) => i - n * Math.max(-1, Math.min(o(c) - 3, Math.min(9 - o(c), 1)));
214
214
  return [l(0) * 255, l(8) * 255, l(4) * 255];
215
215
  }
216
- function xa(e, r = "#000000") {
216
+ function Sa(e, r = "#000000") {
217
217
  if (!e || typeof e != "string") return r;
218
- const a = e.trim().toLowerCase(), i = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.exec(a);
219
- if (i) {
220
- const o = i[1];
218
+ const a = e.trim().toLowerCase(), t = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.exec(a);
219
+ if (t) {
220
+ const o = t[1];
221
221
  return o.length <= 4 ? `#${o[0]}${o[0]}${o[1]}${o[1]}${o[2]}${o[2]}` : `#${o.slice(0, 6)}`;
222
222
  }
223
- const t = /^(rgb|hsl)a?\(([^)]+)\)$/.exec(a);
224
- if (t) {
225
- const o = t[2].split(/[\s,/]+/).filter(Boolean).map((n) => parseFloat(n));
223
+ const i = /^(rgb|hsl)a?\(([^)]+)\)$/.exec(a);
224
+ if (i) {
225
+ const o = i[2].split(/[\s,/]+/).filter(Boolean).map((n) => parseFloat(n));
226
226
  if (o.length >= 3 && o.slice(0, 3).every((n) => !isNaN(n))) {
227
- const [n, l, c] = o, [s, d, u] = t[1] === "rgb" ? [n, l, c] : ha(n, l, c);
228
- return `#${pe(s)}${pe(d)}${pe(u)}`;
227
+ const [n, l, c] = o, [s, p, u] = i[1] === "rgb" ? [n, l, c] : La(n, l, c);
228
+ return `#${pe(s)}${pe(p)}${pe(u)}`;
229
229
  }
230
230
  }
231
231
  return r;
232
232
  }
233
233
  function T(e, r, a) {
234
- const i = e.querySelectorAll(`[${r}]`);
235
- for (let t = 0; t < i.length; t++)
236
- if (i[t].getAttribute(r) === a) return i[t];
234
+ const t = e.querySelectorAll(`[${r}]`);
235
+ for (let i = 0; i < t.length; i++)
236
+ if (t[i].getAttribute(r) === a) return t[i];
237
237
  return null;
238
238
  }
239
- function Ne(e, r = 80) {
239
+ function Te(e, r = 80) {
240
240
  let a = null;
241
- return (...i) => {
241
+ return (...t) => {
242
242
  a && clearTimeout(a), a = setTimeout(() => {
243
- e(...i), a = null;
243
+ e(...t), a = null;
244
244
  }, r);
245
245
  };
246
246
  }
247
- function B(e, r) {
247
+ function P(e, r) {
248
248
  e.setAttribute("title", r), e.setAttribute("aria-label", r);
249
249
  }
250
- const He = [
250
+ const Re = [
251
251
  {
252
252
  id: "none",
253
253
  nome: "Sem Mapa",
@@ -290,16 +290,16 @@ const He = [
290
290
  thumbnailUrl: "https://images.unsplash.com/photo-1518709268805-4e9042af9f23?w=160&auto=format&fit=crop&q=80"
291
291
  }
292
292
  ];
293
- function Ge(e, r) {
294
- const a = Array.isArray(e) ? e.find((i) => i.id === r) : void 0;
293
+ function Oe(e, r) {
294
+ const a = Array.isArray(e) ? e.find((t) => t.id === r) : void 0;
295
295
  return a && typeof a.nome == "string" ? a.nome : "";
296
296
  }
297
- function ya(e = He, r = "satelite", a = !1) {
297
+ function $a(e = Re, r = "satelite", a = !1) {
298
298
  if (!e || e.length === 0) return "";
299
- const i = e.map((t) => {
300
- const o = r === t.id, n = F(t.id), l = F(t.nome), c = F(t.descricao || t.nome);
299
+ const t = e.map((i) => {
300
+ const o = r === i.id, n = z(i.id), l = z(i.nome), c = z(i.descricao || i.nome);
301
301
  let s = "";
302
- return t.thumbnailUrl ? s = `<img class="ui-basemap-preview" src="${F(t.thumbnailUrl)}" alt="" loading="lazy" referrerpolicy="no-referrer" data-basemap-thumb />` : s = `<div class="ui-basemap-preview-none">${b.gradeCad}</div>`, `
302
+ return i.thumbnailUrl ? s = `<img class="ui-basemap-preview" src="${z(i.thumbnailUrl)}" alt="" loading="lazy" referrerpolicy="no-referrer" data-basemap-thumb />` : s = `<div class="ui-basemap-preview-none">${h.gradeCad}</div>`, `
303
303
  <div class="ui-basemap-card ${o ? "active" : ""}" data-basemap-id="${n}" role="button" tabindex="0" aria-pressed="${o}" title="${c}">
304
304
  ${s}
305
305
  <span>${l}</span>
@@ -310,210 +310,279 @@ function ya(e = He, r = "satelite", a = !1) {
310
310
  <div class="ui-basemap-section ${a ? "recolhido" : ""}" part="mapas-base">
311
311
  <button type="button" class="ui-basemap-toggle" data-basemap-toggle="alternar" aria-expanded="${!a}" aria-controls="ui-basemap-grid" title="${a ? "Mostrar mapas base" : "Recolher mapas base"}">
312
312
  <span class="ui-basemap-title">Mapa Base</span>
313
- <span class="ui-basemap-atual" data-basemap-atual>${F(Ge(e, r))}</span>
314
- <span class="ui-chevron-icon ${a ? "" : "open"}">${b.chevronDir}</span>
313
+ <span class="ui-basemap-atual" data-basemap-atual>${z(Oe(e, r))}</span>
314
+ <span class="ui-chevron-icon ${a ? "" : "open"}">${h.chevronDir}</span>
315
315
  </button>
316
316
  ${a ? "" : `<div class="ui-basemap-grid" id="ui-basemap-grid">
317
- ${i}
317
+ ${t}
318
318
  </div>`}
319
319
  </div>
320
320
  `;
321
321
  }
322
- function ye(e) {
322
+ function ne(e) {
323
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);
324
+ const r = e.filter((s) => !!(s && typeof s == "object" && s.id)), a = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map();
325
+ r.forEach((s, p) => {
326
+ a.set(s.id, s), t.set(s.id, p);
327
327
  });
328
- const t = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Set();
328
+ const i = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Set();
329
329
  for (const s of r) {
330
330
  if (o.has(s.id)) continue;
331
- const d = [], u = /* @__PURE__ */ new Map();
332
- let p = s;
333
- for (; p && p.parentId && a.has(p.parentId) && p.parentId !== p.id; ) {
334
- if (u.has(p.id)) {
335
- const m = u.get(p.id), f = d.slice(m);
331
+ const p = [], u = /* @__PURE__ */ new Map();
332
+ let d = s;
333
+ for (; d && d.parentId && a.has(d.parentId) && d.parentId !== d.id; ) {
334
+ if (u.has(d.id)) {
335
+ const m = u.get(d.id), f = p.slice(m);
336
336
  let g = f[0];
337
337
  for (const v of f)
338
- (i.get(v) ?? 1 / 0) < (i.get(g) ?? 1 / 0) && (g = v);
339
- t.add(g);
338
+ (t.get(v) ?? 1 / 0) < (t.get(g) ?? 1 / 0) && (g = v);
339
+ i.add(g);
340
340
  break;
341
341
  }
342
- if (o.has(p.id)) break;
343
- u.set(p.id, d.length), d.push(p.id), p = a.get(p.parentId);
342
+ if (o.has(d.id)) break;
343
+ u.set(d.id, p.length), p.push(d.id), d = a.get(d.parentId);
344
344
  }
345
- for (const m of d) o.add(m);
345
+ for (const m of p) o.add(m);
346
346
  }
347
347
  const n = /* @__PURE__ */ new Map(), l = [];
348
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);
349
+ !i.has(s.id) && !!(s.parentId && a.has(s.parentId) && s.parentId !== s.id) && s.parentId ? (n.has(s.parentId) || n.set(s.parentId, []), n.get(s.parentId).push(s)) : l.push(s);
350
350
  });
351
- function c(s, d, u) {
352
- const p = new Set(u);
353
- p.add(s.id);
351
+ function c(s, p, u) {
352
+ const d = new Set(u);
353
+ d.add(s.id);
354
354
  const f = (n.get(s.id) || (Array.isArray(s.children) ? s.children : [])).filter(
355
- (g) => !!(g && typeof g == "object" && g.id && !p.has(g.id))
355
+ (g) => !!(g && typeof g == "object" && g.id && !d.has(g.id))
356
356
  );
357
357
  return {
358
358
  camada: s,
359
- depth: d,
360
- subcamadas: f.map((g) => c(g, d + 1, p))
359
+ depth: p,
360
+ subcamadas: f.map((g) => c(g, p + 1, d))
361
361
  };
362
362
  }
363
363
  return l.map((s) => c(s, 0, /* @__PURE__ */ new Set()));
364
364
  }
365
- function wa(e, r) {
365
+ function Ma(e, r) {
366
366
  const a = /* @__PURE__ */ new Set();
367
367
  if (!r || !Array.isArray(e)) return a;
368
- const i = /* @__PURE__ */ new Map();
368
+ const t = /* @__PURE__ */ new Map();
369
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();
370
+ !o || typeof o != "object" || !o.id || o.parentId && o.parentId !== o.id && (t.has(o.parentId) || t.set(o.parentId, []), t.get(o.parentId).push(o.id));
371
+ const i = [r];
372
+ for (; i.length > 0; ) {
373
+ const o = i.pop();
374
374
  if (a.has(o)) continue;
375
375
  a.add(o);
376
- const n = i.get(o);
376
+ const n = t.get(o);
377
377
  if (n)
378
378
  for (const l of n)
379
- a.has(l) || t.push(l);
379
+ a.has(l) || i.push(l);
380
380
  }
381
381
  return a;
382
382
  }
383
- function ne(e, r, a) {
383
+ function Q(e, r, a) {
384
384
  if (!a || !Array.isArray(r) || r.length === 0) return [];
385
- const i = wa(e, a);
386
- return r.filter((t) => !!(t && t.layerId && i.has(t.layerId)));
385
+ const t = Ma(e, a);
386
+ return r.filter((i) => !!(i && i.layerId && t.has(i.layerId)));
387
387
  }
388
- function we(e) {
388
+ function se(e) {
389
389
  const r = /* @__PURE__ */ new Map();
390
- e.forEach((i) => i && i.id && r.set(i.id, i));
390
+ e.forEach((t) => t && t.id && r.set(t.id, t));
391
391
  const a = /* @__PURE__ */ new Map();
392
- for (const i of r.values()) {
393
- let t = !1, o = !1;
394
- const n = /* @__PURE__ */ new Set([i.id]);
395
- let l = i.parentId ? r.get(i.parentId) : void 0;
392
+ for (const t of r.values()) {
393
+ let i = !1, o = !1;
394
+ const n = /* @__PURE__ */ new Set([t.id]);
395
+ let l = t.parentId ? r.get(t.parentId) : void 0;
396
396
  for (; l && !n.has(l.id); )
397
- n.add(l.id), l.visible === !1 && (t = !0), l.locked === !0 && (o = !0), l = l.parentId ? r.get(l.parentId) : void 0;
398
- a.set(i.id, { ocultaPorAncestral: t, travadaPorAncestral: o });
397
+ n.add(l.id), l.visible === !1 && (i = !0), l.locked === !0 && (o = !0), l = l.parentId ? r.get(l.parentId) : void 0;
398
+ a.set(t.id, { ocultaPorAncestral: i, travadaPorAncestral: o });
399
399
  }
400
400
  return a;
401
401
  }
402
- function Ae(e) {
403
- const r = we(e);
402
+ function xe(e) {
403
+ const r = se(e);
404
404
  return new Set(
405
405
  e.filter((a) => {
406
- var i;
407
- return a && (a.locked === !0 || ((i = r.get(a.id)) == null ? void 0 : i.travadaPorAncestral) === !0);
406
+ var t;
407
+ return a && (a.locked === !0 || ((t = r.get(a.id)) == null ? void 0 : t.travadaPorAncestral) === !0);
408
408
  }).map((a) => a.id)
409
409
  );
410
410
  }
411
- function Aa(e) {
412
- const r = ye(e), a = Ae(e), i = (t) => {
413
- const o = t.camada, n = t.depth, l = t.subcamadas, c = n > 0 ? "&nbsp;&nbsp;".repeat(n) + "↳ " : l.length > 0 || o.isGroup ? "📁 " : "", s = a.has(o.id), d = `<option value="${F(o.id)}"${s ? " disabled" : ""}>${c}${F(o.name)}${s ? " 🔒" : ""}</option>`, u = l.map((p) => i(p)).join("");
414
- return d + u;
411
+ function Fa(e) {
412
+ const r = ne(e), a = xe(e), t = (i) => {
413
+ const o = i.camada, n = i.depth, l = i.subcamadas, c = n > 0 ? "&nbsp;&nbsp;".repeat(n) + "↳ " : l.length > 0 || o.isGroup ? "📁 " : "", s = a.has(o.id), p = `<option value="${z(o.id)}"${s ? " disabled" : ""}>${c}${z(o.name)}${s ? " 🔒" : ""}</option>`, u = l.map((d) => t(d)).join("");
414
+ return p + u;
415
415
  };
416
- return r.map((t) => i(t)).join("");
416
+ return r.map((i) => t(i)).join("");
417
417
  }
418
- function Ue(e, r) {
418
+ function je(e, r) {
419
419
  return r > 0 ? {
420
- icone: b.alvoEnquadrar,
420
+ icone: h.alvoEnquadrar,
421
421
  texto: `${r} ${r > 1 ? "selecionados" : "selecionado"}`
422
422
  } : {
423
- icone: b.camadas,
423
+ icone: h.camadas,
424
424
  texto: `${e} ${e > 1 ? "camadas" : "camada"}`
425
425
  };
426
426
  }
427
- function Ea(e, r, a) {
428
- const i = r.filter((c) => a.has(c.id)), t = i.length > 0, o = t ? i.length : e.length, n = Ue(e.length, i.length), l = Aa(e);
427
+ function za(e, r, a) {
428
+ const t = r.filter((c) => a.has(c.id)), i = t.length > 0, o = i ? t.length : e.length, n = je(e.length, t.length), l = Fa(e);
429
429
  return `
430
- <div class="ui-tree-footer ${t ? "tem-selecao" : "sem-selecao"}" part="rodape">
430
+ <div class="ui-tree-footer ${i ? "tem-selecao" : "sem-selecao"}" part="rodape">
431
431
  <div class="ui-footer-left">
432
432
  <span class="ui-footer-count" id="footer-count">${o}</span>
433
433
  <span class="ui-footer-label" id="footer-label" role="img" title="${n.texto}" aria-label="${n.texto}">${n.icone}</span>
434
434
  </div>
435
435
 
436
436
  <!-- Criação de camadas/grupos quando não há nada selecionado -->
437
- <div class="ui-footer-actions-gerais" style="display: ${t ? "none" : "flex"};">
437
+ <div class="ui-footer-actions-gerais" style="display: ${i ? "none" : "flex"};">
438
438
  <button class="ui-footer-chip-btn" id="btn-footer-new-group" title="Criar Nova Pasta/Grupo de Camadas" aria-label="Criar Grupo de Camadas">
439
- ${b.moverPasta}
439
+ ${h.moverPasta}
440
440
  <span>Grupo</span>
441
441
  </button>
442
442
  <button class="ui-footer-chip-btn primario" id="btn-footer-new-layer" title="Criar Nova Camada Vetorial" aria-label="Criar Nova Camada">
443
- ${b.mais}
443
+ ${h.mais}
444
444
  <span>Camada</span>
445
445
  </button>
446
446
  </div>
447
447
 
448
448
  <!-- Ações em massa ativadas quando há seleção -->
449
- <div class="ui-footer-right ui-footer-bulk-actions" style="display: ${t ? "flex" : "none"};">
450
- <div class="ui-footer-move-wrapper ${t ? "" : "disabled"}" title="Mover selecionados para outra camada">
451
- <select id="select-footer-move" aria-label="Mover selecionados para outra camada" class="ui-footer-select" ${t ? "" : "disabled"}>
449
+ <div class="ui-footer-right ui-footer-bulk-actions" style="display: ${i ? "flex" : "none"};">
450
+ <div class="ui-footer-move-wrapper ${i ? "" : "disabled"}" title="Mover selecionados para outra camada">
451
+ <select id="select-footer-move" aria-label="Mover selecionados para outra camada" class="ui-footer-select" ${i ? "" : "disabled"}>
452
452
  <option value="" disabled selected>Mover para...</option>
453
453
  ${l}
454
454
  </select>
455
455
  </div>
456
456
 
457
- <button class="ui-footer-btn btn-danger-footer ${t ? "" : "disabled"}" id="btn-footer-del" title="Excluir selecionados" aria-label="Excluir selecionados" ${t ? "" : "disabled"}>
458
- ${b.lixeira}
457
+ <button class="ui-footer-btn btn-danger-footer ${i ? "" : "disabled"}" id="btn-footer-del" title="Excluir selecionados" aria-label="Excluir selecionados" ${i ? "" : "disabled"}>
458
+ ${h.lixeira}
459
459
  </button>
460
460
  </div>
461
461
  </div>
462
462
  `;
463
463
  }
464
464
  const fe = 64;
465
- function Be(e) {
465
+ function Se(e) {
466
466
  return Array.isArray(e) && e.length >= 2 && Number.isFinite(e[0]) && Number.isFinite(e[1]);
467
467
  }
468
- function Ve(e) {
469
- return !Array.isArray(e) || e.length === 0 ? [] : Be(e[0]) ? [e.filter(Be)] : e.flatMap(Ve);
468
+ function Ne(e) {
469
+ return !Array.isArray(e) || e.length === 0 ? [] : Se(e[0]) ? [e.filter(Se)] : e.flatMap(Ne);
470
470
  }
471
- function qe(e) {
471
+ function $e(e) {
472
472
  if (e.length <= fe) return e;
473
473
  const r = e.length / fe, a = [];
474
- for (let i = 0; i < fe; i++) a.push(e[Math.floor(i * r)]);
474
+ for (let t = 0; t < fe; t++) a.push(e[Math.floor(t * r)]);
475
475
  return a.push(e[e.length - 1]), a;
476
476
  }
477
- function ka(e, r, a) {
478
- const i = Ve(r).filter((I) => I.length > 0);
479
- if (i.length === 0) return "";
480
- let t = 1 / 0, o = -1 / 0, n = 1 / 0, l = -1 / 0;
481
- for (const I of i)
482
- for (const [L, q] of I)
483
- q < t && (t = q), q > o && (o = q), -L < n && (n = -L), -L > l && (l = -L);
484
- const c = 16, s = 2, d = c - s * 2, u = o - t, p = l - n, m = Math.max(u, p), f = m > 0 ? d / m : 0, g = s + (d - u * f) / 2, v = s + (d - p * f) / 2, h = (I) => Math.round(I * 100) / 100, k = ([I, L]) => `${h(g + (L - t) * f)},${h(v + (-I - n) * f)}`, C = e === "polygon" || e === "multipolygon", $ = e === "linestring" || e === "multilinestring", y = (I) => `<svg viewBox="0 0 ${c} ${c}" width="100%" height="100%" aria-hidden="true">${I}</svg>`;
485
- if (C) {
486
- const I = i.filter((L) => L.length >= 3).map((L) => `M${qe(L).map(k).join("L")}Z`).join("");
487
- return I ? y(
488
- `<path d="${I}" fill="${a}" fill-opacity="0.45" fill-rule="evenodd" stroke="${a}" stroke-width="1.2" stroke-linejoin="round"/>`
477
+ function Ba(e, r, a) {
478
+ const t = Ne(r).filter((L) => L.length > 0);
479
+ if (t.length === 0) return "";
480
+ let i = 1 / 0, o = -1 / 0, n = 1 / 0, l = -1 / 0;
481
+ for (const L of t)
482
+ for (const [b, $] of L)
483
+ $ < i && (i = $), $ > o && (o = $), -b < n && (n = -b), -b > l && (l = -b);
484
+ const c = 16, s = 2, p = c - s * 2, u = o - i, d = l - n, m = Math.max(u, d), f = m > 0 ? p / m : 0, g = s + (p - u * f) / 2, v = s + (p - d * f) / 2, y = (L) => Math.round(L * 100) / 100, k = ([L, b]) => `${y(g + (b - i) * f)},${y(v + (-L - n) * f)}`, M = e === "polygon" || e === "multipolygon", S = e === "linestring" || e === "multilinestring", w = (L) => `<svg viewBox="0 0 ${c} ${c}" width="100%" height="100%" aria-hidden="true">${L}</svg>`;
485
+ if (M) {
486
+ const L = t.filter((b) => b.length >= 3).map((b) => `M${$e(b).map(k).join("L")}Z`).join("");
487
+ return L ? w(
488
+ `<path d="${L}" fill="${a}" fill-opacity="0.45" fill-rule="evenodd" stroke="${a}" stroke-width="1.2" stroke-linejoin="round"/>`
489
489
  ) : "";
490
490
  }
491
- if ($) {
492
- const I = i.filter((L) => L.length >= 2).map((L) => `M${qe(L).map(k).join("L")}`).join("");
493
- return I ? y(
494
- `<path d="${I}" fill="none" stroke="${a}" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>`
491
+ if (S) {
492
+ const L = t.filter((b) => b.length >= 2).map((b) => `M${$e(b).map(k).join("L")}`).join("");
493
+ return L ? w(
494
+ `<path d="${L}" fill="none" stroke="${a}" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>`
495
495
  ) : "";
496
496
  }
497
497
  return "";
498
498
  }
499
- function Ia(e, r, a) {
500
- const i = K(r, "#00E08A"), t = (e || "").toLowerCase(), o = a !== void 0 ? ka(t, a, i) : "";
501
- return o || (t === "polygon" || t === "multipolygon" ? `<svg viewBox="0 0 16 16" width="11" height="11"><polygon points="2,14 14,14 12,2 4,4" fill="${i}" fill-opacity="0.45" stroke="${i}" stroke-width="1.5"/></svg>` : t === "linestring" || t === "multilinestring" ? `<svg viewBox="0 0 16 16" width="11" height="11"><polyline points="2,13 8,3 14,10" fill="none" stroke="${i}" stroke-width="2"/></svg>` : t === "text" ? `<svg viewBox="0 0 16 16" width="11" height="11"><text x="8" y="12" font-size="12" font-weight="bold" fill="${i}" text-anchor="middle" font-family="sans-serif">T</text></svg>` : `<svg viewBox="0 0 16 16" width="11" height="11"><circle cx="8" cy="8" r="4.2" fill="${i}" stroke="#ffffff" stroke-width="1.2"/></svg>`);
499
+ function qa(e, r, a) {
500
+ const t = H(r, "#00E08A"), i = (e || "").toLowerCase(), o = a !== void 0 ? Ba(i, a, t) : "";
501
+ return o || (i === "polygon" || i === "multipolygon" ? `<svg viewBox="0 0 16 16" width="11" height="11"><polygon points="2,14 14,14 12,2 4,4" fill="${t}" fill-opacity="0.45" stroke="${t}" stroke-width="1.5"/></svg>` : i === "linestring" || i === "multilinestring" ? `<svg viewBox="0 0 16 16" width="11" height="11"><polyline points="2,13 8,3 14,10" fill="none" stroke="${t}" stroke-width="2"/></svg>` : i === "text" ? `<svg viewBox="0 0 16 16" width="11" height="11"><text x="8" y="12" font-size="12" font-weight="bold" fill="${t}" 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="${t}" stroke="#ffffff" stroke-width="1.2"/></svg>`);
502
+ }
503
+ function He(e, r, a) {
504
+ return {
505
+ camadaIdSeguro: z(e.id),
506
+ corCamada: H(e.color, "#00E08A"),
507
+ profundidade: r,
508
+ esmaecida: e.visible === !1 || (a == null ? void 0 : a.ocultaPorAncestral) === !0,
509
+ travadaPelaCamada: e.locked === !0 || (a == null ? void 0 : a.travadaPorAncestral) === !0
510
+ };
511
+ }
512
+ const me = (e, r, a) => `${e} ${e === 1 ? r : a}`;
513
+ function Ge(e, r, a) {
514
+ return a === 0 ? me(e, "feição", "feições") : `${me(e, "feição", "feições")} no grupo (${r} nesta camada) · ${me(a, "subcamada", "subcamadas")}`;
515
+ }
516
+ function Ve(e, r, a, t) {
517
+ return e === 0 && t ? "" : `<span class="ui-count-chip" title="${Ge(e, r, a)}">${e}</span>`;
518
+ }
519
+ function Ue(e, r) {
520
+ const a = r - e;
521
+ return {
522
+ resumo: `Exibindo ${e} de ${r} feições. Use a busca acima para filtrar.`,
523
+ botao: `Mostrar mais (+${Math.min(80, a)})`
524
+ };
525
+ }
526
+ function _e(e, r, a) {
527
+ const t = Ue(r, a);
528
+ return `<div class="ui-truncate-notice" role="note">
529
+ <span>${t.resumo}</span>
530
+ <button type="button" class="ui-truncate-more-btn" data-layer-show-more="${e}">${t.botao}</button>
531
+ </div>`;
532
+ }
533
+ function Ye(e) {
534
+ return `<div class="ui-empty-row"><span>${e ? "Grupo vazio (adicione subcamadas ou feições)" : "Camada vazia"}</span></div>`;
535
+ }
536
+ const Pa = ["name", "color", "visible", "locked", "status", "type", "geometryType", "coordinates", "layerId"];
537
+ function Da(e, r) {
538
+ return Pa.every((a) => e[a] === r[a]);
502
539
  }
503
- const Ye = 80;
504
- function oe(e, r) {
540
+ function Ke(e, r, a, t) {
541
+ const { camadaIdSeguro: i, corCamada: o, profundidade: n } = r, l = z(e.id), c = z(e.name || "Feição"), s = H(e.color, o), p = e.visible !== !1, u = r.travadaPelaCamada, d = e.locked === !0 || u, m = u ? "Bloqueada pela camada" : d ? "Desbloquear Feição" : "Bloquear Feição", f = e.status === "previa" ? '<span class="ui-previa-dot" title="Geometria prévia" aria-label="Geometria prévia"></span>' : "";
542
+ return `
543
+ <div class="ui-feat-row ${a ? "selected-row" : ""} ${p ? "" : "hidden-row"} ${r.esmaecida ? "herdado-oculto" : ""}" data-feat-row="${l}" data-feat-select="${l}" data-feat-layer="${i}" role="treeitem" aria-level="${n + 2}" aria-selected="${a}" tabindex="-1" draggable="true" part="${a ? "feicao feicao-selecionada" : "feicao"}" style="--layer-depth: ${n + 1};" title="Clique para selecionar | Arraste para reordenar">
544
+ <div class="ui-col ui-col-eye" data-feat-eye="${l}" role="button" tabindex="0" aria-label="${p ? "Ocultar Feição" : "Exibir Feição"}" title="${p ? "Ocultar Feição" : "Exibir Feição"}">
545
+ ${p ? h.olhoAberto : h.olhoFechado}
546
+ </div>
547
+
548
+ <div class="ui-col ui-col-lock ${d ? "" : "ui-lock-open"}" data-feat-lock="${l}" ${u ? 'data-locked-by-layer="true"' : ""} role="button" tabindex="0" aria-label="${m}" title="${m}">
549
+ ${d ? h.cadeadoTrancado : h.cadeadoAberto}
550
+ </div>
551
+
552
+ <div class="ui-col ui-col-colorbar" style="background: ${s};"></div>
553
+ <div class="ui-col ui-col-branch"><span style="opacity: 0.35;">└─</span></div>
554
+ <div class="ui-col ui-col-thumb">
555
+ <div class="ui-thumb-box">${qa(e.type || e.geometryType, s, e.coordinates)}</div>
556
+ </div>
557
+
558
+ <div class="ui-col ui-col-name" data-feat-name-trigger="${l}" title="Duplo clique para renomear">
559
+ ${t ? `<input type="text" class="ui-inline-rename-input" data-inline-feat-input="${l}" value="${c}" />` : `<span class="ui-name-text">${c}</span>${f}`}
560
+ </div>
561
+
562
+ <div class="ui-col ui-col-actions">
563
+ <button class="ui-micro-btn" data-feat-fit="${l}" title="Enquadrar no mapa" aria-label="Enquadrar feição no mapa">${h.alvoEnquadrar}</button>
564
+ </div>
565
+
566
+ <div class="ui-col ui-col-target" data-feat-target="${l}" role="button" tabindex="0" aria-label="Selecionar feição" title="Selecionar feição">
567
+ <div class="ui-target-circle ${a ? "selected" : ""}"></div>
568
+ </div>
569
+ </div>
570
+ `;
571
+ }
572
+ const we = 80;
573
+ function te(e, r) {
505
574
  const a = (r || "").trim().toLowerCase();
506
575
  return a ? e.filter(
507
- (i) => (i.name || "").toLowerCase().includes(a) || (i.category || "").toLowerCase().includes(a) || (i.type || "").toLowerCase().includes(a)
576
+ (t) => (t.name || "").toLowerCase().includes(a) || (t.category || "").toLowerCase().includes(a) || (t.type || "").toLowerCase().includes(a)
508
577
  ) : e;
509
578
  }
510
- function Ke(e, r, a) {
511
- var p, m;
512
- const i = (a || "").trim().toLowerCase();
513
- if (!i) return null;
514
- const t = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map();
579
+ function Qe(e, r, a) {
580
+ var d, m;
581
+ const t = (a || "").trim().toLowerCase();
582
+ if (!t) return null;
583
+ const i = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map();
515
584
  for (const f of e)
516
- t.set(f.id, f), f.parentId && f.parentId !== f.id && (o.has(f.parentId) || o.set(f.parentId, []), o.get(f.parentId).push(f.id));
585
+ i.set(f.id, f), f.parentId && f.parentId !== f.id && (o.has(f.parentId) || o.set(f.parentId, []), o.get(f.parentId).push(f.id));
517
586
  const n = /* @__PURE__ */ new Map();
518
587
  for (const f of r) {
519
588
  const g = f.layerId || "";
@@ -521,217 +590,181 @@ function Ke(e, r, a) {
521
590
  }
522
591
  const l = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Set();
523
592
  for (const f of e)
524
- (typeof f.name == "string" ? f.name.toLowerCase() : "").includes(i) ? (l.add(f.id), c.add(f.id)) : oe(n.get(f.id) || [], i).length > 0 && c.add(f.id);
593
+ (typeof f.name == "string" ? f.name.toLowerCase() : "").includes(t) ? (l.add(f.id), c.add(f.id)) : te(n.get(f.id) || [], t).length > 0 && c.add(f.id);
525
594
  const s = new Set(c);
526
595
  for (const f of c) {
527
596
  const g = /* @__PURE__ */ new Set([f]);
528
- let v = (p = t.get(f)) == null ? void 0 : p.parentId;
529
- for (; v && t.has(v) && !g.has(v); )
530
- g.add(v), s.add(v), v = (m = t.get(v)) == null ? void 0 : m.parentId;
597
+ let v = (d = i.get(f)) == null ? void 0 : d.parentId;
598
+ for (; v && i.has(v) && !g.has(v); )
599
+ g.add(v), s.add(v), v = (m = i.get(v)) == null ? void 0 : m.parentId;
531
600
  }
532
- const d = [...l];
533
- for (; d.length > 0; ) {
534
- const f = d.pop();
601
+ const p = [...l];
602
+ for (; p.length > 0; ) {
603
+ const f = p.pop();
535
604
  for (const g of o.get(f) || [])
536
- s.has(g) || (s.add(g), d.push(g));
605
+ s.has(g) || (s.add(g), p.push(g));
537
606
  }
538
607
  const u = /* @__PURE__ */ new Map();
539
608
  for (const f of s) {
540
609
  const g = n.get(f) || [];
541
- u.set(f, l.has(f) ? g : oe(g, i));
610
+ u.set(f, l.has(f) ? g : te(g, t));
542
611
  }
543
612
  return { camadasVisiveis: s, feicoesPorCamada: u };
544
613
  }
545
- function _e(e, r, a, i = "", t = Ye, o) {
546
- const n = Ke(e, r, i), l = [], c = /* @__PURE__ */ new Map();
614
+ function Xe(e, r, a, t = "", i = we, o) {
615
+ const n = Qe(e, r, t), l = [], c = /* @__PURE__ */ new Map();
547
616
  for (let u = 0; u < r.length; u++) {
548
- const p = r[u];
549
- if (!p || !p.id) continue;
550
- const m = p.layerId || "";
551
- c.has(m) || c.set(m, []), c.get(m).push(p);
552
- }
553
- const s = ye(e);
554
- function d(u) {
555
- const p = u.camada;
556
- if (n && !n.camadasVisiveis.has(p.id) || !(n ? !0 : a.has(p.id))) return;
557
- for (const h of u.subcamadas)
558
- d(h);
559
- const f = n ? n.feicoesPorCamada.get(p.id) || [] : c.get(p.id) || [], g = (o == null ? void 0 : o.get(p.id)) ?? t, v = f.slice(0, g);
560
- for (let h = 0; h < v.length; h++)
561
- l.push(v[h].id);
617
+ const d = r[u];
618
+ if (!d || !d.id) continue;
619
+ const m = d.layerId || "";
620
+ c.has(m) || c.set(m, []), c.get(m).push(d);
621
+ }
622
+ const s = ne(e);
623
+ function p(u) {
624
+ const d = u.camada;
625
+ if (n && !n.camadasVisiveis.has(d.id) || !(n ? !0 : a.has(d.id))) return;
626
+ for (const y of u.subcamadas)
627
+ p(y);
628
+ const f = n ? n.feicoesPorCamada.get(d.id) || [] : c.get(d.id) || [], g = (o == null ? void 0 : o.get(d.id)) ?? i, v = f.slice(0, g);
629
+ for (let y = 0; y < v.length; y++)
630
+ l.push(v[y].id);
562
631
  }
563
632
  for (const u of s)
564
- d(u);
633
+ p(u);
565
634
  return l;
566
635
  }
567
- function La(e, r, a, i, t, o) {
568
- if (!e.includes(i)) return null;
636
+ function Ta(e, r, a, t, i, o) {
637
+ if (!e.includes(t)) return null;
569
638
  const n = new Set(r);
570
639
  let l = a;
571
640
  if (o && a && e.includes(a)) {
572
- const c = e.indexOf(a), s = e.indexOf(i), d = Math.min(c, s), u = Math.max(c, s);
573
- t || n.clear();
574
- for (let p = d; p <= u; p++)
575
- n.add(e[p]);
576
- } else t ? (n.has(i) ? n.delete(i) : n.add(i), l = i) : (n.clear(), n.add(i), l = i);
641
+ const c = e.indexOf(a), s = e.indexOf(t), p = Math.min(c, s), u = Math.max(c, s);
642
+ i || n.clear();
643
+ for (let d = p; d <= u; d++)
644
+ n.add(e[d]);
645
+ } else i ? (n.has(t) ? n.delete(t) : n.add(t), l = t) : (n.clear(), n.add(t), l = t);
577
646
  return { selecionados: n, ultimoClicadoId: l };
578
647
  }
579
- function Ee(e, r) {
648
+ function Ae(e, r) {
580
649
  if (e.size === 0) return;
581
- const a = new Set(r.map((i) => i.id));
582
- for (const i of e)
583
- a.has(i) || e.delete(i);
650
+ const a = new Set(r.map((t) => t.id));
651
+ for (const t of e)
652
+ a.has(t) || e.delete(t);
584
653
  }
585
- function _(e, r, a) {
586
- const i = /* @__PURE__ */ new Set();
587
- let t = e.find((o) => o.id === r);
588
- for (; t && t.parentId; ) {
589
- if (i.has(t.id) || (i.add(t.id), t.parentId === a)) return !0;
590
- t = e.find((o) => o.id === (t == null ? void 0 : t.parentId));
654
+ function U(e, r, a) {
655
+ const t = /* @__PURE__ */ new Set();
656
+ let i = e.find((o) => o.id === r);
657
+ for (; i && i.parentId; ) {
658
+ if (t.has(i.id) || (t.add(i.id), i.parentId === a)) return !0;
659
+ i = e.find((o) => o.id === (i == null ? void 0 : i.parentId));
591
660
  }
592
661
  return !1;
593
662
  }
594
- function Ca(e) {
663
+ function Ra(e) {
595
664
  return Number.isFinite(e) ? e < 0.25 ? "acima" : e > 0.75 ? "abaixo" : "dentro" : "dentro";
596
665
  }
597
- function $a(e, r, a, i) {
666
+ function Oa(e, r, a, t) {
598
667
  if (!r || !a || r === a) return null;
599
- const t = e.find((s) => s.id === r), o = e.find((s) => s.id === a);
600
- if (!t || !o) return null;
601
- const n = t.parentId !== void 0 ? t.parentId : null;
602
- if (i === "dentro")
603
- return _(e, o.id, t.id) ? null : (t.parentId = o.id, { tipo: "hierarquia", camada: t, novoParentId: o.id, parentAnteriorId: n });
604
- if (_(e, o.id, t.id)) return null;
668
+ const i = e.find((s) => s.id === r), o = e.find((s) => s.id === a);
669
+ if (!i || !o) return null;
670
+ const n = i.parentId !== void 0 ? i.parentId : null;
671
+ if (t === "dentro")
672
+ return U(e, o.id, i.id) ? null : (i.parentId = o.id, { tipo: "hierarquia", camada: i, novoParentId: o.id, parentAnteriorId: n });
673
+ if (U(e, o.id, i.id)) return null;
605
674
  const l = e.findIndex((s) => s.id === r);
606
675
  e.splice(l, 1);
607
676
  const c = e.findIndex((s) => s.id === a);
608
- return c === -1 ? e.push(t) : e.splice(i === "acima" ? c : c + 1, 0, t), t.parentId = o.parentId ?? null, { tipo: "ordem", camada: t, parentAnteriorId: n, novoParentId: t.parentId };
677
+ return c === -1 ? e.push(i) : e.splice(t === "acima" ? c : c + 1, 0, i), i.parentId = o.parentId ?? null, { tipo: "ordem", camada: i, parentAnteriorId: n, novoParentId: i.parentId };
609
678
  }
610
- function Sa(e, r, a, i) {
679
+ function ja(e, r, a, t) {
611
680
  if (!r || !a || r === a) return !1;
612
- const t = e.findIndex((l) => l.id === r);
613
- if (t === -1) return !1;
614
- const [o] = e.splice(t, 1), n = e.findIndex((l) => l.id === a);
615
- return n === -1 ? e.push(o) : e.splice(i ? n : n + 1, 0, o), !0;
616
- }
617
- function Ma(e, r, a, i) {
618
- const t = e.find((l) => l.id === a), o = r.find((l) => l.id === i);
619
- if (!t || !o || t.layerId === i) return null;
620
- const n = t.layerId;
621
- return t.layerId = i, { feicao: t, camadaOrigemId: n, camadaDestinoId: i, mudouDeCamada: !0 };
622
- }
623
- function Fa(e, r, a, i) {
681
+ const i = e.findIndex((l) => l.id === r);
682
+ if (i === -1) return !1;
683
+ const [o] = e.splice(i, 1), n = e.findIndex((l) => l.id === a);
684
+ return n === -1 ? e.push(o) : e.splice(t ? n : n + 1, 0, o), !0;
685
+ }
686
+ function Na(e, r, a, t) {
687
+ const i = e.find((l) => l.id === a), o = r.find((l) => l.id === t);
688
+ if (!i || !o || i.layerId === t) return null;
689
+ const n = i.layerId;
690
+ return i.layerId = t, { feicao: i, camadaOrigemId: n, camadaDestinoId: t, mudouDeCamada: !0 };
691
+ }
692
+ function Ha(e, r, a, t) {
624
693
  if (!r || !a || r === a) return null;
625
- const t = e.findIndex((u) => u.id === r);
626
- if (t === -1) return null;
694
+ const i = e.findIndex((u) => u.id === r);
695
+ if (i === -1) return null;
627
696
  const o = e.find((u) => u.id === a);
628
697
  if (!o) return null;
629
- const [n] = e.splice(t, 1), l = n.layerId, c = o.layerId, s = l !== c;
698
+ const [n] = e.splice(i, 1), l = n.layerId, c = o.layerId, s = l !== c;
630
699
  s && (n.layerId = c);
631
- const d = e.findIndex((u) => u.id === a);
632
- return d === -1 ? e.push(n) : e.splice(i ? d : d + 1, 0, n), { feicao: n, camadaOrigemId: l, camadaDestinoId: c, mudouDeCamada: s };
633
- }
634
- const me = (e, r, a) => `${e} ${e === 1 ? r : a}`;
635
- function za(e, r, a) {
636
- return a === 0 ? me(e, "feição", "feições") : `${me(e, "feição", "feições")} no grupo (${r} nesta camada) · ${me(a, "subcamada", "subcamadas")}`;
700
+ const p = e.findIndex((u) => u.id === a);
701
+ return p === -1 ? e.push(n) : e.splice(t ? p : p + 1, 0, n), { feicao: n, camadaOrigemId: l, camadaDestinoId: c, mudouDeCamada: s };
637
702
  }
638
- function Ba(e) {
703
+ function Ga(e) {
639
704
  const {
640
705
  camadas: r,
641
706
  feicoes: a,
642
- camadaAtivaId: i,
643
- expandedLayers: t,
707
+ camadaAtivaId: t,
708
+ expandedLayers: i,
644
709
  selectedFeatureIds: o,
645
710
  activeSettingsLayerId: n,
646
711
  editingLayerId: l,
647
712
  editingFeatureId: c,
648
713
  searchQuery: s,
649
- titulo: d = "CAMADAS",
714
+ titulo: p = "CAMADAS",
650
715
  mostrarBusca: u = !0,
651
- limitesPorCamada: p,
652
- limiteFeicoesPorCamada: m = Ye,
716
+ limitesPorCamada: d,
717
+ limiteFeicoesPorCamada: m = we,
653
718
  mostrarBotaoColapsar: f = !1
654
- } = e, g = (s || "").trim().toLowerCase(), v = Ke(r, a, g), h = /* @__PURE__ */ new Map();
655
- for (let S = 0; S < a.length; S++) {
656
- const x = a[S];
719
+ } = e, g = (s || "").trim().toLowerCase(), v = Qe(r, a, g), y = /* @__PURE__ */ new Map();
720
+ for (let E = 0; E < a.length; E++) {
721
+ const x = a[E];
657
722
  if (!x || !x.id) continue;
658
- const M = x.layerId || "";
659
- h.has(M) || h.set(M, []), h.get(M).push(x);
723
+ const B = x.layerId || "";
724
+ y.has(B) || y.set(B, []), y.get(B).push(x);
660
725
  }
661
- const k = we(r), C = r.every((S) => S.visible !== !1), $ = r.length > 0 && r.every((S) => t.has(S.id)), y = u ? `
726
+ const k = se(r), M = r.every((E) => E.visible !== !1), S = r.length > 0 && r.every((E) => i.has(E.id)), w = u ? `
662
727
  <div class="ui-tree-search-wrapper" part="busca">
663
- <span class="ui-tree-search-icon">${b.busca}</span>
664
- <input type="text" class="ui-tree-search-input" id="input-layer-search" aria-label="Buscar camada ou feição" placeholder="Buscar camada ou feição..." value="${F(
728
+ <span class="ui-tree-search-icon">${h.busca}</span>
729
+ <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="${z(
665
730
  s
666
731
  )}" />
667
- ${s ? `<button class="ui-tree-search-clear" id="btn-clear-layer-search" title="Limpar busca" aria-label="Limpar busca">${b.fechar}</button>` : ""}
732
+ ${s ? `<button class="ui-tree-search-clear" id="btn-clear-layer-search" title="Limpar busca" aria-label="Limpar busca">${h.fechar}</button>` : ""}
668
733
  </div>
669
- ` : "", I = `
734
+ ` : "", L = `
670
735
  <div class="ui-tree-toolbar" part="toolbar">
671
736
  <div class="ui-tree-title-group">
672
- <span class="ui-tree-section-title">${F(d || "CAMADAS")}</span>
737
+ <span class="ui-tree-section-title">${z(p || "CAMADAS")}</span>
673
738
  <span class="ui-tree-count-badge">${r.length}</span>
674
739
  </div>
675
740
  <div class="ui-tree-actions">
676
- <button id="btn-toggle-all-vis" class="ui-tree-action-btn" title="${C ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas"}" aria-label="${C ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas"}">
677
- ${C ? b.olhoAberto : b.olhoFechado}
741
+ <button id="btn-toggle-all-vis" class="ui-tree-action-btn" title="${M ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas"}" aria-label="${M ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas"}">
742
+ ${M ? h.olhoAberto : h.olhoFechado}
678
743
  </button>
679
- <button id="btn-toggle-all-expand" class="ui-tree-action-btn" aria-label="${$ ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}" title="${$ ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}">
680
- <span class="ui-chevron-icon ${$ ? "open" : ""}">${b.chevronDir}</span>
744
+ <button id="btn-toggle-all-expand" class="ui-tree-action-btn" aria-label="${S ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}" title="${S ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}">
745
+ <span class="ui-chevron-icon ${S ? "open" : ""}">${h.chevronDir}</span>
681
746
  </button>
682
- ${f ? `<button id="btn-colapsar" class="ui-camadas-btn-colapsar" title="Recolher painel" aria-label="Recolher painel">${b.recolherPainel}</button>` : ""}
747
+ ${f ? `<button id="btn-colapsar" class="ui-camadas-btn-colapsar" title="Recolher painel" aria-label="Recolher painel">${h.recolherPainel}</button>` : ""}
683
748
  </div>
684
749
  </div>
685
- ${y}
686
- `, L = (S) => {
687
- const x = S.camada;
750
+ ${w}
751
+ `, b = (E) => {
752
+ const x = E.camada;
688
753
  if (v && !v.camadasVisiveis.has(x.id)) return "";
689
- const M = S.depth, P = S.subcamadas, Ie = v ? P.filter((A) => v.camadasVisiveis.has(A.camada.id)) : P, G = !!(x.isGroup || P.length > 0), E = F(x.id), W = F(x.name || (G ? "Novo Grupo" : "Camada")), O = K(x.color, "#00E08A"), U = x.visible !== !1, V = x.locked === !0, Z = g ? !0 : t.has(x.id), se = n === x.id, le = i === x.id, j = k.get(x.id), Le = (j == null ? void 0 : j.ocultaPorAncestral) === !0, Ce = (j == null ? void 0 : j.travadaPorAncestral) === !0, D = v ? v.feicoesPorCamada.get(x.id) || [] : h.get(x.id) || [], N = v ? D : ne(r, a, x.id), $e = N.length > 0 && N.every((A) => o.has(A.id)), Ze = !$e && N.some((A) => o.has(A.id)), ee = (p == null ? void 0 : p.get(x.id)) ?? m, ea = D.slice(0, ee), aa = D.length > ee, ra = D.length - ee, ta = ea.map((A) => {
690
- const R = F(A.id), Me = F(A.name || "Feição"), Fe = K(A.color, O), ae = A.visible !== !1, ce = V || Ce, de = A.locked === !0 || ce, ze = ce ? "Bloqueada pela camada" : de ? "Desbloquear Feição" : "Bloquear Feição", re = o.has(A.id), ca = A.status === "previa" ? '<span class="ui-previa-dot" title="Geometria prévia" aria-label="Geometria prévia"></span>' : "";
691
- return `
692
- <div class="ui-feat-row ${re ? "selected-row" : ""} ${ae ? "" : "hidden-row"} ${!U || Le ? "herdado-oculto" : ""}" data-feat-row="${R}" data-feat-select="${R}" data-feat-layer="${E}" role="treeitem" aria-level="${M + 2}" aria-selected="${re}" tabindex="-1" draggable="true" part="${re ? "feicao feicao-selecionada" : "feicao"}" style="--layer-depth: ${M + 1};" title="Clique para selecionar | Arraste para reordenar">
693
- <div class="ui-col ui-col-eye" data-feat-eye="${R}" role="button" tabindex="0" aria-label="${ae ? "Ocultar Feição" : "Exibir Feição"}" title="${ae ? "Ocultar Feição" : "Exibir Feição"}">
694
- ${ae ? b.olhoAberto : b.olhoFechado}
695
- </div>
696
-
697
- <div class="ui-col ui-col-lock ${de ? "" : "ui-lock-open"}" data-feat-lock="${R}" ${ce ? 'data-locked-by-layer="true"' : ""} role="button" tabindex="0" aria-label="${ze}" title="${ze}">
698
- ${de ? b.cadeadoTrancado : b.cadeadoAberto}
699
- </div>
700
-
701
- <div class="ui-col ui-col-colorbar" style="background: ${Fe};"></div>
702
- <div class="ui-col ui-col-branch"><span style="opacity: 0.35;">└─</span></div>
703
- <div class="ui-col ui-col-thumb">
704
- <div class="ui-thumb-box">${Ia(A.type || A.geometryType, Fe, A.coordinates)}</div>
705
- </div>
706
-
707
- <div class="ui-col ui-col-name" data-feat-name-trigger="${R}" title="Duplo clique para renomear">
708
- ${c === A.id ? `<input type="text" class="ui-inline-rename-input" data-inline-feat-input="${R}" value="${Me}" />` : `<span class="ui-name-text">${Me}</span>${ca}`}
709
- </div>
710
-
711
- <div class="ui-col ui-col-actions">
712
- <button class="ui-micro-btn" data-feat-fit="${R}" title="Enquadrar no mapa" aria-label="Enquadrar feição no mapa">${b.alvoEnquadrar}</button>
713
- </div>
714
-
715
- <div class="ui-col ui-col-target" data-feat-target="${R}" role="button" tabindex="0" aria-label="Selecionar feição" title="Selecionar feição">
716
- <div class="ui-target-circle ${re ? "selected" : ""}"></div>
717
- </div>
718
- </div>
719
- `;
720
- }).join(""), ia = aa ? `<div class="ui-truncate-notice" role="note">
721
- <span>Exibindo ${ee} de ${D.length} feições. Use a busca acima para filtrar.</span>
722
- <button type="button" class="ui-truncate-more-btn" data-layer-show-more="${E}">Mostrar mais (+${Math.min(80, ra)})</button>
723
- </div>` : "", Se = x.opacity !== void 0 ? x.opacity : 1, oa = Math.round(Se * 100), na = r.filter((A) => A.id !== x.id && !_(r, A.id, x.id)).map(
724
- (A) => `<option value="${F(A.id)}" ${x.parentId === A.id ? "selected" : ""}>${A.isGroup ? "📁 " : ""}${F(A.name)}</option>`
725
- ).join(""), sa = se ? `
726
- <div class="ui-layer-settings-drawer" id="settings-drawer-${E}" part="drawer" style="--drawer-cor-camada: ${O};">
754
+ const B = E.depth, D = E.subcamadas, ke = v ? D.filter((F) => v.camadasVisiveis.has(F.camada.id)) : D, G = !!(x.isGroup || D.length > 0), C = z(x.id), X = z(x.name || (G ? "Novo Grupo" : "Camada")), j = H(x.color, "#00E08A"), W = x.visible !== !1, J = x.locked === !0, Z = g ? !0 : i.has(x.id), le = n === x.id, ce = t === x.id, O = k.get(x.id), sa = (O == null ? void 0 : O.ocultaPorAncestral) === !0, la = (O == null ? void 0 : O.travadaPorAncestral) === !0, R = v ? v.feicoesPorCamada.get(x.id) || [] : y.get(x.id) || [], ee = v ? R : Q(r, a, x.id), Ie = ee.length > 0 && ee.every((F) => o.has(F.id)), ca = !Ie && ee.some((F) => o.has(F.id)), de = (d == null ? void 0 : d.get(x.id)) ?? m, da = R.slice(0, de), ua = R.length > de, pa = He(x, B, O), fa = da.map(
755
+ (F) => Ke(F, pa, o.has(F.id), c === F.id)
756
+ ).join(""), ma = ua ? _e(C, de, R.length) : "", Ce = Number(x.opacity ?? 1), Le = Number.isFinite(Ce) ? Math.min(1, Math.max(0, Ce)) : 1, ga = Math.round(Le * 100), va = r.filter((F) => F.id !== x.id && !U(r, F.id, x.id)).map(
757
+ (F) => `<option value="${z(F.id)}" ${x.parentId === F.id ? "selected" : ""}>${F.isGroup ? "📁 " : ""}${z(F.name)}</option>`
758
+ ).join(""), ba = le ? `
759
+ <div class="ui-layer-settings-drawer" id="settings-drawer-${C}" part="drawer" style="--drawer-cor-camada: ${j};">
727
760
  <div class="ui-drawer-header">
728
761
  <div class="ui-drawer-header-left">
729
- <span class="ui-drawer-icon">${b.engrenagem}</span>
762
+ <span class="ui-drawer-icon">${h.engrenagem}</span>
730
763
  <span class="ui-drawer-title">Configurações da Camada</span>
731
- <span class="ui-drawer-layer-chip" title="${W}">${W}</span>
764
+ <span class="ui-drawer-layer-chip" title="${X}">${X}</span>
732
765
  </div>
733
- <button type="button" class="ui-drawer-btn-fechar" data-layer-settings-close="${E}" title="Fechar configurações (Esc)" aria-label="Fechar configurações">
734
- ${b.fechar}
766
+ <button type="button" class="ui-drawer-btn-fechar" data-layer-settings-close="${C}" title="Fechar configurações (Esc)" aria-label="Fechar configurações">
767
+ ${h.fechar}
735
768
  </button>
736
769
  </div>
737
770
 
@@ -743,9 +776,9 @@ function Ba(e) {
743
776
  </div>
744
777
  <div class="ui-drawer-color-group">
745
778
  <label class="ui-drawer-color-pill" title="Clique para alterar a cor da camada">
746
- <span class="ui-drawer-color-sample" id="sample-color-${E}" style="background-color: ${O};"></span>
747
- <span class="ui-drawer-color-hex" id="hex-color-${E}">${O.toUpperCase()}</span>
748
- <input type="color" aria-label="Cor da camada" data-layer-color-picker="${E}" value="${xa(O, "#00e08a")}" class="ui-drawer-color-native" />
779
+ <span class="ui-drawer-color-sample" id="sample-color-${C}" style="background-color: ${j};"></span>
780
+ <span class="ui-drawer-color-hex" id="hex-color-${C}">${j.toUpperCase()}</span>
781
+ <input type="color" aria-label="Cor da camada" data-layer-color-picker="${C}" value="${Sa(j, "#00e08a")}" class="ui-drawer-color-native" />
749
782
  </label>
750
783
  </div>
751
784
  </div>
@@ -754,10 +787,10 @@ function Ba(e) {
754
787
  <div class="ui-drawer-row">
755
788
  <div class="ui-drawer-row-label">
756
789
  <span>Opacidade</span>
757
- <span class="ui-drawer-badge" id="badge-op-${E}">${oa}%</span>
790
+ <span class="ui-drawer-badge" id="badge-op-${C}">${ga}%</span>
758
791
  </div>
759
792
  <div class="ui-drawer-slider-container">
760
- <input type="range" aria-label="Opacidade da camada" min="0.05" max="1" step="0.05" value="${Number(Se) || 0}" data-layer-opacity-slider="${E}" class="ui-drawer-slider" />
793
+ <input type="range" aria-label="Opacidade da camada" min="0.05" max="1" step="0.05" value="${Number(Le) || 0}" data-layer-opacity-slider="${C}" class="ui-drawer-slider" />
761
794
  </div>
762
795
  </div>
763
796
 
@@ -767,9 +800,9 @@ function Ba(e) {
767
800
  <span>Pertence ao Grupo</span>
768
801
  </div>
769
802
  <div class="ui-drawer-select-wrapper">
770
- <select class="ui-drawer-select" data-layer-parent-select="${E}" aria-label="Grupo pai da camada">
803
+ <select class="ui-drawer-select" data-layer-parent-select="${C}" aria-label="Grupo pai da camada">
771
804
  <option value="" ${x.parentId ? "" : "selected"}>(Nenhum - Nível Principal)</option>
772
- ${na}
805
+ ${va}
773
806
  </select>
774
807
  </div>
775
808
  </div>
@@ -777,76 +810,76 @@ function Ba(e) {
777
810
 
778
811
  <div class="ui-drawer-footer">
779
812
  <div class="ui-drawer-meta-info">
780
- <span>${P.length > 0 ? `${P.length} subcamadas · ` : ""}${D.length} ${D.length === 1 ? "feição" : "feições"}</span>
813
+ <span>${D.length > 0 ? `${D.length} subcamadas · ` : ""}${R.length} ${R.length === 1 ? "feição" : "feições"}</span>
781
814
  </div>
782
815
  <div class="ui-drawer-actions">
783
- <button type="button" class="ui-drawer-btn-sublayer" data-add-sublayer="${E}" title="Adicionar nova camada dentro desta">
784
- ${b.mais} Subcamada
816
+ <button type="button" class="ui-drawer-btn-sublayer" data-add-sublayer="${C}" title="Adicionar nova camada dentro desta">
817
+ ${h.mais} Subcamada
785
818
  </button>
786
- <button type="button" class="ui-drawer-btn-danger" data-delete-layer="${E}" title="Excluir esta camada e suas feições">
787
- ${b.lixeira}
819
+ <button type="button" class="ui-drawer-btn-danger" data-delete-layer="${C}" title="Excluir esta camada e suas feições">
820
+ ${h.lixeira}
788
821
  <span class="ui-btn-label">Excluir</span>
789
822
  </button>
790
823
  </div>
791
824
  </div>
792
825
  </div>
793
- ` : "", la = Ie.map((A) => L(A)).join("");
826
+ ` : "", ha = ke.map((F) => b(F)).join("");
794
827
  return `
795
- <div class="ui-layer-group ${M > 0 ? "is-sublayer-group" : ""}" data-layer-id="${E}" data-layer-depth="${M}" role="treeitem" aria-level="${M + 1}" aria-expanded="${Z}" part="grupo" style="--layer-active-color: ${O};">
796
- <div class="ui-layer-row ${U ? "" : "hidden-layer"} ${le ? "active-drawing-layer" : ""} ${M > 0 ? "is-sublayer" : ""} ${G ? "is-group-row" : ""} ${Le ? "herdado-oculto" : ""} ${Ce ? "herdado-travado" : ""}" data-layer-row="${E}" data-layer-id="${E}" tabindex="-1" draggable="true" part="${le ? "camada camada-ativa" : "camada"}" ${le ? 'aria-current="true"' : ""} style="--layer-depth: ${M};">
797
- <div class="ui-col ui-col-drag" title="Arrastar para reordenar Z-Index">${b.dragHandle}</div>
828
+ <div class="ui-layer-group ${B > 0 ? "is-sublayer-group" : ""}" data-layer-id="${C}" data-layer-depth="${B}" role="treeitem" aria-level="${B + 1}" aria-expanded="${Z}" part="grupo" style="--layer-active-color: ${j};">
829
+ <div class="ui-layer-row ${W ? "" : "hidden-layer"} ${ce ? "active-drawing-layer" : ""} ${B > 0 ? "is-sublayer" : ""} ${G ? "is-group-row" : ""} ${sa ? "herdado-oculto" : ""} ${la ? "herdado-travado" : ""}" data-layer-row="${C}" data-layer-id="${C}" tabindex="-1" draggable="true" part="${ce ? "camada camada-ativa" : "camada"}" ${ce ? 'aria-current="true"' : ""} style="--layer-depth: ${B};">
830
+ <div class="ui-col ui-col-drag" title="Arrastar para reordenar Z-Index">${h.dragHandle}</div>
798
831
 
799
- <div class="ui-col ui-col-eye" data-layer-eye="${E}" role="button" tabindex="0" aria-label="${U ? "Ocultar Camada" : "Exibir Camada"}" title="${U ? "Ocultar Camada" : "Exibir Camada"}">
800
- ${U ? b.olhoAberto : b.olhoFechado}
832
+ <div class="ui-col ui-col-eye" data-layer-eye="${C}" role="button" tabindex="0" aria-label="${W ? "Ocultar Camada" : "Exibir Camada"}" title="${W ? "Ocultar Camada" : "Exibir Camada"}">
833
+ ${W ? h.olhoAberto : h.olhoFechado}
801
834
  </div>
802
835
 
803
- <div class="ui-col ui-col-lock ${V ? "" : "ui-lock-open"}" data-layer-lock="${E}" role="button" tabindex="0" aria-label="${V ? "Desbloquear Camada" : "Bloquear Camada"}" title="${V ? "Desbloquear Camada" : "Bloquear Camada"}">
804
- ${V ? b.cadeadoTrancado : b.cadeadoAberto}
836
+ <div class="ui-col ui-col-lock ${J ? "" : "ui-lock-open"}" data-layer-lock="${C}" role="button" tabindex="0" aria-label="${J ? "Desbloquear Camada" : "Bloquear Camada"}" title="${J ? "Desbloquear Camada" : "Bloquear Camada"}">
837
+ ${J ? h.cadeadoTrancado : h.cadeadoAberto}
805
838
  </div>
806
839
 
807
- <div class="ui-col ui-col-colorbar ui-col-colorbar-editavel" data-layer-color="${E}" role="button" tabindex="0" style="background: ${O};" aria-label="Alterar cor da camada" title="Alterar cor da camada (usada no destaque de seleção)"></div>
840
+ <div class="ui-col ui-col-colorbar ui-col-colorbar-editavel" data-layer-color="${C}" role="button" tabindex="0" style="background: ${j};" aria-label="Alterar cor da camada" title="Alterar cor da camada (usada no destaque de seleção)"></div>
808
841
 
809
- <div class="ui-col ui-col-chevron" data-layer-expand="${E}" role="button" tabindex="0" aria-label="${Z ? "Recolher grupo" : "Expandir grupo"}">
810
- <span class="ui-chevron-icon ${Z ? "open" : ""}">${b.chevronDir}</span>
842
+ <div class="ui-col ui-col-chevron" data-layer-expand="${C}" role="button" tabindex="0" aria-label="${Z ? "Recolher grupo" : "Expandir grupo"}">
843
+ <span class="ui-chevron-icon ${Z ? "open" : ""}">${h.chevronDir}</span>
811
844
  </div>
812
845
 
813
- <div class="ui-col ui-col-name" data-layer-name-trigger="${E}" title="Clique para ativar camada de desenho | Duplo clique para renomear">
814
- ${l === x.id ? `<input type="text" class="ui-inline-rename-input" data-inline-layer-input="${E}" value="${W}" />` : `${G ? `<span class="ui-group-folder-icon" title="Grupo/Pasta">${b.moverPasta}</span>` : ""}
815
- <span class="ui-name-text">${W}</span>
816
- ${N.length > 0 || !G ? `<span class="ui-count-chip" title="${za(N.length, D.length, P.length)}">${N.length}</span>` : ""}`}
846
+ <div class="ui-col ui-col-name" data-layer-name-trigger="${C}" title="Clique para ativar camada de desenho | Duplo clique para renomear">
847
+ ${l === x.id ? `<input type="text" class="ui-inline-rename-input" data-inline-layer-input="${C}" value="${X}" />` : `${G ? `<span class="ui-group-folder-icon" title="Grupo/Pasta">${h.moverPasta}</span>` : ""}
848
+ <span class="ui-name-text">${X}</span>
849
+ ${Ve(ee.length, R.length, D.length, G)}`}
817
850
  </div>
818
851
 
819
852
  <div class="ui-col ui-col-actions">
820
- <button class="ui-micro-btn" data-layer-fit="${E}" title="Enquadrar camada no mapa" aria-label="Enquadrar camada no mapa">${b.alvoEnquadrar}</button>
821
- <button class="ui-micro-btn ${se ? "active" : ""}" data-layer-settings="${E}" title="Ajustar cor, hierarquia, opacidade e excluir" aria-label="Configurações da camada" aria-expanded="${se}">${b.engrenagem}</button>
853
+ <button class="ui-micro-btn" data-layer-fit="${C}" title="Enquadrar camada no mapa" aria-label="Enquadrar camada no mapa">${h.alvoEnquadrar}</button>
854
+ <button class="ui-micro-btn ${le ? "active" : ""}" data-layer-settings="${C}" title="Ajustar cor, hierarquia, opacidade e excluir" aria-label="Configurações da camada" aria-expanded="${le}">${h.engrenagem}</button>
822
855
  </div>
823
856
 
824
- <div class="ui-col ui-col-target" data-layer-target="${E}" role="button" tabindex="0" aria-label="Selecionar todas as feições deste grupo" title="Selecionar todas as feições deste grupo">
825
- <div class="ui-target-circle ${$e ? "selected" : Ze ? "partial" : ""}"></div>
857
+ <div class="ui-col ui-col-target" data-layer-target="${C}" role="button" tabindex="0" aria-label="Selecionar todas as feições deste grupo" title="Selecionar todas as feições deste grupo">
858
+ <div class="ui-target-circle ${Ie ? "selected" : ca ? "partial" : ""}"></div>
826
859
  </div>
827
860
  </div>
828
861
 
829
- ${sa}
862
+ ${ba}
830
863
 
831
- <div class="ui-children-container ${M > 0 ? "is-subchildren" : ""}" role="group" style="display: ${Z ? "block" : "none"};">
832
- ${la}
833
- ${ta}
834
- ${ia}
835
- ${Ie.length === 0 && D.length === 0 ? `<div class="ui-empty-row"><span>${G ? "Grupo vazio (adicione subcamadas ou feições)" : "Camada vazia"}</span></div>` : ""}
864
+ <div class="ui-children-container ${B > 0 ? "is-subchildren" : ""}" role="group" style="display: ${Z ? "block" : "none"};">
865
+ ${ha}
866
+ ${fa}
867
+ ${ma}
868
+ ${ke.length === 0 && R.length === 0 ? Ye(G) : ""}
836
869
  </div>
837
870
  </div>
838
871
  `;
839
- }, q = ye(r), J = v && v.camadasVisiveis.size === 0 ? `<div class="ui-search-empty" role="status">Nenhum resultado para “${F((s || "").trim())}”</div>` : q.map((S) => L(S)).join("");
872
+ }, $ = ne(r), I = v && v.camadasVisiveis.size === 0 ? `<div class="ui-search-empty" role="status">Nenhum resultado para “${z((s || "").trim())}”</div>` : $.map((E) => b(E)).join("");
840
873
  return `
841
- ${I}
874
+ ${L}
842
875
  <div class="ui-panel-box">
843
876
  <div class="ui-layer-tree" id="ui-layer-tree-mount" role="tree" aria-label="Camadas e feições" aria-multiselectable="true" part="arvore">
844
- ${J}
877
+ ${I}
845
878
  </div>
846
879
  </div>
847
880
  `;
848
881
  }
849
- function qa(e) {
882
+ function Va(e) {
850
883
  return [
851
884
  {
852
885
  gatilho: "data-layer-name-trigger",
@@ -856,8 +889,8 @@ function qa(e) {
856
889
  e.editingLayerId = r;
857
890
  },
858
891
  aplicar: (r, a) => {
859
- const i = e.camadas.find((t) => t.id === r);
860
- return !a || !i || i.name === a ? null : (i.name = a, { detalhe: { camadaId: r, novoNome: a, camada: i }, salvar: !0 });
892
+ const t = e.camadas.find((i) => i.id === r);
893
+ return !a || !t || t.name === a ? null : (t.name = a, { detalhe: { camadaId: r, novoNome: a, camada: t }, salvar: !0 });
861
894
  },
862
895
  emitir: (r) => e.dispararEvento("ui-camada-renomeada", r)
863
896
  },
@@ -869,48 +902,57 @@ function qa(e) {
869
902
  e.editingFeatureId = r;
870
903
  },
871
904
  aplicar: (r, a) => {
872
- const i = e.feicoes.find((t) => t.id === r);
873
- return !a || !i || i.name === a ? null : (i.name = a, { detalhe: { feicaoId: r, novoNome: a, feicao: i }, salvar: !1 });
905
+ const t = e.feicoes.find((i) => i.id === r);
906
+ return !a || !t || t.name === a ? null : (t.name = a, { detalhe: { feicaoId: r, novoNome: a, feicao: t }, salvar: !1 });
874
907
  },
875
908
  emitir: (r) => e.dispararEvento("ui-feicao-renomeada", r)
876
909
  }
877
910
  ];
878
911
  }
879
- function Pa(e, r) {
880
- for (const a of qa(e))
881
- r.querySelectorAll(`[${a.gatilho}]`).forEach((i) => {
882
- i.addEventListener("dblclick", (t) => {
883
- t.stopPropagation();
884
- const o = i.getAttribute(a.gatilho);
885
- if (!o) return;
886
- a.marcarEditando(o), e.solicitarRenderizacao();
887
- const n = T(r, a.input, o);
912
+ function Me(e, r, a = r) {
913
+ for (const t of Va(e))
914
+ a.querySelectorAll(`[${t.gatilho}]`).forEach((i) => {
915
+ i.addEventListener("dblclick", (o) => {
916
+ o.stopPropagation();
917
+ const n = i.getAttribute(t.gatilho);
888
918
  if (!n) return;
889
- n.focus(), n.select();
890
- let l = !1;
891
- const c = (s, d = !1) => {
892
- var u, p;
893
- if (!l) {
894
- if (l = !0, a.marcarEditando(null), s) {
895
- const m = a.aplicar(o, n.value.trim());
896
- m && (m.salvar && ((u = e.salvarLembrancaEstado) == null || u.call(e)), a.emitir(m.detalhe));
919
+ t.marcarEditando(n), e.solicitarRenderizacao();
920
+ const l = T(r, t.input, n);
921
+ if (!l) return;
922
+ l.focus(), l.select();
923
+ let c = !1;
924
+ const s = (p, u = !1) => {
925
+ var d, m;
926
+ if (!c) {
927
+ if (c = !0, t.marcarEditando(null), p) {
928
+ const f = t.aplicar(n, l.value.trim());
929
+ f && (f.salvar && ((d = e.salvarLembrancaEstado) == null || d.call(e)), t.emitir(f.detalhe));
897
930
  }
898
- e.solicitarRenderizacao(), d && ((p = T(r, a.linha, o)) == null || p.focus());
931
+ e.solicitarRenderizacao(), u && ((m = T(r, t.linha, n)) == null || m.focus());
899
932
  }
900
933
  };
901
- n.addEventListener("keydown", (s) => {
902
- s.key === "Enter" ? (s.preventDefault(), c(!0, !0)) : s.key === "Escape" && (s.preventDefault(), c(!1, !0));
903
- }), n.addEventListener("blur", () => c(!0));
934
+ l.addEventListener("keydown", (p) => {
935
+ p.key === "Enter" ? (p.preventDefault(), s(!0, !0)) : p.key === "Escape" && (p.preventDefault(), s(!1, !0));
936
+ }), l.addEventListener("blur", () => s(!0));
904
937
  });
905
938
  });
906
939
  }
907
- const Da = ["dragging", "drop-above", "drop-below", "drop-into"];
908
- class Ta {
940
+ const Ua = ["dragging", "drop-above", "drop-below", "drop-into"];
941
+ class _a {
909
942
  constructor(r, a) {
910
- w(this, "host");
911
- w(this, "shadow");
943
+ A(this, "host");
944
+ A(this, "shadow");
912
945
  /** Cancela um arraste por toque em andamento (remove os ouvintes de `window`). */
913
- w(this, "cancelarToque", null);
946
+ A(this, "cancelarToque", null);
947
+ /**
948
+ * Arraste HTML5 em andamento. Fica no gerenciador (e não numa closure de `bindDragAndDrop`) para que linhas
949
+ * ligadas depois, na atualização incremental, enxerguem o arraste iniciado numa linha mais antiga.
950
+ */
951
+ A(this, "arraste", {
952
+ tipo: null,
953
+ camadaId: null,
954
+ feicaoId: null
955
+ });
914
956
  this.host = r, this.shadow = a;
915
957
  }
916
958
  bindAll() {
@@ -922,11 +964,11 @@ class Ta {
922
964
  (r = this.cancelarToque) == null || r.call(this), this.cancelarToque = null;
923
965
  }
924
966
  bindInlineRename() {
925
- Pa(this.host, this.shadow);
967
+ Me(this.host, this.shadow);
926
968
  }
927
969
  limparClassesDeArraste() {
928
970
  this.shadow.querySelectorAll(".ui-layer-row, .ui-feat-row, .ui-layer-group").forEach((r) => {
929
- r.classList.remove(...Da);
971
+ r.classList.remove(...Ua);
930
972
  });
931
973
  }
932
974
  /** Depois de qualquer mudança na ordem/hierarquia de camadas. */
@@ -945,90 +987,100 @@ class Ta {
945
987
  /** Camada travada (ou sob grupo travado) não recebe nem perde feições pelo arraste. */
946
988
  trocaEntreCamadasTravada(r, a) {
947
989
  var o;
948
- const i = (o = this.host.feicoes.find((n) => n.id === r)) == null ? void 0 : o.layerId;
949
- if (!a || i === a) return !1;
950
- const t = Ae(this.host.camadas);
951
- return t.has(a) || !!i && t.has(i);
990
+ const t = (o = this.host.feicoes.find((n) => n.id === r)) == null ? void 0 : o.layerId;
991
+ if (!a || t === a) return !1;
992
+ const i = xe(this.host.camadas);
993
+ return i.has(a) || !!t && i.has(t);
952
994
  }
953
995
  arrasteBloqueado(r) {
954
996
  return !!r.closest("input, button, select") || !!this.host.editingLayerId || !!this.host.editingFeatureId;
955
997
  }
998
+ /** Render completo: zera o arraste e liga camadas e feições do painel todo. */
956
999
  bindDragAndDrop() {
957
- let r = null, a = null, i = null;
958
- this.shadow.querySelectorAll('.ui-layer-row[draggable="true"]').forEach((t) => {
959
- const o = t.getAttribute("data-layer-id");
960
- o && (t.addEventListener("dragstart", (n) => {
961
- const l = n;
962
- if (this.arrasteBloqueado(l.target)) {
963
- l.preventDefault();
1000
+ this.arraste = { tipo: null, camadaId: null, feicaoId: null }, this.vincularArrasteCamadas(this.shadow), this.vincularArrasteFeicoes(this.shadow);
1001
+ }
1002
+ /** Atualização incremental: liga renomear e arraste só nas linhas de feição novas dentro de `raiz`. */
1003
+ bindLinhasFeicao(r) {
1004
+ Me(this.host, this.shadow, r), this.vincularArrasteFeicoes(r);
1005
+ }
1006
+ vincularArrasteCamadas(r) {
1007
+ r.querySelectorAll('.ui-layer-row[draggable="true"]').forEach((a) => {
1008
+ const t = a.getAttribute("data-layer-id");
1009
+ t && (a.addEventListener("dragstart", (i) => {
1010
+ const o = i;
1011
+ if (this.arrasteBloqueado(o.target)) {
1012
+ o.preventDefault();
964
1013
  return;
965
1014
  }
966
- 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");
967
- }), t.addEventListener("dragover", (n) => {
968
- const l = n;
969
- if (l.preventDefault(), l.stopPropagation(), l.dataTransfer && (l.dataTransfer.dropEffect = "move"), r === "layer") {
970
- if (a === o) return;
971
- const c = t.getBoundingClientRect(), s = Ca((l.clientY - c.top) / c.height);
972
- t.classList.toggle("drop-above", s === "acima"), t.classList.toggle("drop-below", s === "abaixo"), t.classList.toggle("drop-into", s === "dentro");
973
- } else r === "feature" && t.classList.add("drop-into");
974
- }), t.addEventListener("dragleave", (n) => {
975
- const l = n.relatedTarget;
976
- l && t.contains(l) || t.classList.remove("drop-above", "drop-below", "drop-into");
977
- }), t.addEventListener("drop", (n) => {
978
- var s;
979
- const l = n;
980
- l.preventDefault(), l.stopPropagation();
981
- const c = t.classList.contains("drop-into") ? "dentro" : t.classList.contains("drop-above") ? "acima" : "abaixo";
982
- if (this.limparClassesDeArraste(), r === "layer") {
983
- if (!a || a === o || !this.host.camadas.some((u) => u.id === a) || !this.host.camadas.some((u) => u.id === o)) return;
984
- const d = $a(this.host.camadas, a, o, c);
985
- (d == null ? void 0 : d.tipo) === "hierarquia" ? ((s = this.host.expandedLayers) == null || s.add(d.novoParentId), this.host.dispararEvento("ui-camada-mover-hierarquia", {
986
- camadaId: d.camada.id,
987
- novoParentId: d.novoParentId,
988
- parentAnteriorId: d.parentAnteriorId,
989
- camada: d.camada
990
- })) : d && d.parentAnteriorId !== d.novoParentId && this.host.dispararEvento("ui-camada-mover-hierarquia", {
991
- camadaId: d.camada.id,
992
- novoParentId: d.novoParentId,
993
- parentAnteriorId: d.parentAnteriorId,
994
- camada: d.camada
1015
+ this.arraste.tipo = "layer", this.arraste.camadaId = t, o.dataTransfer && (o.dataTransfer.setData("text/plain", JSON.stringify({ type: "layer", id: t })), o.dataTransfer.effectAllowed = "move"), a.classList.add("dragging");
1016
+ }), a.addEventListener("dragover", (i) => {
1017
+ const o = i;
1018
+ if (o.preventDefault(), o.stopPropagation(), o.dataTransfer && (o.dataTransfer.dropEffect = "move"), this.arraste.tipo === "layer") {
1019
+ if (this.arraste.camadaId === t) return;
1020
+ const n = a.getBoundingClientRect(), l = Ra((o.clientY - n.top) / n.height);
1021
+ a.classList.toggle("drop-above", l === "acima"), a.classList.toggle("drop-below", l === "abaixo"), a.classList.toggle("drop-into", l === "dentro");
1022
+ } else this.arraste.tipo === "feature" && a.classList.add("drop-into");
1023
+ }), a.addEventListener("dragleave", (i) => {
1024
+ const o = i.relatedTarget;
1025
+ o && a.contains(o) || a.classList.remove("drop-above", "drop-below", "drop-into");
1026
+ }), a.addEventListener("drop", (i) => {
1027
+ var l;
1028
+ const o = i;
1029
+ o.preventDefault(), o.stopPropagation();
1030
+ const n = a.classList.contains("drop-into") ? "dentro" : a.classList.contains("drop-above") ? "acima" : "abaixo";
1031
+ if (this.limparClassesDeArraste(), this.arraste.tipo === "layer") {
1032
+ if (!this.arraste.camadaId || this.arraste.camadaId === t || !this.host.camadas.some((s) => s.id === this.arraste.camadaId) || !this.host.camadas.some((s) => s.id === t)) return;
1033
+ const c = Oa(this.host.camadas, this.arraste.camadaId, t, n);
1034
+ (c == null ? void 0 : c.tipo) === "hierarquia" ? ((l = this.host.expandedLayers) == null || l.add(c.novoParentId), this.host.dispararEvento("ui-camada-mover-hierarquia", {
1035
+ camadaId: c.camada.id,
1036
+ novoParentId: c.novoParentId,
1037
+ parentAnteriorId: c.parentAnteriorId,
1038
+ camada: c.camada
1039
+ })) : c && c.parentAnteriorId !== c.novoParentId && this.host.dispararEvento("ui-camada-mover-hierarquia", {
1040
+ camadaId: c.camada.id,
1041
+ novoParentId: c.novoParentId,
1042
+ parentAnteriorId: c.parentAnteriorId,
1043
+ camada: c.camada
995
1044
  }), this.aposReordenarCamadas();
996
- } else if (r === "feature") {
997
- if (!i || this.trocaEntreCamadasTravada(i, o)) return;
998
- const d = Ma(this.host.feicoes, this.host.camadas, i, o);
999
- d && (this.emitirFeicaoMovida(d), this.host.solicitarRenderizacao());
1045
+ } else if (this.arraste.tipo === "feature") {
1046
+ if (!this.arraste.feicaoId || this.trocaEntreCamadasTravada(this.arraste.feicaoId, t)) return;
1047
+ const c = Na(this.host.feicoes, this.host.camadas, this.arraste.feicaoId, t);
1048
+ c && (this.emitirFeicaoMovida(c), this.host.solicitarRenderizacao());
1000
1049
  }
1001
- }), t.addEventListener("dragend", () => {
1002
- r = null, a = null, i = null, this.limparClassesDeArraste();
1050
+ }), a.addEventListener("dragend", () => {
1051
+ this.arraste.tipo = null, this.arraste.camadaId = null, this.arraste.feicaoId = null, this.limparClassesDeArraste();
1003
1052
  }));
1004
- }), this.shadow.querySelectorAll('.ui-feat-row[draggable="true"]').forEach((t) => {
1005
- const o = t.getAttribute("data-feat-row"), n = t.getAttribute("data-feat-layer");
1006
- o && (t.addEventListener("dragstart", (l) => {
1007
- const c = l;
1008
- if (this.arrasteBloqueado(c.target)) {
1009
- c.preventDefault();
1053
+ });
1054
+ }
1055
+ vincularArrasteFeicoes(r) {
1056
+ r.querySelectorAll('.ui-feat-row[draggable="true"]').forEach((a) => {
1057
+ const t = a.getAttribute("data-feat-row"), i = a.getAttribute("data-feat-layer");
1058
+ t && (a.addEventListener("dragstart", (o) => {
1059
+ const n = o;
1060
+ if (this.arrasteBloqueado(n.target)) {
1061
+ n.preventDefault();
1010
1062
  return;
1011
1063
  }
1012
- 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");
1013
- }), t.addEventListener("dragover", (l) => {
1014
- const c = l;
1015
- if (r !== "feature" || i === o) return;
1016
- c.preventDefault(), c.stopPropagation(), c.dataTransfer && (c.dataTransfer.dropEffect = "move");
1017
- const s = t.getBoundingClientRect(), d = c.clientY - s.top < s.height / 2;
1018
- t.classList.toggle("drop-above", d), t.classList.toggle("drop-below", !d);
1019
- }), t.addEventListener("dragleave", (l) => {
1020
- const c = l.relatedTarget;
1021
- c && t.contains(c) || t.classList.remove("drop-above", "drop-below");
1022
- }), t.addEventListener("drop", (l) => {
1023
- const c = l;
1024
- if (r !== "feature" || !i || i === o) return;
1025
- c.preventDefault(), c.stopPropagation();
1026
- const s = t.classList.contains("drop-above");
1027
- if (this.limparClassesDeArraste(), this.trocaEntreCamadasTravada(i, n)) return;
1028
- const d = Fa(this.host.feicoes, i, o, s);
1029
- d && (d.mudouDeCamada && this.emitirFeicaoMovida(d), this.host.dispararEvento("ui-feicoes-reordenadas", { feicoes: [...this.host.feicoes] }), this.host.solicitarRenderizacao());
1030
- }), t.addEventListener("dragend", (l) => {
1031
- l.stopPropagation(), r = null, i = null, a = null, this.limparClassesDeArraste();
1064
+ n.stopPropagation(), this.arraste.tipo = "feature", this.arraste.feicaoId = t, this.arraste.camadaId = i, n.dataTransfer && (n.dataTransfer.setData("text/plain", JSON.stringify({ type: "feature", id: t, layerId: i })), n.dataTransfer.effectAllowed = "move"), a.classList.add("dragging");
1065
+ }), a.addEventListener("dragover", (o) => {
1066
+ const n = o;
1067
+ if (this.arraste.tipo !== "feature" || this.arraste.feicaoId === t) return;
1068
+ n.preventDefault(), n.stopPropagation(), n.dataTransfer && (n.dataTransfer.dropEffect = "move");
1069
+ const l = a.getBoundingClientRect(), c = n.clientY - l.top < l.height / 2;
1070
+ a.classList.toggle("drop-above", c), a.classList.toggle("drop-below", !c);
1071
+ }), a.addEventListener("dragleave", (o) => {
1072
+ const n = o.relatedTarget;
1073
+ n && a.contains(n) || a.classList.remove("drop-above", "drop-below");
1074
+ }), a.addEventListener("drop", (o) => {
1075
+ const n = o;
1076
+ if (this.arraste.tipo !== "feature" || !this.arraste.feicaoId || this.arraste.feicaoId === t) return;
1077
+ n.preventDefault(), n.stopPropagation();
1078
+ const l = a.classList.contains("drop-above");
1079
+ if (this.limparClassesDeArraste(), this.trocaEntreCamadasTravada(this.arraste.feicaoId, i)) return;
1080
+ const c = Ha(this.host.feicoes, this.arraste.feicaoId, t, l);
1081
+ c && (c.mudouDeCamada && this.emitirFeicaoMovida(c), this.host.dispararEvento("ui-feicoes-reordenadas", { feicoes: [...this.host.feicoes] }), this.host.solicitarRenderizacao());
1082
+ }), a.addEventListener("dragend", (o) => {
1083
+ o.stopPropagation(), this.arraste.tipo = null, this.arraste.feicaoId = null, this.arraste.camadaId = null, this.limparClassesDeArraste();
1032
1084
  }));
1033
1085
  });
1034
1086
  }
@@ -1040,71 +1092,71 @@ class Ta {
1040
1092
  this.shadow.querySelectorAll(".ui-layer-row .ui-col-drag").forEach((r) => {
1041
1093
  const a = r.closest(".ui-layer-row");
1042
1094
  if (!a) return;
1043
- const i = a.getAttribute("data-layer-id");
1044
- i && r.addEventListener("pointerdown", (t) => {
1095
+ const t = a.getAttribute("data-layer-id");
1096
+ t && r.addEventListener("pointerdown", (i) => {
1045
1097
  var u;
1046
- const o = t;
1098
+ const o = i;
1047
1099
  if (o.pointerType === "mouse" && o.button !== 0 || this.host.editingLayerId || this.host.editingFeatureId) return;
1048
1100
  (u = this.cancelarToque) == null || u.call(this);
1049
1101
  let n = null, l = !1;
1050
- const c = (p) => {
1051
- p.preventDefault(), a.classList.add("dragging");
1052
- const m = this.shadow.elementFromPoint(p.clientX, p.clientY), f = m ? m.closest(".ui-layer-row") : null;
1102
+ const c = (d) => {
1103
+ d.preventDefault(), a.classList.add("dragging");
1104
+ const m = this.shadow.elementFromPoint(d.clientX, d.clientY), f = m ? m.closest(".ui-layer-row") : null;
1053
1105
  if (n && n !== f && n.classList.remove("drop-above", "drop-below"), f && f !== a) {
1054
1106
  n = f;
1055
1107
  const g = f.getBoundingClientRect();
1056
- l = p.clientY - g.top < g.height / 2, f.classList.toggle("drop-above", l), f.classList.toggle("drop-below", !l);
1108
+ l = d.clientY - g.top < g.height / 2, f.classList.toggle("drop-above", l), f.classList.toggle("drop-below", !l);
1057
1109
  } else
1058
1110
  n = null;
1059
1111
  }, s = () => {
1060
- window.removeEventListener("pointermove", c), window.removeEventListener("pointerup", d), window.removeEventListener("pointercancel", d), this.cancelarToque = null;
1061
- }, d = () => {
1112
+ window.removeEventListener("pointermove", c), window.removeEventListener("pointerup", p), window.removeEventListener("pointercancel", p), this.cancelarToque = null;
1113
+ }, p = () => {
1062
1114
  s();
1063
- const p = n == null ? void 0 : n.getAttribute("data-layer-id");
1064
- this.limparClassesDeArraste(), p && Sa(this.host.camadas, i, p, l) && this.aposReordenarCamadas();
1115
+ const d = n == null ? void 0 : n.getAttribute("data-layer-id");
1116
+ this.limparClassesDeArraste(), d && ja(this.host.camadas, t, d, l) && this.aposReordenarCamadas();
1065
1117
  };
1066
1118
  this.cancelarToque = () => {
1067
1119
  s(), this.limparClassesDeArraste();
1068
- }, window.addEventListener("pointermove", c, { passive: !1 }), window.addEventListener("pointerup", d), window.addEventListener("pointercancel", d);
1120
+ }, window.addEventListener("pointermove", c, { passive: !1 }), window.addEventListener("pointerup", p), window.addEventListener("pointercancel", p);
1069
1121
  });
1070
1122
  });
1071
1123
  }
1072
1124
  }
1073
- const Ra = "ui_camadas_estado_";
1074
- function Oa(e, r) {
1125
+ const Ya = "ui_camadas_estado_";
1126
+ function Ka(e, r) {
1075
1127
  const a = (e || r || "default").trim();
1076
- return `${Ra}${a}`;
1128
+ return `${Ya}${a}`;
1077
1129
  }
1078
1130
  function ve(e) {
1079
1131
  return !!e && typeof e == "object" && !Array.isArray(e);
1080
1132
  }
1081
- function te(e) {
1133
+ function ae(e) {
1082
1134
  return Array.isArray(e) ? e.filter((r) => typeof r == "string") : [];
1083
1135
  }
1084
- function Pe(e) {
1136
+ function Fe(e) {
1085
1137
  if (!ve(e)) return;
1086
1138
  const r = {};
1087
1139
  return typeof e.name == "string" && (r.name = e.name), typeof e.visible == "boolean" && (r.visible = e.visible), typeof e.locked == "boolean" && (r.locked = e.locked), typeof e.opacity == "number" && Number.isFinite(e.opacity) && e.opacity >= 0 && e.opacity <= 1 && (r.opacity = e.opacity), typeof e.color == "string" && (r.color = e.color), (typeof e.parentId == "string" || e.parentId === null) && (r.parentId = e.parentId), r;
1088
1140
  }
1089
- function ja(e) {
1141
+ function Qa(e) {
1090
1142
  if (!ve(e)) return null;
1091
1143
  const r = {};
1092
1144
  if (ve(e.camadasOverrides))
1093
- for (const [i, t] of Object.entries(e.camadasOverrides)) {
1094
- const o = Pe(t);
1145
+ for (const [t, i] of Object.entries(e.camadasOverrides)) {
1146
+ const o = Fe(i);
1095
1147
  if (!o) continue;
1096
- const n = Pe(t.origem);
1097
- r[i] = n ? { ...o, origem: n } : o;
1148
+ const n = Fe(i.origem);
1149
+ r[t] = n ? { ...o, origem: n } : o;
1098
1150
  }
1099
1151
  const a = e.altura;
1100
1152
  return {
1101
1153
  versao: typeof e.versao == "number" ? e.versao : 1,
1102
- expandedLayerIds: te(e.expandedLayerIds),
1103
- collapsedLayerIds: te(e.collapsedLayerIds),
1154
+ expandedLayerIds: ae(e.expandedLayerIds),
1155
+ collapsedLayerIds: ae(e.collapsedLayerIds),
1104
1156
  camadaAtivaId: typeof e.camadaAtivaId == "string" ? e.camadaAtivaId : null,
1105
1157
  painelColapsado: typeof e.painelColapsado == "boolean" ? e.painelColapsado : void 0,
1106
- ordemCamadasIds: te(e.ordemCamadasIds),
1107
- ordemOrigemIds: Array.isArray(e.ordemOrigemIds) ? te(e.ordemOrigemIds) : void 0,
1158
+ ordemCamadasIds: ae(e.ordemCamadasIds),
1159
+ ordemOrigemIds: Array.isArray(e.ordemOrigemIds) ? ae(e.ordemOrigemIds) : void 0,
1108
1160
  mapaBaseAtivo: typeof e.mapaBaseAtivo == "string" ? e.mapaBaseAtivo : void 0,
1109
1161
  densidade: e.densidade === "compacto" || e.densidade === "normal" ? e.densidade : void 0,
1110
1162
  altura: typeof a == "number" && Number.isFinite(a) && a > 0 ? a : null,
@@ -1117,13 +1169,13 @@ function be(e) {
1117
1169
  return null;
1118
1170
  try {
1119
1171
  const r = localStorage.getItem(e);
1120
- return r ? ja(JSON.parse(r)) : null;
1172
+ return r ? Qa(JSON.parse(r)) : null;
1121
1173
  } catch (r) {
1122
1174
  console.warn(`[UI-Camadas] Não foi possível carregar o estado persistido (${e}):`, r);
1123
1175
  }
1124
1176
  return null;
1125
1177
  }
1126
- function Na(e, r) {
1178
+ function Xa(e, r) {
1127
1179
  if (!(typeof window > "u" || typeof localStorage > "u"))
1128
1180
  try {
1129
1181
  localStorage.setItem(e, JSON.stringify(r));
@@ -1131,14 +1183,14 @@ function Na(e, r) {
1131
1183
  console.warn(`[UI-Camadas] Não foi possível salvar o estado persistido (${e}):`, a);
1132
1184
  }
1133
1185
  }
1134
- function Ha(e) {
1186
+ function Wa(e) {
1135
1187
  if (!(typeof window > "u" || typeof localStorage > "u"))
1136
1188
  try {
1137
1189
  localStorage.removeItem(e);
1138
1190
  } catch {
1139
1191
  }
1140
1192
  }
1141
- function Xe(e) {
1193
+ function We(e) {
1142
1194
  return {
1143
1195
  name: e.name,
1144
1196
  visible: e.visible !== !1,
@@ -1148,60 +1200,60 @@ function Xe(e) {
1148
1200
  parentId: e.parentId !== void 0 ? e.parentId : null
1149
1201
  };
1150
1202
  }
1151
- function Ga(e, r, a, i) {
1203
+ function Ja(e, r, a, t) {
1152
1204
  var u;
1153
1205
  if (!Array.isArray(e)) return;
1154
- const t = (r == null ? void 0 : r.camadasOverrides) || {}, o = new Set((r == null ? void 0 : r.expandedLayerIds) || []), n = new Set((r == null ? void 0 : r.collapsedLayerIds) || []), l = o.size > 0 || n.size > 0;
1155
- for (let p = 0; p < e.length; p++) {
1156
- const m = e[p], f = t[m.id];
1157
- if (i == null || i.set(m.id, Xe(m)), f) {
1158
- const g = f.origem, v = (h) => {
1159
- var C;
1160
- const k = (C = i == null ? void 0 : i.get(m.id)) == null ? void 0 : C[h];
1161
- return g !== void 0 && g[h] !== k;
1206
+ const i = (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;
1207
+ for (let d = 0; d < e.length; d++) {
1208
+ const m = e[d], f = i[m.id];
1209
+ if (t == null || t.set(m.id, We(m)), f) {
1210
+ const g = f.origem, v = (y) => {
1211
+ var M;
1212
+ const k = (M = t == null ? void 0 : t.get(m.id)) == null ? void 0 : M[y];
1213
+ return g !== void 0 && g[y] !== k;
1162
1214
  };
1163
1215
  typeof f.name == "string" && f.name.trim() && !v("name") && (m.name = f.name), typeof f.visible == "boolean" && !v("visible") && (m.visible = f.visible), typeof f.locked == "boolean" && !v("locked") && (m.locked = f.locked), typeof f.opacity == "number" && !v("opacity") && (m.opacity = f.opacity), typeof f.color == "string" && !v("color") && (m.color = f.color), f.parentId !== void 0 && !v("parentId") && (m.parentId = f.parentId);
1164
1216
  }
1165
1217
  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);
1166
1218
  }
1167
- for (let p = 0; p < e.length; p++) {
1168
- const m = e[p];
1169
- m.parentId && (m.parentId === m.id || _(e, m.parentId, m.id)) && (m.parentId = ((u = i == null ? void 0 : i.get(m.id)) == null ? void 0 : u.parentId) ?? null);
1219
+ for (let d = 0; d < e.length; d++) {
1220
+ const m = e[d];
1221
+ m.parentId && (m.parentId === m.id || U(e, m.parentId, m.id)) && (m.parentId = ((u = t == null ? void 0 : t.get(m.id)) == null ? void 0 : u.parentId) ?? null);
1170
1222
  }
1171
- const c = new Set(e.map((p) => p.id)), s = r == null ? void 0 : r.ordemOrigemIds;
1223
+ const c = new Set(e.map((d) => d.id)), s = r == null ? void 0 : r.ordemOrigemIds;
1172
1224
  if (!(Array.isArray(s) && (() => {
1173
- const p = new Set(s), m = (f) => f.filter((g) => c.has(g) && p.has(g)).join("|");
1225
+ const d = new Set(s), m = (f) => f.filter((g) => c.has(g) && d.has(g)).join("|");
1174
1226
  return m(s) !== m(e.map((f) => f.id));
1175
1227
  })()) && Array.isArray(r == null ? void 0 : r.ordemCamadasIds) && r.ordemCamadasIds.length > 0) {
1176
- const p = /* @__PURE__ */ new Map();
1177
- r.ordemCamadasIds.forEach((m, f) => p.set(m, f)), e.sort((m, f) => {
1178
- const g = p.has(m.id) ? p.get(m.id) : 9999, v = p.has(f.id) ? p.get(f.id) : 9999;
1228
+ const d = /* @__PURE__ */ new Map();
1229
+ r.ordemCamadasIds.forEach((m, f) => d.set(m, f)), e.sort((m, f) => {
1230
+ const g = d.has(m.id) ? d.get(m.id) : 9999, v = d.has(f.id) ? d.get(f.id) : 9999;
1179
1231
  return g - v;
1180
1232
  });
1181
1233
  }
1182
1234
  }
1183
- function Ua(e) {
1184
- const { estadoAnterior: r, camadas: a, expandedLayers: i } = e;
1185
- let t = (r == null ? void 0 : r.expandedLayerIds) || [], o = (r == null ? void 0 : r.collapsedLayerIds) || [], n = (r == null ? void 0 : r.ordemCamadasIds) || [], l = r == null ? void 0 : r.ordemOrigemIds;
1235
+ function Za(e) {
1236
+ const { estadoAnterior: r, camadas: a, expandedLayers: t } = e;
1237
+ let i = (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;
1186
1238
  const c = {
1187
1239
  ...(r == null ? void 0 : r.camadasOverrides) || {}
1188
1240
  };
1189
- a.length > 0 && (t = [], o = [], n = a.map((s) => s.id), l = e.origensCamadas ? [...e.origensCamadas.keys()] : n, a.forEach((s) => {
1190
- var d, u;
1191
- i.has(s.id) ? t.push(s.id) : o.push(s.id), c[s.id] = {
1241
+ a.length > 0 && (i = [], o = [], n = a.map((s) => s.id), l = e.origensCamadas ? [...e.origensCamadas.keys()] : n, a.forEach((s) => {
1242
+ var p, u;
1243
+ t.has(s.id) ? i.push(s.id) : o.push(s.id), c[s.id] = {
1192
1244
  name: s.name,
1193
1245
  visible: s.visible !== !1,
1194
1246
  locked: !!s.locked,
1195
1247
  opacity: typeof s.opacity == "number" ? s.opacity : 1,
1196
1248
  color: s.color || "#00E08A",
1197
1249
  parentId: s.parentId !== void 0 ? s.parentId : null,
1198
- origem: ((d = e.origensCamadas) == null ? void 0 : d.get(s.id)) ?? ((u = c[s.id]) == null ? void 0 : u.origem)
1250
+ origem: ((p = e.origensCamadas) == null ? void 0 : p.get(s.id)) ?? ((u = c[s.id]) == null ? void 0 : u.origem)
1199
1251
  };
1200
1252
  }));
1201
1253
  for (const s of e.camadasRemovidas ?? []) delete c[s];
1202
1254
  return {
1203
1255
  versao: 1,
1204
- expandedLayerIds: t,
1256
+ expandedLayerIds: i,
1205
1257
  collapsedLayerIds: o,
1206
1258
  camadaAtivaId: e.camadaAtivaId,
1207
1259
  painelColapsado: e.painelColapsado,
@@ -1214,285 +1266,296 @@ function Ua(e) {
1214
1266
  ultimaAtualizacao: Date.now()
1215
1267
  };
1216
1268
  }
1217
- const Va = `:host{display:flex;flex-direction:column;box-sizing:border-box;font-family:inherit;font-size:11px;color:var(--ui-cor-texto, #e1e1e6);-webkit-user-select:none;user-select:none;width:100%;height:var(--ui-camadas-altura, 100%);min-height:var(--ui-camadas-min-altura, 140px);position:relative;--camada-respiro: 8px;--camada-barra-altura: 28px;--camada-linha-altura: 25px;--camada-thumb-tamanho: 20px;--camada-transicao: .16s cubic-bezier(.16, 1, .3, 1)}:host([densidade="compacto"]){--camada-linha-altura: 22px;--camada-thumb-tamanho: 17px;font-size:10px}:host([flutuante]){position:absolute;top:10px;right:10px;bottom:46px;z-index:var(--ui-z-workspace-hud, 500);width:auto;height:var(--ui-camadas-altura, auto)}*,*:before,*:after{box-sizing:border-box}:host(:not([flutuante])) .ui-camadas-container{max-width:100%;min-width:0;border:none;box-shadow:none;border-radius:0;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none}.ui-camadas-container{display:flex;flex-direction:column;flex:1 1 auto;height:100%;min-height:0;width:100%;max-width:380px;min-width:270px;background:var(--ui-cor-superficie, #141417);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));border-radius:var(--ui-raio-borda, 8px);box-shadow:var(--ui-sombra-lg, 0 10px 30px -4px rgba(0, 0, 0, .5)),0 0 0 1px color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 5%,transparent);overflow:hidden;position:relative;transition:transform .24s cubic-bezier(.16,1,.3,1),opacity .2s ease;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}:host([colapsado]) .ui-camadas-container{transform:translate(calc(100% + 24px));opacity:0;pointer-events:none}.ui-camadas-toggle-flutuante{display:none;position:absolute;top:10px;right:10px;z-index:calc(var(--ui-z-workspace-hud, 500) - 1);background:var(--ui-cor-superficie, #141417);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .18));border-radius:var(--ui-raio-borda, 6px);color:var(--ui-cor-texto, #ffffff);width:34px;height:34px;cursor:pointer;align-items:center;justify-content:center;box-shadow:var(--ui-sombra-md, 0 8px 20px rgba(0, 0, 0, .45));transition:all var(--camada-transicao)}:host([colapsado][flutuante]) .ui-camadas-toggle-flutuante{display:flex}.ui-camadas-toggle-flutuante:hover{border-color:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-primaria, #00E08A);transform:scale(1.08);box-shadow:0 0 14px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-camadas-header{height:var(--camada-barra-altura);min-height:var(--camada-barra-altura);max-height:var(--camada-barra-altura);display:flex;align-items:center;justify-content:space-between;padding:0 5px;border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));background:var(--ui-cor-fundo-elevado, rgba(0, 0, 0, .28));gap:4px}.ui-camadas-tabs{display:flex;gap:3px;flex:1}.ui-camadas-tab-btn{flex:1;background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);height:24px;padding:0 6px;font-size:11px;font-weight:500;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:5px;white-space:nowrap;transition:all var(--camada-transicao)}.ui-camadas-tab-btn:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .07))}.ui-camadas-tab-btn.active{color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 25%,transparent);font-weight:600}.ui-camadas-btn-colapsar{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:22px;height:22px;cursor:pointer;border-radius:var(--ui-raio-sm, 4px);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all var(--camada-transicao)}.ui-camadas-btn-colapsar:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .09))}.ui-camadas-corpo{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding:0 var(--camada-respiro) var(--camada-respiro);display:flex;flex-direction:column;gap:6px;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 16%,transparent) transparent}.ui-camadas-corpo::-webkit-scrollbar{width:4px}.ui-camadas-corpo::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 18%,transparent);border-radius:var(--ui-raio-sm, 4px)}.ui-camadas-corpo::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 32%,transparent)}.ui-tree-toolbar{display:flex;align-items:center;justify-content:space-between;box-sizing:border-box;height:var(--camada-barra-altura);min-height:var(--camada-barra-altura);flex-shrink:0;margin:0 calc(-1 * var(--camada-respiro));padding:0 var(--camada-respiro);gap:8px;border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .06))}.ui-tree-title-group{display:flex;align-items:center;gap:5px}.ui-tree-section-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-cor-texto-secundario, #888899)}.ui-tree-count-badge{font-size:9px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent);color:var(--ui-cor-texto-secundario, #888899);padding:1px 5px;border-radius:8px;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent)}.ui-tree-actions{display:flex;align-items:center;gap:3px}.ui-tree-action-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);border-radius:var(--ui-raio-sm, 4px);width:24px;height:24px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-tree-action-btn:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .09))}.ui-tree-btn-new{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 14%,transparent);border:none;color:var(--ui-cor-primaria, #00E08A);border-radius:var(--ui-raio-sm, 4px);height:24px;padding:0 8px;font-size:10px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-tree-btn-new:hover{background:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-texto-sobre-primaria, #000000)}.ui-tree-search-wrapper{position:relative;display:flex;align-items:center;margin:1px 0}.ui-tree-search-icon{position:absolute;left:8px;color:var(--ui-cor-texto-secundario, #888899);pointer-events:none;display:flex;align-items:center}.ui-tree-search-input{width:100%;height:25px;background:var(--ui-cor-fundo, #0a0a0c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));border-radius:var(--ui-raio-borda, 5px);padding:0 24px 0 26px;color:var(--ui-cor-texto, #ffffff);font-size:10.5px;outline:none;transition:border-color var(--camada-transicao),box-shadow var(--camada-transicao)}.ui-tree-search-input:focus{border-color:var(--ui-cor-primaria, #00E08A);box-shadow:0 0 0 2px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 18%,transparent)}.ui-tree-search-clear{position:absolute;right:5px;background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);cursor:pointer;width:18px;height:18px;display:flex;align-items:center;justify-content:center;border-radius:3px;transition:all var(--camada-transicao)}.ui-tree-search-clear:hover{color:var(--ui-cor-texto, #ffffff);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 10%,transparent)}.ui-panel-box{background:var(--ui-cor-fundo, #0c0c0f);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));border-radius:var(--ui-raio-borda, 6px);overflow:hidden;display:flex;flex-direction:column;flex:1 1 0%;min-height:140px}.ui-search-empty{padding:14px 10px;text-align:center;font-size:11px;color:var(--ui-cor-texto-secundario, #888899);overflow-wrap:anywhere}.ui-layer-tree{flex:1 1 0%;min-height:40px;overflow-y:auto;overflow-x:hidden}.ui-layer-group{border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .04));transition:background var(--camada-transicao)}.ui-layer-group.drop-into{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 9%,transparent)!important;outline:1.5px dashed var(--ui-cor-primaria, #00E08A);outline-offset:-1.5px}.ui-layer-row,.ui-feat-row{display:flex;align-items:center;height:var(--camada-linha-altura);min-height:var(--camada-linha-altura);max-height:var(--camada-linha-altura);padding:0 4px;-webkit-user-select:none;user-select:none;cursor:default;transition:background .1s ease;position:relative}.ui-layer-row{background:var(--ui-cor-fundo-elevado, #18181d);font-weight:600;cursor:pointer;border-left:3px solid transparent}.ui-layer-row:hover{background:var(--ui-cor-hover-menu, #22222a)}.ui-layer-row.active-drawing-layer{background:color-mix(in srgb,var(--layer-active-color, var(--ui-cor-primaria, #00E08A)) 18%,var(--ui-cor-fundo-elevado, #18181d))!important;border-left:3px solid var(--layer-active-color, var(--ui-cor-primaria, #00E08A))!important;box-shadow:inset 0 0 12px color-mix(in srgb,var(--layer-active-color, var(--ui-cor-primaria, #00E08A)) 10%,transparent)}.ui-layer-row.active-drawing-layer .ui-name-text{color:var(--ui-cor-texto, #e1e1e6);font-weight:700}.ui-feat-row{border-left:3px solid transparent;padding-left:13px;background:var(--ui-cor-fundo, #101014);font-weight:400;cursor:pointer}.ui-feat-row:hover{background:var(--ui-cor-hover-menu, #19191f)}.ui-feat-row.selected-row{background:color-mix(in srgb,var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff)) 20%,var(--ui-cor-fundo, #101014))!important;outline:1px solid color-mix(in srgb,var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff)) 55%,transparent)!important;outline-offset:-1px}.ui-layer-row.hidden-layer,.ui-feat-row.hidden-row{opacity:.52}.ui-layer-row.hidden-layer .ui-col-eye,.ui-feat-row.hidden-row .ui-col-eye{color:var(--ui-cor-texto-alerta, #ffb86c);opacity:.95}.ui-layer-row.dragging,.ui-feat-row.dragging{opacity:.35;background:color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 16%,transparent)!important}.ui-layer-row.drop-above:before,.ui-feat-row.drop-above:before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:var(--ui-cor-texto-info, #33b5ff);box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 100%,transparent);z-index:20;pointer-events:none}.ui-layer-row.drop-below:after,.ui-feat-row.drop-below:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background:var(--ui-cor-texto-info, #33b5ff);box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 100%,transparent);z-index:20;pointer-events:none}.ui-layer-row.drop-into{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 16%,transparent)!important;outline:1.5px dashed var(--ui-cor-primaria, #00E08A)!important;outline-offset:-2px;border-radius:var(--ui-raio-sm, 4px)}.ui-layer-row.is-sublayer{background:color-mix(in srgb,var(--ui-cor-fundo-elevado, #18181d) 70%,transparent)}.ui-group-folder-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--ui-cor-texto-alerta, #ffb86c);margin-right:4px;flex-shrink:0}.ui-col{display:flex;align-items:center;justify-content:center;flex-shrink:0;height:var(--camada-linha-altura)}.ui-col-drag{width:8px;margin-right:1px;cursor:grab;color:var(--ui-cor-texto-secundario, #888899);opacity:.35;touch-action:none;transition:opacity var(--camada-transicao),color var(--camada-transicao)}.ui-layer-row:hover .ui-col-drag,.ui-feat-row:hover .ui-col-drag{opacity:.9;color:var(--ui-cor-primaria, #00E08A)}.ui-col-drag:active{cursor:grabbing}.ui-col-eye{width:20px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);transition:color var(--camada-transicao)}.ui-col-eye:hover{color:var(--ui-cor-primaria, #00E08A)}.ui-col-lock{width:18px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);transition:color var(--camada-transicao)}.ui-col-lock:hover{color:var(--ui-cor-texto-alerta, #ffb86c)}.ui-col-colorbar{width:3.5px;height:16px;margin:0 3px 0 2px;border-radius:1.5px;flex-shrink:0}.ui-col-colorbar-editavel{position:relative;width:5px;height:18px;cursor:pointer}.ui-col-colorbar-editavel:before{content:"";position:absolute;top:-3px;right:-4px;bottom:-3px;left:-4px}.ui-col-colorbar-editavel:hover,.ui-col-colorbar-editavel:focus-visible{filter:brightness(1.3);outline:none}.ui-col-chevron,.ui-col-branch{margin-left:calc(var(--layer-depth, 0) * 12px)}.ui-col-chevron{width:14px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);display:flex;align-items:center;justify-content:center}.ui-chevron-icon{display:inline-flex;align-items:center;justify-content:center;transition:transform var(--camada-transicao)}.ui-chevron-icon.open{transform:rotate(90deg)}.ui-col-branch{width:14px;display:flex;align-items:center;justify-content:center;color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 22%,transparent);font-size:10px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace)}.ui-col-thumb{width:calc(var(--camada-thumb-tamanho) + 3px);margin-right:4px;display:flex;align-items:center;justify-content:center}.ui-thumb-box{width:var(--camada-thumb-tamanho);height:var(--camada-thumb-tamanho);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 15%,transparent);border-radius:3px;background:var(--ui-cor-fundo, #0d0d10);box-sizing:border-box;overflow:hidden;display:flex;align-items:center;justify-content:center}.ui-col-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;color:var(--ui-cor-texto, #e1e1e6);padding-left:2px;padding-right:4px;cursor:pointer;display:flex;align-items:center;justify-content:flex-start;text-align:left;gap:4px}.ui-name-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-count-chip{font-size:9px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;color:var(--ui-cor-texto-secundario, #888899);font-weight:400;padding:0 2px;flex-shrink:0}.ui-col-actions{display:flex;align-items:center;gap:2px;opacity:0;transition:opacity var(--camada-transicao)}.ui-layer-row:hover .ui-col-actions,.ui-feat-row:hover .ui-col-actions{opacity:1}.ui-micro-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:18px;height:18px;padding:0;border-radius:3px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-micro-btn:hover{color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12))}.ui-micro-btn.active{color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 18%,transparent)}.ui-col-target{width:22px;cursor:pointer}.ui-target-circle{width:11px;height:11px;border-radius:50%;border:1.5px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 32%,transparent);background:transparent;transition:all .12s ease}.ui-col-target:hover .ui-target-circle{border-color:var(--ui-cor-texto-info, #33b5ff);transform:scale(1.18)}.ui-target-circle.selected{border:2px solid var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff));background:var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff));box-shadow:inset 0 0 0 2px var(--ui-cor-superficie, #141418)}.ui-target-circle.partial{border:2px solid var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff));background:color-mix(in srgb,var(--layer-active-color, var(--ui-cor-texto-info, #33b5ff)) 40%,transparent)}.ui-inline-rename-input{width:100%;height:20px;background:var(--ui-cor-fundo, #0d0d10);color:var(--ui-cor-texto, #e1e1e6);border:1px solid var(--ui-cor-primaria, #00E08A);border-radius:3px;font-size:10.5px;padding:0 4px;outline:none;box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 40%,transparent)}.ui-layer-settings-drawer{background:linear-gradient(180deg,var(--ui-cor-fundo-elevado, #17171e) 0%,var(--ui-cor-superficie, #0f0f13) 100%);padding:10px 14px 12px;border-top:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);border-bottom:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent);border-left:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));display:flex;flex-direction:column;gap:10px;box-shadow:inset 0 1px color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent),0 6px 16px #00000073;animation:drawerSlideDown .18s cubic-bezier(.16,1,.3,1);position:relative;z-index:10}@keyframes drawerSlideDown{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.ui-drawer-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:6px;border-bottom:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent)}.ui-drawer-header-left{display:flex;align-items:center;gap:7px;min-width:0}.ui-drawer-icon{color:var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));display:flex;align-items:center;flex-shrink:0}.ui-drawer-title{font-size:10.5px;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);text-transform:uppercase;letter-spacing:.6px;white-space:nowrap}.ui-drawer-layer-chip{font-size:9.5px;font-weight:500;color:var(--ui-cor-texto-secundario, #888899);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent);padding:1px 6px;border-radius:var(--ui-raio-sm, 4px);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-drawer-btn-fechar{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:20px;height:20px;padding:0;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-drawer-btn-fechar:hover{color:var(--ui-cor-texto, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-body{display:flex;flex-direction:column;gap:10px}.ui-drawer-row{display:flex;flex-direction:column;gap:5px}.ui-drawer-row-label{display:flex;justify-content:space-between;align-items:center;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:var(--ui-cor-texto-secundario, #888899)}.ui-drawer-color-group{display:flex;align-items:center;justify-content:space-between;gap:8px}.ui-drawer-color-pill{position:relative;display:inline-flex;align-items:center;gap:6px;padding:3px 8px 3px 5px;background:var(--ui-cor-fundo, #0b0b0d);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 16%,transparent);border-radius:var(--ui-raio-sm, 4px);cursor:pointer;transition:all var(--camada-transicao);-webkit-user-select:none;user-select:none}.ui-drawer-color-pill:hover{border-color:var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 25%,transparent)}.ui-drawer-color-sample{width:14px;height:14px;border-radius:3px;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 35%,transparent);box-shadow:var(--ui-sombra-sm, 0 1px 3px rgba(0, 0, 0, .5));flex-shrink:0;transition:background-color .1s ease}.ui-drawer-color-hex{font-size:10px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);letter-spacing:.5px}.ui-drawer-color-native{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.ui-drawer-badge{font-size:9.5px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 10%,transparent);padding:1px 6px;border-radius:var(--ui-raio-sm, 4px);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-slider-container{display:flex;flex-direction:column;gap:4px}.ui-drawer-slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:5px;background:linear-gradient(90deg,color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent) 0%,var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A)) 100%);border-radius:3px;outline:none;margin:3px 0;cursor:pointer;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-slider::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:#fff;border:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));box-shadow:0 0 6px #0009,0 0 10px var(--drawer-cor-camada, rgba(0, 224, 138, .6));cursor:pointer;transition:transform .12s ease}.ui-drawer-slider::-webkit-slider-thumb:hover{transform:scale(1.22)}.ui-drawer-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:#fff;border:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));box-shadow:0 0 6px #0009,0 0 10px var(--drawer-cor-camada, rgba(0, 224, 138, .6));cursor:pointer}.ui-drawer-footer{display:flex;align-items:center;justify-content:space-between;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent)}.ui-drawer-meta-info{font-size:9.5px;color:var(--ui-cor-texto-secundario, #888899);font-style:italic}.ui-drawer-actions{display:flex;align-items:center;gap:6px}.ui-drawer-btn-danger{background:color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 10%,transparent);border:1px solid color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 35%,transparent);color:var(--ui-cor-texto-erro, #ff5555);border-radius:var(--ui-raio-sm, 4px);height:24px;padding:0 10px;font-size:10px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:all var(--camada-transicao)}.ui-drawer-btn-danger:hover{background:var(--ui-cor-botao-destrutivo-fundo, #d32f2f);color:var(--ui-cor-botao-destrutivo-texto, #ffffff);border-color:var(--ui-cor-botao-destrutivo-fundo, #d32f2f);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 45%,transparent);transform:translateY(-.5px)}.ui-drawer-btn-danger.confirming{background:var(--ui-cor-botao-destrutivo-hover, #b71c1c);color:var(--ui-cor-botao-destrutivo-texto, #ffffff);border-color:var(--ui-cor-botao-destrutivo-hover, #b71c1c);animation:pulseDanger 1.2s infinite}@keyframes pulseDanger{0%{transform:scale(1)}50%{transform:scale(1.02)}to{transform:scale(1)}}.ui-previa-dot{width:6px;height:6px;margin-left:4px;border-radius:50%;flex-shrink:0;background:var(--ui-cor-texto-alerta, #ffb86c);box-shadow:0 0 0 2px color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 25%,transparent)}.ui-tree-footer{height:var(--camada-barra-altura);min-height:var(--camada-barra-altura);background:var(--ui-cor-fundo-elevado, #121216);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));display:flex;align-items:center;justify-content:space-between;padding:0 var(--camada-respiro);gap:6px;box-sizing:border-box;overflow:hidden;position:relative;flex-shrink:0;margin:0 calc(-1 * var(--camada-respiro))}.ui-footer-left{display:flex;align-items:center;gap:5px;white-space:nowrap;min-width:0;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis}.ui-footer-count{font-size:11px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-primaria, #00E08A);flex-shrink:0}.ui-footer-label{display:inline-flex;align-items:center;color:var(--ui-cor-texto-secundario, #888899);flex-shrink:0}.ui-footer-actions-gerais{display:flex;align-items:center;gap:4px;flex-shrink:0}.ui-footer-chip-btn{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent);border:none;color:var(--ui-cor-texto-secundario, #a0a0b0);font-size:10px;font-weight:600;height:22px;padding:0 8px;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-footer-chip-btn:hover{background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #ffffff)}.ui-footer-chip-btn.primario{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 14%,transparent);color:var(--ui-cor-primaria, #00E08A)}.ui-footer-chip-btn.primario:hover{background:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-texto-sobre-primaria, #000000)}.ui-footer-right{display:flex;align-items:center;gap:4px;flex:1 1 auto;min-width:0}.ui-footer-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:22px;height:22px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all var(--camada-transicao);flex-shrink:0}.ui-footer-btn:hover:not(.disabled){color:var(--ui-cor-texto, #e1e1e6);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12))}.ui-footer-btn.disabled{opacity:.25;cursor:not-allowed}.ui-footer-btn.btn-danger-footer:hover:not(.disabled){color:#f55;background:#ff555526}.ui-footer-btn.confirming{background:#f55!important;color:#fff!important}.ui-footer-move-wrapper{position:relative;display:flex;align-items:center;flex:1 1 auto;min-width:0}.ui-footer-select{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23888899' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 6px center;background-size:10px;border:none;color:var(--ui-cor-texto, #e1e1e6);border-radius:var(--ui-raio-sm, 4px);font:inherit;font-size:10px;font-weight:500;height:22px;padding:0 22px 0 8px;cursor:pointer;width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-footer-select:hover:not(:disabled){background-color:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12))}.ui-footer-select:focus-visible{outline:1px solid var(--ui-cor-primaria, #00E08A)}.ui-tree-btn-group{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent);border:none;color:var(--ui-cor-texto-secundario, #a0a0b0);border-radius:var(--ui-raio-sm, 4px);height:24px;padding:0 7px;font-size:10px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-tree-btn-group:hover{background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #ffffff)}.ui-drawer-btn-sublayer{background:#ffffff0f;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #e1e1e6);font-size:10.5px;font-weight:500;padding:4px 8px;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-drawer-btn-sublayer:hover{background:#ffffff1f;color:var(--ui-cor-primaria, #00E08A);border-color:var(--ui-cor-primaria, #00E08A)}.ui-drawer-select-wrapper{display:flex;align-items:center}.ui-drawer-select{background:var(--ui-cor-fundo, #16161c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .15));color:var(--ui-cor-texto, #e1e1e6);border-radius:4px;font-size:10.5px;height:24px;padding:0 6px;cursor:pointer;max-width:140px}.ui-basemap-section{display:flex;flex-direction:column;gap:4px;flex-shrink:0}.ui-basemap-toggle{display:flex;align-items:center;gap:6px;width:100%;padding:2px;background:transparent;border:0;border-radius:var(--ui-raio-sm, 4px);font:inherit;color:inherit;cursor:pointer;text-align:left}.ui-basemap-toggle:hover .ui-basemap-title{color:var(--ui-cor-texto, #e1e1e6)}.ui-basemap-toggle:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:1px}.ui-basemap-atual{flex:1 1 auto;min-width:0;font-size:10px;color:var(--ui-cor-primaria, #00E08A);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:right}.ui-basemap-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:4px}.ui-basemap-card{display:flex;flex-direction:column;align-items:center;gap:2px;padding:3px;border-radius:var(--ui-raio-borda, 5px);background:var(--ui-cor-fundo, #101014);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:pointer;transition:all var(--camada-transicao);text-align:center;overflow:hidden}.ui-basemap-card:hover{border-color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-fundo-elevado, #17171c)}.ui-basemap-card.active{border-color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);color:var(--ui-cor-primaria, #00E08A);font-weight:600;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-basemap-preview{width:100%;height:22px;border-radius:3px;object-fit:cover;opacity:.85;transition:opacity var(--camada-transicao)}.ui-basemap-preview-none{width:100%;height:22px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 4%,transparent);border-radius:3px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-card:hover .ui-basemap-preview,.ui-basemap-card.active .ui-basemap-preview{opacity:1}.ui-basemap-card span{font-size:9.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.ui-layer-row.herdado-oculto,.ui-feat-row.herdado-oculto{opacity:.52}.ui-layer-row.herdado-travado .ui-col-lock.ui-lock-open{color:var(--ui-cor-texto-secundario, #888899);opacity:.7}.ui-search-hidden{display:none!important}.ui-empty-row{height:22px;display:flex;align-items:center;padding-left:36px;font-size:10px;color:var(--ui-cor-texto-secundario, #666677);font-style:italic;background:var(--ui-cor-fundo-recuado, rgba(0, 0, 0, .15))}.ui-camadas-resizer-altura{display:none;flex-shrink:0;width:100%;height:9px;background:var(--ui-cor-superficie, #141417);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:ns-resize;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;touch-action:none;transition:background .15s ease,border-color .15s ease;position:relative;z-index:10}:host([redimensionavel]) .ui-camadas-resizer-altura,:host([redimensionavel-altura]) .ui-camadas-resizer-altura{display:flex}.ui-camadas-resizer-altura:hover,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 9%,transparent);border-top-color:var(--ui-cor-primaria, #00E08A)}.ui-camadas-resizer-grip{width:32px;height:3px;border-radius:2px;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 22%,transparent);transition:all .15s ease}.ui-camadas-resizer-altura:hover .ui-camadas-resizer-grip,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo .ui-camadas-resizer-grip{background:var(--ui-cor-primaria, #00E08A);width:46px;box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 45%,transparent)}:host(.ui-camadas--redimensionando){-webkit-user-select:none!important;user-select:none!important;cursor:ns-resize!important}:host(.ui-camadas--redimensionando) *{-webkit-user-select:none!important;user-select:none!important}.ui-col-lock.ui-lock-open{opacity:.28}.ui-col-lock.ui-lock-open:hover,.ui-col-lock.ui-lock-open:focus-visible{opacity:.8}.ui-col-lock[data-locked-by-layer]{cursor:not-allowed}.ui-col[role=button]:focus-visible,.ui-basemap-card:focus-visible,.ui-feat-row:focus-visible,.ui-layer-row:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:-2px}.ui-footer-btn.confirming{color:var(--ui-cor-botao-destrutivo-texto, #ffffff);background:var(--ui-cor-botao-destrutivo-hover, #b71c1c);width:auto;padding:0 6px}.ui-truncate-notice{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 12px;margin:4px 8px 6px;background:color-mix(in srgb,var(--ui-cor-superficie-elevada, #1c1c21) 70%,transparent);border:1px dashed var(--ui-cor-borda, rgba(255, 255, 255, .12));border-radius:var(--ui-raio-borda, 4px);font-size:10px;color:var(--ui-cor-texto-secundario, #9ca3af)}.ui-truncate-notice span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-truncate-more-btn{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;background:var(--ui-cor-superficie, #27272a);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .18));border-radius:var(--ui-raio-borda, 4px);color:var(--ui-cor-primaria, #00E08A);font-size:10px;font-weight:500;cursor:pointer;white-space:nowrap;transition:all var(--camada-transicao)}.ui-truncate-more-btn:hover{background:var(--ui-cor-superficie-hover, #3f3f46);border-color:var(--ui-cor-primaria, #00E08A)}.ui-truncate-more-btn:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:1px}`;
1218
- function Ya(e, r) {
1219
- r.querySelectorAll("[data-layer-row]").forEach((i) => {
1220
- const o = i.getAttribute("data-layer-row") === e.camadaAtivaId;
1221
- i.classList.toggle("active-drawing-layer", o), Re(i, "camada-ativa", o), o ? i.setAttribute("aria-current", "true") : i.removeAttribute("aria-current");
1269
+ const er = `: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-section{container-type:inline-size}@container (min-width: 260px){.ui-basemap-grid{grid-template-columns:repeat(3,1fr)}}@container (min-width: 340px){.ui-basemap-grid{grid-template-columns:repeat(4,1fr)}}.ui-basemap-card{display:flex;flex-direction:column;align-items:center;gap:2px;padding:3px;border-radius:var(--ui-raio-borda, 5px);background:var(--ui-cor-fundo, #101014);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:pointer;transition:all var(--camada-transicao);text-align:center;overflow:hidden}.ui-basemap-card:hover{border-color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-fundo-elevado, #17171c)}.ui-basemap-card.active{border-color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);color:var(--ui-cor-primaria, #00E08A);font-weight:600;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-basemap-preview{width:100%;height:22px;border-radius:3px;object-fit:cover;opacity:.85;transition:opacity var(--camada-transicao)}.ui-basemap-preview-none{width:100%;height:22px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 4%,transparent);border-radius:3px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-card:hover .ui-basemap-preview,.ui-basemap-card.active .ui-basemap-preview{opacity:1}.ui-basemap-card span{font-size:9.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.ui-layer-row.herdado-oculto,.ui-feat-row.herdado-oculto{opacity:.52}.ui-layer-row.herdado-travado .ui-col-lock.ui-lock-open{color:var(--ui-cor-texto-secundario, #888899);opacity:.7}.ui-search-hidden{display:none!important}.ui-empty-row{height:22px;display:flex;align-items:center;padding-left:36px;font-size:10px;color:var(--ui-cor-texto-secundario, #666677);font-style:italic;background:var(--ui-cor-fundo-recuado, rgba(0, 0, 0, .15))}.ui-camadas-resizer-altura{display:none;flex-shrink:0;width:100%;height:9px;background:var(--ui-cor-superficie, #141417);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:ns-resize;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;touch-action:none;transition:background .15s ease,border-color .15s ease;position:relative;z-index:10}:host([redimensionavel]) .ui-camadas-resizer-altura,:host([redimensionavel-altura]) .ui-camadas-resizer-altura{display:flex}.ui-camadas-resizer-altura:hover,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 9%,transparent);border-top-color:var(--ui-cor-primaria, #00E08A)}.ui-camadas-resizer-grip{width:32px;height:3px;border-radius:2px;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 22%,transparent);transition:all .15s ease}.ui-camadas-resizer-altura:hover .ui-camadas-resizer-grip,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo .ui-camadas-resizer-grip{background:var(--ui-cor-primaria, #00E08A);width:46px;box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 45%,transparent)}:host(.ui-camadas--redimensionando){-webkit-user-select:none!important;user-select:none!important;cursor:ns-resize!important}:host(.ui-camadas--redimensionando) *{-webkit-user-select:none!important;user-select:none!important}.ui-col-lock.ui-lock-open{opacity:.28}.ui-col-lock.ui-lock-open:hover,.ui-col-lock.ui-lock-open:focus-visible{opacity:.8}.ui-col-lock[data-locked-by-layer]{cursor:not-allowed}.ui-col[role=button]:focus-visible,.ui-basemap-card:focus-visible,.ui-feat-row:focus-visible,.ui-layer-row:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:-2px}.ui-footer-btn.confirming{color:var(--ui-cor-botao-destrutivo-texto, #ffffff);background:var(--ui-cor-botao-destrutivo-hover, #b71c1c);width:auto;padding:0 6px}.ui-truncate-notice{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 12px;margin:4px 8px 6px;background:color-mix(in srgb,var(--ui-cor-superficie-elevada, #1c1c21) 70%,transparent);border:1px dashed var(--ui-cor-borda, rgba(255, 255, 255, .12));border-radius:var(--ui-raio-borda, 4px);font-size:10px;color:var(--ui-cor-texto-secundario, #9ca3af)}.ui-truncate-notice span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-truncate-more-btn{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;background:var(--ui-cor-superficie, #27272a);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .18));border-radius:var(--ui-raio-borda, 4px);color:var(--ui-cor-primaria, #00E08A);font-size:10px;font-weight:500;cursor:pointer;white-space:nowrap;transition:all var(--camada-transicao)}.ui-truncate-more-btn:hover{background:var(--ui-cor-superficie-hover, #3f3f46);border-color:var(--ui-cor-primaria, #00E08A)}.ui-truncate-more-btn:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:1px}`;
1270
+ function ar(e, r) {
1271
+ r.querySelectorAll("[data-layer-row]").forEach((t) => {
1272
+ const o = t.getAttribute("data-layer-row") === e.camadaAtivaId;
1273
+ t.classList.toggle("active-drawing-layer", o), qe(t, "camada-ativa", o), o ? t.setAttribute("aria-current", "true") : t.removeAttribute("aria-current");
1222
1274
  });
1223
1275
  }
1224
- function Ka(e, r) {
1225
- r.querySelectorAll(".ui-feat-row").forEach((u) => {
1226
- const p = u.getAttribute("data-feat-row"), m = p ? e.selectedFeatureIds.has(p) : !1;
1227
- u.classList.toggle("selected-row", m), Re(u, "feicao-selecionada", m), u.setAttribute("aria-selected", String(m));
1228
- const f = u.querySelector(".ui-target-circle");
1229
- f && f.classList.toggle("selected", m);
1230
- }), r.querySelectorAll(".ui-layer-group").forEach((u) => {
1231
- const p = u.getAttribute("data-layer-id"), m = ne(e.camadas, e.feicoes, p ?? ""), f = u.querySelector(".ui-layer-row .ui-target-circle");
1232
- if (f && m.length > 0) {
1233
- const g = m.every((h) => e.selectedFeatureIds.has(h.id)), v = !g && m.some((h) => e.selectedFeatureIds.has(h.id));
1234
- f.classList.toggle("selected", g), f.classList.toggle("partial", v);
1235
- } else f && f.classList.remove("selected", "partial");
1236
- });
1237
- const a = e.feicoes.filter((u) => e.selectedFeatureIds.has(u.id)), i = a.length > 0, t = r.getElementById("footer-count"), o = r.getElementById("footer-label");
1238
- if (t && (t.textContent = String(i ? a.length : e.camadas.length)), o) {
1239
- const u = Ue(e.camadas.length, a.length);
1276
+ function rr(e, r) {
1277
+ r.querySelectorAll(".ui-feat-row").forEach((a) => {
1278
+ const t = a.getAttribute("data-feat-row"), i = t ? e.selectedFeatureIds.has(t) : !1;
1279
+ a.classList.toggle("selected-row", i), qe(a, "feicao-selecionada", i), a.setAttribute("aria-selected", String(i));
1280
+ const o = a.querySelector(".ui-target-circle");
1281
+ o && o.classList.toggle("selected", i);
1282
+ }), r.querySelectorAll(".ui-layer-group").forEach((a) => {
1283
+ const t = a.getAttribute("data-layer-id"), i = Q(e.camadas, e.feicoes, t ?? "");
1284
+ Je(a.querySelector(".ui-layer-row .ui-target-circle"), i, e.selectedFeatureIds);
1285
+ }), Ze(e, r);
1286
+ }
1287
+ function Je(e, r, a) {
1288
+ if (!e) return;
1289
+ if (r.length === 0) {
1290
+ e.classList.remove("selected", "partial");
1291
+ return;
1292
+ }
1293
+ const t = r.every((o) => a.has(o.id)), i = !t && r.some((o) => a.has(o.id));
1294
+ e.classList.toggle("selected", t), e.classList.toggle("partial", i);
1295
+ }
1296
+ function Ze(e, r) {
1297
+ const a = e.feicoes.filter((u) => e.selectedFeatureIds.has(u.id)), t = a.length > 0, i = r.getElementById("footer-count"), o = r.getElementById("footer-label");
1298
+ if (i && (i.textContent = String(t ? a.length : e.camadas.length)), o) {
1299
+ const u = je(e.camadas.length, a.length);
1240
1300
  o.innerHTML = u.icone, o.title = u.texto, o.setAttribute("aria-label", u.texto);
1241
1301
  }
1242
1302
  const n = r.querySelector(".ui-tree-footer");
1243
- n && (n.classList.toggle("tem-selecao", i), n.classList.toggle("sem-selecao", !i));
1303
+ n && (n.classList.toggle("tem-selecao", t), n.classList.toggle("sem-selecao", !t));
1244
1304
  const l = r.querySelector(".ui-footer-actions-gerais");
1245
- l && (l.style.display = i ? "none" : "flex");
1305
+ l && (l.style.display = t ? "none" : "flex");
1246
1306
  const c = r.querySelector(".ui-footer-bulk-actions");
1247
- c && (c.style.display = i ? "flex" : "none"), ["btn-footer-del"].forEach((u) => {
1248
- const p = r.getElementById(u);
1249
- p && (p.disabled = !i, p.classList.toggle("disabled", !i));
1307
+ c && (c.style.display = t ? "flex" : "none"), ["btn-footer-del"].forEach((u) => {
1308
+ const d = r.getElementById(u);
1309
+ d && (d.disabled = !t, d.classList.toggle("disabled", !t));
1250
1310
  });
1251
1311
  const s = r.querySelector(".ui-footer-move-wrapper");
1252
- s && s.classList.toggle("disabled", !i);
1253
- const d = r.getElementById("select-footer-move");
1254
- d && (d.disabled = !i);
1312
+ s && s.classList.toggle("disabled", !t);
1313
+ const p = r.getElementById("select-footer-move");
1314
+ p && (p.disabled = !t);
1255
1315
  }
1256
- function De(e, r) {
1257
- const a = we(e.camadas), i = new Map(e.camadas.map((o) => [o.id, o]));
1316
+ function ze(e, r) {
1317
+ const a = se(e.camadas), t = new Map(e.camadas.map((o) => [o.id, o]));
1258
1318
  r.querySelectorAll(".ui-layer-row").forEach((o) => {
1259
1319
  const n = a.get(o.getAttribute("data-layer-row") || "");
1260
1320
  o.classList.toggle("herdado-oculto", (n == null ? void 0 : n.ocultaPorAncestral) === !0), o.classList.toggle("herdado-travado", (n == null ? void 0 : n.travadaPorAncestral) === !0);
1261
1321
  });
1262
- const t = new Map(e.feicoes.map((o) => [o.id, o]));
1322
+ const i = new Map(e.feicoes.map((o) => [o.id, o]));
1263
1323
  r.querySelectorAll(".ui-feat-row").forEach((o) => {
1264
- const n = o.getAttribute("data-feat-layer") || "", l = i.get(n), c = a.get(n);
1324
+ const n = o.getAttribute("data-feat-layer") || "", l = t.get(n), c = a.get(n);
1265
1325
  o.classList.toggle("herdado-oculto", (l == null ? void 0 : l.visible) === !1 || (c == null ? void 0 : c.ocultaPorAncestral) === !0);
1266
- const s = o.querySelector("[data-feat-lock]"), d = t.get(o.getAttribute("data-feat-row") || "");
1267
- if (!s || !d) return;
1268
- const u = (l == null ? void 0 : l.locked) === !0 || (c == null ? void 0 : c.travadaPorAncestral) === !0, p = d.locked === !0 || u;
1269
- s.innerHTML = p ? b.cadeadoTrancado : b.cadeadoAberto, s.classList.toggle("ui-lock-open", !p), u ? s.setAttribute("data-locked-by-layer", "true") : s.removeAttribute("data-locked-by-layer"), B(
1326
+ const s = o.querySelector("[data-feat-lock]"), p = i.get(o.getAttribute("data-feat-row") || "");
1327
+ if (!s || !p) return;
1328
+ const u = (l == null ? void 0 : l.locked) === !0 || (c == null ? void 0 : c.travadaPorAncestral) === !0, d = p.locked === !0 || u;
1329
+ s.innerHTML = d ? h.cadeadoTrancado : h.cadeadoAberto, s.classList.toggle("ui-lock-open", !d), u ? s.setAttribute("data-locked-by-layer", "true") : s.removeAttribute("data-locked-by-layer"), P(
1270
1330
  s,
1271
- u ? "Bloqueada pela camada" : p ? "Desbloquear Feição" : "Bloquear Feição"
1331
+ u ? "Bloqueada pela camada" : d ? "Desbloquear Feição" : "Bloquear Feição"
1272
1332
  );
1273
1333
  });
1274
1334
  }
1275
- function _a(e, r) {
1276
- r.querySelectorAll("[data-layer-row]").forEach((t) => {
1277
- t.addEventListener("click", (o) => {
1335
+ function tr(e, r) {
1336
+ r.querySelectorAll("[data-layer-row]").forEach((i) => {
1337
+ i.addEventListener("click", (o) => {
1278
1338
  if (o.target.closest(
1279
1339
  "[data-layer-eye], [data-layer-lock], [data-layer-expand], [data-layer-target], [data-layer-fit], [data-layer-settings], [data-layer-color], input, button"
1280
1340
  ))
1281
1341
  return;
1282
- const l = t.getAttribute("data-layer-row");
1342
+ const l = i.getAttribute("data-layer-row");
1283
1343
  l && e.definirCamadaAtiva(l, !0);
1284
1344
  });
1285
- }), r.querySelectorAll("[data-layer-expand]").forEach((t) => {
1286
- t.addEventListener("click", (o) => {
1345
+ }), r.querySelectorAll("[data-layer-expand]").forEach((i) => {
1346
+ i.addEventListener("click", (o) => {
1287
1347
  o.stopPropagation();
1288
- const n = t.getAttribute("data-layer-expand");
1348
+ const n = i.getAttribute("data-layer-expand");
1289
1349
  if (!n) return;
1290
1350
  e.expandedLayers.has(n) ? e.expandedLayers.delete(n) : e.expandedLayers.add(n);
1291
- const l = t.closest(".ui-layer-group"), c = t.querySelector(".ui-chevron-icon"), s = e.expandedLayers.has(n);
1351
+ const l = i.closest(".ui-layer-group"), c = i.querySelector(".ui-chevron-icon"), s = e.expandedLayers.has(n);
1292
1352
  if (c && c.classList.toggle("open", s), l) {
1293
1353
  l.setAttribute("aria-expanded", String(s));
1294
- const d = l.querySelector(".ui-children-container");
1295
- d && (d.style.display = s ? "block" : "none");
1354
+ const p = l.querySelector(".ui-children-container");
1355
+ p && (p.style.display = s ? "block" : "none");
1296
1356
  }
1297
- B(t, s ? "Recolher grupo" : "Expandir grupo"), Xa(e, r), e.salvarLembrancaEstado();
1357
+ P(i, s ? "Recolher grupo" : "Expandir grupo"), ir(e, r), e.salvarLembrancaEstado();
1298
1358
  });
1299
- }), r.querySelectorAll("[data-layer-eye]").forEach((t) => {
1300
- t.addEventListener("click", (o) => {
1359
+ }), r.querySelectorAll("[data-layer-eye]").forEach((i) => {
1360
+ i.addEventListener("click", (o) => {
1301
1361
  o.stopPropagation();
1302
- const n = t.getAttribute("data-layer-eye"), l = e.camadas.find((c) => c.id === n);
1362
+ const n = i.getAttribute("data-layer-eye"), l = e.camadas.find((c) => c.id === n);
1303
1363
  if (l) {
1304
1364
  l.visible = l.visible === !1;
1305
1365
  const c = l.visible !== !1;
1306
- t.innerHTML = c ? b.olhoAberto : b.olhoFechado, B(t, c ? "Ocultar Camada" : "Exibir Camada");
1307
- const s = t.closest(".ui-layer-row");
1308
- s && s.classList.toggle("hidden-layer", !c), Qa(e, r), De(e, r), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-visibilidade", {
1366
+ i.innerHTML = c ? h.olhoAberto : h.olhoFechado, P(i, c ? "Ocultar Camada" : "Exibir Camada");
1367
+ const s = i.closest(".ui-layer-row");
1368
+ s && s.classList.toggle("hidden-layer", !c), or(e, r), ze(e, r), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-visibilidade", {
1309
1369
  camadaId: l.id,
1310
1370
  visivel: c
1311
1371
  });
1312
1372
  }
1313
1373
  });
1314
- }), r.querySelectorAll("[data-layer-lock]").forEach((t) => {
1315
- t.addEventListener("click", (o) => {
1374
+ }), r.querySelectorAll("[data-layer-lock]").forEach((i) => {
1375
+ i.addEventListener("click", (o) => {
1316
1376
  o.stopPropagation();
1317
- const n = t.getAttribute("data-layer-lock"), l = e.camadas.find((c) => c.id === n);
1318
- l && (l.locked = !l.locked, t.innerHTML = l.locked ? b.cadeadoTrancado : b.cadeadoAberto, t.classList.toggle("ui-lock-open", !l.locked), B(t, l.locked ? "Desbloquear Camada" : "Bloquear Camada"), De(e, r), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-bloqueio", {
1377
+ const n = i.getAttribute("data-layer-lock"), l = e.camadas.find((c) => c.id === n);
1378
+ l && (l.locked = !l.locked, i.innerHTML = l.locked ? h.cadeadoTrancado : h.cadeadoAberto, i.classList.toggle("ui-lock-open", !l.locked), P(i, l.locked ? "Desbloquear Camada" : "Bloquear Camada"), ze(e, r), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-bloqueio", {
1319
1379
  camadaId: l.id,
1320
1380
  bloqueado: l.locked
1321
1381
  }));
1322
1382
  });
1323
- }), r.querySelectorAll("[data-layer-fit]").forEach((t) => {
1324
- t.addEventListener("click", (o) => {
1383
+ }), r.querySelectorAll("[data-layer-fit]").forEach((i) => {
1384
+ i.addEventListener("click", (o) => {
1325
1385
  o.stopPropagation();
1326
- const n = t.getAttribute("data-layer-fit");
1386
+ const n = i.getAttribute("data-layer-fit");
1327
1387
  n && e.dispararEvento("ui-camada-enquadrar", { camadaId: n });
1328
1388
  });
1329
- }), r.querySelectorAll("[data-layer-settings]").forEach((t) => {
1330
- t.addEventListener("click", (o) => {
1389
+ }), r.querySelectorAll("[data-layer-settings]").forEach((i) => {
1390
+ i.addEventListener("click", (o) => {
1331
1391
  o.stopPropagation();
1332
- const n = t.getAttribute("data-layer-settings");
1392
+ const n = i.getAttribute("data-layer-settings");
1333
1393
  e.activeSettingsLayerId = e.activeSettingsLayerId === n ? null : n, e.solicitarRenderizacao();
1334
1394
  });
1335
- }), r.querySelectorAll("[data-layer-settings-close]").forEach((t) => {
1336
- t.addEventListener("click", (o) => {
1395
+ }), r.querySelectorAll("[data-layer-settings-close]").forEach((i) => {
1396
+ i.addEventListener("click", (o) => {
1337
1397
  o.stopPropagation(), e.activeSettingsLayerId = null, e.solicitarRenderizacao();
1338
1398
  });
1339
1399
  });
1340
- const a = (t, o, n) => {
1400
+ const a = (i, o, n) => {
1341
1401
  var m;
1342
- const l = e.camadas.find((f) => f.id === t);
1402
+ const l = e.camadas.find((f) => f.id === i);
1343
1403
  if (!l) return;
1344
- const c = K(o, l.color || "#00E08A");
1404
+ const c = H(o, l.color || "#00E08A");
1345
1405
  l.color = c;
1346
- const s = r.getElementById(`sample-color-${t}`);
1406
+ const s = r.getElementById(`sample-color-${i}`);
1347
1407
  s && (s.style.backgroundColor = c);
1348
- const d = r.getElementById(`hex-color-${t}`);
1349
- d && (d.textContent = c.toUpperCase());
1350
- const u = r.getElementById(`settings-drawer-${t}`);
1408
+ const p = r.getElementById(`hex-color-${i}`);
1409
+ p && (p.textContent = c.toUpperCase());
1410
+ const u = r.getElementById(`settings-drawer-${i}`);
1351
1411
  u && u.style.setProperty("--drawer-cor-camada", c);
1352
- const p = T(r, "data-layer-row", t);
1353
- if (p) {
1354
- (m = p.closest(".ui-layer-group")) == null || m.style.setProperty("--layer-active-color", c);
1355
- const f = p.querySelector(".ui-col-colorbar");
1412
+ const d = T(r, "data-layer-row", i);
1413
+ if (d) {
1414
+ (m = d.closest(".ui-layer-group")) == null || m.style.setProperty("--layer-active-color", c);
1415
+ const f = d.querySelector(".ui-col-colorbar");
1356
1416
  f && (f.style.backgroundColor = c);
1357
1417
  }
1358
1418
  n ? e.salvarLembrancaEstado() : e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-cor", { camadaId: l.id, cor: c });
1359
1419
  };
1360
- r.querySelectorAll("[data-layer-color-picker]").forEach((t) => {
1361
- const o = t, n = (l) => (c) => {
1420
+ r.querySelectorAll("[data-layer-color-picker]").forEach((i) => {
1421
+ const o = i, n = (l) => (c) => {
1362
1422
  const s = o.getAttribute("data-layer-color-picker");
1363
1423
  if (!s) return;
1364
- const d = c.target.value;
1365
- a(s, d, l);
1424
+ const p = c.target.value;
1425
+ a(s, p, l);
1366
1426
  };
1367
1427
  o.addEventListener("input", n(!1)), o.addEventListener("change", n(!0));
1368
- }), r.querySelectorAll("[data-layer-color]").forEach((t) => {
1428
+ }), r.querySelectorAll("[data-layer-color]").forEach((i) => {
1369
1429
  const o = (n) => {
1370
1430
  n.stopPropagation();
1371
- const l = t.getAttribute("data-layer-color"), c = e.camadas.find((s) => s.id === l);
1372
- !l || !c || ma({
1373
- ancora: t,
1431
+ const l = i.getAttribute("data-layer-color"), c = e.camadas.find((s) => s.id === l);
1432
+ !l || !c || Ea({
1433
+ ancora: i,
1374
1434
  titulo: `Cor · ${c.name || "Camada"}`,
1375
1435
  modo: "simples",
1376
- cor: K(c.color, "#00E08A"),
1436
+ cor: H(c.color, "#00E08A"),
1377
1437
  mostrarOpacidade: !1,
1378
1438
  aoAlterar: (s) => a(l, s.cor, !1),
1379
1439
  aoConfirmar: (s) => a(l, s.cor, !0),
1380
1440
  aoCancelar: (s) => a(l, s.cor, !0)
1381
1441
  });
1382
1442
  };
1383
- t.addEventListener("click", o), t.addEventListener("keydown", (n) => {
1443
+ i.addEventListener("click", o), i.addEventListener("keydown", (n) => {
1384
1444
  const l = n.key;
1385
1445
  (l === "Enter" || l === " ") && (n.preventDefault(), o(n));
1386
1446
  });
1387
1447
  });
1388
- const i = (t, o) => {
1389
- const n = e.camadas.find((s) => s.id === t);
1448
+ const t = (i, o) => {
1449
+ const n = e.camadas.find((s) => s.id === i);
1390
1450
  if (!n) return;
1391
1451
  n.opacity = o;
1392
- const l = r.getElementById(`badge-op-${t}`);
1452
+ const l = r.getElementById(`badge-op-${i}`);
1393
1453
  l && (l.textContent = `${Math.round(o * 100)}%`);
1394
- const c = T(r, "data-layer-opacity-slider", t);
1454
+ const c = T(r, "data-layer-opacity-slider", i);
1395
1455
  c && parseFloat(c.value) !== o && (c.value = String(o)), e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-opacidade", { camadaId: n.id, opacidade: o });
1396
1456
  };
1397
- r.querySelectorAll("[data-layer-opacity-slider]").forEach((t) => {
1398
- t.addEventListener("input", (o) => {
1399
- const n = t.getAttribute("data-layer-opacity-slider");
1457
+ r.querySelectorAll("[data-layer-opacity-slider]").forEach((i) => {
1458
+ i.addEventListener("input", (o) => {
1459
+ const n = i.getAttribute("data-layer-opacity-slider");
1400
1460
  if (!n) return;
1401
1461
  const l = parseFloat(o.target.value);
1402
- i(n, l);
1462
+ Number.isFinite(l) && t(n, Math.min(1, Math.max(0, l)));
1403
1463
  });
1404
- }), r.querySelectorAll("[data-delete-layer]").forEach((t) => {
1464
+ }), r.querySelectorAll("[data-delete-layer]").forEach((i) => {
1405
1465
  let o = null;
1406
- t.addEventListener("click", (n) => {
1466
+ i.addEventListener("click", (n) => {
1407
1467
  n.stopPropagation();
1408
- const l = t.getAttribute("data-delete-layer");
1468
+ const l = i.getAttribute("data-delete-layer");
1409
1469
  if (!l) return;
1410
- if (t.classList.contains("confirming")) {
1470
+ if (i.classList.contains("confirming")) {
1411
1471
  o && clearTimeout(o), e.dispararEvento("ui-camada-excluida", { camadaId: l });
1412
1472
  const s = e.selectedFeatureIds.size;
1413
- e.camadas.forEach((d) => {
1414
- d.parentId === l && (d.parentId = null);
1473
+ e.camadas.forEach((p) => {
1474
+ p.parentId === l && (p.parentId = null);
1415
1475
  }), e.removerCamada(l), e.selectedFeatureIds.size !== s && e.notificarMudancaSelecao();
1416
1476
  } else {
1417
- t.classList.add("confirming");
1418
- const s = t.querySelector(".ui-btn-label");
1477
+ i.classList.add("confirming");
1478
+ const s = i.querySelector(".ui-btn-label");
1419
1479
  s && (s.textContent = "Confirmar Exclusão?"), o = setTimeout(() => {
1420
- t.classList.remove("confirming"), s && (s.textContent = "Excluir");
1480
+ i.classList.remove("confirming"), s && (s.textContent = "Excluir");
1421
1481
  }, 3500);
1422
1482
  }
1423
1483
  });
1424
- }), r.querySelectorAll("[data-layer-parent-select]").forEach((t) => {
1425
- t.addEventListener("change", (o) => {
1426
- const n = o.target, l = n.getAttribute("data-layer-parent-select"), c = n.value || null, s = e.camadas.find((d) => d.id === l);
1484
+ }), r.querySelectorAll("[data-layer-parent-select]").forEach((i) => {
1485
+ i.addEventListener("change", (o) => {
1486
+ const n = o.target, l = n.getAttribute("data-layer-parent-select"), c = n.value || null, s = e.camadas.find((p) => p.id === l);
1427
1487
  if (s) {
1428
- if (c && (c === s.id || _(e.camadas, c, s.id))) {
1488
+ if (c && (c === s.id || U(e.camadas, c, s.id))) {
1429
1489
  n.value = s.parentId || "";
1430
1490
  return;
1431
1491
  }
1432
- const d = s.parentId ?? null;
1492
+ const p = s.parentId ?? null;
1433
1493
  s.parentId = c, c && e.expandedLayers.add(c), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-mover-hierarquia", {
1434
1494
  camadaId: s.id,
1435
1495
  novoParentId: c,
1436
- parentAnteriorId: d,
1496
+ parentAnteriorId: p,
1437
1497
  camada: s
1438
1498
  }), e.solicitarRenderizacao();
1439
1499
  }
1440
1500
  });
1441
- }), r.querySelectorAll("[data-add-sublayer]").forEach((t) => {
1442
- t.addEventListener("click", (o) => {
1501
+ }), r.querySelectorAll("[data-add-sublayer]").forEach((i) => {
1502
+ i.addEventListener("click", (o) => {
1443
1503
  o.stopPropagation();
1444
- const n = t.getAttribute("data-add-sublayer");
1504
+ const n = i.getAttribute("data-add-sublayer");
1445
1505
  e.dispararEvento("ui-camada-adicionar", { parentId: n });
1446
1506
  });
1447
- }), r.querySelectorAll("[data-layer-show-more]").forEach((t) => {
1448
- t.addEventListener("click", (o) => {
1449
- o.stopPropagation();
1450
- const n = t.getAttribute("data-layer-show-more");
1451
- n && e.incrementarLimiteFeicoes(n);
1452
- });
1453
- }), r.querySelectorAll("[data-layer-target]").forEach((t) => {
1454
- t.addEventListener("click", (o) => {
1507
+ }), ea(e, r), r.querySelectorAll("[data-layer-target]").forEach((i) => {
1508
+ i.addEventListener("click", (o) => {
1455
1509
  o.stopPropagation();
1456
- const n = o, l = t.getAttribute("data-layer-target");
1510
+ const n = o, l = i.getAttribute("data-layer-target");
1457
1511
  if (!l) return;
1458
- const c = ne(e.camadas, e.feicoes, l), s = oe(c, e.searchQuery);
1512
+ const c = Q(e.camadas, e.feicoes, l), s = te(c, e.searchQuery);
1459
1513
  if (s.length === 0) return;
1460
1514
  s.every((u) => e.selectedFeatureIds.has(u.id)) ? s.forEach((u) => e.selectedFeatureIds.delete(u.id)) : (!n.ctrlKey && !n.metaKey && e.selectedFeatureIds.clear(), s.forEach((u) => e.selectedFeatureIds.add(u.id))), e.lastClickedFeatureId = s[s.length - 1].id, e.sincronizarSelecaoDOM(), e.notificarMudancaSelecao();
1461
1515
  });
1462
1516
  });
1463
1517
  }
1464
- function Xa(e, r) {
1518
+ function ea(e, r) {
1519
+ r.querySelectorAll("[data-layer-show-more]").forEach((a) => {
1520
+ a.addEventListener("click", (t) => {
1521
+ t.stopPropagation();
1522
+ const i = a.getAttribute("data-layer-show-more");
1523
+ i && e.incrementarLimiteFeicoes(i);
1524
+ });
1525
+ });
1526
+ }
1527
+ function ir(e, r) {
1465
1528
  const a = r.getElementById("btn-toggle-all-expand");
1466
1529
  if (!a) return;
1467
- const i = e.camadas.length > 0 && e.camadas.every((o) => e.expandedLayers.has(o.id)), t = a.querySelector(".ui-chevron-icon");
1468
- t && t.classList.toggle("open", i), B(
1530
+ const t = e.camadas.length > 0 && e.camadas.every((o) => e.expandedLayers.has(o.id)), i = a.querySelector(".ui-chevron-icon");
1531
+ i && i.classList.toggle("open", t), P(
1469
1532
  a,
1470
- i ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"
1533
+ t ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"
1471
1534
  );
1472
1535
  }
1473
- function Qa(e, r) {
1536
+ function or(e, r) {
1474
1537
  const a = r.getElementById("btn-toggle-all-vis");
1475
1538
  if (!a) return;
1476
- const i = e.camadas.every((t) => t.visible !== !1);
1477
- a.innerHTML = i ? b.olhoAberto : b.olhoFechado, B(a, i ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas");
1539
+ const t = e.camadas.every((i) => i.visible !== !1);
1540
+ a.innerHTML = t ? h.olhoAberto : h.olhoFechado, P(a, t ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas");
1478
1541
  }
1479
- function Ja(e, r) {
1542
+ function nr(e, r) {
1480
1543
  const a = r.getElementById("select-footer-move");
1481
1544
  a && a.addEventListener("change", (n) => {
1482
1545
  const l = n.target.value;
1483
1546
  if (!l) return;
1484
- const c = Ae(e.camadas);
1547
+ const c = xe(e.camadas);
1485
1548
  if (c.has(l)) {
1486
1549
  a.value = "";
1487
1550
  return;
1488
1551
  }
1489
1552
  const s = e.feicoes.filter((u) => e.selectedFeatureIds.has(u.id) && !c.has(u.layerId));
1490
1553
  if (s.length === 0) return;
1491
- const d = new Map(s.map((u) => [u.id, u.layerId]));
1554
+ const p = new Map(s.map((u) => [u.id, u.layerId]));
1492
1555
  s.forEach((u) => u.layerId = l), s.forEach((u) => {
1493
- d.get(u.id) !== l && e.dispararEvento("ui-feicao-movida", {
1556
+ p.get(u.id) !== l && e.dispararEvento("ui-feicao-movida", {
1494
1557
  feicaoId: u.id,
1495
- camadaOrigemId: d.get(u.id),
1558
+ camadaOrigemId: p.get(u.id),
1496
1559
  camadaDestinoId: l,
1497
1560
  feicao: u
1498
1561
  });
@@ -1503,12 +1566,12 @@ function Ja(e, r) {
1503
1566
  valor: l
1504
1567
  }), e.solicitarRenderizacao();
1505
1568
  });
1506
- const i = r.getElementById("btn-footer-new-layer");
1507
- i && i.addEventListener("click", () => {
1569
+ const t = r.getElementById("btn-footer-new-layer");
1570
+ t && t.addEventListener("click", () => {
1508
1571
  e.dispararEvento("ui-camada-adicionar", {});
1509
1572
  });
1510
- const t = r.getElementById("btn-footer-new-group");
1511
- t && t.addEventListener("click", () => {
1573
+ const i = r.getElementById("btn-footer-new-group");
1574
+ i && i.addEventListener("click", () => {
1512
1575
  e.dispararEvento("ui-camada-grupo-adicionar", { isGroup: !0 });
1513
1576
  });
1514
1577
  const o = r.getElementById("btn-footer-del");
@@ -1519,14 +1582,14 @@ function Ja(e, r) {
1519
1582
  const c = Array.from(e.selectedFeatureIds);
1520
1583
  if (c.length === 0) return;
1521
1584
  if (!o.classList.contains("confirming")) {
1522
- o.classList.add("confirming"), B(o, `Clique novamente para excluir ${c.length} selecionado(s)`), n = setTimeout(() => {
1523
- o.classList.remove("confirming"), B(o, l);
1585
+ o.classList.add("confirming"), P(o, `Clique novamente para excluir ${c.length} selecionado(s)`), n = setTimeout(() => {
1586
+ o.classList.remove("confirming"), P(o, l);
1524
1587
  }, 3500);
1525
1588
  return;
1526
1589
  }
1527
1590
  n && clearTimeout(n);
1528
- const s = e.feicoes.filter((d) => e.selectedFeatureIds.has(d.id));
1529
- e.feicoes = e.feicoes.filter((d) => !e.selectedFeatureIds.has(d.id)), e.selectedFeatureIds.clear(), e.lastClickedFeatureId = null, e.dispararEvento("ui-acao-massa", {
1591
+ const s = e.feicoes.filter((p) => e.selectedFeatureIds.has(p.id));
1592
+ e.feicoes = e.feicoes.filter((p) => !e.selectedFeatureIds.has(p.id)), e.selectedFeatureIds.clear(), e.lastClickedFeatureId = null, e.dispararEvento("ui-acao-massa", {
1530
1593
  acao: "excluir",
1531
1594
  feicoesIds: c,
1532
1595
  feicoes: s
@@ -1534,7 +1597,7 @@ function Ja(e, r) {
1534
1597
  });
1535
1598
  }
1536
1599
  }
1537
- const Wa = [
1600
+ const sr = [
1538
1601
  { tipo: "olho", atributo: "data-layer-eye", entidade: "camada" },
1539
1602
  { tipo: "olho", atributo: "data-feat-eye", entidade: "feicao" },
1540
1603
  { tipo: "cadeado", atributo: "data-layer-lock", entidade: "camada" },
@@ -1545,32 +1608,32 @@ const Wa = [
1545
1608
  olho: "[data-layer-eye], [data-feat-eye]",
1546
1609
  cadeado: "[data-layer-lock], [data-feat-lock]",
1547
1610
  selecao: "[data-layer-target], [data-feat-target]"
1548
- }, Za = 3;
1549
- function er(e) {
1550
- return Wa.find((r) => e.hasAttribute(r.atributo)) ?? null;
1611
+ }, lr = 3;
1612
+ function cr(e) {
1613
+ return sr.find((r) => e.hasAttribute(r.atributo)) ?? null;
1551
1614
  }
1552
1615
  function ge(e, r) {
1553
- const a = er(r);
1616
+ const a = cr(r);
1554
1617
  if (!a) return null;
1555
- const i = r.getAttribute(a.atributo);
1556
- if (!i) return null;
1618
+ const t = r.getAttribute(a.atributo);
1619
+ if (!t) return null;
1557
1620
  if (a.tipo === "olho") {
1558
- const o = a.entidade === "camada" ? e.camadas.find((n) => n.id === i) : e.feicoes.find((n) => n.id === i);
1621
+ const o = a.entidade === "camada" ? e.camadas.find((n) => n.id === t) : e.feicoes.find((n) => n.id === t);
1559
1622
  return o ? o.visible !== !1 : null;
1560
1623
  }
1561
1624
  if (a.tipo === "cadeado") {
1562
1625
  if (r.hasAttribute("data-locked-by-layer")) return null;
1563
- const o = a.entidade === "camada" ? e.camadas.find((n) => n.id === i) : e.feicoes.find((n) => n.id === i);
1626
+ const o = a.entidade === "camada" ? e.camadas.find((n) => n.id === t) : e.feicoes.find((n) => n.id === t);
1564
1627
  return o ? o.locked === !0 : null;
1565
1628
  }
1566
- if (a.entidade === "feicao") return e.selectedFeatureIds.has(i);
1567
- const t = oe(
1568
- ne(e.camadas, e.feicoes, i),
1629
+ if (a.entidade === "feicao") return e.selectedFeatureIds.has(t);
1630
+ const i = te(
1631
+ Q(e.camadas, e.feicoes, t),
1569
1632
  e.searchQuery
1570
1633
  );
1571
- return t.length === 0 ? null : t.every((o) => e.selectedFeatureIds.has(o.id));
1634
+ return i.length === 0 ? null : i.every((o) => e.selectedFeatureIds.has(o.id));
1572
1635
  }
1573
- function Te(e, r, a = !1) {
1636
+ function Be(e, r, a = !1) {
1574
1637
  e.dispatchEvent(
1575
1638
  new MouseEvent("click", {
1576
1639
  bubbles: !0,
@@ -1580,104 +1643,104 @@ function Te(e, r, a = !1) {
1580
1643
  })
1581
1644
  );
1582
1645
  }
1583
- let z = null;
1584
- function ar(e) {
1585
- (z == null ? void 0 : z.host) === e && z.cancelar();
1646
+ let q = null;
1647
+ function dr(e) {
1648
+ (q == null ? void 0 : q.host) === e && q.cancelar();
1586
1649
  }
1587
- function rr(e, r) {
1588
- Object.keys(he).forEach((a) => {
1589
- r.querySelectorAll(he[a]).forEach((i) => {
1590
- i.addEventListener("pointerdown", (t) => tr(e, r, a, i, t));
1650
+ function aa(e, r, a = r) {
1651
+ Object.keys(he).forEach((t) => {
1652
+ a.querySelectorAll(he[t]).forEach((i) => {
1653
+ i.addEventListener("pointerdown", (o) => ur(e, r, t, i, o));
1591
1654
  });
1592
1655
  });
1593
1656
  }
1594
- function tr(e, r, a, i, t) {
1595
- if (t.pointerType === "mouse" && t.button !== 0 || e.editingLayerId || e.editingFeatureId || ge(e, i) === null) return;
1596
- z == null || z.cancelar();
1597
- const o = he[a], n = t.ctrlKey || t.metaKey, l = t.shiftKey;
1598
- let c = !1, s = !1, d = t.clientY;
1599
- const u = /* @__PURE__ */ new Set([i]), p = (y) => {
1600
- y.preventDefault(), y.stopImmediatePropagation();
1601
- }, m = (y) => {
1602
- y.stopPropagation(), y.preventDefault();
1603
- }, f = (y) => y.preventDefault(), g = (y) => {
1604
- u.has(y) || (u.add(y), ge(e, y) !== s && Te(y, a === "selecao"));
1657
+ function ur(e, r, a, t, i) {
1658
+ if (i.pointerType === "mouse" && i.button !== 0 || e.editingLayerId || e.editingFeatureId || ge(e, t) === null) return;
1659
+ q == null || q.cancelar();
1660
+ const o = he[a], n = i.ctrlKey || i.metaKey, l = i.shiftKey;
1661
+ let c = !1, s = !1, p = i.clientY;
1662
+ const u = /* @__PURE__ */ new Set([t]), d = (w) => {
1663
+ w.preventDefault(), w.stopImmediatePropagation();
1664
+ }, m = (w) => {
1665
+ w.stopPropagation(), w.preventDefault();
1666
+ }, f = (w) => w.preventDefault(), g = (w) => {
1667
+ u.has(w) || (u.add(w), ge(e, w) !== s && Be(w, a === "selecao"));
1605
1668
  }, v = () => {
1606
- c = !0, Te(i, n, l), s = ge(e, i) === !0, r.addEventListener("selectstart", f), document.body.style.userSelect = "none";
1607
- }, h = (y) => {
1608
- var J, S;
1669
+ c = !0, Be(t, n, l), s = ge(e, t) === !0, r.addEventListener("selectstart", f), document.body.style.userSelect = "none";
1670
+ }, y = (w) => {
1671
+ var I, E;
1609
1672
  if (!c) {
1610
- if (Math.hypot(y.clientX - t.clientX, y.clientY - t.clientY) < Za) return;
1611
- const x = (J = r.elementFromPoint(y.clientX, y.clientY)) == null ? void 0 : J.closest(o);
1612
- if (!x || x === i) return;
1673
+ if (Math.hypot(w.clientX - i.clientX, w.clientY - i.clientY) < lr) return;
1674
+ const x = (I = r.elementFromPoint(w.clientX, w.clientY)) == null ? void 0 : I.closest(o);
1675
+ if (!x || x === t) return;
1613
1676
  v();
1614
1677
  }
1615
- y.preventDefault();
1616
- const I = Math.min(d, y.clientY), L = Math.max(d, y.clientY);
1678
+ w.preventDefault();
1679
+ const L = Math.min(p, w.clientY), b = Math.max(p, w.clientY);
1617
1680
  r.querySelectorAll(o).forEach((x) => {
1618
- const M = x.getBoundingClientRect();
1619
- if (M.height === 0) return;
1620
- const P = M.top + M.height / 2;
1621
- P >= I && P <= L && g(x);
1681
+ const B = x.getBoundingClientRect();
1682
+ if (B.height === 0) return;
1683
+ const D = B.top + B.height / 2;
1684
+ D >= L && D <= b && g(x);
1622
1685
  });
1623
- const q = (S = r.elementFromPoint(y.clientX, y.clientY)) == null ? void 0 : S.closest(o);
1624
- q && g(q), d = y.clientY;
1625
- }, k = (y = !1) => {
1626
- (z == null ? void 0 : z.cancelar) === $ && (z = null), window.removeEventListener("pointermove", h), window.removeEventListener("pointerup", C), window.removeEventListener("pointercancel", C), window.removeEventListener("dragstart", p, !0), r.removeEventListener("selectstart", f), c && (document.body.style.userSelect = "", y || (window.addEventListener("click", m, { capture: !0, once: !0 }), setTimeout(() => window.removeEventListener("click", m, !0), 0)));
1627
- }, C = () => k(), $ = () => k(!0);
1628
- z = { host: e, cancelar: $ }, window.addEventListener("dragstart", p, !0), window.addEventListener("pointermove", h, { passive: !1 }), window.addEventListener("pointerup", C), window.addEventListener("pointercancel", C);
1629
- }
1630
- function ir(e, r) {
1686
+ const $ = (E = r.elementFromPoint(w.clientX, w.clientY)) == null ? void 0 : E.closest(o);
1687
+ $ && g($), p = w.clientY;
1688
+ }, k = (w = !1) => {
1689
+ (q == null ? void 0 : q.cancelar) === S && (q = null), window.removeEventListener("pointermove", y), window.removeEventListener("pointerup", M), window.removeEventListener("pointercancel", M), window.removeEventListener("dragstart", d, !0), r.removeEventListener("selectstart", f), c && (document.body.style.userSelect = "", w || (window.addEventListener("click", m, { capture: !0, once: !0 }), setTimeout(() => window.removeEventListener("click", m, !0), 0)));
1690
+ }, M = () => k(), S = () => k(!0);
1691
+ q = { host: e, cancelar: S }, window.addEventListener("dragstart", d, !0), window.addEventListener("pointermove", y, { passive: !1 }), window.addEventListener("pointerup", M), window.addEventListener("pointercancel", M);
1692
+ }
1693
+ function pr(e, r) {
1631
1694
  const a = r.getElementById("btn-toggle-all-vis");
1632
1695
  a && a.addEventListener("click", () => e.alternarVisibilidadeTodas(!0));
1633
- const i = r.getElementById("btn-toggle-all-expand");
1634
- i && i.addEventListener("click", (o) => {
1696
+ const t = r.getElementById("btn-toggle-all-expand");
1697
+ t && t.addEventListener("click", (o) => {
1635
1698
  o.stopPropagation(), e.camadas.length > 0 && e.camadas.every((l) => e.expandedLayers.has(l.id)) ? e.colapsarTodas() : e.expandirTodas();
1636
1699
  });
1637
- const t = r.getElementById("btn-colapsar");
1638
- t && t.addEventListener("click", () => e.colapsar(!0)), or(e, r);
1700
+ const i = r.getElementById("btn-colapsar");
1701
+ i && i.addEventListener("click", () => e.colapsar(!0)), fr(e, r);
1639
1702
  }
1640
- function or(e, r) {
1641
- const a = r.getElementById("input-layer-search"), i = r.getElementById("btn-clear-layer-search"), t = () => {
1703
+ function fr(e, r) {
1704
+ const a = r.getElementById("input-layer-search"), t = r.getElementById("btn-clear-layer-search"), i = () => {
1642
1705
  var o;
1643
1706
  e.searchQuery = "", e.solicitarRenderizacao(), (o = r.getElementById("input-layer-search")) == null || o.focus();
1644
1707
  };
1645
1708
  if (a) {
1646
- const o = Ne(() => e.solicitarRenderizacao(), 75);
1709
+ const o = Te(() => e.solicitarRenderizacao(), 75);
1647
1710
  a.addEventListener("input", (n) => {
1648
1711
  e.searchQuery = n.target.value, o();
1649
1712
  }), a.addEventListener("keydown", (n) => {
1650
- n.key === "Escape" && e.searchQuery && (n.preventDefault(), t());
1713
+ n.key === "Escape" && e.searchQuery && (n.preventDefault(), i());
1651
1714
  });
1652
1715
  }
1653
- i && i.addEventListener("click", t);
1716
+ t && t.addEventListener("click", i);
1654
1717
  }
1655
- function nr(e, r) {
1718
+ function ra(e, r) {
1656
1719
  r.querySelectorAll("[data-feat-select]").forEach((a) => {
1657
- a.addEventListener("click", (i) => {
1720
+ a.addEventListener("click", (t) => {
1658
1721
  if (e.editingFeatureId) return;
1659
- const t = i;
1660
- if (t.target.closest(
1722
+ const i = t;
1723
+ if (i.target.closest(
1661
1724
  "[data-feat-eye], [data-feat-lock], [data-feat-fit], [data-feat-target], input, button"
1662
1725
  ))
1663
1726
  return;
1664
1727
  const n = a.getAttribute("data-feat-select");
1665
- n && e.selecionarFeicao(n, t.ctrlKey || t.metaKey, t.shiftKey, !0);
1728
+ n && e.selecionarFeicao(n, i.ctrlKey || i.metaKey, i.shiftKey, !0);
1666
1729
  });
1667
1730
  }), r.querySelectorAll("[data-feat-target]").forEach((a) => {
1668
- a.addEventListener("click", (i) => {
1669
- i.stopPropagation();
1670
- const t = i, o = a.getAttribute("data-feat-target");
1671
- o && e.selecionarFeicao(o, t.ctrlKey || t.metaKey, t.shiftKey, !0);
1731
+ a.addEventListener("click", (t) => {
1732
+ t.stopPropagation();
1733
+ const i = t, o = a.getAttribute("data-feat-target");
1734
+ o && e.selecionarFeicao(o, i.ctrlKey || i.metaKey, i.shiftKey, !0);
1672
1735
  });
1673
1736
  }), r.querySelectorAll("[data-feat-eye]").forEach((a) => {
1674
- a.addEventListener("click", (i) => {
1675
- i.stopPropagation();
1676
- const t = a.getAttribute("data-feat-eye"), o = e.feicoes.find((n) => n.id === t);
1737
+ a.addEventListener("click", (t) => {
1738
+ t.stopPropagation();
1739
+ const i = a.getAttribute("data-feat-eye"), o = e.feicoes.find((n) => n.id === i);
1677
1740
  if (o) {
1678
1741
  o.visible = o.visible === !1;
1679
1742
  const n = o.visible !== !1;
1680
- a.innerHTML = n ? b.olhoAberto : b.olhoFechado, B(a, n ? "Ocultar Feição" : "Exibir Feição");
1743
+ a.innerHTML = n ? h.olhoAberto : h.olhoFechado, P(a, n ? "Ocultar Feição" : "Exibir Feição");
1681
1744
  const l = a.closest(".ui-feat-row");
1682
1745
  l && l.classList.toggle("hidden-row", !n), e.dispararEvento("ui-feicao-visibilidade", {
1683
1746
  feicaoId: o.id,
@@ -1686,48 +1749,242 @@ function nr(e, r) {
1686
1749
  }
1687
1750
  });
1688
1751
  }), r.querySelectorAll("[data-feat-lock]").forEach((a) => {
1689
- a.addEventListener("click", (i) => {
1690
- if (i.stopPropagation(), a.hasAttribute("data-locked-by-layer")) return;
1691
- const t = a.getAttribute("data-feat-lock"), o = e.feicoes.find((n) => n.id === t);
1692
- o && (o.locked = !o.locked, a.innerHTML = o.locked ? b.cadeadoTrancado : b.cadeadoAberto, a.classList.toggle("ui-lock-open", !o.locked), B(a, o.locked ? "Desbloquear Feição" : "Bloquear Feição"), e.dispararEvento("ui-feicao-bloqueio", {
1752
+ a.addEventListener("click", (t) => {
1753
+ if (t.stopPropagation(), a.hasAttribute("data-locked-by-layer")) return;
1754
+ const i = a.getAttribute("data-feat-lock"), o = e.feicoes.find((n) => n.id === i);
1755
+ o && (o.locked = !o.locked, a.innerHTML = o.locked ? h.cadeadoTrancado : h.cadeadoAberto, a.classList.toggle("ui-lock-open", !o.locked), P(a, o.locked ? "Desbloquear Feição" : "Bloquear Feição"), e.dispararEvento("ui-feicao-bloqueio", {
1693
1756
  feicaoId: o.id,
1694
1757
  bloqueado: o.locked
1695
1758
  }));
1696
1759
  });
1697
1760
  }), r.querySelectorAll("[data-feat-fit]").forEach((a) => {
1698
- a.addEventListener("click", (i) => {
1699
- i.stopPropagation();
1700
- const t = a.getAttribute("data-feat-fit");
1701
- t && e.dispararEvento("ui-feicao-enquadrar", { feicaoId: t });
1761
+ a.addEventListener("click", (t) => {
1762
+ t.stopPropagation();
1763
+ const i = a.getAttribute("data-feat-fit");
1764
+ i && e.dispararEvento("ui-feicao-enquadrar", { feicaoId: i });
1702
1765
  });
1703
1766
  });
1704
1767
  }
1705
- function sr(e, r) {
1768
+ function mr(e, r) {
1706
1769
  var a;
1707
- r.querySelectorAll("[data-basemap-thumb]").forEach((i) => {
1708
- i.addEventListener(
1770
+ r.querySelectorAll("[data-basemap-thumb]").forEach((t) => {
1771
+ t.addEventListener(
1709
1772
  "error",
1710
1773
  () => {
1711
- const t = document.createElement("div");
1712
- t.className = "ui-basemap-preview-none", t.innerHTML = b.mapa, i.replaceWith(t);
1774
+ const i = document.createElement("div");
1775
+ i.className = "ui-basemap-preview-none", i.innerHTML = h.mapa, t.replaceWith(i);
1713
1776
  },
1714
1777
  { once: !0 }
1715
1778
  );
1716
1779
  }), (a = r.querySelector("[data-basemap-toggle]")) == null || a.addEventListener("click", () => {
1717
1780
  e.alternarMapasBaseRecolhido(!0);
1718
- }), r.querySelectorAll("[data-basemap-id]").forEach((i) => {
1719
- i.addEventListener("click", () => {
1720
- const t = i.getAttribute("data-basemap-id");
1721
- t && e.selecionarMapaBase(t, !0);
1781
+ }), r.querySelectorAll("[data-basemap-id]").forEach((t) => {
1782
+ t.addEventListener("click", () => {
1783
+ const i = t.getAttribute("data-basemap-id");
1784
+ i && e.selecionarMapaBase(i, !0);
1722
1785
  });
1723
1786
  });
1724
1787
  }
1725
- function lr(e, r) {
1726
- ir(e, r), _a(e, r), nr(e, r), sr(e, r), Ja(e, r), rr(e, r);
1788
+ function gr(e, r) {
1789
+ pr(e, r), tr(e, r), ra(e, r), mr(e, r), nr(e, r), aa(e, r);
1790
+ }
1791
+ function vr(e) {
1792
+ if (!e.arvoreRenderizada) return { incremental: !1, motivo: "arvore-nao-renderizada" };
1793
+ if (e.buscaAtiva) return { incremental: !1, motivo: "busca-ativa" };
1794
+ if (e.editandoCamada || e.editandoFeicao) return { incremental: !1, motivo: "edicao-inline" };
1795
+ for (const r of e.camadasAfetadas) {
1796
+ if (!r.existeNoModelo) return { incremental: !1, motivo: "camada-orfa" };
1797
+ if (!r.renderizadaNoDom) return { incremental: !1, motivo: "camada-fora-do-dom" };
1798
+ if (r.drawerAberto) return { incremental: !1, motivo: "drawer-aberto" };
1799
+ }
1800
+ return e.idsDuplicados ? { incremental: !1, motivo: "ids-duplicados" } : { incremental: !0 };
1801
+ }
1802
+ function ta(e, r = /* @__PURE__ */ new Map()) {
1803
+ for (const a of e)
1804
+ r.set(a.camada.id, a), ta(a.subcamadas, r);
1805
+ return r;
1727
1806
  }
1728
- function cr(e, r, a, i) {
1807
+ function br(e) {
1808
+ const r = /* @__PURE__ */ new Map();
1809
+ for (let a = 0; a < e.length; a++) {
1810
+ const t = e[a];
1811
+ if (!t || !t.id) continue;
1812
+ const i = t.layerId || "", o = r.get(i);
1813
+ o ? o.push(t) : r.set(i, [t]);
1814
+ }
1815
+ return r;
1816
+ }
1817
+ function _(e, r) {
1818
+ for (let a = e.firstElementChild; a; a = a.nextElementSibling)
1819
+ if (a.classList.contains(r)) return a;
1820
+ return null;
1821
+ }
1822
+ function hr(e) {
1823
+ const r = /* @__PURE__ */ new Map(), a = (t) => {
1824
+ for (let i = t.firstElementChild; i && i.classList.contains("ui-layer-group"); i = i.nextElementSibling) {
1825
+ const o = i.getAttribute("data-layer-id");
1826
+ o !== null && r.set(o, i);
1827
+ const n = _(i, "ui-children-container");
1828
+ n && a(n);
1829
+ }
1830
+ };
1831
+ return a(e), r;
1832
+ }
1833
+ function yr(e) {
1834
+ if (!e || e.length < 2) return !1;
1835
+ const r = /* @__PURE__ */ new Set();
1836
+ for (const a of e) {
1837
+ if (r.has(a.id)) return !0;
1838
+ r.add(a.id);
1839
+ }
1840
+ return !1;
1841
+ }
1842
+ function xr(e, r) {
1843
+ var i;
1844
+ const a = new Map(r.map((o) => [o.id, o])), t = /* @__PURE__ */ new Set();
1845
+ for (const o of e) {
1846
+ let n = o;
1847
+ for (; n && a.has(n) && !t.has(n); )
1848
+ t.add(n), n = (i = a.get(n)) == null ? void 0 : i.parentId;
1849
+ }
1850
+ return t;
1851
+ }
1852
+ function ie(e) {
1853
+ const r = document.createElement("template");
1854
+ return r.innerHTML = e, { modelo: r, elementos: Array.from(r.content.children) };
1855
+ }
1856
+ function oe(e) {
1857
+ var a;
1858
+ const r = e.nextSibling;
1859
+ r && r.nodeType === 3 && !(r.textContent ?? "").trim() && ((a = r.parentNode) == null || a.removeChild(r)), e.remove();
1860
+ }
1861
+ function wr(e, r) {
1862
+ if (!e || !r.contains(e)) return null;
1863
+ const a = Array.from(e.attributes).find((t) => t.name.startsWith("data-") && t.value !== "");
1864
+ return a ? { nome: a.name, valor: a.value } : null;
1865
+ }
1866
+ function Ar(e, r) {
1867
+ const { host: a, shadow: t, mudanca: i } = e, o = e.grupos.get(r), n = e.nodos.get(r), l = o ? _(o, "ui-children-container") : null;
1868
+ if (!o || !n || !l) return !1;
1869
+ const c = n.camada, s = e.porCamada.get(r) ?? [], p = a.expandedFeatureLimits.get(r) ?? we, u = s.slice(0, p), d = new Set(u.map((b) => b.id)), m = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Map(), g = t.activeElement;
1870
+ let v = null;
1871
+ for (let b = l.firstElementChild, $; b; b = $) {
1872
+ $ = b.nextElementSibling;
1873
+ const I = b.getAttribute("data-feat-row");
1874
+ if (I === null) {
1875
+ !v && !b.classList.contains("ui-layer-group") && (v = b);
1876
+ continue;
1877
+ }
1878
+ const E = i.idsAlterados.has(I) && d.has(I) && !m.has(I);
1879
+ !d.has(I) || m.has(I) || E ? (E && f.set(I, { tabindex: b.getAttribute("tabindex"), foco: wr(g, b) }), oe(b)) : (m.set(I, b), v || (v = b));
1880
+ }
1881
+ const y = He(c, n.depth, e.herdado.get(r)), k = u.filter((b) => !m.has(b.id));
1882
+ let M = [];
1883
+ if (k.length > 0) {
1884
+ const b = k.map(
1885
+ (E) => Ke(E, y, a.selectedFeatureIds.has(E.id), a.editingFeatureId === E.id)
1886
+ ).join(""), { modelo: $, elementos: I } = ie(b);
1887
+ if (I.length !== k.length) return !1;
1888
+ e.ligar($.content), M = I;
1889
+ }
1890
+ let S = v, w = 0;
1891
+ const L = /* @__PURE__ */ new Map();
1892
+ for (const b of u) {
1893
+ const $ = m.get(b.id);
1894
+ if ($)
1895
+ $ === S ? S = $.nextElementSibling : l.insertBefore($, S);
1896
+ else {
1897
+ const I = M[w++];
1898
+ l.insertBefore(I, S), L.set(b.id, I);
1899
+ }
1900
+ }
1901
+ return f.forEach((b, $) => {
1902
+ const I = L.get($);
1903
+ if (!I || (b.tabindex !== null && I.setAttribute("tabindex", b.tabindex), !b.foco)) return;
1904
+ const E = I.getAttribute(b.foco.nome) === b.foco.valor ? I : Array.from(I.querySelectorAll(`[${b.foco.nome}]`)).find(
1905
+ (x) => x.getAttribute(b.foco.nome) === b.foco.valor
1906
+ );
1907
+ E == null || E.focus({ preventScroll: !0 });
1908
+ }), Er(e, l, n, p, s.length);
1909
+ }
1910
+ function Er(e, r, a, t, i) {
1911
+ const o = z(a.camada.id), n = !!(a.camada.isGroup || a.subcamadas.length > 0), l = i > t, c = a.subcamadas.length === 0 && i === 0, s = _(r, "ui-truncate-notice"), p = _(r, "ui-empty-row");
1912
+ if (p && !c && oe(p), s && !l && oe(s), l)
1913
+ if (s) {
1914
+ const u = Ue(t, i), d = s.querySelector("span"), m = s.querySelector(".ui-truncate-more-btn");
1915
+ if (!d || !m) return !1;
1916
+ d.textContent !== u.resumo && (d.textContent = u.resumo), m.textContent !== u.botao && (m.textContent = u.botao);
1917
+ } else {
1918
+ const { modelo: u, elementos: d } = ie(_e(o, t, i));
1919
+ if (d.length !== 1) return !1;
1920
+ e.ligar(u.content), r.appendChild(d[0]);
1921
+ }
1922
+ if (c && !p) {
1923
+ const { elementos: u } = ie(Ye(n));
1924
+ if (u.length !== 1) return !1;
1925
+ r.appendChild(u[0]);
1926
+ }
1927
+ return !0;
1928
+ }
1929
+ function kr(e, r) {
1930
+ const a = e.grupos.get(r), t = e.nodos.get(r), i = a ? _(a, "ui-layer-row") : null, o = i == null ? void 0 : i.querySelector(".ui-col-name");
1931
+ if (!a || !t || !i || !o) return !1;
1932
+ const { host: n } = e, l = Q(n.camadas, n.feicoes, r), c = (e.porCamada.get(r) ?? []).length, s = t.subcamadas.length, p = !!(t.camada.isGroup || s > 0), u = o.querySelector(".ui-count-chip");
1933
+ if (u)
1934
+ if (l.length === 0 && p)
1935
+ oe(u);
1936
+ else {
1937
+ const d = String(l.length), m = Ge(l.length, c, s);
1938
+ u.textContent !== d && (u.textContent = d), u.getAttribute("title") !== m && u.setAttribute("title", m);
1939
+ }
1940
+ else {
1941
+ const d = Ve(l.length, c, s, p);
1942
+ if (d) {
1943
+ const { elementos: m } = ie(d);
1944
+ if (m.length !== 1) return !1;
1945
+ o.appendChild(m[0]);
1946
+ }
1947
+ }
1948
+ return Je(i.querySelector(".ui-target-circle"), l, n.selectedFeatureIds), !0;
1949
+ }
1950
+ function Ir(e, r, a, t) {
1951
+ const i = r.getElementById("ui-layer-tree-mount"), o = ta(ne(e.camadas)), n = i ? hr(i) : /* @__PURE__ */ new Map(), l = br(e.feicoes), c = a.camadas === "todas" ? Array.from(o.keys()) : Array.from(a.camadas), s = c.map((d) => ({
1952
+ existeNoModelo: o.has(d),
1953
+ renderizadaNoDom: n.has(d),
1954
+ drawerAberto: e.activeSettingsLayerId === d
1955
+ }));
1956
+ if (!vr({
1957
+ arvoreRenderizada: i !== null,
1958
+ buscaAtiva: (e.searchQuery || "").trim() !== "",
1959
+ editandoCamada: e.editingLayerId !== null,
1960
+ editandoFeicao: e.editingFeatureId !== null,
1961
+ idsDuplicados: c.some((d) => yr(l.get(d))),
1962
+ camadasAfetadas: s
1963
+ }).incremental) return !1;
1964
+ const u = {
1965
+ host: e,
1966
+ shadow: r,
1967
+ mudanca: a,
1968
+ porCamada: l,
1969
+ nodos: o,
1970
+ grupos: n,
1971
+ herdado: se(e.camadas),
1972
+ ligar: t
1973
+ };
1974
+ for (const d of c)
1975
+ if (!Ar(u, d)) return !1;
1976
+ for (const d of xr(c, e.camadas))
1977
+ if (!kr(u, d)) return !1;
1978
+ return (a.selecaoAfetada || e.selectedFeatureIds.size > 0) && Ze(e, r), !0;
1979
+ }
1980
+ function Cr(e) {
1981
+ if (!e.isConnected) return;
1982
+ const r = document.createElement("div");
1983
+ r.className = "ui-basemap-preview-none", r.innerHTML = h.gradeCad, e.replaceWith(r);
1984
+ }
1985
+ function Lr(e, r, a, t) {
1729
1986
  var g, v;
1730
- const t = Ba({
1987
+ const i = Ga({
1731
1988
  camadas: e.camadas,
1732
1989
  feicoes: e.feicoes,
1733
1990
  camadaAtivaId: e.camadaAtivaId,
@@ -1741,37 +1998,49 @@ function cr(e, r, a, i) {
1741
1998
  mostrarBusca: e.mostrarBusca,
1742
1999
  limitesPorCamada: e.expandedFeatureLimits,
1743
2000
  mostrarBotaoColapsar: e.flutuante && e.getAttribute("colapsavel") !== "false"
1744
- }), o = e.mostrarMapasBase ? ya(e.mapasBase, e.mapaBaseAtivo, e.mapasBaseRecolhido) : "", n = e.mostrarRodape ? Ea(e.camadas, e.feicoes, e.selectedFeatureIds) : "", l = r.getElementById("ui-layer-tree-mount"), c = a.scrollTop, s = l ? l.scrollTop : 0, d = r.activeElement, u = d && a.contains(d) ? d.id : "", p = d && !u && a.contains(d) ? Array.from(d.attributes).find((h) => h.name.startsWith("data-") && h.value !== "") : void 0, m = d && "selectionStart" in d ? d.selectionStart : null;
2001
+ }), o = e.mostrarMapasBase ? $a(e.mapasBase, e.mapaBaseAtivo, e.mapasBaseRecolhido) : "", n = e.mostrarRodape ? za(e.camadas, e.feicoes, e.selectedFeatureIds) : "", l = r.getElementById("ui-layer-tree-mount"), c = a.scrollTop, s = l ? l.scrollTop : 0, p = r.activeElement, u = p && a.contains(p) ? p.id : "", d = p && !u && a.contains(p) ? Array.from(p.attributes).find((y) => y.name.startsWith("data-") && y.value !== "") : void 0, m = p && "selectionStart" in p ? p.selectionStart : null;
1745
2002
  a.innerHTML = `
1746
- ${t}
2003
+ ${i}
1747
2004
  ${n}
1748
2005
  ${o}
1749
2006
  `, a.scrollTop = c;
1750
2007
  const f = r.getElementById("ui-layer-tree-mount");
1751
2008
  if (f && (f.scrollTop = s), u) {
1752
- const h = r.getElementById(u);
1753
- if (h && (h.focus({ preventScroll: !0 }), m !== null && typeof h.setSelectionRange == "function"))
2009
+ const y = r.getElementById(u);
2010
+ if (y && (y.focus({ preventScroll: !0 }), m !== null && typeof y.setSelectionRange == "function"))
1754
2011
  try {
1755
- h.setSelectionRange(m, m);
2012
+ y.setSelectionRange(m, m);
1756
2013
  } catch {
1757
2014
  }
1758
2015
  }
1759
- !u && p && ((g = T(a, p.name, p.value)) == null || g.focus({ preventScroll: !0 })), (v = r.querySelector("[data-layer-row], [data-feat-row]")) == null || v.setAttribute("tabindex", "0"), lr(e, r), i.bindAll();
2016
+ !u && d && ((g = T(a, d.name, d.value)) == null || g.focus({ preventScroll: !0 })), (v = r.querySelector("[data-layer-row], [data-feat-row]")) == null || v.setAttribute("tabindex", "0"), a.querySelectorAll("img[data-basemap-thumb]").forEach((y) => {
2017
+ const k = () => Cr(y);
2018
+ y.addEventListener("error", k, { once: !0 }), y.complete && y.naturalWidth === 0 && y.getAttribute("src") && k();
2019
+ }), gr(e, r), t.bindAll();
1760
2020
  }
1761
- const dr = '[role="button"][tabindex]', X = "[data-layer-row], [data-feat-row]", ur = ["color", "range", "checkbox", "radio", "button"];
1762
- function Qe(e) {
1763
- return !e || !(e instanceof Element) || e instanceof HTMLInputElement && ur.includes(e.type) ? !1 : ga({ composedPath: () => [e] });
2021
+ function Sr(e, r, a, t) {
2022
+ try {
2023
+ return Ir(e, r, t, (i) => {
2024
+ ra(e, i), ea(e, i), aa(e, r, i), a.bindLinhasFeicao(i);
2025
+ });
2026
+ } catch (i) {
2027
+ return console.warn("[UI-Camadas] atualização incremental falhou; redesenhando o painel.", i), !1;
2028
+ }
2029
+ }
2030
+ const $r = '[role="button"][tabindex]', Y = "[data-layer-row], [data-feat-row]", Mr = ["color", "range", "checkbox", "radio", "button"];
2031
+ function ia(e) {
2032
+ return !e || !(e instanceof Element) || e instanceof HTMLInputElement && Mr.includes(e.type) ? !1 : ka({ composedPath: () => [e] });
1764
2033
  }
1765
- function pr(e) {
1766
- return Array.from(e.querySelectorAll(X)).filter((r) => {
2034
+ function Fr(e) {
2035
+ return Array.from(e.querySelectorAll(Y)).filter((r) => {
1767
2036
  const a = r.closest(".ui-children-container");
1768
2037
  return !(a && a.style.display === "none") && !r.classList.contains("ui-search-hidden");
1769
2038
  });
1770
2039
  }
1771
- function ie(e, r) {
1772
- r && (e.querySelectorAll(X).forEach((a) => a.setAttribute("tabindex", "-1")), r.setAttribute("tabindex", "0"), r.focus());
2040
+ function re(e, r) {
2041
+ r && (e.querySelectorAll(Y).forEach((a) => a.setAttribute("tabindex", "-1")), r.setAttribute("tabindex", "0"), r.focus());
1773
2042
  }
1774
- function fr(e, r) {
2043
+ function zr(e, r) {
1775
2044
  e.dispatchEvent(
1776
2045
  new MouseEvent("click", {
1777
2046
  bubbles: !0,
@@ -1780,41 +2049,41 @@ function fr(e, r) {
1780
2049
  })
1781
2050
  );
1782
2051
  }
1783
- function mr(e, r, a) {
1784
- var t;
1785
- if (Qe(a.composedPath()[0])) return;
1786
- const i = r.querySelector(".confirming");
1787
- if (i) {
1788
- a.preventDefault(), i.classList.remove("confirming");
2052
+ function Br(e, r, a) {
2053
+ var i;
2054
+ if (ia(a.composedPath()[0])) return;
2055
+ const t = r.querySelector(".confirming");
2056
+ if (t) {
2057
+ a.preventDefault(), t.classList.remove("confirming");
1789
2058
  return;
1790
2059
  }
1791
2060
  if (e.activeSettingsLayerId) {
1792
2061
  a.preventDefault();
1793
2062
  const o = e.activeSettingsLayerId;
1794
- e.activeSettingsLayerId = null, e.solicitarRenderizacao(), (t = T(r, "data-layer-settings", o)) == null || t.focus();
2063
+ e.activeSettingsLayerId = null, e.solicitarRenderizacao(), (i = T(r, "data-layer-settings", o)) == null || i.focus();
1795
2064
  return;
1796
2065
  }
1797
2066
  e.selectedFeatureIds.size > 0 && (a.preventDefault(), e.limparSelecao(!0));
1798
2067
  }
1799
- function gr(e, r, a, i) {
2068
+ function qr(e, r, a, t) {
1800
2069
  var l;
1801
- const t = i.composedPath()[0];
1802
- if (!(t instanceof HTMLElement) || Qe(t)) return;
1803
- if ((i.key === "Enter" || i.key === " ") && t.matches(dr)) {
1804
- i.preventDefault(), t.click();
2070
+ const i = t.composedPath()[0];
2071
+ if (!(i instanceof HTMLElement) || ia(i)) return;
2072
+ if ((t.key === "Enter" || t.key === " ") && i.matches($r)) {
2073
+ t.preventDefault(), i.click();
1805
2074
  return;
1806
2075
  }
1807
- if (!t.matches(X)) return;
1808
- const o = pr(r), n = o.indexOf(t);
1809
- if (i.key === "F2") {
1810
- i.preventDefault();
1811
- const c = t.getAttribute("data-layer-row"), s = t.getAttribute("data-feat-row"), d = c ? T(t, "data-layer-name-trigger", c) : s ? T(t, "data-feat-name-trigger", s) : null;
1812
- d && d.dispatchEvent(new MouseEvent("dblclick", { bubbles: !0 }));
2076
+ if (!i.matches(Y)) return;
2077
+ const o = Fr(r), n = o.indexOf(i);
2078
+ if (t.key === "F2") {
2079
+ t.preventDefault();
2080
+ const c = i.getAttribute("data-layer-row"), s = i.getAttribute("data-feat-row"), p = c ? T(i, "data-layer-name-trigger", c) : s ? T(i, "data-feat-name-trigger", s) : null;
2081
+ p && p.dispatchEvent(new MouseEvent("dblclick", { bubbles: !0 }));
1813
2082
  return;
1814
2083
  }
1815
- if ((i.ctrlKey || i.metaKey) && (i.key === "a" || i.key === "A")) {
1816
- i.preventDefault();
1817
- const c = _e(
2084
+ if ((t.ctrlKey || t.metaKey) && (t.key === "a" || t.key === "A")) {
2085
+ t.preventDefault();
2086
+ const c = Xe(
1818
2087
  e.camadas,
1819
2088
  e.feicoes,
1820
2089
  e.expandedLayers,
@@ -1825,83 +2094,83 @@ function gr(e, r, a, i) {
1825
2094
  c.length > 0 && e.selecionarFeicoes(c, !0);
1826
2095
  return;
1827
2096
  }
1828
- if (i.key === "Delete") {
2097
+ if (t.key === "Delete") {
1829
2098
  const c = a.getElementById("btn-footer-del");
1830
2099
  if (c && !c.hasAttribute("disabled") && e.selectedFeatureIds.size > 0) {
1831
- i.preventDefault(), c.click();
2100
+ t.preventDefault(), c.click();
1832
2101
  return;
1833
2102
  }
1834
2103
  }
1835
- switch (i.key) {
2104
+ switch (t.key) {
1836
2105
  case "ArrowDown":
1837
- i.preventDefault(), ie(r, o[Math.min(o.length - 1, n + 1)]);
2106
+ t.preventDefault(), re(r, o[Math.min(o.length - 1, n + 1)]);
1838
2107
  break;
1839
2108
  case "ArrowUp":
1840
- i.preventDefault(), ie(r, o[Math.max(0, n - 1)]);
2109
+ t.preventDefault(), re(r, o[Math.max(0, n - 1)]);
1841
2110
  break;
1842
2111
  case "Home":
1843
- i.preventDefault(), ie(r, o[0]);
2112
+ t.preventDefault(), re(r, o[0]);
1844
2113
  break;
1845
2114
  case "End":
1846
- i.preventDefault(), ie(r, o[o.length - 1]);
2115
+ t.preventDefault(), re(r, o[o.length - 1]);
1847
2116
  break;
1848
2117
  case "ArrowRight":
1849
2118
  case "ArrowLeft": {
1850
- const c = t.getAttribute("data-layer-row");
2119
+ const c = i.getAttribute("data-layer-row");
1851
2120
  if (!c) return;
1852
- const s = t.closest(".ui-layer-group"), d = (s == null ? void 0 : s.getAttribute("aria-expanded")) === "true";
1853
- i.key === "ArrowRight" !== d && (i.preventDefault(), (l = T(a, "data-layer-expand", c)) == null || l.click());
2121
+ const s = i.closest(".ui-layer-group"), p = (s == null ? void 0 : s.getAttribute("aria-expanded")) === "true";
2122
+ t.key === "ArrowRight" !== p && (t.preventDefault(), (l = T(a, "data-layer-expand", c)) == null || l.click());
1854
2123
  break;
1855
2124
  }
1856
2125
  case "Enter":
1857
2126
  case " ":
1858
- i.preventDefault(), fr(t, i);
2127
+ t.preventDefault(), zr(i, t);
1859
2128
  break;
1860
2129
  }
1861
2130
  }
1862
- function vr(e, r, a, i, t) {
1863
- t.add(r, "keydown", (o) => {
1864
- o.key === "Escape" && mr(e, a, o);
1865
- }), t.add(i, "keydown", (o) => gr(e, i, a, o)), t.add(i, "focusin", (o) => {
2131
+ function Pr(e, r, a, t, i) {
2132
+ i.add(r, "keydown", (o) => {
2133
+ o.key === "Escape" && Br(e, a, o);
2134
+ }), i.add(t, "keydown", (o) => qr(e, t, a, o)), i.add(t, "focusin", (o) => {
1866
2135
  const n = o.composedPath()[0];
1867
- n instanceof HTMLElement && n.matches(X) && (i.querySelectorAll(X).forEach((l) => l.setAttribute("tabindex", "-1")), n.setAttribute("tabindex", "0"));
2136
+ n instanceof HTMLElement && n.matches(Y) && (t.querySelectorAll(Y).forEach((l) => l.setAttribute("tabindex", "-1")), n.setAttribute("tabindex", "0"));
1868
2137
  });
1869
2138
  }
1870
- function br(e, r, a, i, t) {
1871
- const o = _e(e.camadas, e.feicoes, e.expandedLayers, e.searchQuery), n = !i && !o.includes(r) && e.feicoes.some((c) => c.id === r), l = La(
2139
+ function Dr(e, r, a, t, i) {
2140
+ const o = Xe(e.camadas, e.feicoes, e.expandedLayers, e.searchQuery), n = !t && !o.includes(r) && e.feicoes.some((c) => c.id === r), l = Ta(
1872
2141
  n ? [...o, r] : o,
1873
2142
  e.selectedFeatureIds,
1874
2143
  e.lastClickedFeatureId,
1875
2144
  r,
1876
2145
  a,
1877
- i
2146
+ t
1878
2147
  );
1879
- l && (e.selectedFeatureIds = l.selecionados, e.lastClickedFeatureId = l.ultimoClicadoId, e.sincronizarSelecaoDOM(), t && e.notificarMudancaSelecao());
2148
+ l && (e.selectedFeatureIds = l.selecionados, e.lastClickedFeatureId = l.ultimoClicadoId, e.sincronizarSelecaoDOM(), i && e.notificarMudancaSelecao());
1880
2149
  }
1881
- function hr(e, r, a) {
1882
- const i = r || [];
1883
- i.length === e.selectedFeatureIds.size && i.every((n) => e.selectedFeatureIds.has(n)) || (e.selectedFeatureIds.clear(), i.forEach((n) => e.selectedFeatureIds.add(n)), e.lastClickedFeatureId = i.length > 0 ? i[i.length - 1] : null, e.sincronizarSelecaoDOM(), a && e.notificarMudancaSelecao());
2150
+ function Tr(e, r, a) {
2151
+ const t = r || [];
2152
+ t.length === e.selectedFeatureIds.size && t.every((n) => e.selectedFeatureIds.has(n)) || (e.selectedFeatureIds.clear(), t.forEach((n) => e.selectedFeatureIds.add(n)), e.lastClickedFeatureId = t.length > 0 ? t[t.length - 1] : null, e.sincronizarSelecaoDOM(), a && e.notificarMudancaSelecao());
1884
2153
  }
1885
- function xr(e, r) {
2154
+ function Rr(e, r) {
1886
2155
  e.selectedFeatureIds.size !== 0 && (e.selectedFeatureIds.clear(), e.lastClickedFeatureId = null, e.sincronizarSelecaoDOM(), r && e.notificarMudancaSelecao());
1887
2156
  }
1888
- function yr(e) {
2157
+ function Or(e) {
1889
2158
  const r = e.feicoes.filter((a) => e.selectedFeatureIds.has(a.id));
1890
2159
  e.dispararEvento("ui-feicoes-selecionadas", {
1891
2160
  feicoesIds: Array.from(e.selectedFeatureIds),
1892
2161
  feicoes: r
1893
2162
  }), 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 });
1894
2163
  }
1895
- class wr {
2164
+ class jr {
1896
2165
  constructor(r) {
1897
- w(this, "origens", /* @__PURE__ */ new Map());
1898
- w(this, "removidas", /* @__PURE__ */ new Set());
1899
- w(this, "salvarComDebounce", Ne(() => this.salvar(), 200));
2166
+ A(this, "origens", /* @__PURE__ */ new Map());
2167
+ A(this, "removidas", /* @__PURE__ */ new Set());
2168
+ A(this, "salvarComDebounce", Te(() => this.salvar(), 200));
1900
2169
  this.instantaneo = r;
1901
2170
  }
1902
2171
  chaveAtual() {
1903
2172
  const r = this.instantaneo();
1904
- return Oa(r.storageKey, r.id);
2173
+ return Ka(r.storageKey, r.id);
1905
2174
  }
1906
2175
  carregar() {
1907
2176
  return be(this.chaveAtual());
@@ -1913,7 +2182,7 @@ class wr {
1913
2182
  salvar() {
1914
2183
  const r = this.instantaneo();
1915
2184
  if (!r.persistir || !r.conectado) return;
1916
- const a = this.chaveAtual(), i = Ua({
2185
+ const a = this.chaveAtual(), t = Za({
1917
2186
  estadoAnterior: be(a),
1918
2187
  origensCamadas: this.origens,
1919
2188
  camadas: r.camadas,
@@ -1925,124 +2194,157 @@ class wr {
1925
2194
  altura: r.altura,
1926
2195
  camadasRemovidas: this.removidas
1927
2196
  });
1928
- this.removidas.clear(), Na(a, i);
2197
+ this.removidas.clear(), Xa(a, t);
1929
2198
  }
1930
2199
  limpar() {
1931
- Ha(this.chaveAtual());
2200
+ Wa(this.chaveAtual());
1932
2201
  }
1933
2202
  // --- Origens (como a camada chegou do consumidor) e remoções ---
1934
2203
  limparOrigens() {
1935
2204
  this.origens.clear();
1936
2205
  }
1937
2206
  registrarOrigem(r) {
1938
- this.origens.set(r.id, Xe(r));
2207
+ this.origens.set(r.id, We(r));
1939
2208
  }
1940
2209
  esquecerCamada(r) {
1941
2210
  this.origens.delete(r), this.removidas.add(r);
1942
2211
  }
1943
2212
  /** Aplica por cima de `camadas` o que foi lembrado (expansão, visibilidade, travas, opacidade, cor, ordem). */
1944
- reidratar(r, a, i) {
1945
- Ga(r, a, i, this.origens);
2213
+ reidratar(r, a, t) {
2214
+ Ja(r, a, t, this.origens);
1946
2215
  }
1947
2216
  }
1948
- function ke(e, r = null, a = /* @__PURE__ */ new Set()) {
1949
- const i = [];
1950
- if (!Array.isArray(e)) return i;
1951
- for (const t of e) {
1952
- if (!t || typeof t != "object" || !t.id) continue;
1953
- const o = String(t.id);
2217
+ function Ee(e, r = null, a = /* @__PURE__ */ new Set()) {
2218
+ const t = [];
2219
+ if (!Array.isArray(e)) return t;
2220
+ for (const i of e) {
2221
+ if (!i || typeof i != "object" || !i.id) continue;
2222
+ const o = String(i.id);
1954
2223
  if (a.has(o)) continue;
1955
2224
  a.add(o);
1956
- const n = { ...t, id: o };
1957
- delete n.children, r && n.parentId === void 0 && (n.parentId = r), i.push(n), Array.isArray(t.children) && t.children.length > 0 && i.push(...ke(t.children, o, a));
2225
+ const n = { ...i, id: o };
2226
+ delete n.children, r && n.parentId === void 0 && (n.parentId = r), t.push(n), Array.isArray(i.children) && i.children.length > 0 && t.push(...Ee(i.children, o, a));
1958
2227
  }
1959
- return i;
2228
+ return t;
1960
2229
  }
1961
- function Je(e) {
2230
+ function oa(e) {
1962
2231
  const r = e.lastClickedFeatureId;
1963
2232
  r && !e.feicoes.some((a) => a.id === r) && (e.lastClickedFeatureId = null);
1964
2233
  }
1965
- function We(e) {
2234
+ function na(e) {
1966
2235
  if (!Array.isArray(e)) return [];
1967
2236
  const r = /* @__PURE__ */ new Set(), a = [];
1968
- for (const i of e) {
1969
- if (!i || typeof i != "object" || !i.id) continue;
1970
- const t = String(i.id);
1971
- r.has(t) || (r.add(t), a.push({ ...i, id: t }));
2237
+ for (const t of e) {
2238
+ if (!t || typeof t != "object" || !t.id) continue;
2239
+ const i = String(t.id);
2240
+ r.has(i) || (r.add(i), a.push({ ...t, id: i }));
1972
2241
  }
1973
2242
  return a;
1974
2243
  }
1975
- function Ar(e, r, a) {
1976
- if (e.camadas = Array.isArray(r) ? ke(r) : [], e.lembranca.limparOrigens(), e.persistir) {
1977
- const t = e.lembranca.carregar();
1978
- e.lembranca.reidratar(e.camadas, t, e.expandedLayers), t != null && t.camadaAtivaId && e.camadas.some((o) => o.id === t.camadaAtivaId) && (e.camadaAtivaId = t.camadaAtivaId);
2244
+ function Nr(e, r, a) {
2245
+ if (e.camadas = Array.isArray(r) ? Ee(r) : [], e.lembranca.limparOrigens(), e.persistir) {
2246
+ const i = e.lembranca.carregar();
2247
+ e.lembranca.reidratar(e.camadas, i, e.expandedLayers), i != null && i.camadaAtivaId && e.camadas.some((o) => o.id === i.camadaAtivaId) && (e.camadaAtivaId = i.camadaAtivaId);
1979
2248
  } else
1980
- e.camadas.forEach((t) => {
1981
- e.lembranca.registrarOrigem(t), e.expandedLayers.has(t.id) || e.expandedLayers.add(t.id);
2249
+ e.camadas.forEach((i) => {
2250
+ e.lembranca.registrarOrigem(i), e.expandedLayers.has(i.id) || e.expandedLayers.add(i.id);
1982
2251
  });
1983
2252
  if (Array.isArray(a)) {
1984
- e.feicoes = We(a);
1985
- const t = new Set(e.camadas.map((n) => n.id)), o = e.feicoes.filter((n) => n.layerId && !t.has(n.layerId));
2253
+ e.feicoes = na(a);
2254
+ const i = new Set(e.camadas.map((n) => n.id)), o = e.feicoes.filter((n) => n.layerId && !i.has(n.layerId));
1986
2255
  o.length > 0 && console.warn(
1987
2256
  `[UI-Camadas] ${o.length} feição(ões) possuem 'layerId' não cadastrado nas camadas:`,
1988
2257
  o.map((n) => ({ id: n.id, nome: n.name, layerId: n.layerId }))
1989
- ), Ee(e.selectedFeatureIds, e.feicoes), Je(e);
1990
- }
1991
- const i = e.getAttribute("camada-ativa");
1992
- e.camadas.length > 0 && (!i || !e.camadas.some((t) => t.id === i)) && (e.camadaAtivaId = e.camadas[0].id), e.salvarLembrancaEstado(), e.solicitarRenderizacao();
1993
- }
1994
- function Er(e, r) {
1995
- e.feicoes = We(r), Ee(e.selectedFeatureIds, e.feicoes), Je(e), e.solicitarRenderizacao();
2258
+ ), Ae(e.selectedFeatureIds, e.feicoes), oa(e);
2259
+ }
2260
+ const t = e.getAttribute("camada-ativa");
2261
+ e.camadas.length > 0 && (!t || !e.camadas.some((i) => i.id === t)) && (e.camadaAtivaId = e.camadas[0].id), e.salvarLembrancaEstado(), e.solicitarRenderizacao();
2262
+ }
2263
+ function Hr(e, r) {
2264
+ const a = new Map(e.map((i) => [i.id, i])), t = /* @__PURE__ */ new Set();
2265
+ for (const i of r) {
2266
+ const o = a.get(i.id);
2267
+ (!o || !Da(o, i)) && t.add(i.id);
2268
+ }
2269
+ return t;
2270
+ }
2271
+ function Gr(e, r) {
2272
+ const a = e.feicoes;
2273
+ e.feicoes = na(r);
2274
+ const t = e.selectedFeatureIds.size;
2275
+ Ae(e.selectedFeatureIds, e.feicoes), oa(e), e.solicitarAtualizacaoFeicoes({
2276
+ camadas: "todas",
2277
+ idsAlterados: Hr(a, e.feicoes),
2278
+ selecaoAfetada: e.selectedFeatureIds.size !== t
2279
+ });
1996
2280
  }
1997
- function kr(e, r) {
2281
+ function Vr(e, r) {
1998
2282
  if (!r || !r.id) return;
1999
- if (e.camadas.some((i) => i.id === r.id)) {
2283
+ if (e.camadas.some((t) => t.id === r.id)) {
2000
2284
  console.warn(`[UI-Camadas] adicionarCamada ignorado: já existe uma camada com id '${r.id}'.`);
2001
2285
  return;
2002
2286
  }
2003
- const a = new Set(e.camadas.map((i) => i.id));
2004
- for (const i of ke([r])) {
2005
- if (a.has(i.id)) {
2006
- console.warn(`[UI-Camadas] adicionarCamada: subcamada '${i.id}' ignorada, o id já existe.`);
2287
+ const a = new Set(e.camadas.map((t) => t.id));
2288
+ for (const t of Ee([r])) {
2289
+ if (a.has(t.id)) {
2290
+ console.warn(`[UI-Camadas] adicionarCamada: subcamada '${t.id}' ignorada, o id já existe.`);
2007
2291
  continue;
2008
2292
  }
2009
- a.add(i.id), e.camadas.push(i), e.lembranca.registrarOrigem(i), e.expandedLayers.add(i.id), i.parentId && e.expandedLayers.add(i.parentId);
2293
+ a.add(t.id), e.camadas.push(t), e.lembranca.registrarOrigem(t), e.expandedLayers.add(t.id), t.parentId && e.expandedLayers.add(t.parentId);
2010
2294
  }
2011
2295
  e.salvarLembrancaEstado(), e.solicitarRenderizacao();
2012
2296
  }
2013
- function Ir(e, r) {
2297
+ function Ur(e, r) {
2014
2298
  var a;
2015
- e.camadas.forEach((i) => {
2016
- i.parentId === r && (i.parentId = null);
2017
- }), e.camadas = e.camadas.filter((i) => i.id !== r), e.feicoes = e.feicoes.filter((i) => i.layerId !== r), e.lembranca.esquecerCamada(r), e.expandedLayers.delete(r), e.activeSettingsLayerId === r && (e.activeSettingsLayerId = null), Ee(e.selectedFeatureIds, e.feicoes), e.selectedFeatureIds.size === 0 && (e.lastClickedFeatureId = null), e.camadaAtivaId === r && (e.camadaAtivaId = ((a = e.camadas[0]) == null ? void 0 : a.id) ?? null), e.salvarLembrancaEstado(), e.solicitarRenderizacao();
2299
+ e.camadas.forEach((t) => {
2300
+ t.parentId === r && (t.parentId = null);
2301
+ }), e.camadas = e.camadas.filter((t) => t.id !== r), e.feicoes = e.feicoes.filter((t) => t.layerId !== r), e.lembranca.esquecerCamada(r), e.expandedLayers.delete(r), e.activeSettingsLayerId === r && (e.activeSettingsLayerId = null), Ae(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();
2018
2302
  }
2019
- function Lr(e, r) {
2303
+ function _r(e, r) {
2020
2304
  if (!(!r || !r.id)) {
2021
2305
  if (e.feicoes.some((a) => a.id === r.id)) {
2022
2306
  console.warn(`[UI-Camadas] adicionarFeicao ignorado: já existe uma feição com id '${r.id}'.`);
2023
2307
  return;
2024
2308
  }
2025
- e.feicoes.push({ ...r }), e.solicitarRenderizacao();
2309
+ e.feicoes.push({ ...r }), e.solicitarAtualizacaoFeicoes({
2310
+ camadas: /* @__PURE__ */ new Set([r.layerId || ""]),
2311
+ idsAlterados: /* @__PURE__ */ new Set(),
2312
+ selecaoAfetada: e.selectedFeatureIds.has(r.id)
2313
+ });
2026
2314
  }
2027
2315
  }
2028
- function Cr(e, r) {
2316
+ function Yr(e, r) {
2029
2317
  if (!r || typeof r != "object" || !r.id) return;
2030
- const a = e.feicoes.findIndex((i) => i.id === r.id);
2031
- a !== -1 && (e.feicoes[a] = { ...e.feicoes[a], ...r }, e.solicitarRenderizacao());
2318
+ const a = e.feicoes.findIndex((t) => t.id === r.id);
2319
+ if (a !== -1) {
2320
+ const t = e.feicoes[a].layerId || "";
2321
+ e.feicoes[a] = { ...e.feicoes[a], ...r }, e.solicitarAtualizacaoFeicoes({
2322
+ camadas: /* @__PURE__ */ new Set([t, e.feicoes[a].layerId || ""]),
2323
+ idsAlterados: /* @__PURE__ */ new Set([r.id]),
2324
+ selecaoAfetada: !1
2325
+ });
2326
+ }
2032
2327
  }
2033
- function $r(e, r) {
2034
- e.feicoes = e.feicoes.filter((a) => a.id !== r), e.selectedFeatureIds.delete(r), e.lastClickedFeatureId === r && (e.lastClickedFeatureId = null), e.solicitarRenderizacao();
2328
+ function Kr(e, r) {
2329
+ const a = e.feicoes.find((i) => i.id === r);
2330
+ e.feicoes = e.feicoes.filter((i) => i.id !== r);
2331
+ const t = e.selectedFeatureIds.delete(r);
2332
+ e.lastClickedFeatureId === r && (e.lastClickedFeatureId = null), e.solicitarAtualizacaoFeicoes({
2333
+ camadas: new Set(a ? [a.layerId || ""] : []),
2334
+ idsAlterados: /* @__PURE__ */ new Set(),
2335
+ selecaoAfetada: t
2336
+ });
2035
2337
  }
2036
- function Sr(e) {
2037
- function i() {
2338
+ function Qr(e) {
2339
+ function t() {
2038
2340
  return e.getMinAltura ? e.getMinAltura() : 140;
2039
2341
  }
2040
- function t() {
2342
+ function i() {
2041
2343
  return e.getMaxAltura ? e.getMaxAltura() : 1600;
2042
2344
  }
2043
- function o(s, d = !1) {
2345
+ function o(s, p = !1) {
2044
2346
  if (s == null || s === "") {
2045
- e.hostElement.style.removeProperty("height"), e.hostElement.style.removeProperty("--ui-camadas-altura"), d && e.hostElement.dispatchEvent(
2347
+ e.hostElement.style.removeProperty("height"), e.hostElement.style.removeProperty("--ui-camadas-altura"), p && e.hostElement.dispatchEvent(
2046
2348
  new CustomEvent("ui-redimensionar-altura", {
2047
2349
  bubbles: !0,
2048
2350
  composed: !0,
@@ -2053,22 +2355,22 @@ function Sr(e) {
2053
2355
  }
2054
2356
  const u = typeof s == "number" ? s : parseFloat(String(s));
2055
2357
  if (isNaN(u)) return;
2056
- const p = Math.max(i(), Math.min(t(), Math.round(u)));
2057
- e.hostElement.style.height = `${p}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${p}px`), d && e.hostElement.dispatchEvent(
2358
+ const d = Math.max(t(), Math.min(i(), Math.round(u)));
2359
+ e.hostElement.style.height = `${d}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${d}px`), p && e.hostElement.dispatchEvent(
2058
2360
  new CustomEvent("ui-redimensionar-altura", {
2059
2361
  bubbles: !0,
2060
2362
  composed: !0,
2061
- detail: { altura: p }
2363
+ detail: { altura: d }
2062
2364
  })
2063
2365
  );
2064
2366
  }
2065
2367
  let n = null;
2066
2368
  function l() {
2067
2369
  if (!e.resizerElement) return;
2068
- let s = !1, d = 0, u = 0;
2069
- const p = (f) => {
2370
+ let s = !1, p = 0, u = 0;
2371
+ const d = (f) => {
2070
2372
  if (f.button !== 0) return;
2071
- f.preventDefault(), f.stopPropagation(), s = !0, d = f.clientY, u = e.hostElement.getBoundingClientRect().height, e.resizerElement.classList.add("ui-camadas-resizer--ativo"), e.hostElement.classList.add("ui-camadas--redimensionando");
2373
+ f.preventDefault(), f.stopPropagation(), s = !0, p = f.clientY, u = e.hostElement.getBoundingClientRect().height, e.resizerElement.classList.add("ui-camadas-resizer--ativo"), e.hostElement.classList.add("ui-camadas--redimensionando");
2072
2374
  try {
2073
2375
  e.resizerElement.setPointerCapture(f.pointerId);
2074
2376
  } catch {
@@ -2076,39 +2378,39 @@ function Sr(e) {
2076
2378
  const g = (k) => {
2077
2379
  if (!s) return;
2078
2380
  k.preventDefault();
2079
- const C = k.clientY - d, $ = Math.max(i(), Math.min(t(), Math.round(u + C)));
2080
- e.hostElement.style.height = `${$}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${$}px`), e.onRedimensionando && e.onRedimensionando($), e.hostElement.dispatchEvent(
2381
+ const M = k.clientY - p, S = Math.max(t(), Math.min(i(), Math.round(u + M)));
2382
+ e.hostElement.style.height = `${S}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${S}px`), e.onRedimensionando && e.onRedimensionando(S), e.hostElement.dispatchEvent(
2081
2383
  new CustomEvent("ui-redimensionando-altura", {
2082
2384
  bubbles: !0,
2083
2385
  composed: !0,
2084
- detail: { altura: $ }
2386
+ detail: { altura: S }
2085
2387
  })
2086
2388
  );
2087
2389
  }, v = () => {
2088
2390
  var k;
2089
- s = !1, n = null, window.removeEventListener("pointermove", g), window.removeEventListener("pointerup", h), window.removeEventListener("pointercancel", h), (k = e.resizerElement) == null || k.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
2090
- }, h = (k) => {
2391
+ s = !1, n = null, window.removeEventListener("pointermove", g), window.removeEventListener("pointerup", y), window.removeEventListener("pointercancel", y), (k = e.resizerElement) == null || k.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
2392
+ }, y = (k) => {
2091
2393
  if (!s) return;
2092
2394
  s = !1, e.resizerElement.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
2093
2395
  try {
2094
2396
  e.resizerElement.hasPointerCapture(k.pointerId) && e.resizerElement.releasePointerCapture(k.pointerId);
2095
2397
  } catch {
2096
2398
  }
2097
- window.removeEventListener("pointermove", g), window.removeEventListener("pointerup", h), window.removeEventListener("pointercancel", h);
2098
- const C = e.hostElement.getBoundingClientRect().height, $ = Math.round(C);
2099
- e.onAlturaAlterada && e.onAlturaAlterada($), e.hostElement.dispatchEvent(
2399
+ window.removeEventListener("pointermove", g), window.removeEventListener("pointerup", y), window.removeEventListener("pointercancel", y);
2400
+ const M = e.hostElement.getBoundingClientRect().height, S = Math.round(M);
2401
+ e.onAlturaAlterada && e.onAlturaAlterada(S), e.hostElement.dispatchEvent(
2100
2402
  new CustomEvent("ui-redimensionar-altura", {
2101
2403
  bubbles: !0,
2102
2404
  composed: !0,
2103
- detail: { altura: $ }
2405
+ detail: { altura: S }
2104
2406
  })
2105
2407
  );
2106
2408
  };
2107
- n = v, window.addEventListener("pointermove", g), window.addEventListener("pointerup", h), window.addEventListener("pointercancel", h);
2409
+ n = v, window.addEventListener("pointermove", g), window.addEventListener("pointerup", y), window.addEventListener("pointercancel", y);
2108
2410
  }, m = (f) => {
2109
2411
  f.preventDefault(), f.stopPropagation(), o(null, !0), e.onAlturaAlterada && e.onAlturaAlterada(null);
2110
2412
  };
2111
- e.listeners.add(e.resizerElement, "pointerdown", p), e.listeners.add(e.resizerElement, "dblclick", m);
2413
+ e.listeners.add(e.resizerElement, "pointerdown", d), e.listeners.add(e.resizerElement, "dblclick", m);
2112
2414
  }
2113
2415
  function c() {
2114
2416
  n == null || n(), e.listeners.cleanup();
@@ -2119,19 +2421,21 @@ function Sr(e) {
2119
2421
  destruir: c
2120
2422
  };
2121
2423
  }
2122
- const H = class H extends pa {
2424
+ const N = class N extends wa {
2123
2425
  constructor() {
2124
2426
  super();
2125
- w(this, "shadow");
2126
- w(this, "listeners", new fa());
2127
- w(this, "dragDropManager");
2128
- w(this, "resizerController");
2129
- w(this, "alturaCustomizada", null);
2130
- w(this, "conectado", !1);
2131
- w(this, "profundidadeLote", 0);
2132
- w(this, "renderPendente", !1);
2427
+ A(this, "shadow");
2428
+ A(this, "listeners", new Aa());
2429
+ A(this, "dragDropManager");
2430
+ A(this, "resizerController");
2431
+ A(this, "alturaCustomizada", null);
2432
+ A(this, "conectado", !1);
2433
+ A(this, "profundidadeLote", 0);
2434
+ A(this, "renderPendente", !1);
2435
+ /** Mudança de feições à espera do `render()` (consumida nele): permite atualizar só as linhas afetadas. */
2436
+ A(this, "mudancaFeicoes", null);
2133
2437
  /** @internal */
2134
- w(this, "lembranca", new wr(() => ({
2438
+ A(this, "lembranca", new jr(() => ({
2135
2439
  persistir: this.persistir,
2136
2440
  conectado: this.conectado,
2137
2441
  storageKey: this.storageKey,
@@ -2145,21 +2449,21 @@ const H = class H extends pa {
2145
2449
  altura: this.alturaCustomizada
2146
2450
  })));
2147
2451
  // Estado interno
2148
- w(this, "camadas", []);
2149
- w(this, "feicoes", []);
2150
- w(this, "mapasBase", [...He]);
2151
- w(this, "expandedLayers", /* @__PURE__ */ new Set());
2152
- w(this, "expandedFeatureLimits", /* @__PURE__ */ new Map());
2153
- w(this, "selectedFeatureIds", /* @__PURE__ */ new Set());
2154
- w(this, "lastClickedFeatureId", null);
2155
- w(this, "activeSettingsLayerId", null);
2156
- w(this, "editingLayerId", null);
2157
- w(this, "editingFeatureId", null);
2158
- w(this, "searchQuery", "");
2159
- w(this, "corpoElement");
2160
- w(this, "btnExpandirFlutuante");
2452
+ A(this, "camadas", []);
2453
+ A(this, "feicoes", []);
2454
+ A(this, "mapasBase", [...Re]);
2455
+ A(this, "expandedLayers", /* @__PURE__ */ new Set());
2456
+ A(this, "expandedFeatureLimits", /* @__PURE__ */ new Map());
2457
+ A(this, "selectedFeatureIds", /* @__PURE__ */ new Set());
2458
+ A(this, "lastClickedFeatureId", null);
2459
+ A(this, "activeSettingsLayerId", null);
2460
+ A(this, "editingLayerId", null);
2461
+ A(this, "editingFeatureId", null);
2462
+ A(this, "searchQuery", "");
2463
+ A(this, "corpoElement");
2464
+ A(this, "btnExpandirFlutuante");
2161
2465
  this.shadow = this.attachShadow({ mode: "open" }), this.shadow.innerHTML = `
2162
- <style>${Va}</style>
2466
+ <style>${er}</style>
2163
2467
  <div class="ui-camadas-container" id="panel-container" part="base" role="region" aria-label="Painel de Camadas">
2164
2468
  <div class="ui-camadas-corpo" id="painel-corpo" part="corpo"></div>
2165
2469
  <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">
@@ -2167,24 +2471,24 @@ const H = class H extends pa {
2167
2471
  </div>
2168
2472
  </div>
2169
2473
  <button class="ui-camadas-toggle-flutuante" id="btn-expandir-flutuante" part="botao-expandir" title="Expandir Painel de Camadas" aria-label="Expandir Painel de Camadas">
2170
- ${b.camadas}
2474
+ ${h.camadas}
2171
2475
  </button>
2172
- `, this.corpoElement = this.shadow.getElementById("painel-corpo"), this.btnExpandirFlutuante = this.shadow.getElementById("btn-expandir-flutuante"), this.dragDropManager = new Ta(this, this.shadow);
2476
+ `, this.corpoElement = this.shadow.getElementById("painel-corpo"), this.btnExpandirFlutuante = this.shadow.getElementById("btn-expandir-flutuante"), this.dragDropManager = new _a(this, this.shadow);
2173
2477
  const a = this.shadow.getElementById("resizer-altura");
2174
- this.resizerController = Sr({
2478
+ this.resizerController = Qr({
2175
2479
  hostElement: this,
2176
2480
  resizerElement: a,
2177
2481
  listeners: this.listeners,
2178
2482
  getMinAltura: () => {
2179
- const i = this.getAttribute("min-altura");
2180
- return i && parseFloat(i) || 140;
2483
+ const t = this.getAttribute("min-altura");
2484
+ return t && parseFloat(t) || 140;
2181
2485
  },
2182
2486
  getMaxAltura: () => {
2183
- const i = this.getAttribute("max-altura");
2184
- return i && parseFloat(i) || 1600;
2487
+ const t = this.getAttribute("max-altura");
2488
+ return t && parseFloat(t) || 1600;
2185
2489
  },
2186
- onAlturaAlterada: (i) => {
2187
- this.alturaCustomizada = i, this.salvarLembrancaEstado();
2490
+ onAlturaAlterada: (t) => {
2491
+ this.alturaCustomizada = t, this.salvarLembrancaEstado();
2188
2492
  }
2189
2493
  });
2190
2494
  }
@@ -2216,17 +2520,17 @@ const H = class H extends pa {
2216
2520
  const a = be(this.obterChaveStorageAtual());
2217
2521
  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));
2218
2522
  }
2219
- this.hasAttribute("altura") && this.resizerController.definirAltura(this.getAttribute("altura"), !1), this.persistir && !this.storageKey && !this.id && (H.instanciasChavePadrao.size > 0 && console.warn(
2523
+ this.hasAttribute("altura") && this.resizerController.definirAltura(this.getAttribute("altura"), !1), this.persistir && !this.storageKey && !this.id && (N.instanciasChavePadrao.size > 0 && console.warn(
2220
2524
  "[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."
2221
- ), H.instanciasChavePadrao.add(this)), this.resizerController.init(), this.render(), this.conectarEventosGerais(), vr(this, this, this.shadow, this.corpoElement, this.listeners), this.conectado = !0, this.camadas.length > 0 && this.salvarLembrancaEstado();
2525
+ ), N.instanciasChavePadrao.add(this)), this.resizerController.init(), this.render(), this.conectarEventosGerais(), Pr(this, this, this.shadow, this.corpoElement, this.listeners), this.conectado = !0, this.camadas.length > 0 && this.salvarLembrancaEstado();
2222
2526
  }
2223
2527
  disconnectedCallback() {
2224
- var a, i;
2225
- this.conectado = !1, H.instanciasChavePadrao.delete(this), (a = this.resizerController) == null || a.destruir(), (i = this.dragDropManager) == null || i.destruir(), ar(this), this.listeners.cleanup();
2528
+ var a, t;
2529
+ this.conectado = !1, N.instanciasChavePadrao.delete(this), (a = this.resizerController) == null || a.destruir(), (t = this.dragDropManager) == null || t.destruir(), dr(this), this.listeners.cleanup();
2226
2530
  }
2227
- attributeChangedCallback(a, i, t) {
2531
+ attributeChangedCallback(a, t, i) {
2228
2532
  var o, n;
2229
- 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)));
2533
+ t !== i && (a === "colapsado" ? this.salvarLembrancaEstado() : a === "camada-ativa" ? (this.sincronizarCamadaAtivaDOM(), this.salvarLembrancaEstado()) : a === "densidade" ? this.salvarLembrancaEstado() : a === "mapa-base-ativo" ? i && this.marcarMapaBaseAtivoNoDOM(i) : 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(i, !1) : (a === "min-altura" || a === "max-altura") && this.alturaCustomizada !== null && ((n = this.resizerController) == null || n.definirAltura(this.alturaCustomizada, !1)));
2230
2534
  }
2231
2535
  // --- Getters e Setters de Propriedades Reativas ---
2232
2536
  get titulo() {
@@ -2248,16 +2552,16 @@ const H = class H extends pa {
2248
2552
  set mapaBaseAtivo(a) {
2249
2553
  this.setAttribute("mapa-base-ativo", a);
2250
2554
  }
2251
- selecionarMapaBase(a, i = !1) {
2252
- !a || this.mapaBaseAtivo === a || (this.mapaBaseAtivo = a, this.marcarMapaBaseAtivoNoDOM(a), this.salvarLembrancaEstado(), i && this.dispararEvento("ui-mapa-base-alterado", { mapaBaseId: a }));
2555
+ selecionarMapaBase(a, t = !1) {
2556
+ !a || this.mapaBaseAtivo === a || (this.mapaBaseAtivo = a, this.marcarMapaBaseAtivoNoDOM(a), this.salvarLembrancaEstado(), t && this.dispararEvento("ui-mapa-base-alterado", { mapaBaseId: a }));
2253
2557
  }
2254
2558
  marcarMapaBaseAtivoNoDOM(a) {
2255
- this.shadow.querySelectorAll("[data-basemap-id]").forEach((t) => {
2256
- const o = t.getAttribute("data-basemap-id") === a;
2257
- t.classList.toggle("active", o), t.setAttribute("aria-pressed", String(o));
2559
+ this.shadow.querySelectorAll("[data-basemap-id]").forEach((i) => {
2560
+ const o = i.getAttribute("data-basemap-id") === a;
2561
+ i.classList.toggle("active", o), i.setAttribute("aria-pressed", String(o));
2258
2562
  });
2259
- const i = this.shadow.querySelector("[data-basemap-atual]");
2260
- i && (i.textContent = Ge(this.mapasBase, a));
2563
+ const t = this.shadow.querySelector("[data-basemap-atual]");
2564
+ t && (t.textContent = Oe(this.mapasBase, a));
2261
2565
  }
2262
2566
  /** Seção "Mapa Base" recolhida (só o cabeçalho com o mapa ativo). Atributo `mapas-base-recolhido`. */
2263
2567
  get mapasBaseRecolhido() {
@@ -2342,11 +2646,11 @@ const H = class H extends pa {
2342
2646
  set altura(a) {
2343
2647
  a != null ? (this.setAttribute("altura", String(a)), this.definirAltura(a)) : (this.removeAttribute("altura"), this.definirAltura(null));
2344
2648
  }
2345
- definirAltura(a, i = !0) {
2649
+ definirAltura(a, t = !0) {
2346
2650
  var o;
2347
2651
  (o = this.resizerController) == null || o.definirAltura(a, !1);
2348
- const t = a !== null ? parseFloat(String(a)) : null;
2349
- this.alturaCustomizada = isNaN(t) ? null : t, i && this.salvarLembrancaEstado();
2652
+ const i = a !== null ? parseFloat(String(a)) : null;
2653
+ this.alturaCustomizada = isNaN(i) ? null : i, t && this.salvarLembrancaEstado();
2350
2654
  }
2351
2655
  // --- Gerenciamento de Persistência / Lembrança ---
2352
2656
  obterChaveStorageAtual() {
@@ -2390,56 +2694,56 @@ const H = class H extends pa {
2390
2694
  set basemaps(a) {
2391
2695
  this.definirMapasBase(a);
2392
2696
  }
2393
- definirCamadas(a, i) {
2394
- Ar(this, a, i);
2697
+ definirCamadas(a, t) {
2698
+ Nr(this, a, t);
2395
2699
  }
2396
2700
  definirFeicoes(a) {
2397
- Er(this, a);
2701
+ Gr(this, a);
2398
2702
  }
2399
2703
  definirMapasBase(a) {
2400
2704
  this.mapasBase = Array.isArray(a) ? [...a] : [], this.solicitarRenderizacao();
2401
2705
  }
2402
- definirCamadaAtiva(a, i = !1) {
2403
- !a || this.camadaAtivaId === a || (this.camadaAtivaId = a, this.sincronizarCamadaAtivaDOM(), this.salvarLembrancaEstado(), i && this.dispararEvento("ui-camada-selecionada", {
2706
+ definirCamadaAtiva(a, t = !1) {
2707
+ !a || this.camadaAtivaId === a || (this.camadaAtivaId = a, this.sincronizarCamadaAtivaDOM(), this.salvarLembrancaEstado(), t && this.dispararEvento("ui-camada-selecionada", {
2404
2708
  camadaId: a,
2405
- camada: this.camadas.find((t) => t.id === a)
2709
+ camada: this.camadas.find((i) => i.id === a)
2406
2710
  }));
2407
2711
  }
2408
2712
  obterCamada(a) {
2409
- return this.camadas.find((i) => i.id === a);
2713
+ return this.camadas.find((t) => t.id === a);
2410
2714
  }
2411
2715
  obterCamadaAtiva() {
2412
2716
  return this.camadas.find((a) => a.id === this.camadaAtivaId);
2413
2717
  }
2414
2718
  obterFeicao(a) {
2415
- return this.feicoes.find((i) => i.id === a);
2719
+ return this.feicoes.find((t) => t.id === a);
2416
2720
  }
2417
2721
  obterFeicoesSelecionadas() {
2418
2722
  return this.feicoes.filter((a) => this.selectedFeatureIds.has(a.id));
2419
2723
  }
2420
2724
  adicionarCamada(a) {
2421
- kr(this, a);
2725
+ Vr(this, a);
2422
2726
  }
2423
2727
  removerCamada(a) {
2424
- Ir(this, a);
2728
+ Ur(this, a);
2425
2729
  }
2426
2730
  adicionarFeicao(a) {
2427
- Lr(this, a);
2731
+ _r(this, a);
2428
2732
  }
2429
2733
  atualizarFeicao(a) {
2430
- Cr(this, a);
2734
+ Yr(this, a);
2431
2735
  }
2432
2736
  removerFeicao(a) {
2433
- $r(this, a);
2737
+ Kr(this, a);
2434
2738
  }
2435
- selecionarFeicao(a, i = !1, t = !1, o = !1) {
2436
- br(this, a, i, t, o);
2739
+ selecionarFeicao(a, t = !1, i = !1, o = !1) {
2740
+ Dr(this, a, t, i, o);
2437
2741
  }
2438
- selecionarFeicoes(a, i = !1) {
2439
- hr(this, a, i);
2742
+ selecionarFeicoes(a, t = !1) {
2743
+ Tr(this, a, t);
2440
2744
  }
2441
2745
  limparSelecao(a = !1) {
2442
- xr(this, a);
2746
+ Rr(this, a);
2443
2747
  }
2444
2748
  expandirTodas() {
2445
2749
  this.expandedLayers = new Set(this.camadas.map((a) => a.id)), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
@@ -2452,13 +2756,13 @@ const H = class H extends pa {
2452
2756
  }
2453
2757
  incrementarLimiteFeicoes(a) {
2454
2758
  if (!a) return;
2455
- const i = this.expandedFeatureLimits.get(a) ?? 80;
2456
- this.expandedFeatureLimits.set(a, i + 80), this.solicitarRenderizacao();
2759
+ const t = this.expandedFeatureLimits.get(a) ?? 80;
2760
+ this.expandedFeatureLimits.set(a, t + 80), this.solicitarRenderizacao();
2457
2761
  }
2458
2762
  alternarVisibilidadeTodas(a = !1) {
2459
- const t = !this.camadas.some((o) => o.visible !== !1);
2763
+ const i = !this.camadas.some((o) => o.visible !== !1);
2460
2764
  this.camadas.forEach((o) => {
2461
- o.visible = t, a && this.dispararEvento("ui-camada-visibilidade", { camadaId: o.id, visivel: t });
2765
+ o.visible = i, a && this.dispararEvento("ui-camada-visibilidade", { camadaId: o.id, visivel: i });
2462
2766
  }), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
2463
2767
  }
2464
2768
  colapsar(a = !1) {
@@ -2470,8 +2774,8 @@ const H = class H extends pa {
2470
2774
  alternarColapso(a = !1) {
2471
2775
  this.definirColapso(!this.colapsado, a);
2472
2776
  }
2473
- definirColapso(a, i) {
2474
- this.colapsado !== a && (this.colapsado = a, i && this.dispararEvento("ui-colapso-alterado", { colapsado: a }));
2777
+ definirColapso(a, t) {
2778
+ this.colapsado !== a && (this.colapsado = a, t && this.dispararEvento("ui-colapso-alterado", { colapsado: a }));
2475
2779
  }
2476
2780
  // --- Renderização e Ciclo de Vida ---
2477
2781
  solicitarRenderizacao() {
@@ -2481,9 +2785,22 @@ const H = class H extends pa {
2481
2785
  }
2482
2786
  this.render();
2483
2787
  }
2788
+ /**
2789
+ * Caminho das mutações de feição: o DOM fica atualizado na volta da chamada, mas só as linhas afetadas são
2790
+ * refeitas quando possível. Em `emLote` vale o adiamento de sempre (uma renderização completa no fim).
2791
+ * Qualquer caso que o caminho incremental não garanta (busca, edição inline, drawer, camada fora da árvore…)
2792
+ * cai no render completo.
2793
+ */
2794
+ solicitarAtualizacaoFeicoes(a) {
2795
+ if (this.profundidadeLote > 0) {
2796
+ this.renderPendente = !0;
2797
+ return;
2798
+ }
2799
+ this.mudancaFeicoes = a, this.render();
2800
+ }
2484
2801
  /**
2485
2802
  * Agrupa várias mutações (`adicionarFeicao` em laço, por exemplo) em uma só renderização, ao fim de `fn`.
2486
- * Sem isto, cada chamada redesenha a árvore inteira.
2803
+ * Mesmo com a atualização incremental, é a forma ideal para cargas grandes: o DOM é refeito uma só vez.
2487
2804
  */
2488
2805
  emLote(a) {
2489
2806
  this.profundidadeLote++;
@@ -2493,17 +2810,18 @@ const H = class H extends pa {
2493
2810
  this.profundidadeLote--, this.profundidadeLote === 0 && this.renderPendente && (this.renderPendente = !1, this.render());
2494
2811
  }
2495
2812
  }
2496
- dispararEvento(a, i) {
2813
+ dispararEvento(a, t) {
2497
2814
  this.dispatchEvent(
2498
2815
  new CustomEvent(a, {
2499
- detail: i,
2816
+ detail: t,
2500
2817
  bubbles: !0,
2501
2818
  composed: !0
2502
2819
  })
2503
2820
  );
2504
2821
  }
2505
2822
  render() {
2506
- this.corpoElement && cr(this, this.shadow, this.corpoElement, this.dragDropManager);
2823
+ const a = this.mudancaFeicoes;
2824
+ this.mudancaFeicoes = null, this.corpoElement && (a && Sr(this, this.shadow, this.dragDropManager, a) || Lr(this, this.shadow, this.corpoElement, this.dragDropManager));
2507
2825
  }
2508
2826
  // --- Conexão de Eventos ---
2509
2827
  conectarEventosGerais() {
@@ -2511,27 +2829,27 @@ const H = class H extends pa {
2511
2829
  }
2512
2830
  // --- Sincronização de DOM (delegada) ---
2513
2831
  sincronizarCamadaAtivaDOM() {
2514
- Ya(this, this.shadow);
2832
+ ar(this, this.shadow);
2515
2833
  }
2516
2834
  sincronizarSelecaoDOM() {
2517
- Ka(this, this.shadow);
2835
+ rr(this, this.shadow);
2518
2836
  }
2519
2837
  // --- Auxiliares Internos ---
2520
2838
  notificarMudancaSelecao() {
2521
- yr(this);
2839
+ Or(this);
2522
2840
  }
2523
2841
  };
2524
2842
  /** Painéis conectados sem `id` nem `storage-key`: dividem a mesma chave de persistência. */
2525
- w(H, "instanciasChavePadrao", /* @__PURE__ */ new Set());
2526
- let Q = H;
2527
- class Mr extends Q {
2843
+ A(N, "instanciasChavePadrao", /* @__PURE__ */ new Set());
2844
+ let K = N;
2845
+ class Xr extends K {
2528
2846
  }
2529
- class Fr extends Q {
2847
+ class Wr extends K {
2530
2848
  }
2531
- xe("ui-camadas", Q);
2532
- xe("ui-painel-camadas", Mr);
2533
- xe("ui-layer-panel", Fr);
2534
- function jr(e) {
2849
+ ye("ui-camadas", K);
2850
+ ye("ui-painel-camadas", Xr);
2851
+ ye("ui-layer-panel", Wr);
2852
+ function nt(e) {
2535
2853
  var r;
2536
2854
  return {
2537
2855
  id: e.id,
@@ -2548,7 +2866,7 @@ function jr(e) {
2548
2866
  dados: e.dados
2549
2867
  };
2550
2868
  }
2551
- function Nr(e, r = "levantamento", a = "feicoes") {
2869
+ function st(e, r = "levantamento", a = "feicoes") {
2552
2870
  return {
2553
2871
  id: e.id,
2554
2872
  nome: e.name,
@@ -2567,17 +2885,17 @@ function Nr(e, r = "levantamento", a = "feicoes") {
2567
2885
  dados: typeof e.dados == "object" && e.dados !== null ? e.dados : void 0
2568
2886
  };
2569
2887
  }
2570
- function Hr(e, r = "") {
2888
+ function lt(e, r = "") {
2571
2889
  var o, n, l, c;
2572
- const a = ((o = e.geometria) == null ? void 0 : o.tipo) || ((n = e.geometria) == null ? void 0 : n.type) || e.tipo || e.type || "Polygon", i = ((l = e.geometria) == null ? void 0 : l.coordenadas) || ((c = e.geometria) == null ? void 0 : c.coordinates) || e.coordinates, t = e.cor || e.color;
2890
+ const a = ((o = e.geometria) == null ? void 0 : o.tipo) || ((n = e.geometria) == null ? void 0 : n.type) || e.tipo || e.type || "Polygon", t = ((l = e.geometria) == null ? void 0 : l.coordenadas) || ((c = e.geometria) == null ? void 0 : c.coordinates) || e.coordinates, i = e.cor || e.color;
2573
2891
  return {
2574
2892
  id: String(e.id),
2575
2893
  name: e.nome || e.name || `Feição ${e.id}`,
2576
2894
  layerId: e.layerId || e.camadaId || r,
2577
2895
  type: a,
2578
2896
  geometryType: a,
2579
- coordinates: i,
2580
- color: t,
2897
+ coordinates: t,
2898
+ color: i,
2581
2899
  visible: e.visivel !== void 0 ? e.visivel : e.visible !== !1,
2582
2900
  locked: e.bloqueada !== void 0 ? e.bloqueada : e.locked === !0,
2583
2901
  status: e.status || "oficial",
@@ -2586,43 +2904,43 @@ function Hr(e, r = "") {
2586
2904
  };
2587
2905
  }
2588
2906
  export {
2589
- Ta as CamadasDragDropManager,
2590
- b as ICONES,
2591
- Ye as LIMITE_FEICOES_POR_CAMADA,
2592
- He as MAPAS_BASE_PADRAO,
2593
- Q as UICamadas,
2594
- Fr as UILayerPanel,
2595
- Vr as UIMapaBase,
2596
- Mr as UIPainelCamadas,
2597
- Yr as UISeletorMapaBase,
2907
+ _a as CamadasDragDropManager,
2908
+ h as ICONES,
2909
+ we as LIMITE_FEICOES_POR_CAMADA,
2910
+ Re as MAPAS_BASE_PADRAO,
2911
+ K as UICamadas,
2912
+ Wr as UILayerPanel,
2913
+ ut as UIMapaBase,
2914
+ Xr as UIPainelCamadas,
2915
+ pt as UISeletorMapaBase,
2598
2916
  ue as calcularAreaAnelSimples,
2599
- je as calcularAreaPoligono,
2600
- Oe as calcularComprimentoLinha,
2601
- va as calcularDistanciaPontos,
2602
- La as calcularSelecaoFeicao,
2917
+ De as calcularAreaPoligono,
2918
+ Pe as calcularComprimentoLinha,
2919
+ Ia as calcularDistanciaPontos,
2920
+ Ta as calcularSelecaoFeicao,
2603
2921
  be as carregarEstadoPersistido,
2604
- ye as construirHierarquiaCamadas,
2605
- Nr as converterCamadaItemParaCanvasLayer,
2606
- jr as converterCanvasLayerParaCamadaItem,
2607
- Hr as converterFeicaoParaItem,
2608
- F as escapeHtml,
2609
- Ke as filtrarCamadasPorBusca,
2610
- oe as filtrarFeicoesPorBusca,
2611
- Or as formatarMetricaFeicoes,
2612
- Aa as formatarOpcoesCamadasHierarquicas,
2613
- Oa as gerarChaveStorage,
2614
- Ha as limparEstadoPersistido,
2615
- Ua as montarEstadoPersistido,
2616
- Ge as nomeDoMapaBase,
2617
- ja as normalizarEstadoPersistido,
2618
- _e as obterIdsVisiveisFeicoes,
2619
- Ga as reidratarCamadasComOverrides,
2620
- Ee as removerSelecoesInvalidas,
2621
- Ba as renderizarArvoreCamadas,
2622
- ya as renderizarGridMapasBase,
2623
- Ea as renderizarRodapeAcoes,
2624
- Ia as renderizarThumbGeometria,
2625
- Ue as rotuloRodape,
2626
- Na as salvarEstadoPersistido,
2627
- Xe as snapshotCamada
2922
+ ne as construirHierarquiaCamadas,
2923
+ st as converterCamadaItemParaCanvasLayer,
2924
+ nt as converterCanvasLayerParaCamadaItem,
2925
+ lt as converterFeicaoParaItem,
2926
+ z as escapeHtml,
2927
+ Qe as filtrarCamadasPorBusca,
2928
+ te as filtrarFeicoesPorBusca,
2929
+ ot as formatarMetricaFeicoes,
2930
+ Fa as formatarOpcoesCamadasHierarquicas,
2931
+ Ka as gerarChaveStorage,
2932
+ Wa as limparEstadoPersistido,
2933
+ Za as montarEstadoPersistido,
2934
+ Oe as nomeDoMapaBase,
2935
+ Qa as normalizarEstadoPersistido,
2936
+ Xe as obterIdsVisiveisFeicoes,
2937
+ Ja as reidratarCamadasComOverrides,
2938
+ Ae as removerSelecoesInvalidas,
2939
+ Ga as renderizarArvoreCamadas,
2940
+ $a as renderizarGridMapasBase,
2941
+ za as renderizarRodapeAcoes,
2942
+ qa as renderizarThumbGeometria,
2943
+ je as rotuloRodape,
2944
+ Xa as salvarEstadoPersistido,
2945
+ We as snapshotCamada
2628
2946
  };