@thibezer/ui-components-kit 2.1.0 → 2.2.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 (36) hide show
  1. package/CHANGELOG.md +25 -1
  2. package/dist/botao.cjs +1 -1
  3. package/dist/botao.js +1 -1
  4. package/dist/camadas.cjs +172 -139
  5. package/dist/camadas.js +1257 -1009
  6. package/dist/canvas.cjs +61 -61
  7. package/dist/canvas.js +1411 -1075
  8. package/dist/components/ui-barra-ferramentas/tipos.d.ts +2 -2
  9. package/dist/components/ui-barra-ferramentas/ui-paleta-ferramentas.d.ts +2 -2
  10. package/dist/components/ui-camadas/camadas-adapters.d.ts +45 -0
  11. package/dist/components/ui-camadas/camadas-arvore-renderer.d.ts +9 -0
  12. package/dist/components/ui-camadas/camadas-drag-drop.d.ts +4 -0
  13. package/dist/components/ui-camadas/camadas-metricas.d.ts +8 -1
  14. package/dist/components/ui-camadas/camadas-persistencia.d.ts +1 -0
  15. package/dist/components/ui-camadas/camadas-rodape.d.ts +5 -0
  16. package/dist/components/ui-camadas/index.d.ts +1 -0
  17. package/dist/components/ui-camadas/tipos.d.ts +8 -0
  18. package/dist/components/ui-camadas/ui-camadas.d.ts +1 -0
  19. package/dist/custom-elements.json +12317 -11997
  20. package/dist/gerencigeo-canvas/curva_leaflet.d.ts +21 -0
  21. package/dist/gerencigeo-canvas/feature_curvas.d.ts +43 -0
  22. package/dist/gerencigeo-canvas/feature_desenho.d.ts +5 -3
  23. package/dist/gerencigeo-canvas/feature_edicao_ops.d.ts +28 -1
  24. package/dist/gerencigeo-canvas/feature_editor_vertices.d.ts +18 -0
  25. package/dist/gerencigeo-canvas/feature_simplificacao.d.ts +1 -0
  26. package/dist/gerencigeo-canvas/feature_types.d.ts +16 -1
  27. package/dist/gerencigeo-canvas/utils.d.ts +1 -1
  28. package/dist/index.cjs +1 -1
  29. package/dist/index.js +80 -74
  30. package/dist/register.cjs +1 -1
  31. package/dist/register.js +1 -1
  32. package/dist/tipos-elementos.d.ts +9 -3
  33. package/dist/tipos-vue.d.ts +9 -3
  34. package/dist/ui-botao-BOOnP8ds.cjs +12 -0
  35. package/dist/ui-botao-DfqSivHl.js +165 -0
  36. package/package.json +1 -1
