@thibezer/ui-components-kit 2.1.0 → 2.2.1

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