package/dist/camadas.js CHANGED
@@ -1,11 +1,11 @@
1
- var ve = Object.defineProperty;
2
- var be = (a, o, e) => o in a ? ve(a, o, { enumerable: !0, configurable: !0, writable: !0, value: e }) : a[o] = e;
3
- var x = (a, o, e) => be(a, typeof o != "symbol" ? o + "" : o, e);
1
+ var Le = Object.defineProperty;
2
+ var Ce = (e, o, a) => o in e ? Le(e, o, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[o] = a;
3
+ var y = (e, o, a) => Ce(e, typeof o != "symbol" ? o + "" : o, a);
4
4
  /* empty css */
5
- import { d as Q, S as xe } from "./ssr-safe-5cWfJP-s.js";
6
- import { L as ye } from "./listener-bag-DQgv7OON.js";
7
- import { UIMapaBase as fa, UISeletorMapaBase as ma } from "./seletor-mapa-base.js";
8
- const h = {
5
+ import { d as ee, S as $e } from "./ssr-safe-5cWfJP-s.js";
6
+ import { L as Se } from "./listener-bag-DQgv7OON.js";
7
+ import { UIMapaBase as $a, UISeletorMapaBase as Sa } from "./seletor-mapa-base.js";
8
+ const g = {
9
9
  camadas: `<svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
10
10
  <polygon points="12 2 2 7 12 12 22 7 12 2"></polygon>
11
11
  <polyline points="2 17 12 22 22 17"></polyline>
@@ -103,47 +103,60 @@ const h = {
103
103
  <line x1="9" y1="3" x2="9" y2="21"></line>
104
104
  <line x1="15" y1="3" x2="15" y2="21"></line>
105
105
  </svg>`
106
- }, G = 6378137;
107
- function we(a, o) {
108
- if (!a || !o) return 0;
109
- const e = a[0] * Math.PI / 180, t = a[1] * Math.PI / 180, r = o[0] * Math.PI / 180, i = o[1] * Math.PI / 180, s = r - e, n = i - t, c = Math.sin(s / 2) * Math.sin(s / 2) + Math.cos(e) * Math.cos(r) * Math.sin(n / 2) * Math.sin(n / 2);
110
- return G * 2 * Math.atan2(Math.sqrt(c), Math.sqrt(1 - c));
106
+ }, X = 6378137;
107
+ function ze(e, o) {
108
+ if (!e || !o) return 0;
109
+ const a = e[0] * Math.PI / 180, t = e[1] * Math.PI / 180, i = o[0] * Math.PI / 180, r = o[1] * Math.PI / 180, s = i - a, n = r - t, l = Math.sin(s / 2) * Math.sin(s / 2) + Math.cos(a) * Math.cos(i) * Math.sin(n / 2) * Math.sin(n / 2);
110
+ return X * 2 * Math.atan2(Math.sqrt(l), Math.sqrt(1 - l));
111
111
  }
112
- function re(a) {
113
- if (!Array.isArray(a) || a.length < 2) return 0;
114
- if (Array.isArray(a[0]) && Array.isArray(a[0][0]))
115
- return a.reduce((e, t) => e + re(t), 0);
112
+ function de(e) {
113
+ if (!Array.isArray(e) || e.length < 2) return 0;
114
+ if (Array.isArray(e[0]) && Array.isArray(e[0][0]))
115
+ return e.reduce((a, t) => a + de(t), 0);
116
116
  let o = 0;
117
- for (let e = 0; e < a.length - 1; e++) {
118
- const t = a[e], r = a[e + 1];
119
- Array.isArray(t) && Array.isArray(r) && t.length >= 2 && r.length >= 2 && (o += we([t[0], t[1]], [r[0], r[1]]));
117
+ for (let a = 0; a < e.length - 1; a++) {
118
+ const t = e[a], i = e[a + 1];
119
+ Array.isArray(t) && Array.isArray(i) && t.length >= 2 && i.length >= 2 && (o += ze([t[0], t[1]], [i[0], i[1]]));
120
120
  }
121
121
  return o;
122
122
  }
123
- function ie(a) {
124
- if (!Array.isArray(a) || a.length === 0) return 0;
125
- if (Array.isArray(a[0]) && Array.isArray(a[0][0]))
126
- return a.reduce((r, i) => r + ie(i), 0);
127
- const o = a.length;
123
+ function Q(e) {
124
+ if (!Array.isArray(e)) return 0;
125
+ const o = e.length;
128
126
  if (o < 3) return 0;
129
- let e = 0;
130
- for (let r = 0; r < o; r++) {
131
- const i = a[r], s = a[(r + 1) % o], n = a[(r + 2) % o];
132
- if (!Array.isArray(i) || !Array.isArray(s) || !Array.isArray(n)) continue;
133
- const c = (s[1] - i[1]) * (Math.PI / 180), l = (s[0] - i[0]) * (Math.PI / 180), u = (n[1] - s[1]) * (Math.PI / 180), p = (n[0] - s[0]) * (Math.PI / 180);
134
- e += c * p - l * u;
135
- }
136
- const t = Math.abs(e * (G * G) / 2);
127
+ let a = 0;
128
+ for (let i = 0; i < o; i++) {
129
+ const r = e[i], s = e[(i + 1) % o], n = e[(i + 2) % o];
130
+ if (!Array.isArray(r) || !Array.isArray(s) || !Array.isArray(n)) continue;
131
+ const l = (s[1] - r[1]) * (Math.PI / 180), c = (s[0] - r[0]) * (Math.PI / 180), f = (n[1] - s[1]) * (Math.PI / 180), u = (n[0] - s[0]) * (Math.PI / 180);
132
+ a += l * u - c * f;
133
+ }
134
+ const t = Math.abs(a * (X * X) / 2);
137
135
  return isNaN(t) ? 0 : t;
138
136
  }
139
- function oe(a) {
140
- if (!a || a.length === 0) return "";
141
- const o = a.filter(
137
+ function ue(e) {
138
+ if (!Array.isArray(e) || e.length === 0) return 0;
139
+ if (Array.isArray(e[0]) && typeof e[0][0] == "number")
140
+ return Q(e);
141
+ if (Array.isArray(e[0]) && Array.isArray(e[0][0])) {
142
+ if (Array.isArray(e[0][0][0]))
143
+ return e.reduce((t, i) => t + ue(i), 0);
144
+ const o = Q(e[0]);
145
+ let a = 0;
146
+ for (let t = 1; t < e.length; t++)
147
+ a += Q(e[t]);
148
+ return Math.max(0, o - a);
149
+ }
150
+ return 0;
151
+ }
152
+ function pe(e) {
153
+ if (!e || e.length === 0) return "";
154
+ const o = e.filter(
142
155
  (t) => t.type === "Polygon" || t.type === "MultiPolygon" || t.geometryType === "Polygon"
143
156
  );
144
157
  if (o.length > 0) {
145
158
  const t = o.reduce(
146
- (r, i) => r + (ie(i.coordinates) || 0),
159
+ (i, r) => i + (ue(r.coordinates) || 0),
147
160
  0
148
161
  );
149
162
  return t >= 1e4 ? `${(t / 1e4).toLocaleString("pt-BR", {
@@ -151,12 +164,12 @@ function oe(a) {
151
164
  maximumFractionDigits: 2
152
165
  })} ha` : `${Math.round(t).toLocaleString("pt-BR")} m²`;
153
166
  }
154
- const e = a.filter(
167
+ const a = e.filter(
155
168
  (t) => t.type === "LineString" || t.type === "MultiLineString" || t.geometryType === "LineString"
156
169
  );
157
- if (e.length > 0) {
158
- const t = e.reduce(
159
- (r, i) => r + (re(i.coordinates) || 0),
170
+ if (a.length > 0) {
171
+ const t = a.reduce(
172
+ (i, r) => i + (de(r.coordinates) || 0),
160
173
  0
161
174
  );
162
175
  return t >= 1e3 ? `${(t / 1e3).toLocaleString("pt-BR", {
@@ -166,57 +179,57 @@ function oe(a) {
166
179
  }
167
180
  return "";
168
181
  }
169
- function k(a) {
170
- return a == null ? "" : String(a).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
182
+ function L(e) {
183
+ return e == null ? "" : String(e).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
171
184
  }
172
- const Ee = /^(#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})|(?:rgb|hsl)a?\(\s*[\w.%\s,/+-]+\)|[a-z]{3,30})$/i;
173
- function P(a, o = "#00E08A") {
174
- if (!a || typeof a != "string") return o;
175
- const e = a.trim();
176
- return Ee.test(e) ? e : o;
185
+ const Me = /^(#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})|(?:rgb|hsl)a?\(\s*[\w.%\s,/+-]+\)|[a-z]{3,30})$/i;
186
+ function G(e, o = "#00E08A") {
187
+ if (!e || typeof e != "string") return o;
188
+ const a = e.trim();
189
+ return Me.test(a) ? a : o;
177
190
  }
178
- function U(a) {
179
- return Math.max(0, Math.min(255, Math.round(a))).toString(16).padStart(2, "0");
191
+ function J(e) {
192
+ return Math.max(0, Math.min(255, Math.round(e))).toString(16).padStart(2, "0");
180
193
  }
181
- function Ae(a, o, e) {
182
- const t = o / 100, r = e / 100, i = (c) => (c + a / 30) % 12, s = t * Math.min(r, 1 - r), n = (c) => r - s * Math.max(-1, Math.min(i(c) - 3, Math.min(9 - i(c), 1)));
194
+ function Fe(e, o, a) {
195
+ const t = o / 100, i = a / 100, r = (l) => (l + e / 30) % 12, s = t * Math.min(i, 1 - i), n = (l) => i - s * Math.max(-1, Math.min(r(l) - 3, Math.min(9 - r(l), 1)));
183
196
  return [n(0) * 255, n(8) * 255, n(4) * 255];
184
197
  }
185
- function ke(a, o = "#000000") {
186
- if (!a || typeof a != "string") return o;
187
- const e = a.trim().toLowerCase(), t = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.exec(e);
198
+ function Be(e, o = "#000000") {
199
+ if (!e || typeof e != "string") return o;
200
+ const a = e.trim().toLowerCase(), t = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.exec(a);
188
201
  if (t) {
189
- const i = t[1];
190
- return i.length <= 4 ? `#${i[0]}${i[0]}${i[1]}${i[1]}${i[2]}${i[2]}` : `#${i.slice(0, 6)}`;
191
- }
192
- const r = /^(rgb|hsl)a?\(([^)]+)\)$/.exec(e);
193
- if (r) {
194
- const i = r[2].split(/[\s,/]+/).filter(Boolean).map((s) => parseFloat(s));
195
- if (i.length >= 3 && i.slice(0, 3).every((s) => !isNaN(s))) {
196
- const [s, n, c] = i, [l, u, p] = r[1] === "rgb" ? [s, n, c] : Ae(s, n, c);
197
- return `#${U(l)}${U(u)}${U(p)}`;
202
+ const r = t[1];
203
+ return r.length <= 4 ? `#${r[0]}${r[0]}${r[1]}${r[1]}${r[2]}${r[2]}` : `#${r.slice(0, 6)}`;
204
+ }
205
+ const i = /^(rgb|hsl)a?\(([^)]+)\)$/.exec(a);
206
+ if (i) {
207
+ const r = i[2].split(/[\s,/]+/).filter(Boolean).map((s) => parseFloat(s));
208
+ if (r.length >= 3 && r.slice(0, 3).every((s) => !isNaN(s))) {
209
+ const [s, n, l] = r, [c, f, u] = i[1] === "rgb" ? [s, n, l] : Fe(s, n, l);
210
+ return `#${J(c)}${J(f)}${J(u)}`;
198
211
  }
199
212
  }
200
213
  return o;
201
214
  }
202
- function S(a, o, e) {
203
- const t = a.querySelectorAll(`[${o}]`);
204
- for (let r = 0; r < t.length; r++)
205
- if (t[r].getAttribute(o) === e) return t[r];
215
+ function M(e, o, a) {
216
+ const t = e.querySelectorAll(`[${o}]`);
217
+ for (let i = 0; i < t.length; i++)
218
+ if (t[i].getAttribute(o) === a) return t[i];
206
219
  return null;
207
220
  }
208
- function se(a, o = 80) {
209
- let e = null;
221
+ function fe(e, o = 80) {
222
+ let a = null;
210
223
  return (...t) => {
211
- e && clearTimeout(e), e = setTimeout(() => {
212
- a(...t), e = null;
224
+ a && clearTimeout(a), a = setTimeout(() => {
225
+ e(...t), a = null;
213
226
  }, o);
214
227
  };
215
228
  }
216
- function $(a, o) {
217
- a.setAttribute("title", o), a.setAttribute("aria-label", o);
229
+ function F(e, o) {
230
+ e.setAttribute("title", o), e.setAttribute("aria-label", o);
218
231
  }
219
- const ne = [
232
+ const me = [
220
233
  {
221
234
  id: "none",
222
235
  nome: "Sem Mapa",
@@ -259,17 +272,17 @@ const ne = [
259
272
  thumbnailUrl: "https://images.unsplash.com/photo-1518709268805-4e9042af9f23?w=160&auto=format&fit=crop&q=80"
260
273
  }
261
274
  ];
262
- function Ie(a = ne, o = "satelite") {
263
- return !a || a.length === 0 ? "" : `
275
+ function qe(e = me, o = "satelite") {
276
+ return !e || e.length === 0 ? "" : `
264
277
  <div class="ui-basemap-section">
265
278
  <div class="ui-basemap-title">Mapa Base</div>
266
279
  <div class="ui-basemap-grid">
267
- ${a.map((t) => {
268
- const r = o === t.id, i = k(t.id), s = k(t.nome), n = k(t.descricao || t.nome);
269
- let c = "";
270
- return t.thumbnailUrl ? c = `<img class="ui-basemap-preview" src="${k(t.thumbnailUrl)}" alt="" loading="lazy" referrerpolicy="no-referrer" data-basemap-thumb />` : c = `<div class="ui-basemap-preview-none">${h.gradeCad}</div>`, `
271
- <div class="ui-basemap-card ${r ? "active" : ""}" data-basemap-id="${i}" role="button" tabindex="0" aria-pressed="${r}" title="${n}">
272
- ${c}
280
+ ${e.map((t) => {
281
+ const i = o === t.id, r = L(t.id), s = L(t.nome), n = L(t.descricao || t.nome);
282
+ let l = "";
283
+ return t.thumbnailUrl ? l = `<img class="ui-basemap-preview" src="${L(t.thumbnailUrl)}" alt="" loading="lazy" referrerpolicy="no-referrer" data-basemap-thumb />` : l = `<div class="ui-basemap-preview-none">${g.gradeCad}</div>`, `
284
+ <div class="ui-basemap-card ${i ? "active" : ""}" data-basemap-id="${r}" role="button" tabindex="0" aria-pressed="${i}" title="${n}">
285
+ ${l}
273
286
  <span>${s}</span>
274
287
  </div>
275
288
  `;
@@ -278,112 +291,153 @@ function Ie(a = ne, o = "satelite") {
278
291
  </div>
279
292
  `;
280
293
  }
281
- function Le(a, o, e) {
282
- const t = o.filter((l) => e.has(l.id)), r = t.length > 0, i = oe(t), s = r ? t.length : a.length, n = r ? t.length > 1 ? "selecionados" : "selecionado" : a.length > 1 ? "camadas" : "camada", c = a.map((l) => `<option value="${k(l.id)}">${k(l.name)}</option>`).join("");
294
+ function De(e) {
295
+ const o = /* @__PURE__ */ new Map();
296
+ e.forEach((r) => o.set(r.id, r));
297
+ const a = /* @__PURE__ */ new Map(), t = [];
298
+ e.forEach((r) => {
299
+ r.parentId && o.has(r.parentId) ? (a.has(r.parentId) || a.set(r.parentId, []), a.get(r.parentId).push(r)) : t.push(r);
300
+ });
301
+ const i = (r, s) => {
302
+ const n = a.get(r.id) || (Array.isArray(r.children) ? r.children : []), l = s > 0 ? "&nbsp;&nbsp;".repeat(s) + "↳ " : n.length > 0 || r.isGroup ? "📁 " : "", c = `<option value="${L(r.id)}">${l}${L(r.name)}</option>`, f = n.map((u) => i(u, s + 1)).join("");
303
+ return c + f;
304
+ };
305
+ return t.map((r) => i(r, 0)).join("");
306
+ }
307
+ function Te(e, o, a) {
308
+ const t = o.filter((c) => a.has(c.id)), i = t.length > 0, r = pe(t), s = i ? t.length : e.length, n = i ? t.length > 1 ? "selecionados" : "selecionado" : e.length > 1 ? "camadas" : "camada", l = De(e);
283
309
  return `
284
- <div class="ui-tree-footer">
310
+ <div class="ui-tree-footer ${i ? "tem-selecao" : "sem-selecao"}">
285
311
  <div class="ui-footer-left">
286
312
  <span class="ui-footer-count" id="footer-count">${s}</span>
287
313
  <span class="ui-footer-label" id="footer-label">${n}</span>
288
- <span class="ui-footer-metric" style="display: ${i ? "inline-flex" : "none"};">${i ? `${h.reguaMetrica} ${i}` : ""}</span>
314
+ <span class="ui-footer-metric" id="footer-metric" style="display: ${r ? "inline-flex" : "none"};">${r ? `${g.reguaMetrica} ${r}` : ""}</span>
289
315
  </div>
290
- <div class="ui-footer-right">
291
- <button class="ui-footer-btn ${r ? "" : "disabled"}" id="btn-footer-vis" title="Alternar visibilidade coletiva" aria-label="Alternar visibilidade coletiva" ${r ? "" : "disabled"}>
292
- ${h.olhoAberto}
316
+
317
+ <!-- Ações de topo/gerais quando não há nada selecionado -->
318
+ <div class="ui-footer-actions-gerais" style="display: ${i ? "none" : "flex"};">
319
+ <button class="ui-footer-chip-btn" id="btn-footer-new-group" title="Criar Nova Pasta/Grupo de Camadas" aria-label="Criar Grupo de Camadas">
320
+ ${g.moverPasta}
321
+ <span>+ Grupo</span>
322
+ </button>
323
+ <button class="ui-footer-chip-btn primario" id="btn-footer-new-layer" title="Criar Nova Camada Vetorial" aria-label="Criar Nova Camada">
324
+ ${g.mais}
325
+ <span>+ Camada</span>
293
326
  </button>
327
+ </div>
294
328
 
295
- <button class="ui-footer-btn ${r ? "" : "disabled"}" id="btn-footer-lock" title="Alternar bloqueio coletivo" aria-label="Alternar bloqueio coletivo" ${r ? "" : "disabled"}>
296
- ${h.cadeadoTrancado}
329
+ <!-- Ações em massa ativadas quando há seleção -->
330
+ <div class="ui-footer-right ui-footer-bulk-actions" style="display: ${i ? "flex" : "none"};">
331
+ <button class="ui-footer-btn ${i ? "" : "disabled"}" id="btn-footer-vis" title="Alternar visibilidade coletiva" aria-label="Alternar visibilidade coletiva" ${i ? "" : "disabled"}>
332
+ ${g.olhoAberto}
297
333
  </button>
298
334
 
299
- <div class="ui-footer-color-wrapper ${r ? "" : "disabled"}" title="Alterar cor dos selecionados">
300
- <input type="color" id="input-footer-color" aria-label="Cor dos selecionados" value="#00E08A" class="ui-footer-color" ${r ? "" : "disabled"} />
335
+ <button class="ui-footer-btn ${i ? "" : "disabled"}" id="btn-footer-lock" title="Alternar bloqueio coletivo" aria-label="Alternar bloqueio coletivo" ${i ? "" : "disabled"}>
336
+ ${g.cadeadoTrancado}
337
+ </button>
338
+
339
+ <div class="ui-footer-color-wrapper ${i ? "" : "disabled"}" title="Alterar cor dos selecionados">
340
+ <span class="ui-footer-color-preview" id="preview-footer-color" style="background-color: #00E08A;"></span>
341
+ <input type="color" id="input-footer-color" aria-label="Cor dos selecionados" value="#00E08A" class="ui-footer-color" ${i ? "" : "disabled"} />
301
342
  </div>
302
343
 
303
- <div class="ui-footer-move-wrapper ${r ? "" : "disabled"}" title="Mover selecionados para outra camada">
304
- <select id="select-footer-move" aria-label="Mover selecionados para outra camada" class="ui-footer-select" ${r ? "" : "disabled"}>
305
- <option value="" disabled selected>📂</option>
306
- ${c}
344
+ <div class="ui-footer-move-wrapper ${i ? "" : "disabled"}" title="Mover selecionados para outra camada">
345
+ <select id="select-footer-move" aria-label="Mover selecionados para outra camada" class="ui-footer-select" ${i ? "" : "disabled"}>
346
+ <option value="" disabled selected>📂 Mover para...</option>
347
+ ${l}
307
348
  </select>
308
349
  </div>
309
350
 
310
- <button class="ui-footer-btn" id="btn-footer-new-layer" title="Criar Nova Camada" aria-label="Criar Nova Camada">
311
- ${h.mais}
312
- </button>
313
-
314
- <button class="ui-footer-btn ${r ? "" : "disabled"}" id="btn-footer-del" title="Excluir selecionados" aria-label="Excluir selecionados" ${r ? "" : "disabled"}>
315
- ${h.lixeira}
351
+ <button class="ui-footer-btn btn-danger-footer ${i ? "" : "disabled"}" id="btn-footer-del" title="Excluir selecionados" aria-label="Excluir selecionados" ${i ? "" : "disabled"}>
352
+ ${g.lixeira}
316
353
  </button>
317
354
 
318
- ${r ? `<button class="ui-footer-btn" id="btn-footer-clear" title="Limpar seleção" aria-label="Limpar seleção">${h.fechar}</button>` : ""}
355
+ ${i ? `<button class="ui-footer-btn btn-clear-footer" id="btn-footer-clear" title="Limpar seleção" aria-label="Limpar seleção">${g.fechar}</button>` : ""}
319
356
  </div>
320
357
  </div>
321
358
  `;
322
359
  }
323
- const le = 80;
324
- function Y(a, o) {
325
- const e = (o || "").trim().toLowerCase();
326
- return e ? a.filter(
327
- (t) => (t.name || "").toLowerCase().includes(e) || (t.category || "").toLowerCase().includes(e) || (t.type || "").toLowerCase().includes(e)
328
- ) : a;
360
+ const he = 80;
361
+ function ae(e, o) {
362
+ const a = (o || "").trim().toLowerCase();
363
+ return a ? e.filter(
364
+ (t) => (t.name || "").toLowerCase().includes(a) || (t.category || "").toLowerCase().includes(a) || (t.type || "").toLowerCase().includes(a)
365
+ ) : e;
329
366
  }
330
- function Ce(a, o, e, t = "", r = le) {
331
- const i = (t || "").trim() !== "", s = [], n = /* @__PURE__ */ new Map();
332
- for (let c = 0; c < o.length; c++) {
333
- const l = o[c], u = l.layerId || "";
334
- n.has(u) || n.set(u, []), n.get(u).push(l);
335
- }
336
- for (let c = 0; c < a.length; c++) {
337
- const l = a[c];
338
- if (i || e.has(l.id)) {
339
- const u = Y(n.get(l.id) || [], t).slice(0, r);
340
- for (let p = 0; p < u.length; p++)
341
- s.push(u[p].id);
367
+ function Pe(e, o, a, t = "", i = he) {
368
+ const r = (t || "").trim() !== "", s = [], n = /* @__PURE__ */ new Map();
369
+ for (let l = 0; l < o.length; l++) {
370
+ const c = o[l], f = c.layerId || "";
371
+ n.has(f) || n.set(f, []), n.get(f).push(c);
372
+ }
373
+ for (let l = 0; l < e.length; l++) {
374
+ const c = e[l];
375
+ if (r || a.has(c.id)) {
376
+ const f = ae(n.get(c.id) || [], t).slice(0, i);
377
+ for (let u = 0; u < f.length; u++)
378
+ s.push(f[u].id);
342
379
  }
343
380
  }
344
381
  return s;
345
382
  }
346
- function Se(a, o, e, t, r, i) {
347
- if (!a.includes(t)) return null;
383
+ function Oe(e, o, a, t, i, r) {
384
+ if (!e.includes(t)) return null;
348
385
  const s = new Set(o);
349
- let n = e;
350
- if (i && e && a.includes(e)) {
351
- const c = a.indexOf(e), l = a.indexOf(t), u = Math.min(c, l), p = Math.max(c, l);
352
- r || s.clear();
353
- for (let d = u; d <= p; d++)
354
- s.add(a[d]);
355
- } else r ? (s.has(t) ? s.delete(t) : s.add(t), n = t) : (s.clear(), s.add(t), n = t);
386
+ let n = a;
387
+ if (r && a && e.includes(a)) {
388
+ const l = e.indexOf(a), c = e.indexOf(t), f = Math.min(l, c), u = Math.max(l, c);
389
+ i || s.clear();
390
+ for (let p = f; p <= u; p++)
391
+ s.add(e[p]);
392
+ } else i ? (s.has(t) ? s.delete(t) : s.add(t), n = t) : (s.clear(), s.add(t), n = t);
356
393
  return { selecionados: s, ultimoClicadoId: n };
357
394
  }
358
- function $e(a, o) {
359
- if (a.size === 0) return;
360
- const e = new Set(o.map((t) => t.id));
361
- for (const t of a)
362
- e.has(t) || a.delete(t);
395
+ function je(e, o) {
396
+ if (e.size === 0) return;
397
+ const a = new Set(o.map((t) => t.id));
398
+ for (const t of e)
399
+ a.has(t) || e.delete(t);
400
+ }
401
+ function Re(e, o) {
402
+ const a = G(o, "#00E08A"), t = (e || "").toLowerCase();
403
+ return 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="${a}" fill-opacity="0.45" stroke="${a}" 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="${a}" 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="${a}" 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="${a}" stroke="#ffffff" stroke-width="1.2"/></svg>`;
363
404
  }
364
- function Me(a, o) {
365
- const e = P(o, "#00E08A"), t = (a || "").toLowerCase();
366
- return 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="${e}" fill-opacity="0.45" stroke="${e}" 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="${e}" 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="${e}" 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="${e}" stroke="#ffffff" stroke-width="1.2"/></svg>`;
405
+ function Ne(e) {
406
+ const o = /* @__PURE__ */ new Map();
407
+ e.forEach((r) => o.set(r.id, r));
408
+ const a = /* @__PURE__ */ new Map(), t = [];
409
+ e.forEach((r) => {
410
+ r.parentId && o.has(r.parentId) && r.parentId !== r.id ? (a.has(r.parentId) || a.set(r.parentId, []), a.get(r.parentId).push(r)) : t.push(r);
411
+ });
412
+ function i(r, s) {
413
+ const n = a.get(r.id) || (Array.isArray(r.children) ? r.children : []);
414
+ return {
415
+ camada: r,
416
+ depth: s,
417
+ subcamadas: n.map((l) => i(l, s + 1))
418
+ };
419
+ }
420
+ return t.map((r) => i(r, 0));
367
421
  }
368
- function ze(a) {
422
+ function He(e) {
369
423
  const {
370
424
  camadas: o,
371
- feicoes: e,
425
+ feicoes: a,
372
426
  camadaAtivaId: t,
373
- expandedLayers: r,
374
- selectedFeatureIds: i,
427
+ expandedLayers: i,
428
+ selectedFeatureIds: r,
375
429
  activeSettingsLayerId: s,
376
430
  editingLayerId: n,
377
- editingFeatureId: c,
378
- searchQuery: l,
379
- limiteFeicoesPorCamada: u = le,
380
- mostrarBotaoColapsar: p = !1
381
- } = a, d = (l || "").trim().toLowerCase(), f = /* @__PURE__ */ new Map();
382
- for (let g = 0; g < e.length; g++) {
383
- const b = e[g], w = b.layerId || "";
384
- f.has(w) || f.set(w, []), f.get(w).push(b);
385
- }
386
- const m = o.every((g) => g.visible !== !1), v = o.length > 0 && o.every((g) => r.has(g.id)), E = `
431
+ editingFeatureId: l,
432
+ searchQuery: c,
433
+ limiteFeicoesPorCamada: f = he,
434
+ mostrarBotaoColapsar: u = !1
435
+ } = e, p = (c || "").trim().toLowerCase(), d = /* @__PURE__ */ new Map();
436
+ for (let x = 0; x < a.length; x++) {
437
+ const w = a[x], $ = w.layerId || "";
438
+ d.has($) || d.set($, []), d.get($).push(w);
439
+ }
440
+ const m = o.every((x) => x.visible !== !1), h = o.length > 0 && o.every((x) => i.has(x.id)), k = `
387
441
  <div class="ui-tree-toolbar">
388
442
  <div class="ui-tree-title-group">
389
443
  <span class="ui-tree-section-title">CAMADAS</span>
@@ -391,804 +445,922 @@ function ze(a) {
391
445
  </div>
392
446
  <div class="ui-tree-actions">
393
447
  <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"}">
394
- ${m ? h.olhoAberto : h.olhoFechado}
448
+ ${m ? g.olhoAberto : g.olhoFechado}
395
449
  </button>
396
- <button id="btn-toggle-all-expand" class="ui-tree-action-btn" aria-label="${v ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}" title="${v ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}">
397
- <span class="ui-chevron-icon ${v ? "open" : ""}">${h.chevronDir}</span>
450
+ <button id="btn-toggle-all-expand" class="ui-tree-action-btn" aria-label="${h ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}" title="${h ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}">
451
+ <span class="ui-chevron-icon ${h ? "open" : ""}">${g.chevronDir}</span>
452
+ </button>
453
+ <button id="btn-add-group" class="ui-tree-btn-group" title="Criar grupo / pasta de camadas" aria-label="Criar grupo de camadas">
454
+ ${g.moverPasta} Grupo
398
455
  </button>
399
456
  <button id="btn-add-layer" class="ui-tree-btn-new" title="Adicionar nova camada vetorial">
400
- ${h.mais} Camada
457
+ ${g.mais} Camada
401
458
  </button>
402
- ${p ? `<button id="btn-colapsar" class="ui-camadas-btn-colapsar" title="Recolher painel" aria-label="Recolher painel">${h.recolherPainel}</button>` : ""}
459
+ ${u ? `<button id="btn-colapsar" class="ui-camadas-btn-colapsar" title="Recolher painel" aria-label="Recolher painel">${g.recolherPainel}</button>` : ""}
403
460
  </div>
404
461
  </div>
405
462
 
406
463
  <div class="ui-tree-search-wrapper">
407
- <span class="ui-tree-search-icon">${h.busca}</span>
408
- <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="${k(
409
- l
464
+ <span class="ui-tree-search-icon">${g.busca}</span>
465
+ <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="${L(
466
+ c
410
467
  )}" />
411
- ${l ? `<button class="ui-tree-search-clear" id="btn-clear-layer-search" title="Limpar busca" aria-label="Limpar busca">${h.fechar}</button>` : ""}
468
+ ${c ? `<button class="ui-tree-search-clear" id="btn-clear-layer-search" title="Limpar busca" aria-label="Limpar busca">${g.fechar}</button>` : ""}
412
469
  </div>
413
- `, y = o.map((g) => {
414
- const b = k(g.id), w = k(g.name || "Camada"), L = P(g.color, "#00E08A"), q = g.visible !== !1, z = g.locked === !0, D = d ? !0 : r.has(g.id), R = s === g.id, J = t === g.id, I = Y(f.get(g.id) || [], d), W = I.length > 0 && I.every((A) => i.has(A.id)), de = !W && I.some((A) => i.has(A.id)), ue = I.slice(0, u), pe = I.length > u, fe = ue.map((A) => {
415
- const C = k(A.id), Z = k(A.name || "Feição"), ee = P(A.color, L), T = A.visible !== !1, j = z, N = A.locked === !0 || j, ae = j ? "Bloqueada pela camada" : N ? "Desbloquear Feição" : "Bloquear Feição", H = i.has(A.id), te = A.status;
416
- let V = "";
417
- return te === "oficial" ? V = '<span class="ui-geom-tag oficial" title="Geometria Oficial">OFICIAL</span>' : te === "previa" && (V = '<span class="ui-geom-tag previa" title="Geometria Prévia">PRÉVIA</span>'), `
418
- <div class="ui-feat-row ${H ? "selected-row" : ""} ${T ? "" : "hidden-row"}" data-feat-row="${C}" data-feat-select="${C}" data-feat-layer="${b}" role="treeitem" aria-selected="${H}" tabindex="-1" draggable="true" title="Clique para selecionar | Arraste para reordenar">
419
- <div class="ui-col ui-col-eye" data-feat-eye="${C}" role="button" tabindex="0" aria-label="${T ? "Ocultar Feição" : "Exibir Feição"}" title="${T ? "Ocultar Feição" : "Exibir Feição"}">
420
- ${T ? h.olhoAberto : h.olhoFechado}
421
- </div>
422
-
423
- <div class="ui-col ui-col-lock ${N ? "" : "ui-lock-open"}" data-feat-lock="${C}" ${j ? 'data-locked-by-layer="true"' : ""} role="button" tabindex="0" aria-label="${ae}" title="${ae}">
424
- ${N ? h.cadeadoTrancado : h.cadeadoAberto}
425
- </div>
470
+ `, v = (x) => {
471
+ const w = x.camada, $ = x.depth, C = x.subcamadas, D = !!(w.isGroup || C.length > 0), A = L(w.id), te = L(w.name || (D ? "Novo Grupo" : "Camada")), B = G(w.color, "#00E08A"), j = w.visible !== !1, T = w.locked === !0, R = p ? !0 : i.has(w.id), V = s === w.id, re = t === w.id, S = ae(d.get(w.id) || [], p), ie = S.length > 0 && S.every((E) => r.has(E.id)), ve = !ie && S.some((E) => r.has(E.id)), be = S.slice(0, f), xe = S.length > f, ye = be.map((E) => {
472
+ const z = L(E.id), se = L(E.name || "Feição"), ne = G(E.color, B), N = E.visible !== !1, U = T, _ = E.locked === !0 || U, le = U ? "Bloqueada pela camada" : _ ? "Desbloquear Feição" : "Bloquear Feição", K = r.has(E.id), ce = E.status;
473
+ let Y = "";
474
+ return ce === "oficial" ? Y = '<span class="ui-geom-tag oficial" title="Geometria Oficial">OFICIAL</span>' : ce === "previa" && (Y = '<span class="ui-geom-tag previa" title="Geometria Prévia">PRÉVIA</span>'), `
475
+ <div class="ui-feat-row ${K ? "selected-row" : ""} ${N ? "" : "hidden-row"}" data-feat-row="${z}" data-feat-select="${z}" data-feat-layer="${A}" role="treeitem" aria-selected="${K}" tabindex="-1" draggable="true" title="Clique para selecionar | Arraste para reordenar">
476
+ <div class="ui-col ui-col-eye" data-feat-eye="${z}" role="button" tabindex="0" aria-label="${N ? "Ocultar Feição" : "Exibir Feição"}" title="${N ? "Ocultar Feição" : "Exibir Feição"}">
477
+ ${N ? g.olhoAberto : g.olhoFechado}
478
+ </div>
426
479
 
427
- <div class="ui-col ui-col-colorbar" style="background: ${ee};"></div>
428
- <div class="ui-col ui-col-branch"><span style="opacity: 0.35;">└─</span></div>
429
- <div class="ui-col ui-col-thumb">
430
- <div class="ui-thumb-box">${Me(A.type || A.geometryType, ee)}</div>
431
- </div>
480
+ <div class="ui-col ui-col-lock ${_ ? "" : "ui-lock-open"}" data-feat-lock="${z}" ${U ? 'data-locked-by-layer="true"' : ""} role="button" tabindex="0" aria-label="${le}" title="${le}">
481
+ ${_ ? g.cadeadoTrancado : g.cadeadoAberto}
482
+ </div>
432
483
 
433
- <div class="ui-col ui-col-name" data-feat-name-trigger="${C}" title="Duplo clique para renomear">
434
- ${c === A.id ? `<input type="text" class="ui-inline-rename-input" data-inline-feat-input="${C}" value="${Z}" />` : `<span class="ui-name-text">${Z}</span>${V}`}
435
- </div>
484
+ <div class="ui-col ui-col-colorbar" style="background: ${ne};"></div>
485
+ <div class="ui-col ui-col-branch"><span style="opacity: 0.35;">└─</span></div>
486
+ <div class="ui-col ui-col-thumb">
487
+ <div class="ui-thumb-box">${Re(E.type || E.geometryType, ne)}</div>
488
+ </div>
436
489
 
437
- <div class="ui-col ui-col-actions">
438
- <button class="ui-micro-btn" data-feat-fit="${C}" title="Enquadrar no mapa" aria-label="Enquadrar feição no mapa">${h.alvoEnquadrar}</button>
439
- </div>
490
+ <div class="ui-col ui-col-name" data-feat-name-trigger="${z}" title="Duplo clique para renomear">
491
+ ${l === E.id ? `<input type="text" class="ui-inline-rename-input" data-inline-feat-input="${z}" value="${se}" />` : `<span class="ui-name-text">${se}</span>${Y}`}
492
+ </div>
440
493
 
441
- <div class="ui-col ui-col-target" data-feat-target="${C}" role="button" tabindex="0" aria-label="Selecionar feição" title="Selecionar feição">
442
- <div class="ui-target-circle ${H ? "selected" : ""}"></div>
443
- </div>
494
+ <div class="ui-col ui-col-actions">
495
+ <button class="ui-micro-btn" data-feat-fit="${z}" title="Enquadrar no mapa" aria-label="Enquadrar feição no mapa">${g.alvoEnquadrar}</button>
444
496
  </div>
445
- `;
446
- }).join(""), me = pe ? `<div style="padding: 4px 10px; font-size: 10px; color: var(--ui-cor-texto-secundario, #888899); font-style: italic; background: rgba(0,0,0,0.2);">Exibindo ${u} de ${I.length} feições. Use a busca acima para filtrar.</div>` : "", X = g.opacity !== void 0 ? g.opacity : 1, he = Math.round(X * 100), ge = R ? `
447
- <div class="ui-layer-settings-drawer" id="settings-drawer-${b}" style="--drawer-cor-camada: ${L};">
448
- <div class="ui-drawer-header">
449
- <div class="ui-drawer-header-left">
450
- <span class="ui-drawer-icon">${h.engrenagem}</span>
451
- <span class="ui-drawer-title">Configurações da Camada</span>
497
+
498
+ <div class="ui-col ui-col-target" data-feat-target="${z}" role="button" tabindex="0" aria-label="Selecionar feição" title="Selecionar feição">
499
+ <div class="ui-target-circle ${K ? "selected" : ""}"></div>
452
500
  </div>
453
- <button type="button" class="ui-drawer-btn-fechar" data-layer-settings-close="${b}" title="Fechar configurações (Esc)" aria-label="Fechar configurações">
454
- ${h.fechar}
455
- </button>
456
501
  </div>
502
+ `;
503
+ }).join(""), we = xe ? `<div style="padding: 4px 10px; font-size: 10px; color: var(--ui-cor-texto-secundario, #888899); font-style: italic; background: rgba(0,0,0,0.2);">Exibindo ${f} de ${S.length} feições. Use a busca acima para filtrar.</div>` : "", oe = w.opacity !== void 0 ? w.opacity : 1, Ee = Math.round(oe * 100), Ae = o.filter((E) => E.id !== w.id).map(
504
+ (E) => `<option value="${L(E.id)}" ${w.parentId === E.id ? "selected" : ""}>${E.isGroup ? "📁 " : ""}${L(E.name)}</option>`
505
+ ).join(""), ke = V ? `
506
+ <div class="ui-layer-settings-drawer" id="settings-drawer-${A}" style="--drawer-cor-camada: ${B};">
507
+ <div class="ui-drawer-header">
508
+ <div class="ui-drawer-header-left">
509
+ <span class="ui-drawer-icon">${g.engrenagem}</span>
510
+ <span class="ui-drawer-title">Configurações da Camada</span>
511
+ </div>
512
+ <button type="button" class="ui-drawer-btn-fechar" data-layer-settings-close="${A}" title="Fechar configurações (Esc)" aria-label="Fechar configurações">
513
+ ${g.fechar}
514
+ </button>
515
+ </div>
457
516
 
458
- <div class="ui-drawer-body">
459
- <!-- Cor da Camada -->
460
- <div class="ui-drawer-row">
461
- <div class="ui-drawer-row-label">
462
- <span>Cor do Vetor</span>
463
- </div>
464
- <div class="ui-drawer-color-group">
465
- <label class="ui-drawer-color-pill" title="Clique para alterar a cor da camada">
466
- <span class="ui-drawer-color-sample" id="sample-color-${b}" style="background-color: ${L};"></span>
467
- <span class="ui-drawer-color-hex" id="hex-color-${b}">${L.toUpperCase()}</span>
468
- <input type="color" aria-label="Cor da camada" data-layer-color-picker="${b}" value="${ke(L, "#00e08a")}" class="ui-drawer-color-native" />
469
- </label>
470
- </div>
517
+ <div class="ui-drawer-body">
518
+ <!-- Cor da Camada -->
519
+ <div class="ui-drawer-row">
520
+ <div class="ui-drawer-row-label">
521
+ <span>Cor do Vetor</span>
471
522
  </div>
523
+ <div class="ui-drawer-color-group">
524
+ <label class="ui-drawer-color-pill" title="Clique para alterar a cor da camada">
525
+ <span class="ui-drawer-color-sample" id="sample-color-${A}" style="background-color: ${B};"></span>
526
+ <span class="ui-drawer-color-hex" id="hex-color-${A}">${B.toUpperCase()}</span>
527
+ <input type="color" aria-label="Cor da camada" data-layer-color-picker="${A}" value="${Be(B, "#00e08a")}" class="ui-drawer-color-native" />
528
+ </label>
529
+ </div>
530
+ </div>
472
531
 
473
- <!-- Opacidade da Camada -->
474
- <div class="ui-drawer-row">
475
- <div class="ui-drawer-row-label">
476
- <span>Opacidade</span>
477
- <span class="ui-drawer-badge" id="badge-op-${b}">${he}%</span>
478
- </div>
479
- <div class="ui-drawer-slider-container">
480
- <input type="range" aria-label="Opacidade da camada" min="0.05" max="1" step="0.05" value="${Number(X) || 0}" data-layer-opacity-slider="${b}" class="ui-drawer-slider" />
481
- </div>
532
+ <!-- Opacidade da Camada -->
533
+ <div class="ui-drawer-row">
534
+ <div class="ui-drawer-row-label">
535
+ <span>Opacidade</span>
536
+ <span class="ui-drawer-badge" id="badge-op-${A}">${Ee}%</span>
537
+ </div>
538
+ <div class="ui-drawer-slider-container">
539
+ <input type="range" aria-label="Opacidade da camada" min="0.05" max="1" step="0.05" value="${Number(oe) || 0}" data-layer-opacity-slider="${A}" class="ui-drawer-slider" />
482
540
  </div>
483
541
  </div>
484
542
 
485
- <div class="ui-drawer-footer">
486
- <div class="ui-drawer-meta-info">
487
- <span>${I.length} ${I.length === 1 ? "feição" : "feições"} nesta camada</span>
543
+ <!-- Hierarquia / Grupo Pai -->
544
+ <div class="ui-drawer-row">
545
+ <div class="ui-drawer-row-label">
546
+ <span>Pertence ao Grupo</span>
488
547
  </div>
489
- <div class="ui-drawer-actions">
490
- <button type="button" class="ui-drawer-btn-danger" data-delete-layer="${b}" title="Excluir esta camada e todas as suas feições">
491
- ${h.lixeira}
492
- <span class="ui-btn-label">Excluir Camada</span>
493
- </button>
548
+ <div class="ui-drawer-select-wrapper">
549
+ <select class="ui-drawer-select" data-layer-parent-select="${A}" aria-label="Grupo pai da camada">
550
+ <option value="" ${w.parentId ? "" : "selected"}>(Nenhum - Nível Principal)</option>
551
+ ${Ae}
552
+ </select>
494
553
  </div>
495
554
  </div>
496
555
  </div>
497
- ` : "";
556
+
557
+ <div class="ui-drawer-footer">
558
+ <div class="ui-drawer-meta-info">
559
+ <span>${C.length > 0 ? `${C.length} subcamadas · ` : ""}${S.length} ${S.length === 1 ? "feição" : "feições"}</span>
560
+ </div>
561
+ <div class="ui-drawer-actions">
562
+ <button type="button" class="ui-drawer-btn-sublayer" data-add-sublayer="${A}" title="Adicionar nova camada dentro desta">
563
+ ${g.mais} Subcamada
564
+ </button>
565
+ <button type="button" class="ui-drawer-btn-danger" data-delete-layer="${A}" title="Excluir esta camada e suas feições">
566
+ ${g.lixeira}
567
+ <span class="ui-btn-label">Excluir</span>
568
+ </button>
569
+ </div>
570
+ </div>
571
+ </div>
572
+ ` : "", Ie = C.map((E) => v(E)).join("");
498
573
  return `
499
- <div class="ui-layer-group" data-layer-id="${b}" role="treeitem" aria-expanded="${D}">
500
- <div class="ui-layer-row ${q ? "" : "hidden-layer"} ${J ? "active-drawing-layer" : ""}" data-layer-row="${b}" data-layer-id="${b}" tabindex="-1" draggable="true" style="--layer-active-color: ${L};">
501
- <div class="ui-col ui-col-drag" title="Arrastar para reordenar Z-Index">${h.dragHandle}</div>
574
+ <div class="ui-layer-group ${$ > 0 ? "is-sublayer-group" : ""}" data-layer-id="${A}" data-layer-depth="${$}" role="treeitem" aria-expanded="${R}">
575
+ <div class="ui-layer-row ${j ? "" : "hidden-layer"} ${re ? "active-drawing-layer" : ""} ${$ > 0 ? "is-sublayer" : ""} ${D ? "is-group-row" : ""}" data-layer-row="${A}" data-layer-id="${A}" tabindex="-1" draggable="true" style="--layer-depth: ${$}; --layer-active-color: ${B};">
576
+ <div class="ui-col ui-col-drag" title="Arrastar para reordenar Z-Index">${g.dragHandle}</div>
502
577
 
503
- <div class="ui-col ui-col-eye" data-layer-eye="${b}" role="button" tabindex="0" aria-label="${q ? "Ocultar Camada" : "Exibir Camada"}" title="${q ? "Ocultar Camada" : "Exibir Camada"}">
504
- ${q ? h.olhoAberto : h.olhoFechado}
505
- </div>
578
+ <div class="ui-col ui-col-eye" data-layer-eye="${A}" role="button" tabindex="0" aria-label="${j ? "Ocultar Camada" : "Exibir Camada"}" title="${j ? "Ocultar Camada" : "Exibir Camada"}">
579
+ ${j ? g.olhoAberto : g.olhoFechado}
580
+ </div>
506
581
 
507
- <div class="ui-col ui-col-lock ${z ? "" : "ui-lock-open"}" data-layer-lock="${b}" role="button" tabindex="0" aria-label="${z ? "Desbloquear Camada" : "Bloquear Camada"}" title="${z ? "Desbloquear Camada" : "Bloquear Camada"}">
508
- ${z ? h.cadeadoTrancado : h.cadeadoAberto}
509
- </div>
582
+ <div class="ui-col ui-col-lock ${T ? "" : "ui-lock-open"}" data-layer-lock="${A}" role="button" tabindex="0" aria-label="${T ? "Desbloquear Camada" : "Bloquear Camada"}" title="${T ? "Desbloquear Camada" : "Bloquear Camada"}">
583
+ ${T ? g.cadeadoTrancado : g.cadeadoAberto}
584
+ </div>
510
585
 
511
- <div class="ui-col ui-col-colorbar" style="background: ${L};"></div>
586
+ <div class="ui-col ui-col-colorbar" style="background: ${B};"></div>
512
587
 
513
- <div class="ui-col ui-col-chevron" data-layer-expand="${b}" role="button" tabindex="0" aria-label="${D ? "Recolher grupo" : "Expandir grupo"}">
514
- <span class="ui-chevron-icon ${D ? "open" : ""}">${h.chevronDir}</span>
515
- </div>
588
+ <div class="ui-col ui-col-chevron" data-layer-expand="${A}" role="button" tabindex="0" aria-label="${R ? "Recolher grupo" : "Expandir grupo"}">
589
+ <span class="ui-chevron-icon ${R ? "open" : ""}">${g.chevronDir}</span>
590
+ </div>
516
591
 
517
- <div class="ui-col ui-col-name" data-layer-name-trigger="${b}" title="Clique para ativar camada de desenho | Duplo clique para renomear">
518
- ${n === g.id ? `<input type="text" class="ui-inline-rename-input" data-inline-layer-input="${b}" value="${w}" />` : `<span class="ui-name-text">${w}</span>
519
- ${J ? '<span class="ui-active-badge" title="Camada ativa para novos desenhos">✓ Ativa</span>' : ""}
520
- <span class="ui-count-chip">${I.length}</span>`}
521
- </div>
592
+ <div class="ui-col ui-col-name" data-layer-name-trigger="${A}" title="Clique para ativar camada de desenho | Duplo clique para renomear">
593
+ ${n === w.id ? `<input type="text" class="ui-inline-rename-input" data-inline-layer-input="${A}" value="${te}" />` : `${D ? `<span class="ui-group-folder-icon" title="Grupo/Pasta">${g.moverPasta}</span>` : ""}
594
+ <span class="ui-name-text">${te}</span>
595
+ ${re ? '<span class="ui-active-badge" title="Camada ativa para novos desenhos">✓ Ativa</span>' : ""}
596
+ ${C.length > 0 ? `<span class="ui-group-badge" title="${C.length} subcamadas">${C.length} sub</span>` : ""}
597
+ ${S.length > 0 || !D ? `<span class="ui-count-chip">${S.length}</span>` : ""}`}
598
+ </div>
522
599
 
523
- <div class="ui-col ui-col-actions">
524
- <button class="ui-micro-btn" data-layer-fit="${b}" title="Enquadrar camada no mapa" aria-label="Enquadrar camada no mapa">${h.alvoEnquadrar}</button>
525
- <button class="ui-micro-btn ${R ? "active" : ""}" data-layer-settings="${b}" title="Ajustar cor, opacidade e excluir" aria-label="Configurações da camada" aria-expanded="${R}">${h.engrenagem}</button>
526
- </div>
600
+ <div class="ui-col ui-col-actions">
601
+ <button class="ui-micro-btn" data-layer-fit="${A}" title="Enquadrar camada no mapa" aria-label="Enquadrar camada no mapa">${g.alvoEnquadrar}</button>
602
+ <button class="ui-micro-btn ${V ? "active" : ""}" data-layer-settings="${A}" title="Ajustar cor, hierarquia, opacidade e excluir" aria-label="Configurações da camada" aria-expanded="${V}">${g.engrenagem}</button>
603
+ </div>
527
604
 
528
- <div class="ui-col ui-col-target" data-layer-target="${b}" role="button" tabindex="0" aria-label="Selecionar todas as feições deste grupo" title="Selecionar todas as feições deste grupo">
529
- <div class="ui-target-circle ${W ? "selected" : de ? "partial" : ""}"></div>
530
- </div>
605
+ <div class="ui-col ui-col-target" data-layer-target="${A}" role="button" tabindex="0" aria-label="Selecionar todas as feições deste grupo" title="Selecionar todas as feições deste grupo">
606
+ <div class="ui-target-circle ${ie ? "selected" : ve ? "partial" : ""}"></div>
531
607
  </div>
608
+ </div>
532
609
 
533
- ${ge}
610
+ ${ke}
534
611
 
535
- <div class="ui-children-container" role="group" style="display: ${D ? "block" : "none"};">
536
- ${fe}
537
- ${me}
538
- ${I.length === 0 ? `<div class="ui-empty-row"><span>${d ? "Nenhum item correspondente" : "Nenhum elemento neste grupo"}</span></div>` : ""}
539
- </div>
612
+ <div class="ui-children-container ${$ > 0 ? "is-subchildren" : ""}" role="group" style="display: ${R ? "block" : "none"};">
613
+ ${Ie}
614
+ ${ye}
615
+ ${we}
616
+ ${C.length === 0 && S.length === 0 ? `<div class="ui-empty-row"><span>${p ? "Nenhum item correspondente" : D ? "Grupo vazio (adicione subcamadas ou feições)" : "Nenhum elemento neste grupo"}</span></div>` : ""}
540
617
  </div>
541
- `;
542
- }).join("");
618
+ </div>
619
+ `;
620
+ }, I = Ne(o).map((x) => v(x)).join("");
543
621
  return `
544
- ${E}
622
+ ${k}
545
623
  <div class="ui-panel-box">
546
624
  <div class="ui-layer-tree" id="ui-layer-tree-mount" role="tree" aria-label="Camadas e feições" aria-multiselectable="true">
547
- ${y}
625
+ ${I}
548
626
  </div>
549
627
  </div>
550
628
  `;
551
629
  }
552
- class Fe {
553
- constructor(o, e) {
554
- x(this, "host");
555
- x(this, "shadow");
556
- this.host = o, this.shadow = e;
630
+ function Ge(e, o, a) {
631
+ let t = e.find((i) => i.id === o);
632
+ for (; t && t.parentId; ) {
633
+ if (t.parentId === a) return !0;
634
+ t = e.find((i) => i.id === (t == null ? void 0 : t.parentId));
635
+ }
636
+ return !1;
637
+ }
638
+ class Ve {
639
+ constructor(o, a) {
640
+ y(this, "host");
641
+ y(this, "shadow");
642
+ this.host = o, this.shadow = a;
557
643
  }
558
644
  bindAll() {
559
- this.bindInlineRename(), this.bindDragAndDrop();
645
+ this.bindInlineRename(), this.bindDragAndDrop(), this.bindTouchDragAndDrop();
560
646
  }
561
647
  bindInlineRename() {
562
648
  this.shadow.querySelectorAll("[data-layer-name-trigger]").forEach((o) => {
563
- o.addEventListener("dblclick", (e) => {
564
- e.stopPropagation();
649
+ o.addEventListener("dblclick", (a) => {
650
+ a.stopPropagation();
565
651
  const t = o.getAttribute("data-layer-name-trigger");
566
652
  if (!t) return;
567
653
  this.host.editingLayerId = t, this.host.solicitarRenderizacao();
568
- const r = S(
654
+ const i = M(
569
655
  this.shadow,
570
656
  "data-inline-layer-input",
571
657
  t
572
658
  );
573
- if (r) {
574
- r.focus(), r.select();
575
- let i = !1;
659
+ if (i) {
660
+ i.focus(), i.select();
661
+ let r = !1;
576
662
  const s = (n) => {
577
- var c, l;
578
- if (!i) {
579
- if (i = !0, this.host.editingLayerId = null, n) {
580
- const u = r.value.trim(), p = this.host.camadas.find((d) => d.id === t);
581
- u && p && p.name !== u && (p.name = u, (l = (c = this.host).salvarLembrancaEstado) == null || l.call(c), this.host.dispararEvento("ui-camada-renomeada", {
663
+ var l, c;
664
+ if (!r) {
665
+ if (r = !0, this.host.editingLayerId = null, n) {
666
+ const f = i.value.trim(), u = this.host.camadas.find((p) => p.id === t);
667
+ f && u && u.name !== f && (u.name = f, (c = (l = this.host).salvarLembrancaEstado) == null || c.call(l), this.host.dispararEvento("ui-camada-renomeada", {
582
668
  camadaId: t,
583
- novoNome: u,
584
- camada: p
669
+ novoNome: f,
670
+ camada: u
585
671
  }));
586
672
  }
587
673
  this.host.solicitarRenderizacao();
588
674
  }
589
675
  };
590
- r.addEventListener("keydown", (n) => {
676
+ i.addEventListener("keydown", (n) => {
591
677
  n.key === "Enter" ? (n.preventDefault(), s(!0)) : n.key === "Escape" && (n.preventDefault(), s(!1));
592
- }), r.addEventListener("blur", () => s(!0));
678
+ }), i.addEventListener("blur", () => s(!0));
593
679
  }
594
680
  });
595
681
  }), this.shadow.querySelectorAll("[data-feat-name-trigger]").forEach((o) => {
596
- o.addEventListener("dblclick", (e) => {
597
- e.stopPropagation();
682
+ o.addEventListener("dblclick", (a) => {
683
+ a.stopPropagation();
598
684
  const t = o.getAttribute("data-feat-name-trigger");
599
685
  if (!t) return;
600
686
  this.host.editingFeatureId = t, this.host.solicitarRenderizacao();
601
- const r = S(
687
+ const i = M(
602
688
  this.shadow,
603
689
  "data-inline-feat-input",
604
690
  t
605
691
  );
606
- if (r) {
607
- r.focus(), r.select();
608
- let i = !1;
692
+ if (i) {
693
+ i.focus(), i.select();
694
+ let r = !1;
609
695
  const s = (n) => {
610
- if (!i) {
611
- if (i = !0, this.host.editingFeatureId = null, n) {
612
- const c = r.value.trim(), l = this.host.feicoes.find((u) => u.id === t);
613
- c && l && l.name !== c && (l.name = c, this.host.dispararEvento("ui-feicao-renomeada", {
696
+ if (!r) {
697
+ if (r = !0, this.host.editingFeatureId = null, n) {
698
+ const l = i.value.trim(), c = this.host.feicoes.find((f) => f.id === t);
699
+ l && c && c.name !== l && (c.name = l, this.host.dispararEvento("ui-feicao-renomeada", {
614
700
  feicaoId: t,
615
- novoNome: c,
616
- feicao: l
701
+ novoNome: l,
702
+ feicao: c
617
703
  }));
618
704
  }
619
705
  this.host.solicitarRenderizacao();
620
706
  }
621
707
  };
622
- r.addEventListener("keydown", (n) => {
708
+ i.addEventListener("keydown", (n) => {
623
709
  n.key === "Enter" ? (n.preventDefault(), s(!0)) : n.key === "Escape" && (n.preventDefault(), s(!1));
624
- }), r.addEventListener("blur", () => s(!0));
710
+ }), i.addEventListener("blur", () => s(!0));
625
711
  }
626
712
  });
627
713
  });
628
714
  }
629
715
  bindDragAndDrop() {
630
- let o = null, e = null, t = null;
631
- const r = () => {
632
- this.shadow.querySelectorAll(".ui-layer-row, .ui-feat-row, .ui-layer-group").forEach((i) => {
633
- i.classList.remove("dragging", "drop-above", "drop-below", "drop-into");
716
+ let o = null, a = null, t = null;
717
+ const i = () => {
718
+ this.shadow.querySelectorAll(".ui-layer-row, .ui-feat-row, .ui-layer-group").forEach((r) => {
719
+ r.classList.remove("dragging", "drop-above", "drop-below", "drop-into");
634
720
  });
635
721
  };
636
- this.shadow.querySelectorAll('.ui-layer-row[draggable="true"]').forEach((i) => {
637
- const s = i.getAttribute("data-layer-id");
638
- s && (i.addEventListener("dragstart", (n) => {
639
- const c = n;
640
- if (c.target.closest("input, button, select") || this.host.editingLayerId || this.host.editingFeatureId) {
641
- c.preventDefault();
722
+ this.shadow.querySelectorAll('.ui-layer-row[draggable="true"]').forEach((r) => {
723
+ const s = r.getAttribute("data-layer-id");
724
+ s && (r.addEventListener("dragstart", (n) => {
725
+ const l = n;
726
+ if (l.target.closest("input, button, select") || this.host.editingLayerId || this.host.editingFeatureId) {
727
+ l.preventDefault();
642
728
  return;
643
729
  }
644
- o = "layer", e = s, c.dataTransfer && (c.dataTransfer.setData("text/plain", JSON.stringify({ type: "layer", id: s })), c.dataTransfer.effectAllowed = "move"), i.classList.add("dragging");
645
- }), i.addEventListener("dragover", (n) => {
646
- const c = n;
647
- if (c.preventDefault(), c.stopPropagation(), c.dataTransfer && (c.dataTransfer.dropEffect = "move"), o === "layer") {
648
- if (e === s) return;
649
- const l = i.getBoundingClientRect(), u = c.clientY - l.top < l.height / 2;
650
- i.classList.toggle("drop-above", u), i.classList.toggle("drop-below", !u);
651
- } else o === "feature" && i.classList.add("drop-into");
652
- }), i.addEventListener("dragleave", (n) => {
653
- const c = n.relatedTarget;
654
- c && i.contains(c) || i.classList.remove("drop-above", "drop-below", "drop-into");
655
- }), i.addEventListener("drop", (n) => {
730
+ o = "layer", a = s, l.dataTransfer && (l.dataTransfer.setData("text/plain", JSON.stringify({ type: "layer", id: s })), l.dataTransfer.effectAllowed = "move"), r.classList.add("dragging");
731
+ }), r.addEventListener("dragover", (n) => {
732
+ const l = n;
733
+ if (l.preventDefault(), l.stopPropagation(), l.dataTransfer && (l.dataTransfer.dropEffect = "move"), o === "layer") {
734
+ if (a === s) return;
735
+ const c = r.getBoundingClientRect(), f = (l.clientY - c.top) / c.height;
736
+ f < 0.25 ? (r.classList.add("drop-above"), r.classList.remove("drop-below", "drop-into")) : f > 0.75 ? (r.classList.add("drop-below"), r.classList.remove("drop-above", "drop-into")) : (r.classList.add("drop-into"), r.classList.remove("drop-above", "drop-below"));
737
+ } else o === "feature" && r.classList.add("drop-into");
738
+ }), r.addEventListener("dragleave", (n) => {
739
+ const l = n.relatedTarget;
740
+ l && r.contains(l) || r.classList.remove("drop-above", "drop-below", "drop-into");
741
+ }), r.addEventListener("drop", (n) => {
656
742
  var u, p;
657
- const c = n;
658
- c.preventDefault(), c.stopPropagation();
659
- const l = i.classList.contains("drop-above");
660
- if (r(), o === "layer") {
661
- if (!e || e === s) return;
662
- const d = this.host.camadas.findIndex((v) => v.id === e);
663
- if (d === -1) return;
664
- const [f] = this.host.camadas.splice(d, 1), m = this.host.camadas.findIndex((v) => v.id === s);
665
- m === -1 ? this.host.camadas.push(f) : this.host.camadas.splice(l ? m : m + 1, 0, f), (p = (u = this.host).salvarLembrancaEstado) == null || p.call(u), this.host.dispararEvento("ui-camadas-reordenadas", {
743
+ const l = n;
744
+ l.preventDefault(), l.stopPropagation();
745
+ const c = r.classList.contains("drop-above"), f = r.classList.contains("drop-into");
746
+ if (i(), o === "layer") {
747
+ if (!a || a === s) return;
748
+ const d = this.host.camadas.find((h) => h.id === a), m = this.host.camadas.find((h) => h.id === s);
749
+ if (!d || !m) return;
750
+ if (f)
751
+ Ge(this.host.camadas, m.id, d.id) || (d.parentId = m.id, "expandedLayers" in this.host && this.host.expandedLayers && this.host.expandedLayers.add(m.id), this.host.dispararEvento("ui-camada-mover-hierarquia", {
752
+ camadaId: d.id,
753
+ novoParentId: m.id,
754
+ camada: d
755
+ }));
756
+ else {
757
+ const h = this.host.camadas.findIndex((v) => v.id === a);
758
+ if (h === -1) return;
759
+ this.host.camadas.splice(h, 1);
760
+ const k = this.host.camadas.findIndex((v) => v.id === s);
761
+ k === -1 ? this.host.camadas.push(d) : this.host.camadas.splice(c ? k : k + 1, 0, d), d.parentId = m.parentId ?? null;
762
+ }
763
+ (p = (u = this.host).salvarLembrancaEstado) == null || p.call(u), this.host.dispararEvento("ui-camadas-reordenadas", {
666
764
  camadas: [...this.host.camadas]
667
765
  }), this.host.solicitarRenderizacao();
668
766
  } else if (o === "feature") {
669
767
  if (!t) return;
670
- const d = this.host.feicoes.find((m) => m.id === t), f = this.host.camadas.find((m) => m.id === s);
671
- if (d && f && d.layerId !== s) {
672
- const m = d.layerId;
768
+ const d = this.host.feicoes.find((h) => h.id === t), m = this.host.camadas.find((h) => h.id === s);
769
+ if (d && m && d.layerId !== s) {
770
+ const h = d.layerId;
673
771
  d.layerId = s, this.host.dispararEvento("ui-feicao-movida", {
674
772
  feicaoId: d.id,
675
- camadaOrigemId: m,
773
+ camadaOrigemId: h,
676
774
  camadaDestinoId: s,
677
775
  feicao: d
678
776
  }), this.host.solicitarRenderizacao();
679
777
  }
680
778
  }
681
- }), i.addEventListener("dragend", () => {
682
- o = null, e = null, t = null, r();
779
+ }), r.addEventListener("dragend", () => {
780
+ o = null, a = null, t = null, i();
683
781
  }));
684
- }), this.shadow.querySelectorAll('.ui-feat-row[draggable="true"]').forEach((i) => {
685
- const s = i.getAttribute("data-feat-row"), n = i.getAttribute("data-feat-layer");
686
- s && (i.addEventListener("dragstart", (c) => {
687
- const l = c;
688
- if (l.target.closest("input, button, select") || this.host.editingLayerId || this.host.editingFeatureId) {
689
- l.preventDefault();
782
+ }), this.shadow.querySelectorAll('.ui-feat-row[draggable="true"]').forEach((r) => {
783
+ const s = r.getAttribute("data-feat-row"), n = r.getAttribute("data-feat-layer");
784
+ s && (r.addEventListener("dragstart", (l) => {
785
+ const c = l;
786
+ if (c.target.closest("input, button, select") || this.host.editingLayerId || this.host.editingFeatureId) {
787
+ c.preventDefault();
690
788
  return;
691
789
  }
692
- l.stopPropagation(), o = "feature", t = s, e = n, l.dataTransfer && (l.dataTransfer.setData(
790
+ c.stopPropagation(), o = "feature", t = s, a = n, c.dataTransfer && (c.dataTransfer.setData(
693
791
  "text/plain",
694
792
  JSON.stringify({ type: "feature", id: s, layerId: n })
695
- ), l.dataTransfer.effectAllowed = "move"), i.classList.add("dragging");
696
- }), i.addEventListener("dragover", (c) => {
697
- const l = c;
793
+ ), c.dataTransfer.effectAllowed = "move"), r.classList.add("dragging");
794
+ }), r.addEventListener("dragover", (l) => {
795
+ const c = l;
698
796
  if (o !== "feature" || t === s) return;
699
- l.preventDefault(), l.stopPropagation(), l.dataTransfer && (l.dataTransfer.dropEffect = "move");
700
- const u = i.getBoundingClientRect(), p = l.clientY - u.top < u.height / 2;
701
- i.classList.toggle("drop-above", p), i.classList.toggle("drop-below", !p);
702
- }), i.addEventListener("dragleave", (c) => {
703
- const l = c.relatedTarget;
704
- l && i.contains(l) || i.classList.remove("drop-above", "drop-below");
705
- }), i.addEventListener("drop", (c) => {
706
- const l = c;
797
+ c.preventDefault(), c.stopPropagation(), c.dataTransfer && (c.dataTransfer.dropEffect = "move");
798
+ const f = r.getBoundingClientRect(), u = c.clientY - f.top < f.height / 2;
799
+ r.classList.toggle("drop-above", u), r.classList.toggle("drop-below", !u);
800
+ }), r.addEventListener("dragleave", (l) => {
801
+ const c = l.relatedTarget;
802
+ c && r.contains(c) || r.classList.remove("drop-above", "drop-below");
803
+ }), r.addEventListener("drop", (l) => {
804
+ const c = l;
707
805
  if (o !== "feature" || !t || t === s) return;
708
- l.preventDefault(), l.stopPropagation();
709
- const u = i.classList.contains("drop-above");
710
- r();
711
- const p = this.host.feicoes.findIndex((g) => g.id === t);
712
- if (p === -1) return;
713
- const d = this.host.feicoes.find((g) => g.id === s);
714
- if (!d) return;
715
- const [f] = this.host.feicoes.splice(p, 1), m = f.layerId, v = d.layerId, E = m !== v;
716
- E && (f.layerId = v);
717
- const y = this.host.feicoes.findIndex((g) => g.id === s);
718
- y === -1 ? this.host.feicoes.push(f) : this.host.feicoes.splice(u ? y : y + 1, 0, f), E && this.host.dispararEvento("ui-feicao-movida", {
719
- feicaoId: f.id,
806
+ c.preventDefault(), c.stopPropagation();
807
+ const f = r.classList.contains("drop-above");
808
+ i();
809
+ const u = this.host.feicoes.findIndex((b) => b.id === t);
810
+ if (u === -1) return;
811
+ const p = this.host.feicoes.find((b) => b.id === s);
812
+ if (!p) return;
813
+ const [d] = this.host.feicoes.splice(u, 1), m = d.layerId, h = p.layerId, k = m !== h;
814
+ k && (d.layerId = h);
815
+ const v = this.host.feicoes.findIndex((b) => b.id === s);
816
+ v === -1 ? this.host.feicoes.push(d) : this.host.feicoes.splice(f ? v : v + 1, 0, d), k && this.host.dispararEvento("ui-feicao-movida", {
817
+ feicaoId: d.id,
720
818
  camadaOrigemId: m,
721
- camadaDestinoId: v,
722
- feicao: f
819
+ camadaDestinoId: h,
820
+ feicao: d
723
821
  }), this.host.dispararEvento("ui-feicoes-reordenadas", {
724
822
  feicoes: [...this.host.feicoes]
725
823
  }), this.host.solicitarRenderizacao();
726
- }), i.addEventListener("dragend", (c) => {
727
- c.stopPropagation(), o = null, t = null, e = null, r();
824
+ }), r.addEventListener("dragend", (l) => {
825
+ l.stopPropagation(), o = null, t = null, a = null, i();
728
826
  }));
729
827
  });
730
828
  }
829
+ /**
830
+ * Suporte a arraste por toque e ponteiro no handle (.ui-col-drag) para tablets e mobile
831
+ */
832
+ bindTouchDragAndDrop() {
833
+ this.shadow.querySelectorAll(".ui-layer-row .ui-col-drag").forEach((o) => {
834
+ const a = o.closest(".ui-layer-row");
835
+ if (!a) return;
836
+ const t = a.getAttribute("data-layer-id");
837
+ t && o.addEventListener("pointerdown", (i) => {
838
+ const r = i;
839
+ if (r.pointerType === "mouse" && r.button !== 0 || this.host.editingLayerId || this.host.editingFeatureId) return;
840
+ let s = null, n = !1;
841
+ const l = t, c = () => {
842
+ this.shadow.querySelectorAll(".ui-layer-row, .ui-feat-row, .ui-layer-group").forEach((p) => p.classList.remove("dragging", "drop-above", "drop-below"));
843
+ }, f = (p) => {
844
+ p.preventDefault(), a.classList.add("dragging");
845
+ const d = this.shadow.elementFromPoint(p.clientX, p.clientY), m = d ? d.closest(".ui-layer-row") : null;
846
+ if (s && s !== m && s.classList.remove("drop-above", "drop-below"), m && m !== a) {
847
+ s = m;
848
+ const h = m.getBoundingClientRect();
849
+ n = p.clientY - h.top < h.height / 2, m.classList.toggle("drop-above", n), m.classList.toggle("drop-below", !n);
850
+ } else
851
+ s = null;
852
+ }, u = () => {
853
+ var p, d;
854
+ if (window.removeEventListener("pointermove", f), window.removeEventListener("pointerup", u), window.removeEventListener("pointercancel", u), s) {
855
+ const m = s.getAttribute("data-layer-id");
856
+ if (c(), m && l && m !== l) {
857
+ const h = this.host.camadas.findIndex((k) => k.id === l);
858
+ if (h !== -1) {
859
+ const [k] = this.host.camadas.splice(h, 1), v = this.host.camadas.findIndex((b) => b.id === m);
860
+ v === -1 ? this.host.camadas.push(k) : this.host.camadas.splice(n ? v : v + 1, 0, k), (d = (p = this.host).salvarLembrancaEstado) == null || d.call(p), this.host.dispararEvento("ui-camadas-reordenadas", {
861
+ camadas: [...this.host.camadas]
862
+ }), this.host.solicitarRenderizacao();
863
+ }
864
+ }
865
+ } else
866
+ c();
867
+ };
868
+ window.addEventListener("pointermove", f, { passive: !1 }), window.addEventListener("pointerup", u), window.addEventListener("pointercancel", u);
869
+ });
870
+ });
871
+ }
731
872
  }
732
- const Be = "ui_camadas_estado_";
733
- function qe(a, o) {
734
- const e = (a || o || "default").trim();
735
- return `${Be}${e}`;
873
+ const Ue = "ui_camadas_estado_";
874
+ function _e(e, o) {
875
+ const a = (e || o || "default").trim();
876
+ return `${Ue}${a}`;
736
877
  }
737
- function _(a) {
878
+ function W(e) {
738
879
  if (typeof window > "u" || typeof localStorage > "u")
739
880
  return null;
740
881
  try {
741
- const o = localStorage.getItem(a);
882
+ const o = localStorage.getItem(e);
742
883
  if (!o) return null;
743
- const e = JSON.parse(o);
744
- if (e && typeof e == "object")
745
- return e;
884
+ const a = JSON.parse(o);
885
+ if (a && typeof a == "object")
886
+ return a;
746
887
  } catch (o) {
747
- console.warn(`[UI-Camadas] Não foi possível carregar o estado persistido (${a}):`, o);
888
+ console.warn(`[UI-Camadas] Não foi possível carregar o estado persistido (${e}):`, o);
748
889
  }
749
890
  return null;
750
891
  }
751
- function De(a, o) {
892
+ function Ke(e, o) {
752
893
  if (!(typeof window > "u" || typeof localStorage > "u"))
753
894
  try {
754
- localStorage.setItem(a, JSON.stringify(o));
755
- } catch (e) {
756
- console.warn(`[UI-Camadas] Não foi possível salvar o estado persistido (${a}):`, e);
895
+ localStorage.setItem(e, JSON.stringify(o));
896
+ } catch (a) {
897
+ console.warn(`[UI-Camadas] Não foi possível salvar o estado persistido (${e}):`, a);
757
898
  }
758
899
  }
759
- function Te(a) {
900
+ function Ye(e) {
760
901
  if (!(typeof window > "u" || typeof localStorage > "u"))
761
902
  try {
762
- localStorage.removeItem(a);
903
+ localStorage.removeItem(e);
763
904
  } catch {
764
905
  }
765
906
  }
766
- function K(a) {
907
+ function Z(e) {
767
908
  return {
768
- name: a.name,
769
- visible: a.visible !== !1,
770
- locked: !!a.locked,
771
- opacity: typeof a.opacity == "number" ? a.opacity : 1,
772
- color: a.color || "#00E08A"
909
+ name: e.name,
910
+ visible: e.visible !== !1,
911
+ locked: !!e.locked,
912
+ opacity: typeof e.opacity == "number" ? e.opacity : 1,
913
+ color: e.color || "#00E08A",
914
+ parentId: e.parentId !== void 0 ? e.parentId : null
773
915
  };
774
916
  }
775
- function Oe(a, o, e, t) {
776
- if (!Array.isArray(a)) return;
777
- const r = (o == null ? void 0 : o.camadasOverrides) || {}, i = new Set((o == null ? void 0 : o.expandedLayerIds) || []), s = new Set((o == null ? void 0 : o.collapsedLayerIds) || []), n = i.size > 0 || s.size > 0;
778
- for (let p = 0; p < a.length; p++) {
779
- const d = a[p], f = r[d.id];
780
- if (t == null || t.set(d.id, K(d)), f) {
781
- const m = f.origem, v = (E) => {
782
- var g;
783
- const y = (g = t == null ? void 0 : t.get(d.id)) == null ? void 0 : g[E];
784
- return m !== void 0 && m[E] !== y;
917
+ function Qe(e, o, a, t) {
918
+ if (!Array.isArray(e)) return;
919
+ const i = (o == null ? void 0 : o.camadasOverrides) || {}, r = new Set((o == null ? void 0 : o.expandedLayerIds) || []), s = new Set((o == null ? void 0 : o.collapsedLayerIds) || []), n = r.size > 0 || s.size > 0;
920
+ for (let u = 0; u < e.length; u++) {
921
+ const p = e[u], d = i[p.id];
922
+ if (t == null || t.set(p.id, Z(p)), d) {
923
+ const m = d.origem, h = (k) => {
924
+ var b;
925
+ const v = (b = t == null ? void 0 : t.get(p.id)) == null ? void 0 : b[k];
926
+ return m !== void 0 && m[k] !== v;
785
927
  };
786
- typeof f.name == "string" && f.name.trim() && !v("name") && (d.name = f.name), typeof f.visible == "boolean" && !v("visible") && (d.visible = f.visible), typeof f.locked == "boolean" && !v("locked") && (d.locked = f.locked), typeof f.opacity == "number" && !v("opacity") && (d.opacity = f.opacity), typeof f.color == "string" && !v("color") && (d.color = f.color);
928
+ typeof d.name == "string" && d.name.trim() && !h("name") && (p.name = d.name), typeof d.visible == "boolean" && !h("visible") && (p.visible = d.visible), typeof d.locked == "boolean" && !h("locked") && (p.locked = d.locked), typeof d.opacity == "number" && !h("opacity") && (p.opacity = d.opacity), typeof d.color == "string" && !h("color") && (p.color = d.color), d.parentId !== void 0 && !h("parentId") && (p.parentId = d.parentId);
787
929
  }
788
- n ? i.has(d.id) ? e.add(d.id) : s.has(d.id) ? e.delete(d.id) : e.add(d.id) : e.add(d.id);
930
+ n ? r.has(p.id) ? a.add(p.id) : s.has(p.id) ? a.delete(p.id) : a.add(p.id) : a.add(p.id);
789
931
  }
790
- const c = new Set(a.map((p) => p.id)), l = o == null ? void 0 : o.ordemOrigemIds;
791
- if (!(Array.isArray(l) && (() => {
792
- const p = new Set(l), d = (f) => f.filter((m) => c.has(m) && p.has(m)).join("|");
793
- return d(l) !== d(a.map((f) => f.id));
932
+ const l = new Set(e.map((u) => u.id)), c = o == null ? void 0 : o.ordemOrigemIds;
933
+ if (!(Array.isArray(c) && (() => {
934
+ const u = new Set(c), p = (d) => d.filter((m) => l.has(m) && u.has(m)).join("|");
935
+ return p(c) !== p(e.map((d) => d.id));
794
936
  })()) && Array.isArray(o == null ? void 0 : o.ordemCamadasIds) && o.ordemCamadasIds.length > 0) {
795
- const p = /* @__PURE__ */ new Map();
796
- o.ordemCamadasIds.forEach((d, f) => p.set(d, f)), a.sort((d, f) => {
797
- const m = p.has(d.id) ? p.get(d.id) : 9999, v = p.has(f.id) ? p.get(f.id) : 9999;
798
- return m - v;
937
+ const u = /* @__PURE__ */ new Map();
938
+ o.ordemCamadasIds.forEach((p, d) => u.set(p, d)), e.sort((p, d) => {
939
+ const m = u.has(p.id) ? u.get(p.id) : 9999, h = u.has(d.id) ? u.get(d.id) : 9999;
940
+ return m - h;
799
941
  });
800
942
  }
801
943
  }
802
- function Pe(a) {
803
- const { estadoAnterior: o, camadas: e, expandedLayers: t } = a;
804
- let r = (o == null ? void 0 : o.expandedLayerIds) || [], i = (o == null ? void 0 : o.collapsedLayerIds) || [], s = (o == null ? void 0 : o.ordemCamadasIds) || [], n = o == null ? void 0 : o.ordemOrigemIds;
805
- const c = {
944
+ function Je(e) {
945
+ const { estadoAnterior: o, camadas: a, expandedLayers: t } = e;
946
+ let i = (o == null ? void 0 : o.expandedLayerIds) || [], r = (o == null ? void 0 : o.collapsedLayerIds) || [], s = (o == null ? void 0 : o.ordemCamadasIds) || [], n = o == null ? void 0 : o.ordemOrigemIds;
947
+ const l = {
806
948
  ...(o == null ? void 0 : o.camadasOverrides) || {}
807
949
  };
808
- e.length > 0 && (r = [], i = [], s = e.map((l) => l.id), n = a.origensCamadas ? [...a.origensCamadas.keys()] : s, e.forEach((l) => {
809
- var u, p;
810
- t.has(l.id) ? r.push(l.id) : i.push(l.id), c[l.id] = {
811
- name: l.name,
812
- visible: l.visible !== !1,
813
- locked: !!l.locked,
814
- opacity: typeof l.opacity == "number" ? l.opacity : 1,
815
- color: l.color || "#00E08A",
816
- origem: ((u = a.origensCamadas) == null ? void 0 : u.get(l.id)) ?? ((p = c[l.id]) == null ? void 0 : p.origem)
950
+ a.length > 0 && (i = [], r = [], s = a.map((c) => c.id), n = e.origensCamadas ? [...e.origensCamadas.keys()] : s, a.forEach((c) => {
951
+ var f, u;
952
+ t.has(c.id) ? i.push(c.id) : r.push(c.id), l[c.id] = {
953
+ name: c.name,
954
+ visible: c.visible !== !1,
955
+ locked: !!c.locked,
956
+ opacity: typeof c.opacity == "number" ? c.opacity : 1,
957
+ color: c.color || "#00E08A",
958
+ origem: ((f = e.origensCamadas) == null ? void 0 : f.get(c.id)) ?? ((u = l[c.id]) == null ? void 0 : u.origem)
817
959
  };
818
960
  }));
819
- for (const l of a.camadasRemovidas ?? []) delete c[l];
961
+ for (const c of e.camadasRemovidas ?? []) delete l[c];
820
962
  return {
821
963
  versao: 1,
822
- expandedLayerIds: r,
823
- collapsedLayerIds: i,
824
- camadaAtivaId: a.camadaAtivaId,
825
- painelColapsado: a.painelColapsado,
964
+ expandedLayerIds: i,
965
+ collapsedLayerIds: r,
966
+ camadaAtivaId: e.camadaAtivaId,
967
+ painelColapsado: e.painelColapsado,
826
968
  ordemCamadasIds: s,
827
969
  ordemOrigemIds: n,
828
- mapaBaseAtivo: a.mapaBaseAtivo,
829
- densidade: a.densidade,
830
- altura: a.altura,
831
- camadasOverrides: c,
970
+ mapaBaseAtivo: e.mapaBaseAtivo,
971
+ densidade: e.densidade,
972
+ altura: e.altura,
973
+ camadasOverrides: l,
832
974
  ultimaAtualizacao: Date.now()
833
975
  };
834
976
  }
835
- const Re = ':host{display:flex;flex-direction:column;box-sizing:border-box;font-family:inherit;font-size:11px;color:var(--ui-cor-texto, #e1e1e6);-webkit-user-select:none;user-select:none;width:100%;height:var(--ui-camadas-altura, 100%);min-height:var(--ui-camadas-min-altura, 140px);position:relative;--camada-linha-altura: 25px;--camada-thumb-tamanho: 15px;--camada-transicao: .16s cubic-bezier(.16, 1, .3, 1)}:host([densidade="compacto"]){--camada-linha-altura: 22px;--camada-thumb-tamanho: 13px;font-size:10px}:host([flutuante]){position:absolute;top:10px;right:10px;bottom:46px;z-index:var(--ui-z-workspace-hud, 500);width:auto;height:var(--ui-camadas-altura, auto)}*,*:before,*:after{box-sizing:border-box}:host(:not([flutuante])) .ui-camadas-container{max-width:100%;min-width:0;border:none;box-shadow:none;border-radius:0;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none}.ui-camadas-container{display:flex;flex-direction:column;flex:1 1 auto;height:100%;min-height:0;width:100%;max-width:380px;min-width:270px;background:var(--ui-cor-superficie, #141417);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));border-radius:var(--ui-raio-borda, 8px);box-shadow:var(--ui-sombra-lg, 0 10px 30px -4px rgba(0, 0, 0, .5)),0 0 0 1px color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 5%,transparent);overflow:hidden;position:relative;transition:transform .24s cubic-bezier(.16,1,.3,1),opacity .2s ease;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}:host([colapsado]) .ui-camadas-container{transform:translate(calc(100% + 24px));opacity:0;pointer-events:none}.ui-camadas-toggle-flutuante{display:none;position:absolute;top:10px;right:10px;z-index:calc(var(--ui-z-workspace-hud, 500) - 1);background:var(--ui-cor-superficie, #141417);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .18));border-radius:var(--ui-raio-borda, 6px);color:var(--ui-cor-texto, #ffffff);width:34px;height:34px;cursor:pointer;align-items:center;justify-content:center;box-shadow:var(--ui-sombra-md, 0 8px 20px rgba(0, 0, 0, .45));transition:all var(--camada-transicao)}:host([colapsado][flutuante]) .ui-camadas-toggle-flutuante{display:flex}.ui-camadas-toggle-flutuante:hover{border-color:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-primaria, #00E08A);transform:scale(1.08);box-shadow:0 0 14px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-camadas-header{height:32px;min-height:32px;max-height:32px;display:flex;align-items:center;justify-content:space-between;padding:0 5px;border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));background:var(--ui-cor-fundo-elevado, rgba(0, 0, 0, .28));gap:4px}.ui-camadas-tabs{display:flex;gap:3px;flex:1}.ui-camadas-tab-btn{flex:1;background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);height:24px;padding:0 6px;font-size:11px;font-weight:500;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:5px;white-space:nowrap;transition:all var(--camada-transicao)}.ui-camadas-tab-btn:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .07))}.ui-camadas-tab-btn.active{color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 25%,transparent);font-weight:600}.ui-camadas-btn-colapsar{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:22px;height:22px;cursor:pointer;border-radius:var(--ui-raio-sm, 4px);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all var(--camada-transicao)}.ui-camadas-btn-colapsar:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .09))}.ui-camadas-corpo{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding:6px 6px 4px;display:flex;flex-direction:column;gap:6px;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 16%,transparent) transparent}.ui-camadas-corpo::-webkit-scrollbar{width:4px}.ui-camadas-corpo::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 18%,transparent);border-radius:var(--ui-raio-sm, 4px)}.ui-camadas-corpo::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 32%,transparent)}.ui-tree-toolbar{display:flex;align-items:center;justify-content:space-between;padding:1px 2px 3px;border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .06))}.ui-tree-title-group{display:flex;align-items:center;gap:5px}.ui-tree-section-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-cor-texto-secundario, #888899)}.ui-tree-count-badge{font-size:9px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent);color:var(--ui-cor-texto-secundario, #888899);padding:1px 5px;border-radius:8px;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent)}.ui-tree-actions{display:flex;align-items:center;gap:3px}.ui-tree-action-btn{background:transparent;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));color:var(--ui-cor-texto-secundario, #888899);border-radius:var(--ui-raio-sm, 4px);width:22px;height:22px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-tree-action-btn:hover{color:var(--ui-cor-texto, #ffffff);border-color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .09))}.ui-tree-btn-new{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);border:1px solid color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent);color:var(--ui-cor-primaria, #00E08A);border-radius:var(--ui-raio-sm, 4px);height:22px;padding:0 8px;font-size:10px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-tree-btn-new:hover{background:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-texto-sobre-primaria, #000000);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-tree-search-wrapper{position:relative;display:flex;align-items:center;margin:1px 0}.ui-tree-search-icon{position:absolute;left:8px;color:var(--ui-cor-texto-secundario, #888899);pointer-events:none;display:flex;align-items:center}.ui-tree-search-input{width:100%;height:25px;background:var(--ui-cor-fundo, #0a0a0c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));border-radius:var(--ui-raio-borda, 5px);padding:0 24px 0 26px;color:var(--ui-cor-texto, #ffffff);font-size:10.5px;outline:none;transition:border-color var(--camada-transicao),box-shadow var(--camada-transicao)}.ui-tree-search-input:focus{border-color:var(--ui-cor-primaria, #00E08A);box-shadow:0 0 0 2px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 18%,transparent)}.ui-tree-search-clear{position:absolute;right:5px;background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);cursor:pointer;width:18px;height:18px;display:flex;align-items:center;justify-content:center;border-radius:3px;transition:all var(--camada-transicao)}.ui-tree-search-clear:hover{color:var(--ui-cor-texto, #ffffff);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 10%,transparent)}.ui-panel-box{background:var(--ui-cor-fundo, #0c0c0f);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));border-radius:var(--ui-raio-borda, 6px);overflow:hidden;display:flex;flex-direction:column;flex:1 1 0%;min-height:80px}.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(--ui-cor-primaria, #00E08A) 12%,transparent)!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(--ui-cor-primaria, #00E08A) 7%,transparent)}.ui-layer-row.active-drawing-layer .ui-name-text{color:var(--ui-cor-texto, #e1e1e6);font-weight:700}.ui-feat-row{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(--ui-cor-texto-info, #33b5ff) 18%,transparent)!important;outline:1px solid color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 50%,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-col{display:flex;align-items:center;justify-content:center;flex-shrink:0;height:var(--camada-linha-altura)}.ui-col-drag{width:14px;cursor:grab;color:var(--ui-cor-texto-secundario, #888899);opacity:.35;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-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:18px;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:2.5px;background:var(--ui-cor-fundo, #0d0d10);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-active-badge{font-size:8px;font-weight:700;color:var(--ui-cor-texto-sobre-primaria, #000000);background:var(--ui-cor-primaria, #00E08A);border:1px solid color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 45%,transparent);padding:1px 4px;border-radius:3px;display:inline-flex;align-items:center;gap:2px;white-space:nowrap;flex-shrink:0;animation:pulseBadge 2.8s infinite}@keyframes pulseBadge{0%{opacity:.85}50%{opacity:1;filter:drop-shadow(0 0 4px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 50%,transparent))}to{opacity:.85}}.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, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent);padding:0 4px;border-radius:8px}.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(--ui-cor-texto-info, #33b5ff);background: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(--ui-cor-texto-info, #33b5ff);background:color-mix(in srgb,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-geom-tag{font-size:8px;font-weight:700;letter-spacing:.4px;padding:1px 4px;border-radius:3px;margin-left:4px;text-transform:uppercase;flex-shrink:0}.ui-geom-tag.oficial{background:color-mix(in srgb,var(--ui-cor-texto-sucesso, #00E08A) 16%,transparent);color:var(--ui-cor-texto-sucesso, #00E08A);border:1px solid color-mix(in srgb,var(--ui-cor-texto-sucesso, #00E08A) 35%,transparent)}.ui-geom-tag.previa{background:color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 16%,transparent);color:var(--ui-cor-texto-alerta, #ffb86c);border:1px solid color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 35%,transparent)}.ui-tree-footer{height:28px;min-height:28px;background:var(--ui-cor-fundo-elevado, #111115);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));display:flex;align-items:center;justify-content:space-between;padding:0 6px;gap:4px}.ui-footer-left{display:flex;align-items:center;gap:4px;white-space:nowrap;min-width:0}.ui-footer-count{font-size:10.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-primaria, #00E08A)}.ui-footer-label{font-size:10px;font-weight:500;color:var(--ui-cor-texto-secundario, #888899)}.ui-footer-metric{font-size:9.5px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;color:var(--ui-cor-primaria, #00E08A);display:inline-flex;align-items:center;gap:3px;white-space:nowrap}.ui-footer-right{display:flex;align-items:center;gap:2px;flex-shrink:0}.ui-footer-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:20px;height:20px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:3px;transition:all var(--camada-transicao)}.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-color-wrapper,.ui-footer-move-wrapper{display:flex;align-items:center}.ui-footer-color{width:15px;height:15px;border:none;background:transparent;cursor:pointer;padding:0}.ui-footer-select{background:var(--ui-cor-fundo, #18181d);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #e1e1e6);border-radius:3px;font-size:9.5px;height:20px;padding:0 2px;cursor:pointer}.ui-basemap-section{display:flex;flex-direction:column;gap:4px;flex-shrink:0}.ui-basemap-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:4px}.ui-basemap-card{display:flex;flex-direction:column;align-items:center;gap:2px;padding:3px;border-radius:var(--ui-raio-borda, 5px);background:var(--ui-cor-fundo, #101014);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:pointer;transition:all var(--camada-transicao);text-align:center;overflow:hidden}.ui-basemap-card:hover{border-color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-fundo-elevado, #17171c)}.ui-basemap-card.active{border-color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);color:var(--ui-cor-primaria, #00E08A);font-weight:600;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-basemap-preview{width:100%;height:22px;border-radius:3px;object-fit:cover;opacity:.85;transition:opacity var(--camada-transicao)}.ui-basemap-preview-none{width:100%;height:22px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 4%,transparent);border-radius:3px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-card:hover .ui-basemap-preview,.ui-basemap-card.active .ui-basemap-preview{opacity:1}.ui-basemap-card span{font-size:9.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.ui-search-hidden{display:none!important}.ui-empty-row{height:22px;display:flex;align-items:center;padding-left:36px;font-size:10px;color:var(--ui-cor-texto-secundario, #666677);font-style:italic;background:var(--ui-cor-fundo-recuado, rgba(0, 0, 0, .15))}.ui-camadas-resizer-altura{display:none;flex-shrink:0;width:100%;height:9px;background:var(--ui-cor-superficie, #141417);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:ns-resize;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;touch-action:none;transition:background .15s ease,border-color .15s ease;position:relative;z-index:10}:host([redimensionavel]) .ui-camadas-resizer-altura,:host([redimensionavel-altura]) .ui-camadas-resizer-altura{display:flex}.ui-camadas-resizer-altura:hover,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 9%,transparent);border-top-color:var(--ui-cor-primaria, #00E08A)}.ui-camadas-resizer-grip{width:32px;height:3px;border-radius:2px;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 22%,transparent);transition:all .15s ease}.ui-camadas-resizer-altura:hover .ui-camadas-resizer-grip,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo .ui-camadas-resizer-grip{background:var(--ui-cor-primaria, #00E08A);width:46px;box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 45%,transparent)}:host(.ui-camadas--redimensionando){-webkit-user-select:none!important;user-select:none!important;cursor:ns-resize!important}:host(.ui-camadas--redimensionando) *{-webkit-user-select:none!important;user-select:none!important}.ui-col-lock.ui-lock-open{opacity:.28}.ui-col-lock.ui-lock-open:hover,.ui-col-lock.ui-lock-open:focus-visible{opacity:.8}.ui-col-lock[data-locked-by-layer]{cursor:not-allowed}.ui-col[role=button]:focus-visible,.ui-basemap-card:focus-visible,.ui-feat-row:focus-visible,.ui-layer-row:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:-2px}.ui-footer-btn.confirming{color:var(--ui-cor-botao-destrutivo-texto, #ffffff);background:var(--ui-cor-botao-destrutivo-hover, #b71c1c);width:auto;padding:0 6px}';
836
- function je(a, o) {
837
- o.querySelectorAll("[data-layer-row]").forEach((r) => {
838
- r.addEventListener("click", (i) => {
839
- if (i.target.closest(
977
+ const We = ':host{display:flex;flex-direction:column;box-sizing:border-box;font-family:inherit;font-size:11px;color:var(--ui-cor-texto, #e1e1e6);-webkit-user-select:none;user-select:none;width:100%;height:var(--ui-camadas-altura, 100%);min-height:var(--ui-camadas-min-altura, 140px);position:relative;--camada-linha-altura: 25px;--camada-thumb-tamanho: 15px;--camada-transicao: .16s cubic-bezier(.16, 1, .3, 1)}:host([densidade="compacto"]){--camada-linha-altura: 22px;--camada-thumb-tamanho: 13px;font-size:10px}:host([flutuante]){position:absolute;top:10px;right:10px;bottom:46px;z-index:var(--ui-z-workspace-hud, 500);width:auto;height:var(--ui-camadas-altura, auto)}*,*:before,*:after{box-sizing:border-box}:host(:not([flutuante])) .ui-camadas-container{max-width:100%;min-width:0;border:none;box-shadow:none;border-radius:0;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none}.ui-camadas-container{display:flex;flex-direction:column;flex:1 1 auto;height:100%;min-height:0;width:100%;max-width:380px;min-width:270px;background:var(--ui-cor-superficie, #141417);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));border-radius:var(--ui-raio-borda, 8px);box-shadow:var(--ui-sombra-lg, 0 10px 30px -4px rgba(0, 0, 0, .5)),0 0 0 1px color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 5%,transparent);overflow:hidden;position:relative;transition:transform .24s cubic-bezier(.16,1,.3,1),opacity .2s ease;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}:host([colapsado]) .ui-camadas-container{transform:translate(calc(100% + 24px));opacity:0;pointer-events:none}.ui-camadas-toggle-flutuante{display:none;position:absolute;top:10px;right:10px;z-index:calc(var(--ui-z-workspace-hud, 500) - 1);background:var(--ui-cor-superficie, #141417);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .18));border-radius:var(--ui-raio-borda, 6px);color:var(--ui-cor-texto, #ffffff);width:34px;height:34px;cursor:pointer;align-items:center;justify-content:center;box-shadow:var(--ui-sombra-md, 0 8px 20px rgba(0, 0, 0, .45));transition:all var(--camada-transicao)}:host([colapsado][flutuante]) .ui-camadas-toggle-flutuante{display:flex}.ui-camadas-toggle-flutuante:hover{border-color:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-primaria, #00E08A);transform:scale(1.08);box-shadow:0 0 14px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-camadas-header{height:32px;min-height:32px;max-height:32px;display:flex;align-items:center;justify-content:space-between;padding:0 5px;border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));background:var(--ui-cor-fundo-elevado, rgba(0, 0, 0, .28));gap:4px}.ui-camadas-tabs{display:flex;gap:3px;flex:1}.ui-camadas-tab-btn{flex:1;background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);height:24px;padding:0 6px;font-size:11px;font-weight:500;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:5px;white-space:nowrap;transition:all var(--camada-transicao)}.ui-camadas-tab-btn:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .07))}.ui-camadas-tab-btn.active{color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 25%,transparent);font-weight:600}.ui-camadas-btn-colapsar{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:22px;height:22px;cursor:pointer;border-radius:var(--ui-raio-sm, 4px);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all var(--camada-transicao)}.ui-camadas-btn-colapsar:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .09))}.ui-camadas-corpo{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding:6px 6px 4px;display:flex;flex-direction:column;gap:6px;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 16%,transparent) transparent}.ui-camadas-corpo::-webkit-scrollbar{width:4px}.ui-camadas-corpo::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 18%,transparent);border-radius:var(--ui-raio-sm, 4px)}.ui-camadas-corpo::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 32%,transparent)}.ui-tree-toolbar{display:flex;align-items:center;justify-content:space-between;padding:1px 2px 3px;border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .06))}.ui-tree-title-group{display:flex;align-items:center;gap:5px}.ui-tree-section-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-cor-texto-secundario, #888899)}.ui-tree-count-badge{font-size:9px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent);color:var(--ui-cor-texto-secundario, #888899);padding:1px 5px;border-radius:8px;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent)}.ui-tree-actions{display:flex;align-items:center;gap:3px}.ui-tree-action-btn{background:transparent;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));color:var(--ui-cor-texto-secundario, #888899);border-radius:var(--ui-raio-sm, 4px);width:22px;height:22px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-tree-action-btn:hover{color:var(--ui-cor-texto, #ffffff);border-color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .09))}.ui-tree-btn-new{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);border:1px solid color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent);color:var(--ui-cor-primaria, #00E08A);border-radius:var(--ui-raio-sm, 4px);height:22px;padding:0 8px;font-size:10px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-tree-btn-new:hover{background:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-texto-sobre-primaria, #000000);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-tree-search-wrapper{position:relative;display:flex;align-items:center;margin:1px 0}.ui-tree-search-icon{position:absolute;left:8px;color:var(--ui-cor-texto-secundario, #888899);pointer-events:none;display:flex;align-items:center}.ui-tree-search-input{width:100%;height:25px;background:var(--ui-cor-fundo, #0a0a0c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));border-radius:var(--ui-raio-borda, 5px);padding:0 24px 0 26px;color:var(--ui-cor-texto, #ffffff);font-size:10.5px;outline:none;transition:border-color var(--camada-transicao),box-shadow var(--camada-transicao)}.ui-tree-search-input:focus{border-color:var(--ui-cor-primaria, #00E08A);box-shadow:0 0 0 2px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 18%,transparent)}.ui-tree-search-clear{position:absolute;right:5px;background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);cursor:pointer;width:18px;height:18px;display:flex;align-items:center;justify-content:center;border-radius:3px;transition:all var(--camada-transicao)}.ui-tree-search-clear:hover{color:var(--ui-cor-texto, #ffffff);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 10%,transparent)}.ui-panel-box{background:var(--ui-cor-fundo, #0c0c0f);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));border-radius:var(--ui-raio-borda, 6px);overflow:hidden;display:flex;flex-direction:column;flex:1 1 0%;min-height:80px}.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(--ui-cor-primaria, #00E08A) 12%,transparent)!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(--ui-cor-primaria, #00E08A) 7%,transparent)}.ui-layer-row.active-drawing-layer .ui-name-text{color:var(--ui-cor-texto, #e1e1e6);font-weight:700}.ui-feat-row{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(--ui-cor-texto-info, #33b5ff) 18%,transparent)!important;outline:1px solid color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 50%,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{padding-left:calc(6px + var(--layer-depth, 1) * 16px);background:color-mix(in srgb,var(--ui-cor-fundo-elevado, #18181d) 70%,transparent);border-left:2px solid color-mix(in srgb,var(--layer-active-color, #00E08A) 40%,transparent)}.ui-children-container.is-subchildren{position:relative;margin-left:calc(var(--layer-depth, 0) * 8px);border-left:1px dashed var(--ui-cor-borda, rgba(255, 255, 255, .1))}.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-group-badge{font-size:8.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;padding:1px 4px;border-radius:3px;background:color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 15%,transparent);color:var(--ui-cor-texto-alerta, #ffb86c);border:1px solid color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 30%,transparent);margin-left: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:14px;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-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:18px;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:2.5px;background:var(--ui-cor-fundo, #0d0d10);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-active-badge{font-size:8px;font-weight:700;color:var(--ui-cor-texto-sobre-primaria, #000000);background:var(--ui-cor-primaria, #00E08A);border:1px solid color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 45%,transparent);padding:1px 4px;border-radius:3px;display:inline-flex;align-items:center;gap:2px;white-space:nowrap;flex-shrink:0;animation:pulseBadge 2.8s infinite}@keyframes pulseBadge{0%{opacity:.85}50%{opacity:1;filter:drop-shadow(0 0 4px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 50%,transparent))}to{opacity:.85}}.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, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent);padding:0 4px;border-radius:8px}.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(--ui-cor-texto-info, #33b5ff);background: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(--ui-cor-texto-info, #33b5ff);background:color-mix(in srgb,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-geom-tag{font-size:8px;font-weight:700;letter-spacing:.4px;padding:1px 4px;border-radius:3px;margin-left:4px;text-transform:uppercase;flex-shrink:0}.ui-geom-tag.oficial{background:color-mix(in srgb,var(--ui-cor-texto-sucesso, #00E08A) 16%,transparent);color:var(--ui-cor-texto-sucesso, #00E08A);border:1px solid color-mix(in srgb,var(--ui-cor-texto-sucesso, #00E08A) 35%,transparent)}.ui-geom-tag.previa{background:color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 16%,transparent);color:var(--ui-cor-texto-alerta, #ffb86c);border:1px solid color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 35%,transparent)}.ui-tree-footer{height:32px;min-height:32px;background:var(--ui-cor-fundo-elevado, #121216);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));display:flex;align-items:center;justify-content:space-between;padding:0 8px;gap:6px;box-sizing:border-box;overflow:hidden;position:relative}.ui-footer-left{display:flex;align-items:center;gap:5px;white-space:nowrap;min-width:0;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis}.ui-footer-count{font-size:11px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-primaria, #00E08A);flex-shrink:0}.ui-footer-label{font-size:10px;font-weight:500;color:var(--ui-cor-texto-secundario, #888899);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-footer-metric{font-size:9.5px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;color:var(--ui-cor-primaria, #00E08A);display:inline-flex;align-items:center;gap:3px;white-space:nowrap;background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);padding:1px 5px;border-radius:3px;border:1px solid color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 24%,transparent);flex-shrink:0}.ui-footer-actions-gerais{display:flex;align-items:center;gap:4px;flex-shrink:0}.ui-footer-chip-btn{background:#ffffff0a;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));color:var(--ui-cor-texto-secundario, #a0a0b0);font-size:10px;font-weight:600;height:22px;padding:0 7px;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-footer-chip-btn:hover{background:#ffffff1a;color:var(--ui-cor-texto, #ffffff);border-color:#fff3}.ui-footer-chip-btn.primario{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);border-color:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 32%,transparent);color:var(--ui-cor-primaria, #00E08A)}.ui-footer-chip-btn.primario:hover{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 22%,transparent);border-color:var(--ui-cor-primaria, #00E08A);color:#fff}.ui-footer-right{display:flex;align-items:center;gap:3px;flex-shrink:0}.ui-footer-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:22px;height:22px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all var(--camada-transicao);flex-shrink:0}.ui-footer-btn:hover:not(.disabled){color:var(--ui-cor-texto, #e1e1e6);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12))}.ui-footer-btn.disabled{opacity:.25;cursor:not-allowed}.ui-footer-btn.btn-danger-footer:hover:not(.disabled){color:#f55;background:#ff555526}.ui-footer-btn.confirming{background:#f55!important;color:#fff!important}.ui-footer-btn.btn-clear-footer{color:var(--ui-cor-texto-secundario, #888899);margin-left:2px}.ui-footer-btn.btn-clear-footer:hover{color:#fff;background:#ffffff1f}.ui-footer-color-wrapper{position:relative;display:flex;align-items:center;justify-content:center;width:18px;height:18px;cursor:pointer;flex-shrink:0}.ui-footer-color-preview{width:14px;height:14px;border-radius:50%;border:1.5px solid rgba(255,255,255,.35);box-shadow:0 0 4px #0006;pointer-events:none;transition:transform .15s ease,border-color .15s ease}.ui-footer-color-wrapper:hover .ui-footer-color-preview{transform:scale(1.15);border-color:#fff}.ui-footer-color{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer;padding:0;margin:0;border:none}.ui-footer-move-wrapper{position:relative;display:flex;align-items:center;max-width:95px;flex-shrink:0}.ui-footer-select{background:var(--ui-cor-fundo, #16161c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #e1e1e6);border-radius:4px;font-size:10px;height:22px;padding:0 4px;cursor:pointer;max-width:95px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-footer-select:hover:not(:disabled){border-color:#ffffff40}.ui-footer-select:focus{outline:none;border-color:var(--ui-cor-primaria, #00E08A)}.ui-tree-btn-group{background:#ffffff0a;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto-secundario, #a0a0b0);border-radius:var(--ui-raio-sm, 4px);height:22px;padding:0 7px;font-size:10px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-tree-btn-group:hover{background:#ffffff1a;color:var(--ui-cor-texto, #ffffff);border-color:#ffffff40}.ui-drawer-btn-sublayer{background:#ffffff0f;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #e1e1e6);font-size:10.5px;font-weight:500;padding:4px 8px;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-drawer-btn-sublayer:hover{background:#ffffff1f;color:var(--ui-cor-primaria, #00E08A);border-color:var(--ui-cor-primaria, #00E08A)}.ui-drawer-select-wrapper{display:flex;align-items:center}.ui-drawer-select{background:var(--ui-cor-fundo, #16161c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .15));color:var(--ui-cor-texto, #e1e1e6);border-radius:4px;font-size:10.5px;height:24px;padding:0 6px;cursor:pointer;max-width:140px}.ui-basemap-section{display:flex;flex-direction:column;gap:4px;flex-shrink:0}.ui-basemap-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:4px}.ui-basemap-card{display:flex;flex-direction:column;align-items:center;gap:2px;padding:3px;border-radius:var(--ui-raio-borda, 5px);background:var(--ui-cor-fundo, #101014);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:pointer;transition:all var(--camada-transicao);text-align:center;overflow:hidden}.ui-basemap-card:hover{border-color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-fundo-elevado, #17171c)}.ui-basemap-card.active{border-color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);color:var(--ui-cor-primaria, #00E08A);font-weight:600;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-basemap-preview{width:100%;height:22px;border-radius:3px;object-fit:cover;opacity:.85;transition:opacity var(--camada-transicao)}.ui-basemap-preview-none{width:100%;height:22px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 4%,transparent);border-radius:3px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-card:hover .ui-basemap-preview,.ui-basemap-card.active .ui-basemap-preview{opacity:1}.ui-basemap-card span{font-size:9.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.ui-search-hidden{display:none!important}.ui-empty-row{height:22px;display:flex;align-items:center;padding-left:36px;font-size:10px;color:var(--ui-cor-texto-secundario, #666677);font-style:italic;background:var(--ui-cor-fundo-recuado, rgba(0, 0, 0, .15))}.ui-camadas-resizer-altura{display:none;flex-shrink:0;width:100%;height:9px;background:var(--ui-cor-superficie, #141417);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:ns-resize;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;touch-action:none;transition:background .15s ease,border-color .15s ease;position:relative;z-index:10}:host([redimensionavel]) .ui-camadas-resizer-altura,:host([redimensionavel-altura]) .ui-camadas-resizer-altura{display:flex}.ui-camadas-resizer-altura:hover,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 9%,transparent);border-top-color:var(--ui-cor-primaria, #00E08A)}.ui-camadas-resizer-grip{width:32px;height:3px;border-radius:2px;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 22%,transparent);transition:all .15s ease}.ui-camadas-resizer-altura:hover .ui-camadas-resizer-grip,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo .ui-camadas-resizer-grip{background:var(--ui-cor-primaria, #00E08A);width:46px;box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 45%,transparent)}:host(.ui-camadas--redimensionando){-webkit-user-select:none!important;user-select:none!important;cursor:ns-resize!important}:host(.ui-camadas--redimensionando) *{-webkit-user-select:none!important;user-select:none!important}.ui-col-lock.ui-lock-open{opacity:.28}.ui-col-lock.ui-lock-open:hover,.ui-col-lock.ui-lock-open:focus-visible{opacity:.8}.ui-col-lock[data-locked-by-layer]{cursor:not-allowed}.ui-col[role=button]:focus-visible,.ui-basemap-card:focus-visible,.ui-feat-row:focus-visible,.ui-layer-row:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:-2px}.ui-footer-btn.confirming{color:var(--ui-cor-botao-destrutivo-texto, #ffffff);background:var(--ui-cor-botao-destrutivo-hover, #b71c1c);width:auto;padding:0 6px}';
978
+ function Xe(e, o) {
979
+ o.querySelectorAll("[data-layer-row]").forEach((i) => {
980
+ i.addEventListener("click", (r) => {
981
+ if (r.target.closest(
840
982
  "[data-layer-eye], [data-layer-lock], [data-layer-expand], [data-layer-target], [data-layer-fit], [data-layer-settings], input, button"
841
983
  ))
842
984
  return;
843
- const n = r.getAttribute("data-layer-row");
844
- n && a.definirCamadaAtiva(n, !0);
985
+ const n = i.getAttribute("data-layer-row");
986
+ n && e.definirCamadaAtiva(n, !0);
845
987
  });
846
- }), o.querySelectorAll("[data-layer-expand]").forEach((r) => {
847
- r.addEventListener("click", (i) => {
848
- i.stopPropagation();
849
- const s = r.getAttribute("data-layer-expand");
988
+ }), o.querySelectorAll("[data-layer-expand]").forEach((i) => {
989
+ i.addEventListener("click", (r) => {
990
+ r.stopPropagation();
991
+ const s = i.getAttribute("data-layer-expand");
850
992
  if (!s) return;
851
- a.expandedLayers.has(s) ? a.expandedLayers.delete(s) : a.expandedLayers.add(s);
852
- const n = r.closest(".ui-layer-group"), c = r.querySelector(".ui-chevron-icon"), l = a.expandedLayers.has(s);
853
- if (c && c.classList.toggle("open", l), n) {
854
- const u = n.querySelector(".ui-children-container");
855
- u && (u.style.display = l ? "block" : "none");
993
+ e.expandedLayers.has(s) ? e.expandedLayers.delete(s) : e.expandedLayers.add(s);
994
+ const n = i.closest(".ui-layer-group"), l = i.querySelector(".ui-chevron-icon"), c = e.expandedLayers.has(s);
995
+ if (l && l.classList.toggle("open", c), n) {
996
+ const f = n.querySelector(".ui-children-container");
997
+ f && (f.style.display = c ? "block" : "none");
856
998
  }
857
- a.salvarLembrancaEstado();
999
+ e.salvarLembrancaEstado();
858
1000
  });
859
- }), o.querySelectorAll("[data-layer-eye]").forEach((r) => {
860
- r.addEventListener("click", (i) => {
861
- i.stopPropagation();
862
- const s = r.getAttribute("data-layer-eye"), n = a.camadas.find((c) => c.id === s);
1001
+ }), o.querySelectorAll("[data-layer-eye]").forEach((i) => {
1002
+ i.addEventListener("click", (r) => {
1003
+ r.stopPropagation();
1004
+ const s = i.getAttribute("data-layer-eye"), n = e.camadas.find((l) => l.id === s);
863
1005
  if (n) {
864
1006
  n.visible = n.visible === !1;
865
- const c = n.visible !== !1;
866
- r.innerHTML = c ? h.olhoAberto : h.olhoFechado, $(r, c ? "Ocultar Camada" : "Exibir Camada");
867
- const l = r.closest(".ui-layer-row");
868
- l && l.classList.toggle("hidden-layer", !c), Ne(a, o), a.salvarLembrancaEstado(), a.dispararEvento("ui-camada-visibilidade", {
1007
+ const l = n.visible !== !1;
1008
+ i.innerHTML = l ? g.olhoAberto : g.olhoFechado, F(i, l ? "Ocultar Camada" : "Exibir Camada");
1009
+ const c = i.closest(".ui-layer-row");
1010
+ c && c.classList.toggle("hidden-layer", !l), Ze(e, o), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-visibilidade", {
869
1011
  camadaId: n.id,
870
- visivel: c
1012
+ visivel: l
871
1013
  });
872
1014
  }
873
1015
  });
874
- }), o.querySelectorAll("[data-layer-lock]").forEach((r) => {
875
- r.addEventListener("click", (i) => {
876
- i.stopPropagation();
877
- const s = r.getAttribute("data-layer-lock"), n = a.camadas.find((c) => c.id === s);
878
- n && (n.locked = !n.locked, r.innerHTML = n.locked ? h.cadeadoTrancado : h.cadeadoAberto, r.classList.toggle("ui-lock-open", !n.locked), $(r, n.locked ? "Desbloquear Camada" : "Bloquear Camada"), He(a, o, n.id, n.locked === !0), a.salvarLembrancaEstado(), a.dispararEvento("ui-camada-bloqueio", {
1016
+ }), o.querySelectorAll("[data-layer-lock]").forEach((i) => {
1017
+ i.addEventListener("click", (r) => {
1018
+ r.stopPropagation();
1019
+ const s = i.getAttribute("data-layer-lock"), n = e.camadas.find((l) => l.id === s);
1020
+ n && (n.locked = !n.locked, i.innerHTML = n.locked ? g.cadeadoTrancado : g.cadeadoAberto, i.classList.toggle("ui-lock-open", !n.locked), F(i, n.locked ? "Desbloquear Camada" : "Bloquear Camada"), ea(e, o, n.id, n.locked === !0), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-bloqueio", {
879
1021
  camadaId: n.id,
880
1022
  bloqueado: n.locked
881
1023
  }));
882
1024
  });
883
- }), o.querySelectorAll("[data-layer-fit]").forEach((r) => {
884
- r.addEventListener("click", (i) => {
885
- i.stopPropagation();
886
- const s = r.getAttribute("data-layer-fit");
887
- s && a.dispararEvento("ui-camada-enquadrar", { camadaId: s });
1025
+ }), o.querySelectorAll("[data-layer-fit]").forEach((i) => {
1026
+ i.addEventListener("click", (r) => {
1027
+ r.stopPropagation();
1028
+ const s = i.getAttribute("data-layer-fit");
1029
+ s && e.dispararEvento("ui-camada-enquadrar", { camadaId: s });
888
1030
  });
889
- }), o.querySelectorAll("[data-layer-settings]").forEach((r) => {
890
- r.addEventListener("click", (i) => {
891
- i.stopPropagation();
892
- const s = r.getAttribute("data-layer-settings");
893
- a.activeSettingsLayerId = a.activeSettingsLayerId === s ? null : s, a.solicitarRenderizacao();
1031
+ }), o.querySelectorAll("[data-layer-settings]").forEach((i) => {
1032
+ i.addEventListener("click", (r) => {
1033
+ r.stopPropagation();
1034
+ const s = i.getAttribute("data-layer-settings");
1035
+ e.activeSettingsLayerId = e.activeSettingsLayerId === s ? null : s, e.solicitarRenderizacao();
894
1036
  });
895
- }), o.querySelectorAll("[data-layer-settings-close]").forEach((r) => {
896
- r.addEventListener("click", (i) => {
897
- i.stopPropagation(), a.activeSettingsLayerId = null, a.solicitarRenderizacao();
1037
+ }), o.querySelectorAll("[data-layer-settings-close]").forEach((i) => {
1038
+ i.addEventListener("click", (r) => {
1039
+ r.stopPropagation(), e.activeSettingsLayerId = null, e.solicitarRenderizacao();
898
1040
  });
899
1041
  });
900
- const e = (r, i, s) => {
901
- const n = a.camadas.find((f) => f.id === r);
1042
+ const a = (i, r, s) => {
1043
+ const n = e.camadas.find((d) => d.id === i);
902
1044
  if (!n) return;
903
- const c = P(i, n.color || "#00E08A");
904
- n.color = c;
905
- const l = o.getElementById(`sample-color-${r}`);
906
- l && (l.style.backgroundColor = c);
907
- const u = o.getElementById(`hex-color-${r}`);
908
- u && (u.textContent = c.toUpperCase());
909
- const p = o.getElementById(`settings-drawer-${r}`);
910
- p && p.style.setProperty("--drawer-cor-camada", c);
911
- const d = S(o, "data-layer-row", r);
912
- if (d) {
913
- d.style.setProperty("--layer-active-color", c);
914
- const f = d.querySelector(".ui-col-colorbar");
915
- f && (f.style.backgroundColor = c);
1045
+ const l = G(r, n.color || "#00E08A");
1046
+ n.color = l;
1047
+ const c = o.getElementById(`sample-color-${i}`);
1048
+ c && (c.style.backgroundColor = l);
1049
+ const f = o.getElementById(`hex-color-${i}`);
1050
+ f && (f.textContent = l.toUpperCase());
1051
+ const u = o.getElementById(`settings-drawer-${i}`);
1052
+ u && u.style.setProperty("--drawer-cor-camada", l);
1053
+ const p = M(o, "data-layer-row", i);
1054
+ if (p) {
1055
+ p.style.setProperty("--layer-active-color", l);
1056
+ const d = p.querySelector(".ui-col-colorbar");
1057
+ d && (d.style.backgroundColor = l);
916
1058
  }
917
- s ? a.salvarLembrancaEstado() : a.agendarSalvarLembranca(), a.dispararEvento("ui-camada-cor", { camadaId: n.id, cor: c });
1059
+ s ? e.salvarLembrancaEstado() : e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-cor", { camadaId: n.id, cor: l });
918
1060
  };
919
- o.querySelectorAll("[data-layer-color-picker]").forEach((r) => {
920
- const i = r, s = (n) => (c) => {
921
- const l = i.getAttribute("data-layer-color-picker");
922
- if (!l) return;
923
- const u = c.target.value;
924
- e(l, u, n);
1061
+ o.querySelectorAll("[data-layer-color-picker]").forEach((i) => {
1062
+ const r = i, s = (n) => (l) => {
1063
+ const c = r.getAttribute("data-layer-color-picker");
1064
+ if (!c) return;
1065
+ const f = l.target.value;
1066
+ a(c, f, n);
925
1067
  };
926
- i.addEventListener("input", s(!1)), i.addEventListener("change", s(!0));
1068
+ r.addEventListener("input", s(!1)), r.addEventListener("change", s(!0));
927
1069
  });
928
- const t = (r, i) => {
929
- const s = a.camadas.find((l) => l.id === r);
1070
+ const t = (i, r) => {
1071
+ const s = e.camadas.find((c) => c.id === i);
930
1072
  if (!s) return;
931
- s.opacity = i;
932
- const n = o.getElementById(`badge-op-${r}`);
933
- n && (n.textContent = `${Math.round(i * 100)}%`);
934
- const c = S(o, "data-layer-opacity-slider", r);
935
- c && parseFloat(c.value) !== i && (c.value = String(i)), a.agendarSalvarLembranca(), a.dispararEvento("ui-camada-opacidade", { camadaId: s.id, opacidade: i });
1073
+ s.opacity = r;
1074
+ const n = o.getElementById(`badge-op-${i}`);
1075
+ n && (n.textContent = `${Math.round(r * 100)}%`);
1076
+ const l = M(o, "data-layer-opacity-slider", i);
1077
+ l && parseFloat(l.value) !== r && (l.value = String(r)), e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-opacidade", { camadaId: s.id, opacidade: r });
936
1078
  };
937
- o.querySelectorAll("[data-layer-opacity-slider]").forEach((r) => {
938
- r.addEventListener("input", (i) => {
939
- const s = r.getAttribute("data-layer-opacity-slider");
1079
+ o.querySelectorAll("[data-layer-opacity-slider]").forEach((i) => {
1080
+ i.addEventListener("input", (r) => {
1081
+ const s = i.getAttribute("data-layer-opacity-slider");
940
1082
  if (!s) return;
941
- const n = parseFloat(i.target.value);
1083
+ const n = parseFloat(r.target.value);
942
1084
  t(s, n);
943
1085
  });
944
- }), o.querySelectorAll("[data-delete-layer]").forEach((r) => {
945
- let i = null;
946
- r.addEventListener("click", (s) => {
1086
+ }), o.querySelectorAll("[data-delete-layer]").forEach((i) => {
1087
+ let r = null;
1088
+ i.addEventListener("click", (s) => {
947
1089
  s.stopPropagation();
948
- const n = r.getAttribute("data-delete-layer");
1090
+ const n = i.getAttribute("data-delete-layer");
949
1091
  if (!n) return;
950
- if (r.classList.contains("confirming")) {
951
- i && clearTimeout(i), a.dispararEvento("ui-camada-excluida", { camadaId: n });
952
- const l = a.selectedFeatureIds.size;
953
- a.removerCamada(n), a.selectedFeatureIds.size !== l && a.notificarMudancaSelecao();
1092
+ if (i.classList.contains("confirming")) {
1093
+ r && clearTimeout(r), e.dispararEvento("ui-camada-excluida", { camadaId: n });
1094
+ const c = e.selectedFeatureIds.size;
1095
+ e.camadas.forEach((f) => {
1096
+ f.parentId === n && (f.parentId = null);
1097
+ }), e.removerCamada(n), e.selectedFeatureIds.size !== c && e.notificarMudancaSelecao();
954
1098
  } else {
955
- r.classList.add("confirming");
956
- const l = r.querySelector(".ui-btn-label");
957
- l && (l.textContent = "Confirmar Exclusão?"), i = setTimeout(() => {
958
- r.classList.remove("confirming"), l && (l.textContent = "Excluir Camada");
1099
+ i.classList.add("confirming");
1100
+ const c = i.querySelector(".ui-btn-label");
1101
+ c && (c.textContent = "Confirmar Exclusão?"), r = setTimeout(() => {
1102
+ i.classList.remove("confirming"), c && (c.textContent = "Excluir Camada");
959
1103
  }, 3500);
960
1104
  }
961
1105
  });
962
- }), o.querySelectorAll("[data-layer-target]").forEach((r) => {
963
- r.addEventListener("click", (i) => {
964
- i.stopPropagation();
965
- const s = i, n = r.getAttribute("data-layer-target"), c = Y(
966
- a.feicoes.filter((u) => u.layerId === n),
967
- a.searchQuery
1106
+ }), o.querySelectorAll("[data-layer-parent-select]").forEach((i) => {
1107
+ i.addEventListener("change", (r) => {
1108
+ const s = r.target, n = s.getAttribute("data-layer-parent-select"), l = s.value || null, c = e.camadas.find((f) => f.id === n);
1109
+ c && (c.parentId = l, e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-mover-hierarquia", {
1110
+ camadaId: c.id,
1111
+ novoParentId: l,
1112
+ camada: c
1113
+ }), e.solicitarRenderizacao());
1114
+ });
1115
+ }), o.querySelectorAll("[data-add-sublayer]").forEach((i) => {
1116
+ i.addEventListener("click", (r) => {
1117
+ r.stopPropagation();
1118
+ const s = i.getAttribute("data-add-sublayer");
1119
+ e.dispararEvento("ui-camada-adicionar", { parentId: s });
1120
+ });
1121
+ }), o.querySelectorAll("[data-layer-target]").forEach((i) => {
1122
+ i.addEventListener("click", (r) => {
1123
+ r.stopPropagation();
1124
+ const s = r, n = i.getAttribute("data-layer-target"), l = ae(
1125
+ e.feicoes.filter((f) => f.layerId === n),
1126
+ e.searchQuery
968
1127
  );
969
- if (c.length === 0) return;
970
- c.every((u) => a.selectedFeatureIds.has(u.id)) ? c.forEach((u) => a.selectedFeatureIds.delete(u.id)) : (!s.ctrlKey && !s.metaKey && a.selectedFeatureIds.clear(), c.forEach((u) => a.selectedFeatureIds.add(u.id))), a.lastClickedFeatureId = c[c.length - 1].id, a.sincronizarSelecaoDOM(), a.notificarMudancaSelecao();
1128
+ if (l.length === 0) return;
1129
+ l.every((f) => e.selectedFeatureIds.has(f.id)) ? l.forEach((f) => e.selectedFeatureIds.delete(f.id)) : (!s.ctrlKey && !s.metaKey && e.selectedFeatureIds.clear(), l.forEach((f) => e.selectedFeatureIds.add(f.id))), e.lastClickedFeatureId = l[l.length - 1].id, e.sincronizarSelecaoDOM(), e.notificarMudancaSelecao();
971
1130
  });
972
1131
  });
973
1132
  }
974
- function Ne(a, o) {
975
- const e = o.getElementById("btn-toggle-all-vis");
976
- if (!e) return;
977
- const t = a.camadas.every((r) => r.visible !== !1);
978
- e.innerHTML = t ? h.olhoAberto : h.olhoFechado, $(e, t ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas");
1133
+ function Ze(e, o) {
1134
+ const a = o.getElementById("btn-toggle-all-vis");
1135
+ if (!a) return;
1136
+ const t = e.camadas.every((i) => i.visible !== !1);
1137
+ a.innerHTML = t ? g.olhoAberto : g.olhoFechado, F(a, t ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas");
979
1138
  }
980
- function He(a, o, e, t) {
981
- a.feicoes.filter((r) => r.layerId === e).forEach((r) => {
982
- const i = S(o, "data-feat-lock", r.id);
983
- if (!i) return;
984
- const s = r.locked === !0 || t;
985
- i.innerHTML = s ? h.cadeadoTrancado : h.cadeadoAberto, i.classList.toggle("ui-lock-open", !s), t ? i.setAttribute("data-locked-by-layer", "true") : i.removeAttribute("data-locked-by-layer"), $(
986
- i,
1139
+ function ea(e, o, a, t) {
1140
+ e.feicoes.filter((i) => i.layerId === a).forEach((i) => {
1141
+ const r = M(o, "data-feat-lock", i.id);
1142
+ if (!r) return;
1143
+ const s = i.locked === !0 || t;
1144
+ r.innerHTML = s ? g.cadeadoTrancado : g.cadeadoAberto, r.classList.toggle("ui-lock-open", !s), t ? r.setAttribute("data-locked-by-layer", "true") : r.removeAttribute("data-locked-by-layer"), F(
1145
+ r,
987
1146
  t ? "Bloqueada pela camada" : s ? "Desbloquear Feição" : "Bloquear Feição"
988
1147
  );
989
1148
  });
990
1149
  }
991
- function Ve(a, o) {
992
- const e = o.getElementById("btn-footer-vis");
993
- e && e.addEventListener("click", () => {
994
- const l = a.feicoes.filter((d) => a.selectedFeatureIds.has(d.id));
995
- if (l.length === 0) return;
996
- const p = !l.some((d) => d.visible !== !1);
997
- l.forEach((d) => d.visible = p), a.dispararEvento("ui-acao-massa", {
1150
+ function aa(e, o) {
1151
+ const a = o.getElementById("btn-footer-vis");
1152
+ a && a.addEventListener("click", () => {
1153
+ const u = e.feicoes.filter((m) => e.selectedFeatureIds.has(m.id));
1154
+ if (u.length === 0) return;
1155
+ const d = !u.some((m) => m.visible !== !1);
1156
+ u.forEach((m) => m.visible = d), e.dispararEvento("ui-acao-massa", {
998
1157
  acao: "visibilidade",
999
- feicoesIds: l.map((d) => d.id),
1000
- feicoes: l,
1001
- valor: p
1002
- }), a.solicitarRenderizacao();
1158
+ feicoesIds: u.map((m) => m.id),
1159
+ feicoes: u,
1160
+ valor: d
1161
+ }), e.solicitarRenderizacao();
1003
1162
  });
1004
1163
  const t = o.getElementById("btn-footer-lock");
1005
1164
  t && t.addEventListener("click", () => {
1006
- const l = a.feicoes.filter((d) => a.selectedFeatureIds.has(d.id));
1007
- if (l.length === 0) return;
1008
- const p = !l.some((d) => d.locked === !0);
1009
- l.forEach((d) => d.locked = p), a.dispararEvento("ui-acao-massa", {
1165
+ const u = e.feicoes.filter((m) => e.selectedFeatureIds.has(m.id));
1166
+ if (u.length === 0) return;
1167
+ const d = !u.some((m) => m.locked === !0);
1168
+ u.forEach((m) => m.locked = d), e.dispararEvento("ui-acao-massa", {
1010
1169
  acao: "bloqueio",
1011
- feicoesIds: l.map((d) => d.id),
1012
- feicoes: l,
1013
- valor: p
1014
- }), a.solicitarRenderizacao();
1170
+ feicoesIds: u.map((m) => m.id),
1171
+ feicoes: u,
1172
+ valor: d
1173
+ }), e.solicitarRenderizacao();
1015
1174
  });
1016
- const r = o.getElementById("input-footer-color");
1017
- r && r.addEventListener("change", (l) => {
1018
- const u = l.target.value, p = a.feicoes.filter((d) => a.selectedFeatureIds.has(d.id));
1019
- p.length !== 0 && (p.forEach((d) => {
1020
- d.color = u, d.style = { ...d.style || {}, fillColor: u, strokeColor: u };
1021
- }), a.dispararEvento("ui-acao-massa", {
1175
+ const i = o.getElementById("input-footer-color"), r = o.getElementById("preview-footer-color");
1176
+ i && (i.addEventListener("input", (u) => {
1177
+ const p = u.target.value;
1178
+ r && (r.style.backgroundColor = p);
1179
+ }), i.addEventListener("change", (u) => {
1180
+ const p = u.target.value;
1181
+ r && (r.style.backgroundColor = p);
1182
+ const d = e.feicoes.filter((m) => e.selectedFeatureIds.has(m.id));
1183
+ d.length !== 0 && (d.forEach((m) => {
1184
+ m.color = p, m.style = { ...m.style || {}, fillColor: p, strokeColor: p };
1185
+ }), e.dispararEvento("ui-acao-massa", {
1022
1186
  acao: "cor",
1023
- feicoesIds: p.map((d) => d.id),
1024
- feicoes: p,
1025
- valor: u
1026
- }), a.solicitarRenderizacao());
1027
- });
1028
- const i = o.getElementById("select-footer-move");
1029
- i && i.addEventListener("change", (l) => {
1030
- const u = l.target.value;
1031
- if (!u) return;
1032
- const p = a.feicoes.filter((f) => a.selectedFeatureIds.has(f.id));
1033
- if (p.length === 0) return;
1034
- const d = new Map(p.map((f) => [f.id, f.layerId]));
1035
- p.forEach((f) => f.layerId = u), p.forEach((f) => {
1036
- d.get(f.id) !== u && a.dispararEvento("ui-feicao-movida", {
1037
- feicaoId: f.id,
1038
- camadaOrigemId: d.get(f.id),
1039
- camadaDestinoId: u,
1040
- feicao: f
1187
+ feicoesIds: d.map((m) => m.id),
1188
+ feicoes: d,
1189
+ valor: p
1190
+ }), e.solicitarRenderizacao());
1191
+ }));
1192
+ const s = o.getElementById("select-footer-move");
1193
+ s && s.addEventListener("change", (u) => {
1194
+ const p = u.target.value;
1195
+ if (!p) return;
1196
+ const d = e.feicoes.filter((h) => e.selectedFeatureIds.has(h.id));
1197
+ if (d.length === 0) return;
1198
+ const m = new Map(d.map((h) => [h.id, h.layerId]));
1199
+ d.forEach((h) => h.layerId = p), d.forEach((h) => {
1200
+ m.get(h.id) !== p && e.dispararEvento("ui-feicao-movida", {
1201
+ feicaoId: h.id,
1202
+ camadaOrigemId: m.get(h.id),
1203
+ camadaDestinoId: p,
1204
+ feicao: h
1041
1205
  });
1042
- }), a.dispararEvento("ui-acao-massa", {
1206
+ }), e.dispararEvento("ui-acao-massa", {
1043
1207
  acao: "mover",
1044
- feicoesIds: p.map((f) => f.id),
1045
- feicoes: p,
1046
- valor: u
1047
- }), a.solicitarRenderizacao();
1208
+ feicoesIds: d.map((h) => h.id),
1209
+ feicoes: d,
1210
+ valor: p
1211
+ }), e.solicitarRenderizacao();
1212
+ });
1213
+ const n = o.getElementById("btn-footer-new-layer");
1214
+ n && n.addEventListener("click", () => {
1215
+ e.dispararEvento("ui-camada-adicionar", {});
1048
1216
  });
1049
- const s = o.getElementById("btn-footer-new-layer");
1050
- s && s.addEventListener("click", () => {
1051
- a.dispararEvento("ui-camada-adicionar", {});
1217
+ const l = o.getElementById("btn-footer-new-group");
1218
+ l && l.addEventListener("click", () => {
1219
+ e.dispararEvento("ui-camada-grupo-adicionar", { isGroup: !0 });
1052
1220
  });
1053
- const n = o.getElementById("btn-footer-del");
1054
- if (n) {
1055
- let l = null;
1056
- const u = "Excluir selecionados";
1057
- n.addEventListener("click", () => {
1058
- const p = Array.from(a.selectedFeatureIds);
1059
- if (p.length === 0) return;
1060
- if (!n.classList.contains("confirming")) {
1061
- n.classList.add("confirming"), $(n, `Clique novamente para excluir ${p.length} selecionado(s)`), l = setTimeout(() => {
1062
- n.classList.remove("confirming"), $(n, u);
1221
+ const c = o.getElementById("btn-footer-del");
1222
+ if (c) {
1223
+ let u = null;
1224
+ const p = "Excluir selecionados";
1225
+ c.addEventListener("click", () => {
1226
+ const d = Array.from(e.selectedFeatureIds);
1227
+ if (d.length === 0) return;
1228
+ if (!c.classList.contains("confirming")) {
1229
+ c.classList.add("confirming"), F(c, `Clique novamente para excluir ${d.length} selecionado(s)`), u = setTimeout(() => {
1230
+ c.classList.remove("confirming"), F(c, p);
1063
1231
  }, 3500);
1064
1232
  return;
1065
1233
  }
1066
- l && clearTimeout(l);
1067
- const d = a.feicoes.filter((f) => a.selectedFeatureIds.has(f.id));
1068
- a.feicoes = a.feicoes.filter((f) => !a.selectedFeatureIds.has(f.id)), a.selectedFeatureIds.clear(), a.lastClickedFeatureId = null, a.dispararEvento("ui-acao-massa", {
1234
+ u && clearTimeout(u);
1235
+ const m = e.feicoes.filter((h) => e.selectedFeatureIds.has(h.id));
1236
+ e.feicoes = e.feicoes.filter((h) => !e.selectedFeatureIds.has(h.id)), e.selectedFeatureIds.clear(), e.lastClickedFeatureId = null, e.dispararEvento("ui-acao-massa", {
1069
1237
  acao: "excluir",
1070
- feicoesIds: p,
1071
- feicoes: d
1072
- }), a.notificarMudancaSelecao(), a.solicitarRenderizacao();
1238
+ feicoesIds: d,
1239
+ feicoes: m
1240
+ }), e.notificarMudancaSelecao(), e.solicitarRenderizacao();
1073
1241
  });
1074
1242
  }
1075
- const c = o.getElementById("btn-footer-clear");
1076
- c && c.addEventListener("click", () => a.limparSelecao(!0));
1243
+ const f = o.getElementById("btn-footer-clear");
1244
+ f && f.addEventListener("click", () => e.limparSelecao(!0));
1077
1245
  }
1078
- function Ue(a, o) {
1079
- const e = o.getElementById("btn-toggle-all-vis");
1080
- e && e.addEventListener("click", () => a.alternarVisibilidadeTodas(!0));
1246
+ function ta(e, o) {
1247
+ const a = o.getElementById("btn-toggle-all-vis");
1248
+ a && a.addEventListener("click", () => e.alternarVisibilidadeTodas(!0));
1081
1249
  const t = o.getElementById("btn-toggle-all-expand");
1082
- t && t.addEventListener("click", (s) => {
1083
- s.stopPropagation(), a.camadas.length > 0 && a.camadas.every((c) => a.expandedLayers.has(c.id)) ? a.colapsarTodas() : a.expandirTodas();
1250
+ t && t.addEventListener("click", (n) => {
1251
+ n.stopPropagation(), e.camadas.length > 0 && e.camadas.every((c) => e.expandedLayers.has(c.id)) ? e.colapsarTodas() : e.expandirTodas();
1252
+ });
1253
+ const i = o.getElementById("btn-add-layer");
1254
+ i && i.addEventListener("click", () => {
1255
+ e.dispararEvento("ui-camada-adicionar", {});
1084
1256
  });
1085
- const r = o.getElementById("btn-add-layer");
1257
+ const r = o.getElementById("btn-add-group");
1086
1258
  r && r.addEventListener("click", () => {
1087
- a.dispararEvento("ui-camada-adicionar", {});
1259
+ e.dispararEvento("ui-camada-grupo-adicionar", { isGroup: !0 });
1088
1260
  });
1089
- const i = o.getElementById("btn-colapsar");
1090
- i && i.addEventListener("click", () => a.colapsar(!0)), _e(a, o);
1261
+ const s = o.getElementById("btn-colapsar");
1262
+ s && s.addEventListener("click", () => e.colapsar(!0)), ra(e, o);
1091
1263
  }
1092
- function _e(a, o) {
1093
- const e = o.getElementById("input-layer-search"), t = o.getElementById("btn-clear-layer-search"), r = () => {
1094
- var i;
1095
- a.searchQuery = "", a.solicitarRenderizacao(), (i = o.getElementById("input-layer-search")) == null || i.focus();
1264
+ function ra(e, o) {
1265
+ const a = o.getElementById("input-layer-search"), t = o.getElementById("btn-clear-layer-search"), i = () => {
1266
+ var r;
1267
+ e.searchQuery = "", e.solicitarRenderizacao(), (r = o.getElementById("input-layer-search")) == null || r.focus();
1096
1268
  };
1097
- if (e) {
1098
- const i = se(() => a.solicitarRenderizacao(), 75);
1099
- e.addEventListener("input", (s) => {
1100
- a.searchQuery = s.target.value, i();
1101
- }), e.addEventListener("keydown", (s) => {
1102
- s.key === "Escape" && a.searchQuery && (s.preventDefault(), r());
1269
+ if (a) {
1270
+ const r = fe(() => e.solicitarRenderizacao(), 75);
1271
+ a.addEventListener("input", (s) => {
1272
+ e.searchQuery = s.target.value, r();
1273
+ }), a.addEventListener("keydown", (s) => {
1274
+ s.key === "Escape" && e.searchQuery && (s.preventDefault(), i());
1103
1275
  });
1104
1276
  }
1105
- t && t.addEventListener("click", r);
1277
+ t && t.addEventListener("click", i);
1106
1278
  }
1107
- function Ge(a, o) {
1108
- o.querySelectorAll("[data-feat-select]").forEach((e) => {
1109
- e.addEventListener("click", (t) => {
1110
- if (a.editingFeatureId) return;
1111
- const r = t;
1112
- if (r.target.closest(
1279
+ function ia(e, o) {
1280
+ o.querySelectorAll("[data-feat-select]").forEach((a) => {
1281
+ a.addEventListener("click", (t) => {
1282
+ if (e.editingFeatureId) return;
1283
+ const i = t;
1284
+ if (i.target.closest(
1113
1285
  "[data-feat-eye], [data-feat-lock], [data-feat-fit], [data-feat-target], input, button"
1114
1286
  ))
1115
1287
  return;
1116
- const s = e.getAttribute("data-feat-select");
1117
- s && a.selecionarFeicao(s, r.ctrlKey || r.metaKey, r.shiftKey, !0);
1288
+ const s = a.getAttribute("data-feat-select");
1289
+ s && e.selecionarFeicao(s, i.ctrlKey || i.metaKey, i.shiftKey, !0);
1118
1290
  });
1119
- }), o.querySelectorAll("[data-feat-target]").forEach((e) => {
1120
- e.addEventListener("click", (t) => {
1291
+ }), o.querySelectorAll("[data-feat-target]").forEach((a) => {
1292
+ a.addEventListener("click", (t) => {
1121
1293
  t.stopPropagation();
1122
- const r = t, i = e.getAttribute("data-feat-target");
1123
- i && a.selecionarFeicao(i, r.ctrlKey || r.metaKey, r.shiftKey, !0);
1294
+ const i = t, r = a.getAttribute("data-feat-target");
1295
+ r && e.selecionarFeicao(r, i.ctrlKey || i.metaKey, i.shiftKey, !0);
1124
1296
  });
1125
- }), o.querySelectorAll("[data-feat-eye]").forEach((e) => {
1126
- e.addEventListener("click", (t) => {
1297
+ }), o.querySelectorAll("[data-feat-eye]").forEach((a) => {
1298
+ a.addEventListener("click", (t) => {
1127
1299
  t.stopPropagation();
1128
- const r = e.getAttribute("data-feat-eye"), i = a.feicoes.find((s) => s.id === r);
1129
- if (i) {
1130
- i.visible = i.visible === !1;
1131
- const s = i.visible !== !1;
1132
- e.innerHTML = s ? h.olhoAberto : h.olhoFechado, $(e, s ? "Ocultar Feição" : "Exibir Feição");
1133
- const n = e.closest(".ui-feat-row");
1134
- n && n.classList.toggle("hidden-row", !s), a.dispararEvento("ui-feicao-visibilidade", {
1135
- feicaoId: i.id,
1300
+ const i = a.getAttribute("data-feat-eye"), r = e.feicoes.find((s) => s.id === i);
1301
+ if (r) {
1302
+ r.visible = r.visible === !1;
1303
+ const s = r.visible !== !1;
1304
+ a.innerHTML = s ? g.olhoAberto : g.olhoFechado, F(a, s ? "Ocultar Feição" : "Exibir Feição");
1305
+ const n = a.closest(".ui-feat-row");
1306
+ n && n.classList.toggle("hidden-row", !s), e.dispararEvento("ui-feicao-visibilidade", {
1307
+ feicaoId: r.id,
1136
1308
  visivel: s
1137
1309
  });
1138
1310
  }
1139
1311
  });
1140
- }), o.querySelectorAll("[data-feat-lock]").forEach((e) => {
1141
- e.addEventListener("click", (t) => {
1142
- if (t.stopPropagation(), e.hasAttribute("data-locked-by-layer")) return;
1143
- const r = e.getAttribute("data-feat-lock"), i = a.feicoes.find((s) => s.id === r);
1144
- i && (i.locked = !i.locked, e.innerHTML = i.locked ? h.cadeadoTrancado : h.cadeadoAberto, e.classList.toggle("ui-lock-open", !i.locked), $(e, i.locked ? "Desbloquear Feição" : "Bloquear Feição"), a.dispararEvento("ui-feicao-bloqueio", {
1145
- feicaoId: i.id,
1146
- bloqueado: i.locked
1312
+ }), o.querySelectorAll("[data-feat-lock]").forEach((a) => {
1313
+ a.addEventListener("click", (t) => {
1314
+ if (t.stopPropagation(), a.hasAttribute("data-locked-by-layer")) return;
1315
+ const i = a.getAttribute("data-feat-lock"), r = e.feicoes.find((s) => s.id === i);
1316
+ r && (r.locked = !r.locked, a.innerHTML = r.locked ? g.cadeadoTrancado : g.cadeadoAberto, a.classList.toggle("ui-lock-open", !r.locked), F(a, r.locked ? "Desbloquear Feição" : "Bloquear Feição"), e.dispararEvento("ui-feicao-bloqueio", {
1317
+ feicaoId: r.id,
1318
+ bloqueado: r.locked
1147
1319
  }));
1148
1320
  });
1149
- }), o.querySelectorAll("[data-feat-fit]").forEach((e) => {
1150
- e.addEventListener("click", (t) => {
1321
+ }), o.querySelectorAll("[data-feat-fit]").forEach((a) => {
1322
+ a.addEventListener("click", (t) => {
1151
1323
  t.stopPropagation();
1152
- const r = e.getAttribute("data-feat-fit");
1153
- r && a.dispararEvento("ui-feicao-enquadrar", { feicaoId: r });
1324
+ const i = a.getAttribute("data-feat-fit");
1325
+ i && e.dispararEvento("ui-feicao-enquadrar", { feicaoId: i });
1154
1326
  });
1155
1327
  });
1156
1328
  }
1157
- function Ke(a, o) {
1158
- o.querySelectorAll("[data-basemap-thumb]").forEach((e) => {
1159
- e.addEventListener(
1329
+ function oa(e, o) {
1330
+ o.querySelectorAll("[data-basemap-thumb]").forEach((a) => {
1331
+ a.addEventListener(
1160
1332
  "error",
1161
1333
  () => {
1162
1334
  const t = document.createElement("div");
1163
- t.className = "ui-basemap-preview-none", t.innerHTML = h.mapa, e.replaceWith(t);
1335
+ t.className = "ui-basemap-preview-none", t.innerHTML = g.mapa, a.replaceWith(t);
1164
1336
  },
1165
1337
  { once: !0 }
1166
1338
  );
1167
- }), o.querySelectorAll("[data-basemap-id]").forEach((e) => {
1168
- e.addEventListener("click", () => {
1169
- const t = e.getAttribute("data-basemap-id");
1170
- t && a.selecionarMapaBase(t, !0);
1339
+ }), o.querySelectorAll("[data-basemap-id]").forEach((a) => {
1340
+ a.addEventListener("click", () => {
1341
+ const t = a.getAttribute("data-basemap-id");
1342
+ t && e.selecionarMapaBase(t, !0);
1171
1343
  });
1172
1344
  });
1173
1345
  }
1174
- function Qe(a, o) {
1175
- Ue(a, o), je(a, o), Ge(a, o), Ke(a, o), Ve(a, o);
1346
+ function sa(e, o) {
1347
+ ta(e, o), Xe(e, o), ia(e, o), oa(e, o), aa(e, o);
1176
1348
  }
1177
- const Ye = '[role="button"][tabindex]', F = "[data-layer-row], [data-feat-row]", Je = ["color", "range", "checkbox", "radio", "button"];
1178
- function ce(a) {
1179
- return a instanceof HTMLSelectElement || a instanceof HTMLTextAreaElement ? !0 : a instanceof HTMLInputElement && !Je.includes(a.type);
1349
+ const na = '[role="button"][tabindex]', P = "[data-layer-row], [data-feat-row]", la = ["color", "range", "checkbox", "radio", "button"];
1350
+ function ge(e) {
1351
+ return e instanceof HTMLSelectElement || e instanceof HTMLTextAreaElement ? !0 : e instanceof HTMLInputElement && !la.includes(e.type);
1180
1352
  }
1181
- function We(a) {
1182
- return Array.from(a.querySelectorAll(F)).filter((o) => {
1183
- const e = o.closest(".ui-children-container");
1184
- return !(e && e.style.display === "none") && !o.classList.contains("ui-search-hidden");
1353
+ function ca(e) {
1354
+ return Array.from(e.querySelectorAll(P)).filter((o) => {
1355
+ const a = o.closest(".ui-children-container");
1356
+ return !(a && a.style.display === "none") && !o.classList.contains("ui-search-hidden");
1185
1357
  });
1186
1358
  }
1187
- function O(a, o) {
1188
- o && (a.querySelectorAll(F).forEach((e) => e.setAttribute("tabindex", "-1")), o.setAttribute("tabindex", "0"), o.focus());
1359
+ function H(e, o) {
1360
+ o && (e.querySelectorAll(P).forEach((a) => a.setAttribute("tabindex", "-1")), o.setAttribute("tabindex", "0"), o.focus());
1189
1361
  }
1190
- function Xe(a, o) {
1191
- a.dispatchEvent(
1362
+ function da(e, o) {
1363
+ e.dispatchEvent(
1192
1364
  new MouseEvent("click", {
1193
1365
  bubbles: !0,
1194
1366
  ctrlKey: o.ctrlKey || o.metaKey,
@@ -1196,120 +1368,126 @@ function Xe(a, o) {
1196
1368
  })
1197
1369
  );
1198
1370
  }
1199
- function Ze(a, o, e) {
1371
+ function ua(e, o, a) {
1200
1372
  var t;
1201
- if (!ce(e.composedPath()[0])) {
1202
- if (a.activeSettingsLayerId) {
1203
- e.preventDefault();
1204
- const r = a.activeSettingsLayerId;
1205
- a.activeSettingsLayerId = null, a.solicitarRenderizacao(), (t = S(o, "data-layer-settings", r)) == null || t.focus();
1373
+ if (!ge(a.composedPath()[0])) {
1374
+ if (e.activeSettingsLayerId) {
1375
+ a.preventDefault();
1376
+ const i = e.activeSettingsLayerId;
1377
+ e.activeSettingsLayerId = null, e.solicitarRenderizacao(), (t = M(o, "data-layer-settings", i)) == null || t.focus();
1206
1378
  return;
1207
1379
  }
1208
- a.selectedFeatureIds.size > 0 && (e.preventDefault(), a.limparSelecao(!0));
1380
+ e.selectedFeatureIds.size > 0 && (a.preventDefault(), e.limparSelecao(!0));
1209
1381
  }
1210
1382
  }
1211
- function ea(a, o, e) {
1383
+ function pa(e, o, a) {
1212
1384
  var s;
1213
- const t = e.composedPath()[0];
1214
- if (!(t instanceof HTMLElement) || ce(t)) return;
1215
- if ((e.key === "Enter" || e.key === " ") && t.matches(Ye)) {
1216
- e.preventDefault(), t.click();
1385
+ const t = a.composedPath()[0];
1386
+ if (!(t instanceof HTMLElement) || ge(t)) return;
1387
+ if ((a.key === "Enter" || a.key === " ") && t.matches(na)) {
1388
+ a.preventDefault(), t.click();
1217
1389
  return;
1218
1390
  }
1219
- if (!t.matches(F)) return;
1220
- const r = We(a), i = r.indexOf(t);
1221
- switch (e.key) {
1391
+ if (!t.matches(P)) return;
1392
+ const i = ca(e), r = i.indexOf(t);
1393
+ switch (a.key) {
1222
1394
  case "ArrowDown":
1223
- e.preventDefault(), O(a, r[Math.min(r.length - 1, i + 1)]);
1395
+ a.preventDefault(), H(e, i[Math.min(i.length - 1, r + 1)]);
1224
1396
  break;
1225
1397
  case "ArrowUp":
1226
- e.preventDefault(), O(a, r[Math.max(0, i - 1)]);
1398
+ a.preventDefault(), H(e, i[Math.max(0, r - 1)]);
1227
1399
  break;
1228
1400
  case "Home":
1229
- e.preventDefault(), O(a, r[0]);
1401
+ a.preventDefault(), H(e, i[0]);
1230
1402
  break;
1231
1403
  case "End":
1232
- e.preventDefault(), O(a, r[r.length - 1]);
1404
+ a.preventDefault(), H(e, i[i.length - 1]);
1233
1405
  break;
1234
1406
  case "ArrowRight":
1235
1407
  case "ArrowLeft": {
1236
1408
  const n = t.getAttribute("data-layer-row");
1237
1409
  if (!n) return;
1238
- const c = t.closest(".ui-layer-group"), l = (c == null ? void 0 : c.getAttribute("aria-expanded")) === "true";
1239
- e.key === "ArrowRight" !== l && (e.preventDefault(), (s = S(o, "data-layer-expand", n)) == null || s.click());
1410
+ const l = t.closest(".ui-layer-group"), c = (l == null ? void 0 : l.getAttribute("aria-expanded")) === "true";
1411
+ a.key === "ArrowRight" !== c && (a.preventDefault(), (s = M(o, "data-layer-expand", n)) == null || s.click());
1240
1412
  break;
1241
1413
  }
1242
1414
  case "Enter":
1243
1415
  case " ":
1244
- e.preventDefault(), Xe(t, e);
1416
+ a.preventDefault(), da(t, a);
1245
1417
  break;
1246
1418
  }
1247
1419
  }
1248
- function aa(a, o, e, t, r) {
1249
- r.add(o, "keydown", (i) => {
1250
- i.key === "Escape" && Ze(a, e, i);
1251
- }), r.add(t, "keydown", (i) => ea(t, e, i)), r.add(t, "focusin", (i) => {
1252
- const s = i.composedPath()[0];
1253
- s instanceof HTMLElement && s.matches(F) && (t.querySelectorAll(F).forEach((n) => n.setAttribute("tabindex", "-1")), s.setAttribute("tabindex", "0"));
1420
+ function fa(e, o, a, t, i) {
1421
+ i.add(o, "keydown", (r) => {
1422
+ r.key === "Escape" && ua(e, a, r);
1423
+ }), i.add(t, "keydown", (r) => pa(t, a, r)), i.add(t, "focusin", (r) => {
1424
+ const s = r.composedPath()[0];
1425
+ s instanceof HTMLElement && s.matches(P) && (t.querySelectorAll(P).forEach((n) => n.setAttribute("tabindex", "-1")), s.setAttribute("tabindex", "0"));
1254
1426
  });
1255
1427
  }
1256
- function ta(a, o) {
1428
+ function ma(e, o) {
1257
1429
  o.querySelectorAll("[data-layer-row]").forEach((t) => {
1258
- const i = t.getAttribute("data-layer-row") === a.camadaAtivaId;
1259
- t.classList.toggle("active-drawing-layer", i);
1430
+ const r = t.getAttribute("data-layer-row") === e.camadaAtivaId;
1431
+ t.classList.toggle("active-drawing-layer", r);
1260
1432
  const s = t.querySelector(".ui-col-name");
1261
1433
  if (s) {
1262
1434
  let n = s.querySelector(".ui-active-badge");
1263
- if (i && !n) {
1435
+ if (r && !n) {
1264
1436
  n = document.createElement("span"), n.className = "ui-active-badge", n.textContent = "✓ Ativa";
1265
- const c = s.querySelector(".ui-count-chip");
1266
- c ? s.insertBefore(n, c) : s.appendChild(n);
1267
- } else !i && n && n.remove();
1437
+ const l = s.querySelector(".ui-count-chip");
1438
+ l ? s.insertBefore(n, l) : s.appendChild(n);
1439
+ } else !r && n && n.remove();
1268
1440
  }
1269
1441
  });
1270
1442
  }
1271
- function ra(a, o) {
1272
- o.querySelectorAll(".ui-feat-row").forEach((m) => {
1273
- const v = m.getAttribute("data-feat-row"), E = v ? a.selectedFeatureIds.has(v) : !1;
1274
- m.classList.toggle("selected-row", E), m.setAttribute("aria-selected", String(E));
1275
- const y = m.querySelector(".ui-target-circle");
1276
- y && y.classList.toggle("selected", E);
1277
- }), o.querySelectorAll(".ui-layer-group").forEach((m) => {
1278
- const v = m.getAttribute("data-layer-id"), E = a.feicoes.filter((g) => g.layerId === v), y = m.querySelector(".ui-layer-row .ui-target-circle");
1279
- if (y && E.length > 0) {
1280
- const g = E.every((w) => a.selectedFeatureIds.has(w.id)), b = !g && E.some((w) => a.selectedFeatureIds.has(w.id));
1281
- y.classList.toggle("selected", g), y.classList.toggle("partial", b);
1282
- } else y && y.classList.remove("selected", "partial");
1443
+ function ha(e, o) {
1444
+ o.querySelectorAll(".ui-feat-row").forEach((v) => {
1445
+ const b = v.getAttribute("data-feat-row"), I = b ? e.selectedFeatureIds.has(b) : !1;
1446
+ v.classList.toggle("selected-row", I), v.setAttribute("aria-selected", String(I));
1447
+ const x = v.querySelector(".ui-target-circle");
1448
+ x && x.classList.toggle("selected", I);
1449
+ }), o.querySelectorAll(".ui-layer-group").forEach((v) => {
1450
+ const b = v.getAttribute("data-layer-id"), I = e.feicoes.filter((w) => w.layerId === b), x = v.querySelector(".ui-layer-row .ui-target-circle");
1451
+ if (x && I.length > 0) {
1452
+ const w = I.every((C) => e.selectedFeatureIds.has(C.id)), $ = !w && I.some((C) => e.selectedFeatureIds.has(C.id));
1453
+ x.classList.toggle("selected", w), x.classList.toggle("partial", $);
1454
+ } else x && x.classList.remove("selected", "partial");
1283
1455
  });
1284
- const e = a.feicoes.filter((m) => a.selectedFeatureIds.has(m.id)), t = e.length > 0, r = o.getElementById("footer-count"), i = o.getElementById("footer-label");
1285
- r && (r.textContent = String(t ? e.length : a.camadas.length)), i && (i.textContent = t ? e.length > 1 ? "selecionados" : "selecionado" : a.camadas.length > 1 ? "camadas" : "camada");
1286
- const s = o.querySelector(".ui-footer-metric"), n = oe(e);
1287
- s && (n ? (s.innerHTML = `${h.reguaMetrica} ${n}`, s.style.display = "inline-flex") : s.style.display = "none"), ["btn-footer-vis", "btn-footer-lock", "btn-footer-del"].forEach((m) => {
1288
- const v = o.getElementById(m);
1289
- v && (v.disabled = !t, v.classList.toggle("disabled", !t));
1456
+ const a = e.feicoes.filter((v) => e.selectedFeatureIds.has(v.id)), t = a.length > 0, i = o.getElementById("footer-count"), r = o.getElementById("footer-label");
1457
+ i && (i.textContent = String(t ? a.length : e.camadas.length)), r && (r.textContent = t ? a.length > 1 ? "selecionados" : "selecionado" : e.camadas.length > 1 ? "camadas" : "camada");
1458
+ const s = o.querySelector(".ui-footer-metric"), n = pe(a);
1459
+ s && (n ? (s.innerHTML = `${g.reguaMetrica} ${n}`, s.style.display = "inline-flex") : s.style.display = "none");
1460
+ const l = o.querySelector(".ui-tree-footer");
1461
+ l && (l.classList.toggle("tem-selecao", t), l.classList.toggle("sem-selecao", !t));
1462
+ const c = o.querySelector(".ui-footer-actions-gerais");
1463
+ c && (c.style.display = t ? "none" : "flex");
1464
+ const f = o.querySelector(".ui-footer-bulk-actions");
1465
+ f && (f.style.display = t ? "flex" : "none"), ["btn-footer-vis", "btn-footer-lock", "btn-footer-del"].forEach((v) => {
1466
+ const b = o.getElementById(v);
1467
+ b && (b.disabled = !t, b.classList.toggle("disabled", !t));
1290
1468
  });
1291
- const c = o.querySelector(".ui-footer-move-wrapper");
1292
- c && c.classList.toggle("disabled", !t);
1293
- const l = o.getElementById("select-footer-move");
1294
- l && (l.disabled = !t);
1295
- const u = o.querySelector(".ui-footer-color-wrapper");
1469
+ const u = o.querySelector(".ui-footer-move-wrapper");
1296
1470
  u && u.classList.toggle("disabled", !t);
1297
- const p = o.getElementById("input-footer-color");
1471
+ const p = o.getElementById("select-footer-move");
1298
1472
  p && (p.disabled = !t);
1299
- let d = o.getElementById("btn-footer-clear");
1300
- const f = o.querySelector(".ui-footer-right");
1301
- t && !d && f ? (d = document.createElement("button"), d.id = "btn-footer-clear", d.className = "ui-footer-btn", d.title = "Limpar seleção", d.innerHTML = h.fechar, d.addEventListener("click", () => a.limparSelecao(!0)), f.appendChild(d)) : !t && d && d.remove();
1473
+ const d = o.querySelector(".ui-footer-color-wrapper");
1474
+ d && d.classList.toggle("disabled", !t);
1475
+ const m = o.getElementById("input-footer-color");
1476
+ m && (m.disabled = !t);
1477
+ let h = o.getElementById("btn-footer-clear");
1478
+ const k = o.querySelector(".ui-footer-right");
1479
+ t && !h && k ? (h = document.createElement("button"), h.id = "btn-footer-clear", h.className = "ui-footer-btn btn-clear-footer", h.title = "Limpar seleção", h.innerHTML = g.fechar, h.addEventListener("click", () => e.limparSelecao(!0)), k.appendChild(h)) : !t && h && h.remove();
1302
1480
  }
1303
- function ia(a) {
1481
+ function ga(e) {
1304
1482
  function t() {
1305
- return a.getMinAltura ? a.getMinAltura() : 140;
1483
+ return e.getMinAltura ? e.getMinAltura() : 140;
1306
1484
  }
1307
- function r() {
1308
- return a.getMaxAltura ? a.getMaxAltura() : 1600;
1485
+ function i() {
1486
+ return e.getMaxAltura ? e.getMaxAltura() : 1600;
1309
1487
  }
1310
- function i(l, u = !1) {
1311
- if (l == null || l === "") {
1312
- a.hostElement.style.removeProperty("height"), a.hostElement.style.removeProperty("--ui-camadas-altura"), u && a.hostElement.dispatchEvent(
1488
+ function r(c, f = !1) {
1489
+ if (c == null || c === "") {
1490
+ e.hostElement.style.removeProperty("height"), e.hostElement.style.removeProperty("--ui-camadas-altura"), f && e.hostElement.dispatchEvent(
1313
1491
  new CustomEvent("ui-redimensionar-altura", {
1314
1492
  bubbles: !0,
1315
1493
  composed: !0,
@@ -1318,103 +1496,103 @@ function ia(a) {
1318
1496
  );
1319
1497
  return;
1320
1498
  }
1321
- const p = typeof l == "number" ? l : parseFloat(String(l));
1322
- if (isNaN(p)) return;
1323
- const d = Math.max(t(), Math.min(r(), Math.round(p)));
1324
- a.hostElement.style.height = `${d}px`, a.hostElement.style.setProperty("--ui-camadas-altura", `${d}px`), u && a.hostElement.dispatchEvent(
1499
+ const u = typeof c == "number" ? c : parseFloat(String(c));
1500
+ if (isNaN(u)) return;
1501
+ const p = Math.max(t(), Math.min(i(), Math.round(u)));
1502
+ e.hostElement.style.height = `${p}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${p}px`), f && e.hostElement.dispatchEvent(
1325
1503
  new CustomEvent("ui-redimensionar-altura", {
1326
1504
  bubbles: !0,
1327
1505
  composed: !0,
1328
- detail: { altura: d }
1506
+ detail: { altura: p }
1329
1507
  })
1330
1508
  );
1331
1509
  }
1332
1510
  let s = null;
1333
1511
  function n() {
1334
- if (!a.resizerElement) return;
1335
- let l = !1, u = 0, p = 0;
1336
- const d = (m) => {
1512
+ if (!e.resizerElement) return;
1513
+ let c = !1, f = 0, u = 0;
1514
+ const p = (m) => {
1337
1515
  if (m.button !== 0) return;
1338
- m.preventDefault(), m.stopPropagation(), l = !0, u = m.clientY, p = a.hostElement.getBoundingClientRect().height, a.resizerElement.classList.add("ui-camadas-resizer--ativo"), a.hostElement.classList.add("ui-camadas--redimensionando");
1516
+ m.preventDefault(), m.stopPropagation(), c = !0, f = m.clientY, u = e.hostElement.getBoundingClientRect().height, e.resizerElement.classList.add("ui-camadas-resizer--ativo"), e.hostElement.classList.add("ui-camadas--redimensionando");
1339
1517
  try {
1340
- a.resizerElement.setPointerCapture(m.pointerId);
1518
+ e.resizerElement.setPointerCapture(m.pointerId);
1341
1519
  } catch {
1342
1520
  }
1343
- const v = (g) => {
1344
- if (!l) return;
1345
- g.preventDefault();
1346
- const b = g.clientY - u, w = Math.max(t(), Math.min(r(), Math.round(p + b)));
1347
- a.hostElement.style.height = `${w}px`, a.hostElement.style.setProperty("--ui-camadas-altura", `${w}px`), a.onRedimensionando && a.onRedimensionando(w), a.hostElement.dispatchEvent(
1521
+ const h = (b) => {
1522
+ if (!c) return;
1523
+ b.preventDefault();
1524
+ const I = b.clientY - f, x = Math.max(t(), Math.min(i(), Math.round(u + I)));
1525
+ e.hostElement.style.height = `${x}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${x}px`), e.onRedimensionando && e.onRedimensionando(x), e.hostElement.dispatchEvent(
1348
1526
  new CustomEvent("ui-redimensionando-altura", {
1349
1527
  bubbles: !0,
1350
1528
  composed: !0,
1351
- detail: { altura: w }
1529
+ detail: { altura: x }
1352
1530
  })
1353
1531
  );
1354
- }, E = () => {
1355
- var g;
1356
- l = !1, s = null, window.removeEventListener("pointermove", v), window.removeEventListener("pointerup", y), window.removeEventListener("pointercancel", y), (g = a.resizerElement) == null || g.classList.remove("ui-camadas-resizer--ativo"), a.hostElement.classList.remove("ui-camadas--redimensionando");
1357
- }, y = (g) => {
1358
- if (!l) return;
1359
- l = !1, a.resizerElement.classList.remove("ui-camadas-resizer--ativo"), a.hostElement.classList.remove("ui-camadas--redimensionando");
1532
+ }, k = () => {
1533
+ var b;
1534
+ c = !1, s = null, window.removeEventListener("pointermove", h), window.removeEventListener("pointerup", v), window.removeEventListener("pointercancel", v), (b = e.resizerElement) == null || b.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
1535
+ }, v = (b) => {
1536
+ if (!c) return;
1537
+ c = !1, e.resizerElement.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
1360
1538
  try {
1361
- a.resizerElement.hasPointerCapture(g.pointerId) && a.resizerElement.releasePointerCapture(g.pointerId);
1539
+ e.resizerElement.hasPointerCapture(b.pointerId) && e.resizerElement.releasePointerCapture(b.pointerId);
1362
1540
  } catch {
1363
1541
  }
1364
- window.removeEventListener("pointermove", v), window.removeEventListener("pointerup", y), window.removeEventListener("pointercancel", y);
1365
- const b = a.hostElement.getBoundingClientRect().height, w = Math.round(b);
1366
- a.onAlturaAlterada && a.onAlturaAlterada(w), a.hostElement.dispatchEvent(
1542
+ window.removeEventListener("pointermove", h), window.removeEventListener("pointerup", v), window.removeEventListener("pointercancel", v);
1543
+ const I = e.hostElement.getBoundingClientRect().height, x = Math.round(I);
1544
+ e.onAlturaAlterada && e.onAlturaAlterada(x), e.hostElement.dispatchEvent(
1367
1545
  new CustomEvent("ui-redimensionar-altura", {
1368
1546
  bubbles: !0,
1369
1547
  composed: !0,
1370
- detail: { altura: w }
1548
+ detail: { altura: x }
1371
1549
  })
1372
1550
  );
1373
1551
  };
1374
- s = E, window.addEventListener("pointermove", v), window.addEventListener("pointerup", y), window.addEventListener("pointercancel", y);
1375
- }, f = (m) => {
1376
- m.preventDefault(), m.stopPropagation(), i(null, !0), a.onAlturaAlterada && a.onAlturaAlterada(null);
1552
+ s = k, window.addEventListener("pointermove", h), window.addEventListener("pointerup", v), window.addEventListener("pointercancel", v);
1553
+ }, d = (m) => {
1554
+ m.preventDefault(), m.stopPropagation(), r(null, !0), e.onAlturaAlterada && e.onAlturaAlterada(null);
1377
1555
  };
1378
- a.listeners.add(a.resizerElement, "pointerdown", d), a.listeners.add(a.resizerElement, "dblclick", f);
1556
+ e.listeners.add(e.resizerElement, "pointerdown", p), e.listeners.add(e.resizerElement, "dblclick", d);
1379
1557
  }
1380
- function c() {
1381
- s == null || s(), a.listeners.cleanup();
1558
+ function l() {
1559
+ s == null || s(), e.listeners.cleanup();
1382
1560
  }
1383
1561
  return {
1384
1562
  init: n,
1385
- definirAltura: i,
1386
- destruir: c
1563
+ definirAltura: r,
1564
+ destruir: l
1387
1565
  };
1388
1566
  }
1389
- const M = class M extends xe {
1567
+ const q = class q extends $e {
1390
1568
  constructor() {
1391
1569
  super();
1392
- x(this, "shadow");
1393
- x(this, "listeners", new ye());
1394
- x(this, "dragDropManager");
1395
- x(this, "resizerController");
1396
- x(this, "alturaCustomizada", null);
1397
- x(this, "conectado", !1);
1398
- x(this, "profundidadeLote", 0);
1399
- x(this, "renderPendente", !1);
1400
- x(this, "camadasRemovidas", /* @__PURE__ */ new Set());
1401
- x(this, "origensCamadas", /* @__PURE__ */ new Map());
1402
- x(this, "salvarLembrancaDebounced", se(() => this.salvarLembrancaEstado(), 200));
1570
+ y(this, "shadow");
1571
+ y(this, "listeners", new Se());
1572
+ y(this, "dragDropManager");
1573
+ y(this, "resizerController");
1574
+ y(this, "alturaCustomizada", null);
1575
+ y(this, "conectado", !1);
1576
+ y(this, "profundidadeLote", 0);
1577
+ y(this, "renderPendente", !1);
1578
+ y(this, "camadasRemovidas", /* @__PURE__ */ new Set());
1579
+ y(this, "origensCamadas", /* @__PURE__ */ new Map());
1580
+ y(this, "salvarLembrancaDebounced", fe(() => this.salvarLembrancaEstado(), 200));
1403
1581
  // Estado interno
1404
- x(this, "camadas", []);
1405
- x(this, "feicoes", []);
1406
- x(this, "mapasBase", [...ne]);
1407
- x(this, "expandedLayers", /* @__PURE__ */ new Set());
1408
- x(this, "selectedFeatureIds", /* @__PURE__ */ new Set());
1409
- x(this, "lastClickedFeatureId", null);
1410
- x(this, "activeSettingsLayerId", null);
1411
- x(this, "editingLayerId", null);
1412
- x(this, "editingFeatureId", null);
1413
- x(this, "searchQuery", "");
1414
- x(this, "corpoElement");
1415
- x(this, "btnExpandirFlutuante");
1582
+ y(this, "camadas", []);
1583
+ y(this, "feicoes", []);
1584
+ y(this, "mapasBase", [...me]);
1585
+ y(this, "expandedLayers", /* @__PURE__ */ new Set());
1586
+ y(this, "selectedFeatureIds", /* @__PURE__ */ new Set());
1587
+ y(this, "lastClickedFeatureId", null);
1588
+ y(this, "activeSettingsLayerId", null);
1589
+ y(this, "editingLayerId", null);
1590
+ y(this, "editingFeatureId", null);
1591
+ y(this, "searchQuery", "");
1592
+ y(this, "corpoElement");
1593
+ y(this, "btnExpandirFlutuante");
1416
1594
  this.shadow = this.attachShadow({ mode: "open" }), this.shadow.innerHTML = `
1417
- <style>${Re}</style>
1595
+ <style>${We}</style>
1418
1596
  <div class="ui-camadas-container" id="panel-container" role="region" aria-label="Painel de Camadas">
1419
1597
  <div class="ui-camadas-corpo" id="painel-corpo"></div>
1420
1598
  <div class="ui-camadas-resizer-altura" id="resizer-altura" title="Arraste para redimensionar a altura (duplo-clique para resetar)" aria-label="Redimensionar altura">
@@ -1422,13 +1600,13 @@ const M = class M extends xe {
1422
1600
  </div>
1423
1601
  </div>
1424
1602
  <button class="ui-camadas-toggle-flutuante" id="btn-expandir-flutuante" title="Expandir Painel de Camadas" aria-label="Expandir Painel de Camadas">
1425
- ${h.camadas}
1603
+ ${g.camadas}
1426
1604
  </button>
1427
- `, this.corpoElement = this.shadow.getElementById("painel-corpo"), this.btnExpandirFlutuante = this.shadow.getElementById("btn-expandir-flutuante"), this.dragDropManager = new Fe(this, this.shadow);
1428
- const e = this.shadow.getElementById("resizer-altura");
1429
- this.resizerController = ia({
1605
+ `, this.corpoElement = this.shadow.getElementById("painel-corpo"), this.btnExpandirFlutuante = this.shadow.getElementById("btn-expandir-flutuante"), this.dragDropManager = new Ve(this, this.shadow);
1606
+ const a = this.shadow.getElementById("resizer-altura");
1607
+ this.resizerController = ga({
1430
1608
  hostElement: this,
1431
- resizerElement: e,
1609
+ resizerElement: a,
1432
1610
  listeners: this.listeners,
1433
1611
  getMinAltura: () => {
1434
1612
  const t = this.getAttribute("min-altura");
@@ -1467,131 +1645,131 @@ const M = class M extends xe {
1467
1645
  }
1468
1646
  connectedCallback() {
1469
1647
  if (this.persistir) {
1470
- const e = _(this.obterChaveStorageAtual());
1471
- e && (e.painelColapsado === !0 && !this.hasAttribute("colapsado") && (this.colapsado = !0), e.camadaAtivaId && !this.getAttribute("camada-ativa") && (this.camadaAtivaId = e.camadaAtivaId), e.mapaBaseAtivo && !this.getAttribute("mapa-base-ativo") && (this.mapaBaseAtivo = e.mapaBaseAtivo), e.densidade && !this.getAttribute("densidade") && (this.densidade = e.densidade), typeof e.altura == "number" && !this.getAttribute("altura") && !this.style.height && (this.resizerController.definirAltura(e.altura, !1), this.alturaCustomizada = e.altura));
1648
+ const a = W(this.obterChaveStorageAtual());
1649
+ 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));
1472
1650
  }
1473
- this.hasAttribute("altura") && this.resizerController.definirAltura(this.getAttribute("altura"), !1), this.persistir && !this.storageKey && !this.id && (M.instanciasChavePadrao.size > 0 && console.warn(
1651
+ this.hasAttribute("altura") && this.resizerController.definirAltura(this.getAttribute("altura"), !1), this.persistir && !this.storageKey && !this.id && (q.instanciasChavePadrao.size > 0 && console.warn(
1474
1652
  "[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."
1475
- ), M.instanciasChavePadrao.add(this)), this.resizerController.init(), this.render(), this.conectarEventosGerais(), aa(this, this, this.shadow, this.corpoElement, this.listeners), this.conectado = !0, this.camadas.length > 0 && this.salvarLembrancaEstado();
1653
+ ), q.instanciasChavePadrao.add(this)), this.resizerController.init(), this.render(), this.conectarEventosGerais(), fa(this, this, this.shadow, this.corpoElement, this.listeners), this.conectado = !0, this.camadas.length > 0 && this.salvarLembrancaEstado();
1476
1654
  }
1477
1655
  disconnectedCallback() {
1478
- var e;
1479
- this.conectado = !1, M.instanciasChavePadrao.delete(this), (e = this.resizerController) == null || e.destruir(), this.listeners.cleanup();
1656
+ var a;
1657
+ this.conectado = !1, q.instanciasChavePadrao.delete(this), (a = this.resizerController) == null || a.destruir(), this.listeners.cleanup();
1480
1658
  }
1481
- attributeChangedCallback(e, t, r) {
1482
- var i;
1483
- t !== r && (e === "colapsado" ? this.salvarLembrancaEstado() : e === "camada-ativa" ? (this.sincronizarCamadaAtivaDOM(), this.salvarLembrancaEstado()) : e === "mapa-base-ativo" ? r && this.marcarMapaBaseAtivoNoDOM(r) : e === "mostrar-mapas-base" || e === "mostrar-rodape" || e === "mostrar-busca" || e === "colapsavel" || e === "flutuante" ? this.solicitarRenderizacao() : e === "altura" && ((i = this.resizerController) == null || i.definirAltura(r, !1)));
1659
+ attributeChangedCallback(a, t, i) {
1660
+ var r;
1661
+ t !== i && (a === "colapsado" ? this.salvarLembrancaEstado() : a === "camada-ativa" ? (this.sincronizarCamadaAtivaDOM(), this.salvarLembrancaEstado()) : a === "mapa-base-ativo" ? i && this.marcarMapaBaseAtivoNoDOM(i) : a === "mostrar-mapas-base" || a === "mostrar-rodape" || a === "mostrar-busca" || a === "colapsavel" || a === "flutuante" ? this.solicitarRenderizacao() : a === "altura" && ((r = this.resizerController) == null || r.definirAltura(i, !1)));
1484
1662
  }
1485
1663
  // --- Getters e Setters de Propriedades Reativas ---
1486
1664
  get titulo() {
1487
1665
  return this.getAttribute("titulo") || "Camadas";
1488
1666
  }
1489
- set titulo(e) {
1490
- this.setAttribute("titulo", e);
1667
+ set titulo(a) {
1668
+ this.setAttribute("titulo", a);
1491
1669
  }
1492
1670
  get camadaAtivaId() {
1493
- var e;
1494
- return this.getAttribute("camada-ativa") || (((e = this.camadas[0]) == null ? void 0 : e.id) ?? null);
1671
+ var a;
1672
+ return this.getAttribute("camada-ativa") || (((a = this.camadas[0]) == null ? void 0 : a.id) ?? null);
1495
1673
  }
1496
- set camadaAtivaId(e) {
1497
- e ? this.setAttribute("camada-ativa", e) : this.removeAttribute("camada-ativa");
1674
+ set camadaAtivaId(a) {
1675
+ a ? this.setAttribute("camada-ativa", a) : this.removeAttribute("camada-ativa");
1498
1676
  }
1499
1677
  get mapaBaseAtivo() {
1500
1678
  return this.getAttribute("mapa-base-ativo") || "satelite";
1501
1679
  }
1502
- set mapaBaseAtivo(e) {
1503
- this.setAttribute("mapa-base-ativo", e);
1680
+ set mapaBaseAtivo(a) {
1681
+ this.setAttribute("mapa-base-ativo", a);
1504
1682
  }
1505
- selecionarMapaBase(e, t = !1) {
1506
- !e || this.mapaBaseAtivo === e || (this.mapaBaseAtivo = e, this.marcarMapaBaseAtivoNoDOM(e), this.salvarLembrancaEstado(), t && this.dispararEvento("ui-mapa-base-alterado", { mapaBaseId: e }));
1683
+ selecionarMapaBase(a, t = !1) {
1684
+ !a || this.mapaBaseAtivo === a || (this.mapaBaseAtivo = a, this.marcarMapaBaseAtivoNoDOM(a), this.salvarLembrancaEstado(), t && this.dispararEvento("ui-mapa-base-alterado", { mapaBaseId: a }));
1507
1685
  }
1508
- marcarMapaBaseAtivoNoDOM(e) {
1686
+ marcarMapaBaseAtivoNoDOM(a) {
1509
1687
  this.shadow.querySelectorAll("[data-basemap-id]").forEach((t) => {
1510
- const r = t.getAttribute("data-basemap-id") === e;
1511
- t.classList.toggle("active", r), t.setAttribute("aria-pressed", String(r));
1688
+ const i = t.getAttribute("data-basemap-id") === a;
1689
+ t.classList.toggle("active", i), t.setAttribute("aria-pressed", String(i));
1512
1690
  });
1513
1691
  }
1514
1692
  get abaAtiva() {
1515
1693
  return this.getAttribute("aba-ativa") || "camadas";
1516
1694
  }
1517
- set abaAtiva(e) {
1518
- this.setAttribute("aba-ativa", e);
1695
+ set abaAtiva(a) {
1696
+ this.setAttribute("aba-ativa", a);
1519
1697
  }
1520
1698
  get colapsado() {
1521
1699
  return this.hasAttribute("colapsado");
1522
1700
  }
1523
- set colapsado(e) {
1524
- e ? this.setAttribute("colapsado", "") : this.removeAttribute("colapsado");
1701
+ set colapsado(a) {
1702
+ a ? this.setAttribute("colapsado", "") : this.removeAttribute("colapsado");
1525
1703
  }
1526
1704
  get colapsavel() {
1527
1705
  return this.getAttribute("colapsavel") !== "false";
1528
1706
  }
1529
- set colapsavel(e) {
1530
- this.setAttribute("colapsavel", String(e));
1707
+ set colapsavel(a) {
1708
+ this.setAttribute("colapsavel", String(a));
1531
1709
  }
1532
1710
  get flutuante() {
1533
1711
  return this.hasAttribute("flutuante");
1534
1712
  }
1535
- set flutuante(e) {
1536
- e ? this.setAttribute("flutuante", "") : this.removeAttribute("flutuante");
1713
+ set flutuante(a) {
1714
+ a ? this.setAttribute("flutuante", "") : this.removeAttribute("flutuante");
1537
1715
  }
1538
1716
  get densidade() {
1539
1717
  return this.getAttribute("densidade") || "normal";
1540
1718
  }
1541
- set densidade(e) {
1542
- this.setAttribute("densidade", e);
1719
+ set densidade(a) {
1720
+ this.setAttribute("densidade", a);
1543
1721
  }
1544
1722
  get mostrarMapasBase() {
1545
1723
  return this.getAttribute("mostrar-mapas-base") !== "false";
1546
1724
  }
1547
- set mostrarMapasBase(e) {
1548
- this.setAttribute("mostrar-mapas-base", String(e));
1725
+ set mostrarMapasBase(a) {
1726
+ this.setAttribute("mostrar-mapas-base", String(a));
1549
1727
  }
1550
1728
  get mostrarRodape() {
1551
1729
  return this.getAttribute("mostrar-rodape") !== "false";
1552
1730
  }
1553
- set mostrarRodape(e) {
1554
- this.setAttribute("mostrar-rodape", String(e));
1731
+ set mostrarRodape(a) {
1732
+ this.setAttribute("mostrar-rodape", String(a));
1555
1733
  }
1556
1734
  get mostrarBusca() {
1557
1735
  return this.getAttribute("mostrar-busca") !== "false";
1558
1736
  }
1559
- set mostrarBusca(e) {
1560
- this.setAttribute("mostrar-busca", String(e));
1737
+ set mostrarBusca(a) {
1738
+ this.setAttribute("mostrar-busca", String(a));
1561
1739
  }
1562
1740
  get persistir() {
1563
1741
  return this.getAttribute("persistir") !== "false";
1564
1742
  }
1565
- set persistir(e) {
1566
- this.setAttribute("persistir", String(e));
1743
+ set persistir(a) {
1744
+ this.setAttribute("persistir", String(a));
1567
1745
  }
1568
1746
  get storageKey() {
1569
1747
  return this.getAttribute("storage-key");
1570
1748
  }
1571
- set storageKey(e) {
1572
- e ? this.setAttribute("storage-key", e) : this.removeAttribute("storage-key");
1749
+ set storageKey(a) {
1750
+ a ? this.setAttribute("storage-key", a) : this.removeAttribute("storage-key");
1573
1751
  }
1574
1752
  get redimensionavel() {
1575
1753
  return this.hasAttribute("redimensionavel") || this.hasAttribute("redimensionavel-altura");
1576
1754
  }
1577
- set redimensionavel(e) {
1578
- e ? this.setAttribute("redimensionavel", "") : (this.removeAttribute("redimensionavel"), this.removeAttribute("redimensionavel-altura"));
1755
+ set redimensionavel(a) {
1756
+ a ? this.setAttribute("redimensionavel", "") : (this.removeAttribute("redimensionavel"), this.removeAttribute("redimensionavel-altura"));
1579
1757
  }
1580
1758
  get altura() {
1581
1759
  return this.getAttribute("altura") || this.style.height || null;
1582
1760
  }
1583
- set altura(e) {
1584
- e != null ? (this.setAttribute("altura", String(e)), this.definirAltura(e)) : (this.removeAttribute("altura"), this.definirAltura(null));
1761
+ set altura(a) {
1762
+ a != null ? (this.setAttribute("altura", String(a)), this.definirAltura(a)) : (this.removeAttribute("altura"), this.definirAltura(null));
1585
1763
  }
1586
- definirAltura(e, t = !0) {
1587
- var i;
1588
- (i = this.resizerController) == null || i.definirAltura(e, !1);
1589
- const r = e !== null ? parseFloat(String(e)) : null;
1590
- this.alturaCustomizada = isNaN(r) ? null : r, t && this.salvarLembrancaEstado();
1764
+ definirAltura(a, t = !0) {
1765
+ var r;
1766
+ (r = this.resizerController) == null || r.definirAltura(a, !1);
1767
+ const i = a !== null ? parseFloat(String(a)) : null;
1768
+ this.alturaCustomizada = isNaN(i) ? null : i, t && this.salvarLembrancaEstado();
1591
1769
  }
1592
1770
  // --- Gerenciamento de Persistência / Lembrança ---
1593
1771
  obterChaveStorageAtual() {
1594
- return qe(this.storageKey, this.id);
1772
+ return _e(this.storageKey, this.id);
1595
1773
  }
1596
1774
  /** Versão com debounce, para interações contínuas (seletor de cor, slider de opacidade). */
1597
1775
  agendarSalvarLembranca() {
@@ -1599,8 +1777,8 @@ const M = class M extends xe {
1599
1777
  }
1600
1778
  salvarLembrancaEstado() {
1601
1779
  if (!this.persistir || !this.conectado) return;
1602
- const e = this.obterChaveStorageAtual(), t = Pe({
1603
- estadoAnterior: _(e),
1780
+ const a = this.obterChaveStorageAtual(), t = Je({
1781
+ estadoAnterior: W(a),
1604
1782
  origensCamadas: this.origensCamadas,
1605
1783
  camadas: this.camadas,
1606
1784
  expandedLayers: this.expandedLayers,
@@ -1611,10 +1789,10 @@ const M = class M extends xe {
1611
1789
  altura: this.alturaCustomizada,
1612
1790
  camadasRemovidas: this.camadasRemovidas
1613
1791
  });
1614
- this.camadasRemovidas.clear(), De(e, t);
1792
+ this.camadasRemovidas.clear(), Ke(a, t);
1615
1793
  }
1616
1794
  limparLembranca() {
1617
- Te(this.obterChaveStorageAtual());
1795
+ Ye(this.obterChaveStorageAtual());
1618
1796
  }
1619
1797
  // --- API Pública de Alta Ergonomia ---
1620
1798
  //
@@ -1627,136 +1805,146 @@ const M = class M extends xe {
1627
1805
  get layers() {
1628
1806
  return this.camadas;
1629
1807
  }
1630
- set layers(e) {
1631
- this.definirCamadas(e);
1808
+ set layers(a) {
1809
+ this.definirCamadas(a);
1632
1810
  }
1633
1811
  /** Atalho reativo para `definirFeicoes()` — não dispara eventos. */
1634
1812
  get features() {
1635
1813
  return this.feicoes;
1636
1814
  }
1637
- set features(e) {
1638
- this.definirFeicoes(e);
1815
+ set features(a) {
1816
+ this.definirFeicoes(a);
1639
1817
  }
1640
1818
  /** Atalho reativo para `definirMapasBase()` — não dispara eventos. */
1641
1819
  get basemaps() {
1642
1820
  return this.mapasBase;
1643
1821
  }
1644
- set basemaps(e) {
1645
- this.definirMapasBase(e);
1822
+ set basemaps(a) {
1823
+ this.definirMapasBase(a);
1646
1824
  }
1647
- definirCamadas(e, t) {
1648
- if (this.camadas = Array.isArray(e) ? e.map((i) => ({ ...i })) : [], this.origensCamadas.clear(), this.persistir) {
1649
- const i = _(this.obterChaveStorageAtual());
1650
- Oe(this.camadas, i, this.expandedLayers, this.origensCamadas), i != null && i.camadaAtivaId && this.camadas.some((s) => s.id === i.camadaAtivaId) && (this.camadaAtivaId = i.camadaAtivaId);
1825
+ achatarCamadas(a, t = null) {
1826
+ const i = [];
1827
+ for (const r of a) {
1828
+ const s = { ...r };
1829
+ t && s.parentId === void 0 && (s.parentId = t), i.push(s), Array.isArray(r.children) && r.children.length > 0 && i.push(...this.achatarCamadas(r.children, r.id));
1830
+ }
1831
+ return i;
1832
+ }
1833
+ definirCamadas(a, t) {
1834
+ if (this.camadas = Array.isArray(a) ? this.achatarCamadas(a) : [], this.origensCamadas.clear(), this.persistir) {
1835
+ const r = W(this.obterChaveStorageAtual());
1836
+ Qe(this.camadas, r, this.expandedLayers, this.origensCamadas), r != null && r.camadaAtivaId && this.camadas.some((s) => s.id === r.camadaAtivaId) && (this.camadaAtivaId = r.camadaAtivaId);
1651
1837
  } else
1652
- this.camadas.forEach((i) => {
1653
- this.origensCamadas.set(i.id, K(i)), this.expandedLayers.has(i.id) || this.expandedLayers.add(i.id);
1838
+ this.camadas.forEach((r) => {
1839
+ this.origensCamadas.set(r.id, Z(r)), this.expandedLayers.has(r.id) || this.expandedLayers.add(r.id);
1654
1840
  });
1655
1841
  if (Array.isArray(t)) {
1656
1842
  this.feicoes = t.map((n) => ({ ...n }));
1657
- const i = new Set(this.camadas.map((n) => n.id)), s = this.feicoes.filter((n) => n.layerId && !i.has(n.layerId));
1843
+ const r = new Set(this.camadas.map((n) => n.id)), s = this.feicoes.filter((n) => n.layerId && !r.has(n.layerId));
1658
1844
  s.length > 0 && console.warn(
1659
1845
  `[UI-Camadas] ${s.length} feição(ões) possuem 'layerId' não cadastrado nas camadas:`,
1660
1846
  s.map((n) => ({ id: n.id, nome: n.name, layerId: n.layerId }))
1661
1847
  ), this.sincronizarSelecoesComFeicoesValidas();
1662
1848
  }
1663
- const r = this.getAttribute("camada-ativa");
1664
- this.camadas.length > 0 && (!r || !this.camadas.some((i) => i.id === r)) && (this.camadaAtivaId = this.camadas[0].id), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
1849
+ const i = this.getAttribute("camada-ativa");
1850
+ this.camadas.length > 0 && (!i || !this.camadas.some((r) => r.id === i)) && (this.camadaAtivaId = this.camadas[0].id), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
1665
1851
  }
1666
- definirFeicoes(e) {
1667
- this.feicoes = Array.isArray(e) ? e.map((t) => ({ ...t })) : [], this.sincronizarSelecoesComFeicoesValidas(), this.solicitarRenderizacao();
1852
+ definirFeicoes(a) {
1853
+ this.feicoes = Array.isArray(a) ? a.map((t) => ({ ...t })) : [], this.sincronizarSelecoesComFeicoesValidas(), this.solicitarRenderizacao();
1668
1854
  }
1669
- definirMapasBase(e) {
1670
- this.mapasBase = Array.isArray(e) ? [...e] : [], this.solicitarRenderizacao();
1855
+ definirMapasBase(a) {
1856
+ this.mapasBase = Array.isArray(a) ? [...a] : [], this.solicitarRenderizacao();
1671
1857
  }
1672
- definirCamadaAtiva(e, t = !1) {
1673
- !e || this.camadaAtivaId === e || (this.camadaAtivaId = e, this.sincronizarCamadaAtivaDOM(), this.salvarLembrancaEstado(), t && this.dispararEvento("ui-camada-selecionada", {
1674
- camadaId: e,
1675
- camada: this.camadas.find((r) => r.id === e)
1858
+ definirCamadaAtiva(a, t = !1) {
1859
+ !a || this.camadaAtivaId === a || (this.camadaAtivaId = a, this.sincronizarCamadaAtivaDOM(), this.salvarLembrancaEstado(), t && this.dispararEvento("ui-camada-selecionada", {
1860
+ camadaId: a,
1861
+ camada: this.camadas.find((i) => i.id === a)
1676
1862
  }));
1677
1863
  }
1678
- obterCamada(e) {
1679
- return this.camadas.find((t) => t.id === e);
1864
+ obterCamada(a) {
1865
+ return this.camadas.find((t) => t.id === a);
1680
1866
  }
1681
1867
  obterCamadaAtiva() {
1682
- return this.camadas.find((e) => e.id === this.camadaAtivaId);
1868
+ return this.camadas.find((a) => a.id === this.camadaAtivaId);
1683
1869
  }
1684
- obterFeicao(e) {
1685
- return this.feicoes.find((t) => t.id === e);
1870
+ obterFeicao(a) {
1871
+ return this.feicoes.find((t) => t.id === a);
1686
1872
  }
1687
1873
  obterFeicoesSelecionadas() {
1688
- return this.feicoes.filter((e) => this.selectedFeatureIds.has(e.id));
1874
+ return this.feicoes.filter((a) => this.selectedFeatureIds.has(a.id));
1689
1875
  }
1690
- adicionarCamada(e) {
1691
- if (!e || !e.id) return;
1692
- if (this.camadas.some((r) => r.id === e.id)) {
1693
- console.warn(`[UI-Camadas] adicionarCamada ignorado: já existe uma camada com id '${e.id}'.`);
1876
+ adicionarCamada(a) {
1877
+ if (!a || !a.id) return;
1878
+ if (this.camadas.some((i) => i.id === a.id)) {
1879
+ console.warn(`[UI-Camadas] adicionarCamada ignorado: já existe uma camada com id '${a.id}'.`);
1694
1880
  return;
1695
1881
  }
1696
- const t = { ...e };
1697
- this.camadas.push(t), this.origensCamadas.set(t.id, K(t)), this.expandedLayers.add(t.id), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
1882
+ const t = { ...a };
1883
+ this.camadas.push(t), this.origensCamadas.set(t.id, Z(t)), this.expandedLayers.add(t.id), t.parentId && this.expandedLayers.add(t.parentId), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
1698
1884
  }
1699
- removerCamada(e) {
1885
+ removerCamada(a) {
1700
1886
  var t;
1701
- this.camadas = this.camadas.filter((r) => r.id !== e), this.feicoes = this.feicoes.filter((r) => r.layerId !== e), this.origensCamadas.delete(e), this.camadasRemovidas.add(e), this.expandedLayers.delete(e), this.activeSettingsLayerId === e && (this.activeSettingsLayerId = null), this.sincronizarSelecoesComFeicoesValidas(), this.selectedFeatureIds.size === 0 && (this.lastClickedFeatureId = null), this.camadaAtivaId === e && (this.camadaAtivaId = ((t = this.camadas[0]) == null ? void 0 : t.id) ?? null), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
1887
+ this.camadas.forEach((i) => {
1888
+ i.parentId === a && (i.parentId = null);
1889
+ }), this.camadas = this.camadas.filter((i) => i.id !== a), this.feicoes = this.feicoes.filter((i) => i.layerId !== a), this.origensCamadas.delete(a), this.camadasRemovidas.add(a), this.expandedLayers.delete(a), this.activeSettingsLayerId === a && (this.activeSettingsLayerId = null), this.sincronizarSelecoesComFeicoesValidas(), this.selectedFeatureIds.size === 0 && (this.lastClickedFeatureId = null), this.camadaAtivaId === a && (this.camadaAtivaId = ((t = this.camadas[0]) == null ? void 0 : t.id) ?? null), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
1702
1890
  }
1703
- adicionarFeicao(e) {
1704
- if (!(!e || !e.id)) {
1705
- if (this.feicoes.some((t) => t.id === e.id)) {
1706
- console.warn(`[UI-Camadas] adicionarFeicao ignorado: já existe uma feição com id '${e.id}'.`);
1891
+ adicionarFeicao(a) {
1892
+ if (!(!a || !a.id)) {
1893
+ if (this.feicoes.some((t) => t.id === a.id)) {
1894
+ console.warn(`[UI-Camadas] adicionarFeicao ignorado: já existe uma feição com id '${a.id}'.`);
1707
1895
  return;
1708
1896
  }
1709
- this.feicoes.push({ ...e }), this.solicitarRenderizacao();
1897
+ this.feicoes.push({ ...a }), this.solicitarRenderizacao();
1710
1898
  }
1711
1899
  }
1712
- atualizarFeicao(e) {
1713
- const t = this.feicoes.findIndex((r) => r.id === e.id);
1714
- t !== -1 && (this.feicoes[t] = { ...this.feicoes[t], ...e }, this.solicitarRenderizacao());
1900
+ atualizarFeicao(a) {
1901
+ const t = this.feicoes.findIndex((i) => i.id === a.id);
1902
+ t !== -1 && (this.feicoes[t] = { ...this.feicoes[t], ...a }, this.solicitarRenderizacao());
1715
1903
  }
1716
- removerFeicao(e) {
1717
- this.feicoes = this.feicoes.filter((t) => t.id !== e), this.selectedFeatureIds.delete(e), this.solicitarRenderizacao();
1904
+ removerFeicao(a) {
1905
+ this.feicoes = this.feicoes.filter((t) => t.id !== a), this.selectedFeatureIds.delete(a), this.solicitarRenderizacao();
1718
1906
  }
1719
- selecionarFeicao(e, t = !1, r = !1, i = !1) {
1720
- const s = Ce(this.camadas, this.feicoes, this.expandedLayers, this.searchQuery), n = !r && !s.includes(e) && this.feicoes.some((l) => l.id === e), c = Se(
1721
- n ? [...s, e] : s,
1907
+ selecionarFeicao(a, t = !1, i = !1, r = !1) {
1908
+ const s = Pe(this.camadas, this.feicoes, this.expandedLayers, this.searchQuery), n = !i && !s.includes(a) && this.feicoes.some((c) => c.id === a), l = Oe(
1909
+ n ? [...s, a] : s,
1722
1910
  this.selectedFeatureIds,
1723
1911
  this.lastClickedFeatureId,
1724
- e,
1912
+ a,
1725
1913
  t,
1726
- r
1914
+ i
1727
1915
  );
1728
- c && (this.selectedFeatureIds = c.selecionados, this.lastClickedFeatureId = c.ultimoClicadoId, this.sincronizarSelecaoDOM(), i && this.notificarMudancaSelecao());
1916
+ l && (this.selectedFeatureIds = l.selecionados, this.lastClickedFeatureId = l.ultimoClicadoId, this.sincronizarSelecaoDOM(), r && this.notificarMudancaSelecao());
1729
1917
  }
1730
- selecionarFeicoes(e, t = !1) {
1731
- const r = e || [];
1732
- r.length === this.selectedFeatureIds.size && r.every((n) => this.selectedFeatureIds.has(n)) || (this.selectedFeatureIds.clear(), r.forEach((n) => this.selectedFeatureIds.add(n)), this.lastClickedFeatureId = r.length > 0 ? r[r.length - 1] : null, this.sincronizarSelecaoDOM(), t && this.notificarMudancaSelecao());
1918
+ selecionarFeicoes(a, t = !1) {
1919
+ const i = a || [];
1920
+ i.length === this.selectedFeatureIds.size && i.every((n) => this.selectedFeatureIds.has(n)) || (this.selectedFeatureIds.clear(), i.forEach((n) => this.selectedFeatureIds.add(n)), this.lastClickedFeatureId = i.length > 0 ? i[i.length - 1] : null, this.sincronizarSelecaoDOM(), t && this.notificarMudancaSelecao());
1733
1921
  }
1734
- limparSelecao(e = !1) {
1735
- this.selectedFeatureIds.size !== 0 && (this.selectedFeatureIds.clear(), this.lastClickedFeatureId = null, this.sincronizarSelecaoDOM(), e && this.notificarMudancaSelecao());
1922
+ limparSelecao(a = !1) {
1923
+ this.selectedFeatureIds.size !== 0 && (this.selectedFeatureIds.clear(), this.lastClickedFeatureId = null, this.sincronizarSelecaoDOM(), a && this.notificarMudancaSelecao());
1736
1924
  }
1737
1925
  expandirTodas() {
1738
- this.expandedLayers = new Set(this.camadas.map((e) => e.id)), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
1926
+ this.expandedLayers = new Set(this.camadas.map((a) => a.id)), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
1739
1927
  }
1740
1928
  colapsarTodas() {
1741
1929
  this.expandedLayers.clear(), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
1742
1930
  }
1743
- alternarVisibilidadeTodas(e = !1) {
1744
- const r = !this.camadas.some((i) => i.visible !== !1);
1745
- this.camadas.forEach((i) => {
1746
- i.visible = r, e && this.dispararEvento("ui-camada-visibilidade", { camadaId: i.id, visivel: r });
1931
+ alternarVisibilidadeTodas(a = !1) {
1932
+ const i = !this.camadas.some((r) => r.visible !== !1);
1933
+ this.camadas.forEach((r) => {
1934
+ r.visible = i, a && this.dispararEvento("ui-camada-visibilidade", { camadaId: r.id, visivel: i });
1747
1935
  }), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
1748
1936
  }
1749
- colapsar(e = !1) {
1750
- this.definirColapso(!0, e);
1937
+ colapsar(a = !1) {
1938
+ this.definirColapso(!0, a);
1751
1939
  }
1752
- expandir(e = !1) {
1753
- this.definirColapso(!1, e);
1940
+ expandir(a = !1) {
1941
+ this.definirColapso(!1, a);
1754
1942
  }
1755
- alternarColapso(e = !1) {
1756
- this.definirColapso(!this.colapsado, e);
1943
+ alternarColapso(a = !1) {
1944
+ this.definirColapso(!this.colapsado, a);
1757
1945
  }
1758
- definirColapso(e, t) {
1759
- this.colapsado !== e && (this.colapsado = e, t && this.dispararEvento("ui-colapso-alterado", { colapsado: e }));
1946
+ definirColapso(a, t) {
1947
+ this.colapsado !== a && (this.colapsado = a, t && this.dispararEvento("ui-colapso-alterado", { colapsado: a }));
1760
1948
  }
1761
1949
  // --- Renderização e Ciclo de Vida ---
1762
1950
  solicitarRenderizacao() {
@@ -1770,17 +1958,17 @@ const M = class M extends xe {
1770
1958
  * Agrupa várias mutações (`adicionarFeicao` em laço, por exemplo) em uma só renderização, ao fim de `fn`.
1771
1959
  * Sem isto, cada chamada redesenha a árvore inteira.
1772
1960
  */
1773
- emLote(e) {
1961
+ emLote(a) {
1774
1962
  this.profundidadeLote++;
1775
1963
  try {
1776
- e();
1964
+ a();
1777
1965
  } finally {
1778
1966
  this.profundidadeLote--, this.profundidadeLote === 0 && this.renderPendente && (this.renderPendente = !1, this.render());
1779
1967
  }
1780
1968
  }
1781
- dispararEvento(e, t) {
1969
+ dispararEvento(a, t) {
1782
1970
  this.dispatchEvent(
1783
- new CustomEvent(e, {
1971
+ new CustomEvent(a, {
1784
1972
  detail: t,
1785
1973
  bubbles: !0,
1786
1974
  composed: !0
@@ -1788,9 +1976,9 @@ const M = class M extends xe {
1788
1976
  );
1789
1977
  }
1790
1978
  render() {
1791
- var f, m;
1979
+ var d, m;
1792
1980
  if (!this.corpoElement) return;
1793
- const e = ze({
1981
+ const a = He({
1794
1982
  camadas: this.camadas,
1795
1983
  feicoes: this.feicoes,
1796
1984
  camadaAtivaId: this.camadaAtivaId,
@@ -1801,22 +1989,22 @@ const M = class M extends xe {
1801
1989
  editingFeatureId: this.editingFeatureId,
1802
1990
  searchQuery: this.searchQuery,
1803
1991
  mostrarBotaoColapsar: this.flutuante && this.getAttribute("colapsavel") !== "false"
1804
- }), t = this.mostrarMapasBase ? Ie(this.mapasBase, this.mapaBaseAtivo) : "", r = this.mostrarRodape ? Le(this.camadas, this.feicoes, this.selectedFeatureIds) : "", i = this.shadow.getElementById("ui-layer-tree-mount"), s = this.corpoElement.scrollTop, n = i ? i.scrollTop : 0, c = this.shadow.activeElement, l = c && this.corpoElement.contains(c) ? c.id : "", u = c && !l && this.corpoElement.contains(c) ? Array.from(c.attributes).find((v) => v.name.startsWith("data-") && v.value !== "") : void 0, p = c && "selectionStart" in c ? c.selectionStart : null;
1992
+ }), t = this.mostrarMapasBase ? qe(this.mapasBase, this.mapaBaseAtivo) : "", i = this.mostrarRodape ? Te(this.camadas, this.feicoes, this.selectedFeatureIds) : "", r = this.shadow.getElementById("ui-layer-tree-mount"), s = this.corpoElement.scrollTop, n = r ? r.scrollTop : 0, l = this.shadow.activeElement, c = l && this.corpoElement.contains(l) ? l.id : "", f = l && !c && this.corpoElement.contains(l) ? Array.from(l.attributes).find((h) => h.name.startsWith("data-") && h.value !== "") : void 0, u = l && "selectionStart" in l ? l.selectionStart : null;
1805
1993
  this.corpoElement.innerHTML = `
1806
- ${e}
1807
- ${r}
1994
+ ${a}
1995
+ ${i}
1808
1996
  ${t}
1809
1997
  `, this.corpoElement.scrollTop = s;
1810
- const d = this.shadow.getElementById("ui-layer-tree-mount");
1811
- if (d && (d.scrollTop = n), l) {
1812
- const v = this.shadow.getElementById(l);
1813
- if (v && (v.focus({ preventScroll: !0 }), p !== null && typeof v.setSelectionRange == "function"))
1998
+ const p = this.shadow.getElementById("ui-layer-tree-mount");
1999
+ if (p && (p.scrollTop = n), c) {
2000
+ const h = this.shadow.getElementById(c);
2001
+ if (h && (h.focus({ preventScroll: !0 }), u !== null && typeof h.setSelectionRange == "function"))
1814
2002
  try {
1815
- v.setSelectionRange(p, p);
2003
+ h.setSelectionRange(u, u);
1816
2004
  } catch {
1817
2005
  }
1818
2006
  }
1819
- !l && u && ((f = S(this.corpoElement, u.name, u.value)) == null || f.focus({ preventScroll: !0 })), (m = this.shadow.querySelector("[data-layer-row], [data-feat-row]")) == null || m.setAttribute("tabindex", "0"), Qe(this, this.shadow), this.dragDropManager.bindAll();
2007
+ !c && f && ((d = M(this.corpoElement, f.name, f.value)) == null || d.focus({ preventScroll: !0 })), (m = this.shadow.querySelector("[data-layer-row], [data-feat-row]")) == null || m.setAttribute("tabindex", "0"), sa(this, this.shadow), this.dragDropManager.bindAll();
1820
2008
  }
1821
2009
  // --- Conexão de Eventos ---
1822
2010
  conectarEventosGerais() {
@@ -1824,67 +2012,127 @@ const M = class M extends xe {
1824
2012
  }
1825
2013
  // --- Sincronização de DOM (delegada) ---
1826
2014
  sincronizarCamadaAtivaDOM() {
1827
- ta(this, this.shadow);
2015
+ ma(this, this.shadow);
1828
2016
  }
1829
2017
  sincronizarSelecaoDOM() {
1830
- ra(this, this.shadow);
2018
+ ha(this, this.shadow);
1831
2019
  }
1832
2020
  // --- Auxiliares Internos ---
1833
2021
  sincronizarSelecoesComFeicoesValidas() {
1834
- $e(this.selectedFeatureIds, this.feicoes);
2022
+ je(this.selectedFeatureIds, this.feicoes);
1835
2023
  }
1836
2024
  notificarMudancaSelecao() {
1837
- const e = this.feicoes.filter((t) => this.selectedFeatureIds.has(t.id));
2025
+ const a = this.feicoes.filter((t) => this.selectedFeatureIds.has(t.id));
1838
2026
  this.dispararEvento("ui-feicoes-selecionadas", {
1839
2027
  feicoesIds: Array.from(this.selectedFeatureIds),
1840
- feicoes: e
1841
- }), e.length === 1 ? this.dispararEvento("ui-feicao-selecionada", {
1842
- feicaoId: e[0].id,
1843
- feicao: e[0]
1844
- }) : e.length === 0 && this.dispararEvento("ui-feicao-selecionada", {
2028
+ feicoes: a
2029
+ }), a.length === 1 ? this.dispararEvento("ui-feicao-selecionada", {
2030
+ feicaoId: a[0].id,
2031
+ feicao: a[0]
2032
+ }) : a.length === 0 && this.dispararEvento("ui-feicao-selecionada", {
1845
2033
  feicaoId: null,
1846
2034
  feicao: null
1847
2035
  });
1848
2036
  }
1849
2037
  };
1850
2038
  /** Painéis conectados sem `id` nem `storage-key`: dividem a mesma chave de persistência. */
1851
- x(M, "instanciasChavePadrao", /* @__PURE__ */ new Set());
1852
- let B = M;
1853
- class oa extends B {
2039
+ y(q, "instanciasChavePadrao", /* @__PURE__ */ new Set());
2040
+ let O = q;
2041
+ class va extends O {
2042
+ }
2043
+ class ba extends O {
2044
+ }
2045
+ ee("ui-camadas", O);
2046
+ ee("ui-painel-camadas", va);
2047
+ ee("ui-layer-panel", ba);
2048
+ function Aa(e) {
2049
+ var o;
2050
+ return {
2051
+ id: e.id,
2052
+ name: e.nome || e.id,
2053
+ color: ((o = e.estilo) == null ? void 0 : o.corPrimaria) || "#00E08A",
2054
+ visible: e.visivel !== !1,
2055
+ locked: e.bloqueada === !0,
2056
+ opacity: typeof e.opacidade == "number" ? e.opacidade : 1,
2057
+ order: e.zIndex,
2058
+ description: e.categoria ? `Categoria: ${e.categoria}` : void 0,
2059
+ categoria: e.categoria,
2060
+ tipo: e.tipo,
2061
+ estilo: e.estilo,
2062
+ dados: e.dados
2063
+ };
2064
+ }
2065
+ function ka(e, o = "levantamento", a = "feicoes") {
2066
+ return {
2067
+ id: e.id,
2068
+ nome: e.name,
2069
+ categoria: e.categoria || o,
2070
+ tipo: e.tipo || a,
2071
+ visivel: e.visible !== !1,
2072
+ opacidade: typeof e.opacity == "number" ? e.opacity : 1,
2073
+ zIndex: typeof e.order == "number" ? e.order : 500,
2074
+ bloqueada: e.locked === !0,
2075
+ interativo: !0,
2076
+ estilo: {
2077
+ corPrimaria: e.color || "#00E08A",
2078
+ scaleMode: "screen",
2079
+ ...typeof e.estilo == "object" && e.estilo !== null ? e.estilo : {}
2080
+ },
2081
+ dados: typeof e.dados == "object" && e.dados !== null ? e.dados : void 0
2082
+ };
1854
2083
  }
1855
- class sa extends B {
2084
+ function Ia(e, o = "") {
2085
+ var r, s, n, l;
2086
+ const a = ((r = e.geometria) == null ? void 0 : r.tipo) || ((s = e.geometria) == null ? void 0 : s.type) || e.tipo || e.type || "Polygon", t = ((n = e.geometria) == null ? void 0 : n.coordenadas) || ((l = e.geometria) == null ? void 0 : l.coordinates) || e.coordinates, i = e.cor || e.color;
2087
+ return {
2088
+ id: String(e.id),
2089
+ name: e.nome || e.name || `Feição ${e.id}`,
2090
+ layerId: e.layerId || e.camadaId || o,
2091
+ type: a,
2092
+ geometryType: a,
2093
+ coordinates: t,
2094
+ color: i,
2095
+ visible: e.visivel !== void 0 ? e.visivel : e.visible !== !1,
2096
+ locked: e.bloqueada !== void 0 ? e.bloqueada : e.locked === !0,
2097
+ status: e.status || "oficial",
2098
+ category: e.categoria || e.category,
2099
+ properties: e.propriedades || e.properties || {}
2100
+ };
1856
2101
  }
1857
- Q("ui-camadas", B);
1858
- Q("ui-painel-camadas", oa);
1859
- Q("ui-layer-panel", sa);
1860
2102
  export {
1861
- Fe as CamadasDragDropManager,
1862
- h as ICONES,
1863
- le as LIMITE_FEICOES_POR_CAMADA,
1864
- ne as MAPAS_BASE_PADRAO,
1865
- B as UICamadas,
1866
- sa as UILayerPanel,
1867
- fa as UIMapaBase,
1868
- oa as UIPainelCamadas,
1869
- ma as UISeletorMapaBase,
1870
- ie as calcularAreaPoligono,
1871
- re as calcularComprimentoLinha,
1872
- we as calcularDistanciaPontos,
1873
- Se as calcularSelecaoFeicao,
1874
- _ as carregarEstadoPersistido,
1875
- k as escapeHtml,
1876
- Y as filtrarFeicoesPorBusca,
1877
- oe as formatarMetricaFeicoes,
1878
- qe as gerarChaveStorage,
1879
- Te as limparEstadoPersistido,
1880
- Pe as montarEstadoPersistido,
1881
- Ce as obterIdsVisiveisFeicoes,
1882
- Oe as reidratarCamadasComOverrides,
1883
- $e as removerSelecoesInvalidas,
1884
- ze as renderizarArvoreCamadas,
1885
- Ie as renderizarGridMapasBase,
1886
- Le as renderizarRodapeAcoes,
1887
- Me as renderizarThumbGeometria,
1888
- De as salvarEstadoPersistido,
1889
- K as snapshotCamada
2103
+ Ve as CamadasDragDropManager,
2104
+ g as ICONES,
2105
+ he as LIMITE_FEICOES_POR_CAMADA,
2106
+ me as MAPAS_BASE_PADRAO,
2107
+ O as UICamadas,
2108
+ ba as UILayerPanel,
2109
+ $a as UIMapaBase,
2110
+ va as UIPainelCamadas,
2111
+ Sa as UISeletorMapaBase,
2112
+ Q as calcularAreaAnelSimples,
2113
+ ue as calcularAreaPoligono,
2114
+ de as calcularComprimentoLinha,
2115
+ ze as calcularDistanciaPontos,
2116
+ Oe as calcularSelecaoFeicao,
2117
+ W as carregarEstadoPersistido,
2118
+ Ne as construirHierarquiaCamadas,
2119
+ ka as converterCamadaItemParaCanvasLayer,
2120
+ Aa as converterCanvasLayerParaCamadaItem,
2121
+ Ia as converterFeicaoParaItem,
2122
+ L as escapeHtml,
2123
+ ae as filtrarFeicoesPorBusca,
2124
+ pe as formatarMetricaFeicoes,
2125
+ De as formatarOpcoesCamadasHierarquicas,
2126
+ _e as gerarChaveStorage,
2127
+ Ye as limparEstadoPersistido,
2128
+ Je as montarEstadoPersistido,
2129
+ Pe as obterIdsVisiveisFeicoes,
2130
+ Qe as reidratarCamadasComOverrides,
2131
+ je as removerSelecoesInvalidas,
2132
+ He as renderizarArvoreCamadas,
2133
+ qe as renderizarGridMapasBase,
2134
+ Te as renderizarRodapeAcoes,
2135
+ Re as renderizarThumbGeometria,
2136
+ Ke as salvarEstadoPersistido,
2137
+ Z as snapshotCamada
1890
2138
  };