@thibezer/ui-components-kit 2.2.1 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/camadas.js CHANGED
@@ -1,10 +1,10 @@
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);
1
+ var Be = Object.defineProperty;
2
+ var qe = (e, o, a) => o in e ? Be(e, o, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[o] = a;
3
+ var I = (e, o, a) => qe(e, typeof o != "symbol" ? o + "" : o, a);
4
4
  /* empty css */
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";
5
+ import { d as oe, S as De } from "./ssr-safe-5cWfJP-s.js";
6
+ import { L as Te } from "./listener-bag-DQgv7OON.js";
7
+ import { UIMapaBase as Na, UISeletorMapaBase as Ha } from "./seletor-mapa-base.js";
8
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>
@@ -103,24 +103,24 @@ const g = {
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
- }, Z = 6378137;
107
- function qe(e, o) {
106
+ }, te = 6378137;
107
+ function Pe(e, o) {
108
108
  if (!e || !o) return 0;
109
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));
110
+ return te * 2 * Math.atan2(Math.sqrt(l), Math.sqrt(1 - l));
111
111
  }
112
- function fe(e) {
112
+ function ge(e) {
113
113
  if (!Array.isArray(e) || e.length < 2) return 0;
114
114
  if (Array.isArray(e[0]) && Array.isArray(e[0][0]))
115
- return e.reduce((a, t) => a + fe(t), 0);
115
+ return e.reduce((a, t) => a + ge(t), 0);
116
116
  let o = 0;
117
117
  for (let a = 0; a < e.length - 1; a++) {
118
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]]));
119
+ Array.isArray(t) && Array.isArray(i) && t.length >= 2 && i.length >= 2 && (o += Pe([t[0], t[1]], [i[0], i[1]]));
120
120
  }
121
121
  return o;
122
122
  }
123
- function Q(e) {
123
+ function J(e) {
124
124
  if (!Array.isArray(e)) return 0;
125
125
  const o = e.length;
126
126
  if (o < 3) return 0;
@@ -131,32 +131,32 @@ function Q(e) {
131
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
132
  a += l * u - c * f;
133
133
  }
134
- const t = Math.abs(a * (Z * Z) / 2);
134
+ const t = Math.abs(a * (te * te) / 2);
135
135
  return isNaN(t) ? 0 : t;
136
136
  }
137
- function me(e) {
137
+ function ve(e) {
138
138
  if (!Array.isArray(e) || e.length === 0) return 0;
139
139
  if (Array.isArray(e[0]) && typeof e[0][0] == "number")
140
- return Q(e);
140
+ return J(e);
141
141
  if (Array.isArray(e[0]) && Array.isArray(e[0][0])) {
142
142
  if (Array.isArray(e[0][0][0]))
143
- return e.reduce((t, i) => t + me(i), 0);
144
- const o = Q(e[0]);
143
+ return e.reduce((t, i) => t + ve(i), 0);
144
+ const o = J(e[0]);
145
145
  let a = 0;
146
146
  for (let t = 1; t < e.length; t++)
147
- a += Q(e[t]);
147
+ a += J(e[t]);
148
148
  return Math.max(0, o - a);
149
149
  }
150
150
  return 0;
151
151
  }
152
- function he(e) {
152
+ function be(e) {
153
153
  if (!e || e.length === 0) return "";
154
154
  const o = e.filter(
155
155
  (t) => t.type === "Polygon" || t.type === "MultiPolygon" || t.geometryType === "Polygon"
156
156
  );
157
157
  if (o.length > 0) {
158
158
  const t = o.reduce(
159
- (i, r) => i + (me(r.coordinates) || 0),
159
+ (i, r) => i + (ve(r.coordinates) || 0),
160
160
  0
161
161
  );
162
162
  return t >= 1e4 ? `${(t / 1e4).toLocaleString("pt-BR", {
@@ -169,7 +169,7 @@ function he(e) {
169
169
  );
170
170
  if (a.length > 0) {
171
171
  const t = a.reduce(
172
- (i, r) => i + (fe(r.coordinates) || 0),
172
+ (i, r) => i + (ge(r.coordinates) || 0),
173
173
  0
174
174
  );
175
175
  return t >= 1e3 ? `${(t / 1e3).toLocaleString("pt-BR", {
@@ -179,23 +179,23 @@ function he(e) {
179
179
  }
180
180
  return "";
181
181
  }
182
- function $(e) {
182
+ function S(e) {
183
183
  return e == null ? "" : String(e).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
184
184
  }
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") {
185
+ const Oe = /^(#(?:[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 V(e, o = "#00E08A") {
187
187
  if (!e || typeof e != "string") return o;
188
188
  const a = e.trim();
189
- return Te.test(a) ? a : o;
189
+ return Oe.test(a) ? a : o;
190
190
  }
191
- function X(e) {
191
+ function W(e) {
192
192
  return Math.max(0, Math.min(255, Math.round(e))).toString(16).padStart(2, "0");
193
193
  }
194
- function De(e, o, a) {
194
+ function je(e, o, a) {
195
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
196
  return [s(0) * 255, s(8) * 255, s(4) * 255];
197
197
  }
198
- function Pe(e, o = "#000000") {
198
+ function Re(e, o = "#000000") {
199
199
  if (!e || typeof e != "string") return o;
200
200
  const a = e.trim().toLowerCase(), t = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.exec(a);
201
201
  if (t) {
@@ -206,19 +206,19 @@ function Pe(e, o = "#000000") {
206
206
  if (i) {
207
207
  const r = i[2].split(/[\s,/]+/).filter(Boolean).map((n) => parseFloat(n));
208
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)}`;
209
+ const [n, s, l] = r, [c, f, u] = i[1] === "rgb" ? [n, s, l] : je(n, s, l);
210
+ return `#${W(c)}${W(f)}${W(u)}`;
211
211
  }
212
212
  }
213
213
  return o;
214
214
  }
215
- function F(e, o, a) {
215
+ function B(e, o, a) {
216
216
  const t = e.querySelectorAll(`[${o}]`);
217
217
  for (let i = 0; i < t.length; i++)
218
218
  if (t[i].getAttribute(o) === a) return t[i];
219
219
  return null;
220
220
  }
221
- function ge(e, o = 80) {
221
+ function xe(e, o = 80) {
222
222
  let a = null;
223
223
  return (...t) => {
224
224
  a && clearTimeout(a), a = setTimeout(() => {
@@ -226,10 +226,10 @@ function ge(e, o = 80) {
226
226
  }, o);
227
227
  };
228
228
  }
229
- function B(e, o) {
229
+ function q(e, o) {
230
230
  e.setAttribute("title", o), e.setAttribute("aria-label", o);
231
231
  }
232
- const ve = [
232
+ const ye = [
233
233
  {
234
234
  id: "none",
235
235
  nome: "Sem Mapa",
@@ -272,15 +272,15 @@ const ve = [
272
272
  thumbnailUrl: "https://images.unsplash.com/photo-1518709268805-4e9042af9f23?w=160&auto=format&fit=crop&q=80"
273
273
  }
274
274
  ];
275
- function je(e = ve, o = "satelite") {
275
+ function Ne(e = ye, o = "satelite") {
276
276
  return !e || e.length === 0 ? "" : `
277
277
  <div class="ui-basemap-section">
278
278
  <div class="ui-basemap-title">Mapa Base</div>
279
279
  <div class="ui-basemap-grid">
280
280
  ${e.map((t) => {
281
- const i = o === t.id, r = $(t.id), n = $(t.nome), s = $(t.descricao || t.nome);
281
+ const i = o === t.id, r = S(t.id), n = S(t.nome), s = S(t.descricao || t.nome);
282
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>`, `
283
+ return t.thumbnailUrl ? l = `<img class="ui-basemap-preview" src="${S(t.thumbnailUrl)}" alt="" loading="lazy" referrerpolicy="no-referrer" data-basemap-thumb />` : l = `<div class="ui-basemap-preview-none">${g.gradeCad}</div>`, `
284
284
  <div class="ui-basemap-card ${i ? "active" : ""}" data-basemap-id="${r}" role="button" tabindex="0" aria-pressed="${i}" title="${s}">
285
285
  ${l}
286
286
  <span>${n}</span>
@@ -291,7 +291,7 @@ function je(e = ve, o = "satelite") {
291
291
  </div>
292
292
  `;
293
293
  }
294
- function Oe(e) {
294
+ function He(e) {
295
295
  const o = /* @__PURE__ */ new Map();
296
296
  e.forEach((r) => o.set(r.id, r));
297
297
  const a = /* @__PURE__ */ new Map(), t = [];
@@ -299,13 +299,13 @@ function Oe(e) {
299
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
300
  });
301
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("");
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="${S(r.id)}">${l}${S(r.name)}</option>`, f = s.map((u) => i(u, n + 1)).join("");
303
303
  return c + f;
304
304
  };
305
305
  return t.map((r) => i(r, 0)).join("");
306
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);
307
+ function Ge(e, o, a) {
308
+ const t = o.filter((c) => a.has(c.id)), i = t.length > 0, r = be(t), n = i ? t.length : e.length, s = i ? t.length > 1 ? "selecionados" : "selecionado" : e.length > 1 ? "camadas" : "camada", l = He(e);
309
309
  return `
310
310
  <div class="ui-tree-footer ${i ? "tem-selecao" : "sem-selecao"}">
311
311
  <div class="ui-footer-left">
@@ -357,14 +357,14 @@ function Re(e, o, a) {
357
357
  </div>
358
358
  `;
359
359
  }
360
- const be = 80;
361
- function te(e, o) {
360
+ const we = 80;
361
+ function U(e, o) {
362
362
  const a = (o || "").trim().toLowerCase();
363
363
  return a ? e.filter(
364
364
  (t) => (t.name || "").toLowerCase().includes(a) || (t.category || "").toLowerCase().includes(a) || (t.type || "").toLowerCase().includes(a)
365
365
  ) : e;
366
366
  }
367
- function Ne(e, o, a, t = "", i = be) {
367
+ function Ve(e, o, a, t = "", i = we) {
368
368
  const r = (t || "").trim() !== "", n = [], s = /* @__PURE__ */ new Map();
369
369
  for (let l = 0; l < o.length; l++) {
370
370
  const c = o[l], f = c.layerId || "";
@@ -373,14 +373,14 @@ function Ne(e, o, a, t = "", i = be) {
373
373
  for (let l = 0; l < e.length; l++) {
374
374
  const c = e[l];
375
375
  if (r || a.has(c.id)) {
376
- const f = te(s.get(c.id) || [], t).slice(0, i);
376
+ const f = U(s.get(c.id) || [], t).slice(0, i);
377
377
  for (let u = 0; u < f.length; u++)
378
378
  n.push(f[u].id);
379
379
  }
380
380
  }
381
381
  return n;
382
382
  }
383
- function He(e, o, a, t, i, r) {
383
+ function Ue(e, o, a, t, i, r) {
384
384
  if (!e.includes(t)) return null;
385
385
  const n = new Set(o);
386
386
  let s = a;
@@ -392,52 +392,52 @@ function He(e, o, a, t, i, r) {
392
392
  } else i ? (n.has(t) ? n.delete(t) : n.add(t), s = t) : (n.clear(), n.add(t), s = t);
393
393
  return { selecionados: n, ultimoClicadoId: s };
394
394
  }
395
- function Ge(e, o) {
395
+ function Ye(e, o) {
396
396
  if (e.size === 0) return;
397
397
  const a = new Set(o.map((t) => t.id));
398
398
  for (const t of e)
399
399
  a.has(t) || e.delete(t);
400
400
  }
401
- const J = 64;
402
- function ue(e) {
401
+ const Z = 64;
402
+ function fe(e) {
403
403
  return Array.isArray(e) && e.length >= 2 && Number.isFinite(e[0]) && Number.isFinite(e[1]);
404
404
  }
405
- function xe(e) {
406
- return !Array.isArray(e) || e.length === 0 ? [] : ue(e[0]) ? [e.filter(ue)] : e.flatMap(xe);
405
+ function Ee(e) {
406
+ return !Array.isArray(e) || e.length === 0 ? [] : fe(e[0]) ? [e.filter(fe)] : e.flatMap(Ee);
407
407
  }
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)]);
408
+ function me(e) {
409
+ if (e.length <= Z) return e;
410
+ const o = e.length / Z, a = [];
411
+ for (let t = 0; t < Z; t++) a.push(e[Math.floor(t * o)]);
412
412
  return a.push(e[e.length - 1]), a;
413
413
  }
414
- function Ve(e, o, a) {
415
- const t = xe(o).filter((w) => w.length > 0);
414
+ function _e(e, o, a) {
415
+ const t = Ee(o).filter((E) => E.length > 0);
416
416
  if (t.length === 0) return "";
417
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"/>`
418
+ for (const E of t)
419
+ for (const [A, $] of E)
420
+ $ < i && (i = $), $ > r && (r = $), -A < n && (n = -A), -A > s && (s = -A);
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, L = c + (f - p * m) / 2, v = (E) => Math.round(E * 100) / 100, x = ([E, A]) => `${v(h + (A - i) * m)},${v(L + (-E - n) * m)}`, b = e === "polygon" || e === "multipolygon", y = e === "linestring" || e === "multilinestring", w = (E) => `<svg viewBox="0 0 ${l} ${l}" width="100%" height="100%" aria-hidden="true">${E}</svg>`;
422
+ if (b) {
423
+ const E = t.filter((A) => A.length >= 3).map((A) => `M${me(A).map(x).join("L")}Z`).join("");
424
+ return E ? w(
425
+ `<path d="${E}" fill="${a}" fill-opacity="0.45" fill-rule="evenodd" stroke="${a}" stroke-width="1.2" stroke-linejoin="round"/>`
426
426
  ) : "";
427
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"/>`
428
+ if (y) {
429
+ const E = t.filter((A) => A.length >= 2).map((A) => `M${me(A).map(x).join("L")}`).join("");
430
+ return E ? w(
431
+ `<path d="${E}" fill="none" stroke="${a}" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>`
432
432
  ) : "";
433
433
  }
434
434
  return "";
435
435
  }
436
- function Ue(e, o, a) {
437
- const t = G(o, "#00E08A"), i = (e || "").toLowerCase(), r = a !== void 0 ? Ve(i, a, t) : "";
436
+ function Ke(e, o, a) {
437
+ const t = V(o, "#00E08A"), i = (e || "").toLowerCase(), r = a !== void 0 ? _e(i, a, t) : "";
438
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
439
  }
440
- function _e(e) {
440
+ function Xe(e) {
441
441
  const o = /* @__PURE__ */ new Map();
442
442
  e.forEach((r) => o.set(r.id, r));
443
443
  const a = /* @__PURE__ */ new Map(), t = [];
@@ -454,7 +454,7 @@ function _e(e) {
454
454
  }
455
455
  return t.map((r) => i(r, 0));
456
456
  }
457
- function Ke(e) {
457
+ function Qe(e) {
458
458
  const {
459
459
  camadas: o,
460
460
  feicoes: a,
@@ -465,14 +465,14 @@ function Ke(e) {
465
465
  editingLayerId: s,
466
466
  editingFeatureId: l,
467
467
  searchQuery: c,
468
- limiteFeicoesPorCamada: f = be,
468
+ limiteFeicoesPorCamada: f = we,
469
469
  mostrarBotaoColapsar: u = !1
470
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);
471
+ for (let y = 0; y < a.length; y++) {
472
+ const w = a[y], E = w.layerId || "";
473
+ d.has(E) || d.set(E, []), d.get(E).push(w);
474
474
  }
475
- const m = o.every((x) => x.visible !== !1), h = o.length > 0 && o.every((x) => i.has(x.id)), I = `
475
+ const m = o.every((y) => y.visible !== !1), h = o.length > 0 && o.every((y) => i.has(y.id)), L = `
476
476
  <div class="ui-tree-toolbar">
477
477
  <div class="ui-tree-title-group">
478
478
  <span class="ui-tree-section-title">CAMADAS</span>
@@ -497,54 +497,54 @@ function Ke(e) {
497
497
 
498
498
  <div class="ui-tree-search-wrapper">
499
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="${$(
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="${S(
501
501
  c
502
502
  )}" />
503
503
  ${c ? `<button class="ui-tree-search-clear" id="btn-clear-layer-search" title="Limpar busca" aria-label="Limpar busca">${g.fechar}</button>` : ""}
504
504
  </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}
505
+ `, v = (y) => {
506
+ const w = y.camada, E = y.depth, A = y.subcamadas, $ = !!(w.isGroup || A.length > 0), k = S(w.id), D = S(w.name || ($ ? "Novo Grupo" : "Camada")), z = V(w.color, "#00E08A"), R = w.visible !== !1, P = w.locked === !0, N = p ? !0 : i.has(w.id), Y = n === w.id, ne = t === w.id, M = U(d.get(w.id) || [], p), se = M.length > 0 && M.every((C) => r.has(C.id)), ke = !se && M.some((C) => r.has(C.id)), Ie = M.slice(0, f), Le = M.length > f, Ce = Ie.map((C) => {
507
+ const F = S(C.id), ce = S(C.name || "Feição"), de = V(C.color, z), H = C.visible !== !1, _ = P, K = C.locked === !0 || _, ue = _ ? "Bloqueada pela camada" : K ? "Desbloquear Feição" : "Bloquear Feição", X = r.has(C.id), pe = C.status;
508
+ let Q = "";
509
+ return pe === "oficial" ? Q = '<span class="ui-geom-tag oficial" title="Geometria Oficial">OFICIAL</span>' : pe === "previa" && (Q = '<span class="ui-geom-tag previa" title="Geometria Prévia">PRÉVIA</span>'), `
510
+ <div class="ui-feat-row ${X ? "selected-row" : ""} ${H ? "" : "hidden-row"}" data-feat-row="${F}" data-feat-select="${F}" data-feat-layer="${k}" role="treeitem" aria-selected="${X}" tabindex="-1" draggable="true" title="Clique para selecionar | Arraste para reordenar">
511
+ <div class="ui-col ui-col-eye" data-feat-eye="${F}" role="button" tabindex="0" aria-label="${H ? "Ocultar Feição" : "Exibir Feição"}" title="${H ? "Ocultar Feição" : "Exibir Feição"}">
512
+ ${H ? g.olhoAberto : g.olhoFechado}
513
513
  </div>
514
514
 
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}
515
+ <div class="ui-col ui-col-lock ${K ? "" : "ui-lock-open"}" data-feat-lock="${F}" ${_ ? 'data-locked-by-layer="true"' : ""} role="button" tabindex="0" aria-label="${ue}" title="${ue}">
516
+ ${K ? g.cadeadoTrancado : g.cadeadoAberto}
517
517
  </div>
518
518
 
519
- <div class="ui-col ui-col-colorbar" style="background: ${le};"></div>
519
+ <div class="ui-col ui-col-colorbar" style="background: ${de};"></div>
520
520
  <div class="ui-col ui-col-branch"><span style="opacity: 0.35;">└─</span></div>
521
521
  <div class="ui-col ui-col-thumb">
522
- <div class="ui-thumb-box">${Ue(k.type || k.geometryType, le, k.coordinates)}</div>
522
+ <div class="ui-thumb-box">${Ke(C.type || C.geometryType, de, C.coordinates)}</div>
523
523
  </div>
524
524
 
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}`}
525
+ <div class="ui-col ui-col-name" data-feat-name-trigger="${F}" title="Duplo clique para renomear">
526
+ ${l === C.id ? `<input type="text" class="ui-inline-rename-input" data-inline-feat-input="${F}" value="${ce}" />` : `<span class="ui-name-text">${ce}</span>${Q}`}
527
527
  </div>
528
528
 
529
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>
530
+ <button class="ui-micro-btn" data-feat-fit="${F}" title="Enquadrar no mapa" aria-label="Enquadrar feição no mapa">${g.alvoEnquadrar}</button>
531
531
  </div>
532
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>
533
+ <div class="ui-col ui-col-target" data-feat-target="${F}" role="button" tabindex="0" aria-label="Selecionar feição" title="Selecionar feição">
534
+ <div class="ui-target-circle ${X ? "selected" : ""}"></div>
535
535
  </div>
536
536
  </div>
537
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};">
538
+ }).join(""), $e = Le ? `<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 ${M.length} feições. Use a busca acima para filtrar.</div>` : "", le = w.opacity !== void 0 ? w.opacity : 1, Se = Math.round(le * 100), Me = o.filter((C) => C.id !== w.id).map(
539
+ (C) => `<option value="${S(C.id)}" ${w.parentId === C.id ? "selected" : ""}>${C.isGroup ? "📁 " : ""}${S(C.name)}</option>`
540
+ ).join(""), ze = Y ? `
541
+ <div class="ui-layer-settings-drawer" id="settings-drawer-${k}" style="--drawer-cor-camada: ${z};">
542
542
  <div class="ui-drawer-header">
543
543
  <div class="ui-drawer-header-left">
544
544
  <span class="ui-drawer-icon">${g.engrenagem}</span>
545
545
  <span class="ui-drawer-title">Configurações da Camada</span>
546
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">
547
+ <button type="button" class="ui-drawer-btn-fechar" data-layer-settings-close="${k}" title="Fechar configurações (Esc)" aria-label="Fechar configurações">
548
548
  ${g.fechar}
549
549
  </button>
550
550
  </div>
@@ -557,9 +557,9 @@ function Ke(e) {
557
557
  </div>
558
558
  <div class="ui-drawer-color-group">
559
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" />
560
+ <span class="ui-drawer-color-sample" id="sample-color-${k}" style="background-color: ${z};"></span>
561
+ <span class="ui-drawer-color-hex" id="hex-color-${k}">${z.toUpperCase()}</span>
562
+ <input type="color" aria-label="Cor da camada" data-layer-color-picker="${k}" value="${Re(z, "#00e08a")}" class="ui-drawer-color-native" />
563
563
  </label>
564
564
  </div>
565
565
  </div>
@@ -568,10 +568,10 @@ function Ke(e) {
568
568
  <div class="ui-drawer-row">
569
569
  <div class="ui-drawer-row-label">
570
570
  <span>Opacidade</span>
571
- <span class="ui-drawer-badge" id="badge-op-${L}">${Le}%</span>
571
+ <span class="ui-drawer-badge" id="badge-op-${k}">${Se}%</span>
572
572
  </div>
573
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" />
574
+ <input type="range" aria-label="Opacidade da camada" min="0.05" max="1" step="0.05" value="${Number(le) || 0}" data-layer-opacity-slider="${k}" class="ui-drawer-slider" />
575
575
  </div>
576
576
  </div>
577
577
 
@@ -581,9 +581,9 @@ function Ke(e) {
581
581
  <span>Pertence ao Grupo</span>
582
582
  </div>
583
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}
584
+ <select class="ui-drawer-select" data-layer-parent-select="${k}" aria-label="Grupo pai da camada">
585
+ <option value="" ${w.parentId ? "" : "selected"}>(Nenhum - Nível Principal)</option>
586
+ ${Me}
587
587
  </select>
588
588
  </div>
589
589
  </div>
@@ -591,78 +591,78 @@ function Ke(e) {
591
591
 
592
592
  <div class="ui-drawer-footer">
593
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>
594
+ <span>${A.length > 0 ? `${A.length} subcamadas · ` : ""}${M.length} ${M.length === 1 ? "feição" : "feições"}</span>
595
595
  </div>
596
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">
597
+ <button type="button" class="ui-drawer-btn-sublayer" data-add-sublayer="${k}" title="Adicionar nova camada dentro desta">
598
598
  ${g.mais} Subcamada
599
599
  </button>
600
- <button type="button" class="ui-drawer-btn-danger" data-delete-layer="${L}" title="Excluir esta camada e suas feições">
600
+ <button type="button" class="ui-drawer-btn-danger" data-delete-layer="${k}" title="Excluir esta camada e suas feições">
601
601
  ${g.lixeira}
602
602
  <span class="ui-btn-label">Excluir</span>
603
603
  </button>
604
604
  </div>
605
605
  </div>
606
606
  </div>
607
- ` : "", Se = E.map((k) => v(k)).join("");
607
+ ` : "", Fe = A.map((C) => v(C)).join("");
608
608
  return `
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};">
609
+ <div class="ui-layer-group ${E > 0 ? "is-sublayer-group" : ""}" data-layer-id="${k}" data-layer-depth="${E}" role="treeitem" aria-expanded="${N}">
610
+ <div class="ui-layer-row ${R ? "" : "hidden-layer"} ${ne ? "active-drawing-layer" : ""} ${E > 0 ? "is-sublayer" : ""} ${$ ? "is-group-row" : ""}" data-layer-row="${k}" data-layer-id="${k}" tabindex="-1" draggable="true" style="--layer-depth: ${E}; --layer-active-color: ${z};">
611
611
  <div class="ui-col ui-col-drag" title="Arrastar para reordenar Z-Index">${g.dragHandle}</div>
612
612
 
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}
613
+ <div class="ui-col ui-col-eye" data-layer-eye="${k}" role="button" tabindex="0" aria-label="${R ? "Ocultar Camada" : "Exibir Camada"}" title="${R ? "Ocultar Camada" : "Exibir Camada"}">
614
+ ${R ? g.olhoAberto : g.olhoFechado}
615
615
  </div>
616
616
 
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}
617
+ <div class="ui-col ui-col-lock ${P ? "" : "ui-lock-open"}" data-layer-lock="${k}" role="button" tabindex="0" aria-label="${P ? "Desbloquear Camada" : "Bloquear Camada"}" title="${P ? "Desbloquear Camada" : "Bloquear Camada"}">
618
+ ${P ? g.cadeadoTrancado : g.cadeadoAberto}
619
619
  </div>
620
620
 
621
- <div class="ui-col ui-col-colorbar" style="background: ${q};"></div>
621
+ <div class="ui-col ui-col-colorbar" style="background: ${z};"></div>
622
622
 
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>
623
+ <div class="ui-col ui-col-chevron" data-layer-expand="${k}" role="button" tabindex="0" aria-label="${N ? "Recolher grupo" : "Expandir grupo"}">
624
+ <span class="ui-chevron-icon ${N ? "open" : ""}">${g.chevronDir}</span>
625
625
  </div>
626
626
 
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>` : ""}`}
627
+ <div class="ui-col ui-col-name" data-layer-name-trigger="${k}" title="Clique para ativar camada de desenho | Duplo clique para renomear">
628
+ ${s === w.id ? `<input type="text" class="ui-inline-rename-input" data-inline-layer-input="${k}" value="${D}" />` : `${$ ? `<span class="ui-group-folder-icon" title="Grupo/Pasta">${g.moverPasta}</span>` : ""}
629
+ <span class="ui-name-text">${D}</span>
630
+ ${ne ? '<span class="ui-active-badge" title="Camada ativa para novos desenhos">✓ Ativa</span>' : ""}
631
+ ${A.length > 0 ? `<span class="ui-group-badge" title="${A.length} subcamadas">${A.length} sub</span>` : ""}
632
+ ${M.length > 0 || !$ ? `<span class="ui-count-chip">${M.length}</span>` : ""}`}
633
633
  </div>
634
634
 
635
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>
636
+ <button class="ui-micro-btn" data-layer-fit="${k}" title="Enquadrar camada no mapa" aria-label="Enquadrar camada no mapa">${g.alvoEnquadrar}</button>
637
+ <button class="ui-micro-btn ${Y ? "active" : ""}" data-layer-settings="${k}" title="Ajustar cor, hierarquia, opacidade e excluir" aria-label="Configurações da camada" aria-expanded="${Y}">${g.engrenagem}</button>
638
638
  </div>
639
639
 
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>
640
+ <div class="ui-col ui-col-target" data-layer-target="${k}" 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 ${se ? "selected" : ke ? "partial" : ""}"></div>
642
642
  </div>
643
643
  </div>
644
644
 
645
- ${$e}
645
+ ${ze}
646
646
 
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>` : ""}
647
+ <div class="ui-children-container ${E > 0 ? "is-subchildren" : ""}" role="group" style="display: ${N ? "block" : "none"};">
648
+ ${Fe}
649
+ ${Ce}
650
+ ${$e}
651
+ ${A.length === 0 && M.length === 0 ? `<div class="ui-empty-row"><span>${p ? "Nenhum item correspondente" : $ ? "Grupo vazio (adicione subcamadas ou feições)" : "Nenhum elemento neste grupo"}</span></div>` : ""}
652
652
  </div>
653
653
  </div>
654
654
  `;
655
- }, C = _e(o).map((x) => v(x)).join("");
655
+ }, b = Xe(o).map((y) => v(y)).join("");
656
656
  return `
657
- ${I}
657
+ ${L}
658
658
  <div class="ui-panel-box">
659
659
  <div class="ui-layer-tree" id="ui-layer-tree-mount" role="tree" aria-label="Camadas e feições" aria-multiselectable="true">
660
- ${C}
660
+ ${b}
661
661
  </div>
662
662
  </div>
663
663
  `;
664
664
  }
665
- function Ye(e, o, a) {
665
+ function Je(e, o, a) {
666
666
  let t = e.find((i) => i.id === o);
667
667
  for (; t && t.parentId; ) {
668
668
  if (t.parentId === a) return !0;
@@ -670,10 +670,10 @@ function Ye(e, o, a) {
670
670
  }
671
671
  return !1;
672
672
  }
673
- class Qe {
673
+ class We {
674
674
  constructor(o, a) {
675
- A(this, "host");
676
- A(this, "shadow");
675
+ I(this, "host");
676
+ I(this, "shadow");
677
677
  this.host = o, this.shadow = a;
678
678
  }
679
679
  bindAll() {
@@ -686,7 +686,7 @@ class Qe {
686
686
  const t = o.getAttribute("data-layer-name-trigger");
687
687
  if (!t) return;
688
688
  this.host.editingLayerId = t, this.host.solicitarRenderizacao();
689
- const i = F(
689
+ const i = B(
690
690
  this.shadow,
691
691
  "data-inline-layer-input",
692
692
  t
@@ -719,7 +719,7 @@ class Qe {
719
719
  const t = o.getAttribute("data-feat-name-trigger");
720
720
  if (!t) return;
721
721
  this.host.editingFeatureId = t, this.host.solicitarRenderizacao();
722
- const i = F(
722
+ const i = B(
723
723
  this.shadow,
724
724
  "data-inline-feat-input",
725
725
  t
@@ -783,7 +783,7 @@ class Qe {
783
783
  const d = this.host.camadas.find((h) => h.id === a), m = this.host.camadas.find((h) => h.id === n);
784
784
  if (!d || !m) return;
785
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", {
786
+ Je(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
787
  camadaId: d.id,
788
788
  novoParentId: m.id,
789
789
  camada: d
@@ -792,8 +792,8 @@ class Qe {
792
792
  const h = this.host.camadas.findIndex((v) => v.id === a);
793
793
  if (h === -1) return;
794
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;
795
+ const L = this.host.camadas.findIndex((v) => v.id === n);
796
+ L === -1 ? this.host.camadas.push(d) : this.host.camadas.splice(c ? L : L + 1, 0, d), d.parentId = m.parentId ?? null;
797
797
  }
798
798
  (p = (u = this.host).salvarLembrancaEstado) == null || p.call(u), this.host.dispararEvento("ui-camadas-reordenadas", {
799
799
  camadas: [...this.host.camadas]
@@ -841,14 +841,14 @@ class Qe {
841
841
  c.preventDefault(), c.stopPropagation();
842
842
  const f = r.classList.contains("drop-above");
843
843
  i();
844
- const u = this.host.feicoes.findIndex((b) => b.id === t);
844
+ const u = this.host.feicoes.findIndex((x) => x.id === t);
845
845
  if (u === -1) return;
846
- const p = this.host.feicoes.find((b) => b.id === n);
846
+ const p = this.host.feicoes.find((x) => x.id === n);
847
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", {
848
+ const [d] = this.host.feicoes.splice(u, 1), m = d.layerId, h = p.layerId, L = m !== h;
849
+ L && (d.layerId = h);
850
+ const v = this.host.feicoes.findIndex((x) => x.id === n);
851
+ v === -1 ? this.host.feicoes.push(d) : this.host.feicoes.splice(f ? v : v + 1, 0, d), L && this.host.dispararEvento("ui-feicao-movida", {
852
852
  feicaoId: d.id,
853
853
  camadaOrigemId: m,
854
854
  camadaDestinoId: h,
@@ -889,10 +889,10 @@ class Qe {
889
889
  if (window.removeEventListener("pointermove", f), window.removeEventListener("pointerup", u), window.removeEventListener("pointercancel", u), n) {
890
890
  const m = n.getAttribute("data-layer-id");
891
891
  if (c(), m && l && m !== l) {
892
- const h = this.host.camadas.findIndex((I) => I.id === l);
892
+ const h = this.host.camadas.findIndex((L) => L.id === l);
893
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", {
894
+ const [L] = this.host.camadas.splice(h, 1), v = this.host.camadas.findIndex((x) => x.id === m);
895
+ v === -1 ? this.host.camadas.push(L) : this.host.camadas.splice(s ? v : v + 1, 0, L), (d = (p = this.host).salvarLembrancaEstado) == null || d.call(p), this.host.dispararEvento("ui-camadas-reordenadas", {
896
896
  camadas: [...this.host.camadas]
897
897
  }), this.host.solicitarRenderizacao();
898
898
  }
@@ -905,12 +905,12 @@ class Qe {
905
905
  });
906
906
  }
907
907
  }
908
- const Xe = "ui_camadas_estado_";
909
- function Je(e, o) {
908
+ const Ze = "ui_camadas_estado_";
909
+ function ea(e, o) {
910
910
  const a = (e || o || "default").trim();
911
- return `${Xe}${a}`;
911
+ return `${Ze}${a}`;
912
912
  }
913
- function W(e) {
913
+ function ee(e) {
914
914
  if (typeof window > "u" || typeof localStorage > "u")
915
915
  return null;
916
916
  try {
@@ -924,7 +924,7 @@ function W(e) {
924
924
  }
925
925
  return null;
926
926
  }
927
- function We(e, o) {
927
+ function aa(e, o) {
928
928
  if (!(typeof window > "u" || typeof localStorage > "u"))
929
929
  try {
930
930
  localStorage.setItem(e, JSON.stringify(o));
@@ -932,14 +932,14 @@ function We(e, o) {
932
932
  console.warn(`[UI-Camadas] Não foi possível salvar o estado persistido (${e}):`, a);
933
933
  }
934
934
  }
935
- function Ze(e) {
935
+ function ta(e) {
936
936
  if (!(typeof window > "u" || typeof localStorage > "u"))
937
937
  try {
938
938
  localStorage.removeItem(e);
939
939
  } catch {
940
940
  }
941
941
  }
942
- function ee(e) {
942
+ function re(e) {
943
943
  return {
944
944
  name: e.name,
945
945
  visible: e.visible !== !1,
@@ -949,16 +949,16 @@ function ee(e) {
949
949
  parentId: e.parentId !== void 0 ? e.parentId : null
950
950
  };
951
951
  }
952
- function ea(e, o, a, t) {
952
+ function ra(e, o, a, t) {
953
953
  if (!Array.isArray(e)) return;
954
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
955
  for (let u = 0; u < e.length; u++) {
956
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;
957
+ if (t == null || t.set(p.id, re(p)), d) {
958
+ const m = d.origem, h = (L) => {
959
+ var x;
960
+ const v = (x = t == null ? void 0 : t.get(p.id)) == null ? void 0 : x[L];
961
+ return m !== void 0 && m[L] !== v;
962
962
  };
963
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);
964
964
  }
@@ -976,7 +976,7 @@ function ea(e, o, a, t) {
976
976
  });
977
977
  }
978
978
  }
979
- function aa(e) {
979
+ function ia(e) {
980
980
  const { estadoAnterior: o, camadas: a, expandedLayers: t } = e;
981
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
982
  const l = {
@@ -1009,8 +1009,8 @@ function aa(e) {
1009
1009
  ultimaAtualizacao: Date.now()
1010
1010
  };
1011
1011
  }
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) {
1012
+ const oa = ':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 na(e, o) {
1014
1014
  o.querySelectorAll("[data-layer-row]").forEach((i) => {
1015
1015
  i.addEventListener("click", (r) => {
1016
1016
  if (r.target.closest(
@@ -1040,9 +1040,9 @@ function ra(e, o) {
1040
1040
  if (s) {
1041
1041
  s.visible = s.visible === !1;
1042
1042
  const l = s.visible !== !1;
1043
- i.innerHTML = l ? g.olhoAberto : g.olhoFechado, B(i, l ? "Ocultar Camada" : "Exibir Camada");
1043
+ i.innerHTML = l ? g.olhoAberto : g.olhoFechado, q(i, l ? "Ocultar Camada" : "Exibir Camada");
1044
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", {
1045
+ c && c.classList.toggle("hidden-layer", !l), sa(e, o), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-visibilidade", {
1046
1046
  camadaId: s.id,
1047
1047
  visivel: l
1048
1048
  });
@@ -1052,7 +1052,7 @@ function ra(e, o) {
1052
1052
  i.addEventListener("click", (r) => {
1053
1053
  r.stopPropagation();
1054
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", {
1055
+ s && (s.locked = !s.locked, i.innerHTML = s.locked ? g.cadeadoTrancado : g.cadeadoAberto, i.classList.toggle("ui-lock-open", !s.locked), q(i, s.locked ? "Desbloquear Camada" : "Bloquear Camada"), la(e, o, s.id, s.locked === !0), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-bloqueio", {
1056
1056
  camadaId: s.id,
1057
1057
  bloqueado: s.locked
1058
1058
  }));
@@ -1077,7 +1077,7 @@ function ra(e, o) {
1077
1077
  const a = (i, r, n) => {
1078
1078
  const s = e.camadas.find((d) => d.id === i);
1079
1079
  if (!s) return;
1080
- const l = G(r, s.color || "#00E08A");
1080
+ const l = V(r, s.color || "#00E08A");
1081
1081
  s.color = l;
1082
1082
  const c = o.getElementById(`sample-color-${i}`);
1083
1083
  c && (c.style.backgroundColor = l);
@@ -1085,7 +1085,7 @@ function ra(e, o) {
1085
1085
  f && (f.textContent = l.toUpperCase());
1086
1086
  const u = o.getElementById(`settings-drawer-${i}`);
1087
1087
  u && u.style.setProperty("--drawer-cor-camada", l);
1088
- const p = F(o, "data-layer-row", i);
1088
+ const p = B(o, "data-layer-row", i);
1089
1089
  if (p) {
1090
1090
  p.style.setProperty("--layer-active-color", l);
1091
1091
  const d = p.querySelector(".ui-col-colorbar");
@@ -1108,7 +1108,7 @@ function ra(e, o) {
1108
1108
  n.opacity = r;
1109
1109
  const s = o.getElementById(`badge-op-${i}`);
1110
1110
  s && (s.textContent = `${Math.round(r * 100)}%`);
1111
- const l = F(o, "data-layer-opacity-slider", i);
1111
+ const l = B(o, "data-layer-opacity-slider", i);
1112
1112
  l && parseFloat(l.value) !== r && (l.value = String(r)), e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-opacidade", { camadaId: n.id, opacidade: r });
1113
1113
  };
1114
1114
  o.querySelectorAll("[data-layer-opacity-slider]").forEach((i) => {
@@ -1156,7 +1156,7 @@ function ra(e, o) {
1156
1156
  }), o.querySelectorAll("[data-layer-target]").forEach((i) => {
1157
1157
  i.addEventListener("click", (r) => {
1158
1158
  r.stopPropagation();
1159
- const n = r, s = i.getAttribute("data-layer-target"), l = te(
1159
+ const n = r, s = i.getAttribute("data-layer-target"), l = U(
1160
1160
  e.feicoes.filter((f) => f.layerId === s),
1161
1161
  e.searchQuery
1162
1162
  );
@@ -1165,24 +1165,24 @@ function ra(e, o) {
1165
1165
  });
1166
1166
  });
1167
1167
  }
1168
- function ia(e, o) {
1168
+ function sa(e, o) {
1169
1169
  const a = o.getElementById("btn-toggle-all-vis");
1170
1170
  if (!a) return;
1171
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");
1172
+ a.innerHTML = t ? g.olhoAberto : g.olhoFechado, q(a, t ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas");
1173
1173
  }
1174
- function oa(e, o, a, t) {
1174
+ function la(e, o, a, t) {
1175
1175
  e.feicoes.filter((i) => i.layerId === a).forEach((i) => {
1176
- const r = F(o, "data-feat-lock", i.id);
1176
+ const r = B(o, "data-feat-lock", i.id);
1177
1177
  if (!r) return;
1178
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(
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"), q(
1180
1180
  r,
1181
1181
  t ? "Bloqueada pela camada" : n ? "Desbloquear Feição" : "Bloquear Feição"
1182
1182
  );
1183
1183
  });
1184
1184
  }
1185
- function na(e, o) {
1185
+ function ca(e, o) {
1186
1186
  const a = o.getElementById("btn-footer-vis");
1187
1187
  a && a.addEventListener("click", () => {
1188
1188
  const u = e.feicoes.filter((m) => e.selectedFeatureIds.has(m.id));
@@ -1261,8 +1261,8 @@ function na(e, o) {
1261
1261
  const d = Array.from(e.selectedFeatureIds);
1262
1262
  if (d.length === 0) return;
1263
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);
1264
+ c.classList.add("confirming"), q(c, `Clique novamente para excluir ${d.length} selecionado(s)`), u = setTimeout(() => {
1265
+ c.classList.remove("confirming"), q(c, p);
1266
1266
  }, 3500);
1267
1267
  return;
1268
1268
  }
@@ -1278,7 +1278,95 @@ function na(e, o) {
1278
1278
  const f = o.getElementById("btn-footer-clear");
1279
1279
  f && f.addEventListener("click", () => e.limparSelecao(!0));
1280
1280
  }
1281
- function sa(e, o) {
1281
+ const da = [
1282
+ { tipo: "olho", atributo: "data-layer-eye", entidade: "camada" },
1283
+ { tipo: "olho", atributo: "data-feat-eye", entidade: "feicao" },
1284
+ { tipo: "cadeado", atributo: "data-layer-lock", entidade: "camada" },
1285
+ { tipo: "cadeado", atributo: "data-feat-lock", entidade: "feicao" },
1286
+ { tipo: "selecao", atributo: "data-layer-target", entidade: "camada" },
1287
+ { tipo: "selecao", atributo: "data-feat-target", entidade: "feicao" }
1288
+ ], ie = {
1289
+ olho: "[data-layer-eye], [data-feat-eye]",
1290
+ cadeado: "[data-layer-lock], [data-feat-lock]",
1291
+ selecao: "[data-layer-target], [data-feat-target]"
1292
+ }, ua = 3;
1293
+ function pa(e) {
1294
+ return da.find((o) => e.hasAttribute(o.atributo)) ?? null;
1295
+ }
1296
+ function ae(e, o) {
1297
+ const a = pa(o);
1298
+ if (!a) return null;
1299
+ const t = o.getAttribute(a.atributo);
1300
+ if (!t) return null;
1301
+ if (a.tipo === "olho") {
1302
+ const r = a.entidade === "camada" ? e.camadas.find((n) => n.id === t) : e.feicoes.find((n) => n.id === t);
1303
+ return r ? r.visible !== !1 : null;
1304
+ }
1305
+ if (a.tipo === "cadeado") {
1306
+ if (o.hasAttribute("data-locked-by-layer")) return null;
1307
+ const r = a.entidade === "camada" ? e.camadas.find((n) => n.id === t) : e.feicoes.find((n) => n.id === t);
1308
+ return r ? r.locked === !0 : null;
1309
+ }
1310
+ if (a.entidade === "feicao") return e.selectedFeatureIds.has(t);
1311
+ const i = U(
1312
+ e.feicoes.filter((r) => r.layerId === t),
1313
+ e.searchQuery
1314
+ );
1315
+ return i.length === 0 ? null : i.every((r) => e.selectedFeatureIds.has(r.id));
1316
+ }
1317
+ function he(e, o, a = !1) {
1318
+ e.dispatchEvent(
1319
+ new MouseEvent("click", {
1320
+ bubbles: !0,
1321
+ cancelable: !0,
1322
+ ctrlKey: o,
1323
+ shiftKey: a
1324
+ })
1325
+ );
1326
+ }
1327
+ function fa(e, o) {
1328
+ Object.keys(ie).forEach((a) => {
1329
+ o.querySelectorAll(ie[a]).forEach((t) => {
1330
+ t.addEventListener("pointerdown", (i) => ma(e, o, a, t, i));
1331
+ });
1332
+ });
1333
+ }
1334
+ function ma(e, o, a, t, i) {
1335
+ if (i.pointerType === "mouse" && i.button !== 0 || e.editingLayerId || e.editingFeatureId || ae(e, t) === null) return;
1336
+ const r = ie[a], n = i.ctrlKey || i.metaKey, s = i.shiftKey;
1337
+ let l = !1, c = !1, f = i.clientY;
1338
+ const u = /* @__PURE__ */ new Set([t]), p = (b) => {
1339
+ b.preventDefault(), b.stopImmediatePropagation();
1340
+ }, d = (b) => {
1341
+ b.stopPropagation(), b.preventDefault();
1342
+ }, m = (b) => b.preventDefault(), h = (b) => {
1343
+ u.has(b) || (u.add(b), ae(e, b) !== c && he(b, a === "selecao"));
1344
+ }, L = () => {
1345
+ l = !0, he(t, n, s), c = ae(e, t) === !0, o.addEventListener("selectstart", m), document.body.style.userSelect = "none";
1346
+ }, v = (b) => {
1347
+ var A, $;
1348
+ if (!l) {
1349
+ if (Math.hypot(b.clientX - i.clientX, b.clientY - i.clientY) < ua) return;
1350
+ const k = (A = o.elementFromPoint(b.clientX, b.clientY)) == null ? void 0 : A.closest(r);
1351
+ if (!k || k === t) return;
1352
+ L();
1353
+ }
1354
+ b.preventDefault();
1355
+ const y = Math.min(f, b.clientY), w = Math.max(f, b.clientY);
1356
+ o.querySelectorAll(r).forEach((k) => {
1357
+ const D = k.getBoundingClientRect();
1358
+ if (D.height === 0) return;
1359
+ const z = D.top + D.height / 2;
1360
+ z >= y && z <= w && h(k);
1361
+ });
1362
+ const E = ($ = o.elementFromPoint(b.clientX, b.clientY)) == null ? void 0 : $.closest(r);
1363
+ E && h(E), f = b.clientY;
1364
+ }, x = () => {
1365
+ window.removeEventListener("pointermove", v), window.removeEventListener("pointerup", x), window.removeEventListener("pointercancel", x), window.removeEventListener("dragstart", p, !0), o.removeEventListener("selectstart", m), l && (document.body.style.userSelect = "", window.addEventListener("click", d, { capture: !0, once: !0 }), setTimeout(() => window.removeEventListener("click", d, !0), 0));
1366
+ };
1367
+ window.addEventListener("dragstart", p, !0), window.addEventListener("pointermove", v, { passive: !1 }), window.addEventListener("pointerup", x), window.addEventListener("pointercancel", x);
1368
+ }
1369
+ function ha(e, o) {
1282
1370
  const a = o.getElementById("btn-toggle-all-vis");
1283
1371
  a && a.addEventListener("click", () => e.alternarVisibilidadeTodas(!0));
1284
1372
  const t = o.getElementById("btn-toggle-all-expand");
@@ -1294,15 +1382,15 @@ function sa(e, o) {
1294
1382
  e.dispararEvento("ui-camada-grupo-adicionar", { isGroup: !0 });
1295
1383
  });
1296
1384
  const n = o.getElementById("btn-colapsar");
1297
- n && n.addEventListener("click", () => e.colapsar(!0)), la(e, o);
1385
+ n && n.addEventListener("click", () => e.colapsar(!0)), ga(e, o);
1298
1386
  }
1299
- function la(e, o) {
1387
+ function ga(e, o) {
1300
1388
  const a = o.getElementById("input-layer-search"), t = o.getElementById("btn-clear-layer-search"), i = () => {
1301
1389
  var r;
1302
1390
  e.searchQuery = "", e.solicitarRenderizacao(), (r = o.getElementById("input-layer-search")) == null || r.focus();
1303
1391
  };
1304
1392
  if (a) {
1305
- const r = ge(() => e.solicitarRenderizacao(), 75);
1393
+ const r = xe(() => e.solicitarRenderizacao(), 75);
1306
1394
  a.addEventListener("input", (n) => {
1307
1395
  e.searchQuery = n.target.value, r();
1308
1396
  }), a.addEventListener("keydown", (n) => {
@@ -1311,7 +1399,7 @@ function la(e, o) {
1311
1399
  }
1312
1400
  t && t.addEventListener("click", i);
1313
1401
  }
1314
- function ca(e, o) {
1402
+ function va(e, o) {
1315
1403
  o.querySelectorAll("[data-feat-select]").forEach((a) => {
1316
1404
  a.addEventListener("click", (t) => {
1317
1405
  if (e.editingFeatureId) return;
@@ -1336,7 +1424,7 @@ function ca(e, o) {
1336
1424
  if (r) {
1337
1425
  r.visible = r.visible === !1;
1338
1426
  const n = r.visible !== !1;
1339
- a.innerHTML = n ? g.olhoAberto : g.olhoFechado, B(a, n ? "Ocultar Feição" : "Exibir Feição");
1427
+ a.innerHTML = n ? g.olhoAberto : g.olhoFechado, q(a, n ? "Ocultar Feição" : "Exibir Feição");
1340
1428
  const s = a.closest(".ui-feat-row");
1341
1429
  s && s.classList.toggle("hidden-row", !n), e.dispararEvento("ui-feicao-visibilidade", {
1342
1430
  feicaoId: r.id,
@@ -1348,7 +1436,7 @@ function ca(e, o) {
1348
1436
  a.addEventListener("click", (t) => {
1349
1437
  if (t.stopPropagation(), a.hasAttribute("data-locked-by-layer")) return;
1350
1438
  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", {
1439
+ r && (r.locked = !r.locked, a.innerHTML = r.locked ? g.cadeadoTrancado : g.cadeadoAberto, a.classList.toggle("ui-lock-open", !r.locked), q(a, r.locked ? "Desbloquear Feição" : "Bloquear Feição"), e.dispararEvento("ui-feicao-bloqueio", {
1352
1440
  feicaoId: r.id,
1353
1441
  bloqueado: r.locked
1354
1442
  }));
@@ -1361,7 +1449,7 @@ function ca(e, o) {
1361
1449
  });
1362
1450
  });
1363
1451
  }
1364
- function da(e, o) {
1452
+ function ba(e, o) {
1365
1453
  o.querySelectorAll("[data-basemap-thumb]").forEach((a) => {
1366
1454
  a.addEventListener(
1367
1455
  "error",
@@ -1378,23 +1466,23 @@ function da(e, o) {
1378
1466
  });
1379
1467
  });
1380
1468
  }
1381
- function ua(e, o) {
1382
- sa(e, o), ra(e, o), ca(e, o), da(e, o), na(e, o);
1469
+ function xa(e, o) {
1470
+ ha(e, o), na(e, o), va(e, o), ba(e, o), ca(e, o), fa(e, o);
1383
1471
  }
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);
1472
+ const ya = '[role="button"][tabindex]', O = "[data-layer-row], [data-feat-row]", wa = ["color", "range", "checkbox", "radio", "button"];
1473
+ function Ae(e) {
1474
+ return e instanceof HTMLSelectElement || e instanceof HTMLTextAreaElement ? !0 : e instanceof HTMLInputElement && !wa.includes(e.type);
1387
1475
  }
1388
- function ma(e) {
1389
- return Array.from(e.querySelectorAll(P)).filter((o) => {
1476
+ function Ea(e) {
1477
+ return Array.from(e.querySelectorAll(O)).filter((o) => {
1390
1478
  const a = o.closest(".ui-children-container");
1391
1479
  return !(a && a.style.display === "none") && !o.classList.contains("ui-search-hidden");
1392
1480
  });
1393
1481
  }
1394
- function H(e, o) {
1395
- o && (e.querySelectorAll(P).forEach((a) => a.setAttribute("tabindex", "-1")), o.setAttribute("tabindex", "0"), o.focus());
1482
+ function G(e, o) {
1483
+ o && (e.querySelectorAll(O).forEach((a) => a.setAttribute("tabindex", "-1")), o.setAttribute("tabindex", "0"), o.focus());
1396
1484
  }
1397
- function ha(e, o) {
1485
+ function Aa(e, o) {
1398
1486
  e.dispatchEvent(
1399
1487
  new MouseEvent("click", {
1400
1488
  bubbles: !0,
@@ -1403,64 +1491,64 @@ function ha(e, o) {
1403
1491
  })
1404
1492
  );
1405
1493
  }
1406
- function ga(e, o, a) {
1494
+ function ka(e, o, a) {
1407
1495
  var t;
1408
- if (!ye(a.composedPath()[0])) {
1496
+ if (!Ae(a.composedPath()[0])) {
1409
1497
  if (e.activeSettingsLayerId) {
1410
1498
  a.preventDefault();
1411
1499
  const i = e.activeSettingsLayerId;
1412
- e.activeSettingsLayerId = null, e.solicitarRenderizacao(), (t = F(o, "data-layer-settings", i)) == null || t.focus();
1500
+ e.activeSettingsLayerId = null, e.solicitarRenderizacao(), (t = B(o, "data-layer-settings", i)) == null || t.focus();
1413
1501
  return;
1414
1502
  }
1415
1503
  e.selectedFeatureIds.size > 0 && (a.preventDefault(), e.limparSelecao(!0));
1416
1504
  }
1417
1505
  }
1418
- function va(e, o, a) {
1506
+ function Ia(e, o, a) {
1419
1507
  var n;
1420
1508
  const t = a.composedPath()[0];
1421
- if (!(t instanceof HTMLElement) || ye(t)) return;
1422
- if ((a.key === "Enter" || a.key === " ") && t.matches(pa)) {
1509
+ if (!(t instanceof HTMLElement) || Ae(t)) return;
1510
+ if ((a.key === "Enter" || a.key === " ") && t.matches(ya)) {
1423
1511
  a.preventDefault(), t.click();
1424
1512
  return;
1425
1513
  }
1426
- if (!t.matches(P)) return;
1427
- const i = ma(e), r = i.indexOf(t);
1514
+ if (!t.matches(O)) return;
1515
+ const i = Ea(e), r = i.indexOf(t);
1428
1516
  switch (a.key) {
1429
1517
  case "ArrowDown":
1430
- a.preventDefault(), H(e, i[Math.min(i.length - 1, r + 1)]);
1518
+ a.preventDefault(), G(e, i[Math.min(i.length - 1, r + 1)]);
1431
1519
  break;
1432
1520
  case "ArrowUp":
1433
- a.preventDefault(), H(e, i[Math.max(0, r - 1)]);
1521
+ a.preventDefault(), G(e, i[Math.max(0, r - 1)]);
1434
1522
  break;
1435
1523
  case "Home":
1436
- a.preventDefault(), H(e, i[0]);
1524
+ a.preventDefault(), G(e, i[0]);
1437
1525
  break;
1438
1526
  case "End":
1439
- a.preventDefault(), H(e, i[i.length - 1]);
1527
+ a.preventDefault(), G(e, i[i.length - 1]);
1440
1528
  break;
1441
1529
  case "ArrowRight":
1442
1530
  case "ArrowLeft": {
1443
1531
  const s = t.getAttribute("data-layer-row");
1444
1532
  if (!s) return;
1445
1533
  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());
1534
+ a.key === "ArrowRight" !== c && (a.preventDefault(), (n = B(o, "data-layer-expand", s)) == null || n.click());
1447
1535
  break;
1448
1536
  }
1449
1537
  case "Enter":
1450
1538
  case " ":
1451
- a.preventDefault(), ha(t, a);
1539
+ a.preventDefault(), Aa(t, a);
1452
1540
  break;
1453
1541
  }
1454
1542
  }
1455
- function ba(e, o, a, t, i) {
1543
+ function La(e, o, a, t, i) {
1456
1544
  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) => {
1545
+ r.key === "Escape" && ka(e, a, r);
1546
+ }), i.add(t, "keydown", (r) => Ia(t, a, r)), i.add(t, "focusin", (r) => {
1459
1547
  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"));
1548
+ n instanceof HTMLElement && n.matches(O) && (t.querySelectorAll(O).forEach((s) => s.setAttribute("tabindex", "-1")), n.setAttribute("tabindex", "0"));
1461
1549
  });
1462
1550
  }
1463
- function xa(e, o) {
1551
+ function Ca(e, o) {
1464
1552
  o.querySelectorAll("[data-layer-row]").forEach((t) => {
1465
1553
  const r = t.getAttribute("data-layer-row") === e.camadaAtivaId;
1466
1554
  t.classList.toggle("active-drawing-layer", r);
@@ -1475,22 +1563,22 @@ function xa(e, o) {
1475
1563
  }
1476
1564
  });
1477
1565
  }
1478
- function ya(e, o) {
1566
+ function $a(e, o) {
1479
1567
  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);
1568
+ const x = v.getAttribute("data-feat-row"), b = x ? e.selectedFeatureIds.has(x) : !1;
1569
+ v.classList.toggle("selected-row", b), v.setAttribute("aria-selected", String(b));
1570
+ const y = v.querySelector(".ui-target-circle");
1571
+ y && y.classList.toggle("selected", b);
1484
1572
  }), 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");
1573
+ const x = v.getAttribute("data-layer-id"), b = e.feicoes.filter((w) => w.layerId === x), y = v.querySelector(".ui-layer-row .ui-target-circle");
1574
+ if (y && b.length > 0) {
1575
+ const w = b.every((A) => e.selectedFeatureIds.has(A.id)), E = !w && b.some((A) => e.selectedFeatureIds.has(A.id));
1576
+ y.classList.toggle("selected", w), y.classList.toggle("partial", E);
1577
+ } else y && y.classList.remove("selected", "partial");
1490
1578
  });
1491
1579
  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
1580
  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);
1581
+ const n = o.querySelector(".ui-footer-metric"), s = be(a);
1494
1582
  n && (s ? (n.innerHTML = `${g.reguaMetrica} ${s}`, n.style.display = "inline-flex") : n.style.display = "none");
1495
1583
  const l = o.querySelector(".ui-tree-footer");
1496
1584
  l && (l.classList.toggle("tem-selecao", t), l.classList.toggle("sem-selecao", !t));
@@ -1498,8 +1586,8 @@ function ya(e, o) {
1498
1586
  c && (c.style.display = t ? "none" : "flex");
1499
1587
  const f = o.querySelector(".ui-footer-bulk-actions");
1500
1588
  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));
1589
+ const x = o.getElementById(v);
1590
+ x && (x.disabled = !t, x.classList.toggle("disabled", !t));
1503
1591
  });
1504
1592
  const u = o.querySelector(".ui-footer-move-wrapper");
1505
1593
  u && u.classList.toggle("disabled", !t);
@@ -1510,10 +1598,10 @@ function ya(e, o) {
1510
1598
  const m = o.getElementById("input-footer-color");
1511
1599
  m && (m.disabled = !t);
1512
1600
  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();
1601
+ const L = o.querySelector(".ui-footer-right");
1602
+ t && !h && L ? (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)), L.appendChild(h)) : !t && h && h.remove();
1515
1603
  }
1516
- function wa(e) {
1604
+ function Sa(e) {
1517
1605
  function t() {
1518
1606
  return e.getMinAltura ? e.getMinAltura() : 140;
1519
1607
  }
@@ -1553,38 +1641,38 @@ function wa(e) {
1553
1641
  e.resizerElement.setPointerCapture(m.pointerId);
1554
1642
  } catch {
1555
1643
  }
1556
- const h = (b) => {
1644
+ const h = (x) => {
1557
1645
  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(
1646
+ x.preventDefault();
1647
+ const b = x.clientY - f, y = Math.max(t(), Math.min(i(), Math.round(u + b)));
1648
+ e.hostElement.style.height = `${y}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${y}px`), e.onRedimensionando && e.onRedimensionando(y), e.hostElement.dispatchEvent(
1561
1649
  new CustomEvent("ui-redimensionando-altura", {
1562
1650
  bubbles: !0,
1563
1651
  composed: !0,
1564
- detail: { altura: x }
1652
+ detail: { altura: y }
1565
1653
  })
1566
1654
  );
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) => {
1655
+ }, L = () => {
1656
+ var x;
1657
+ c = !1, n = null, window.removeEventListener("pointermove", h), window.removeEventListener("pointerup", v), window.removeEventListener("pointercancel", v), (x = e.resizerElement) == null || x.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
1658
+ }, v = (x) => {
1571
1659
  if (!c) return;
1572
1660
  c = !1, e.resizerElement.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
1573
1661
  try {
1574
- e.resizerElement.hasPointerCapture(b.pointerId) && e.resizerElement.releasePointerCapture(b.pointerId);
1662
+ e.resizerElement.hasPointerCapture(x.pointerId) && e.resizerElement.releasePointerCapture(x.pointerId);
1575
1663
  } catch {
1576
1664
  }
1577
1665
  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(
1666
+ const b = e.hostElement.getBoundingClientRect().height, y = Math.round(b);
1667
+ e.onAlturaAlterada && e.onAlturaAlterada(y), e.hostElement.dispatchEvent(
1580
1668
  new CustomEvent("ui-redimensionar-altura", {
1581
1669
  bubbles: !0,
1582
1670
  composed: !0,
1583
- detail: { altura: x }
1671
+ detail: { altura: y }
1584
1672
  })
1585
1673
  );
1586
1674
  };
1587
- n = I, window.addEventListener("pointermove", h), window.addEventListener("pointerup", v), window.addEventListener("pointercancel", v);
1675
+ n = L, window.addEventListener("pointermove", h), window.addEventListener("pointerup", v), window.addEventListener("pointercancel", v);
1588
1676
  }, d = (m) => {
1589
1677
  m.preventDefault(), m.stopPropagation(), r(null, !0), e.onAlturaAlterada && e.onAlturaAlterada(null);
1590
1678
  };
@@ -1599,35 +1687,35 @@ function wa(e) {
1599
1687
  destruir: l
1600
1688
  };
1601
1689
  }
1602
- const T = class T extends Fe {
1690
+ const T = class T extends De {
1603
1691
  constructor() {
1604
1692
  super();
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));
1693
+ I(this, "shadow");
1694
+ I(this, "listeners", new Te());
1695
+ I(this, "dragDropManager");
1696
+ I(this, "resizerController");
1697
+ I(this, "alturaCustomizada", null);
1698
+ I(this, "conectado", !1);
1699
+ I(this, "profundidadeLote", 0);
1700
+ I(this, "renderPendente", !1);
1701
+ I(this, "camadasRemovidas", /* @__PURE__ */ new Set());
1702
+ I(this, "origensCamadas", /* @__PURE__ */ new Map());
1703
+ I(this, "salvarLembrancaDebounced", xe(() => this.salvarLembrancaEstado(), 200));
1616
1704
  // Estado interno
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");
1705
+ I(this, "camadas", []);
1706
+ I(this, "feicoes", []);
1707
+ I(this, "mapasBase", [...ye]);
1708
+ I(this, "expandedLayers", /* @__PURE__ */ new Set());
1709
+ I(this, "selectedFeatureIds", /* @__PURE__ */ new Set());
1710
+ I(this, "lastClickedFeatureId", null);
1711
+ I(this, "activeSettingsLayerId", null);
1712
+ I(this, "editingLayerId", null);
1713
+ I(this, "editingFeatureId", null);
1714
+ I(this, "searchQuery", "");
1715
+ I(this, "corpoElement");
1716
+ I(this, "btnExpandirFlutuante");
1629
1717
  this.shadow = this.attachShadow({ mode: "open" }), this.shadow.innerHTML = `
1630
- <style>${ta}</style>
1718
+ <style>${oa}</style>
1631
1719
  <div class="ui-camadas-container" id="panel-container" role="region" aria-label="Painel de Camadas">
1632
1720
  <div class="ui-camadas-corpo" id="painel-corpo"></div>
1633
1721
  <div class="ui-camadas-resizer-altura" id="resizer-altura" title="Arraste para redimensionar a altura (duplo-clique para resetar)" aria-label="Redimensionar altura">
@@ -1637,9 +1725,9 @@ const T = class T extends Fe {
1637
1725
  <button class="ui-camadas-toggle-flutuante" id="btn-expandir-flutuante" title="Expandir Painel de Camadas" aria-label="Expandir Painel de Camadas">
1638
1726
  ${g.camadas}
1639
1727
  </button>
1640
- `, this.corpoElement = this.shadow.getElementById("painel-corpo"), this.btnExpandirFlutuante = this.shadow.getElementById("btn-expandir-flutuante"), this.dragDropManager = new Qe(this, this.shadow);
1728
+ `, this.corpoElement = this.shadow.getElementById("painel-corpo"), this.btnExpandirFlutuante = this.shadow.getElementById("btn-expandir-flutuante"), this.dragDropManager = new We(this, this.shadow);
1641
1729
  const a = this.shadow.getElementById("resizer-altura");
1642
- this.resizerController = wa({
1730
+ this.resizerController = Sa({
1643
1731
  hostElement: this,
1644
1732
  resizerElement: a,
1645
1733
  listeners: this.listeners,
@@ -1680,12 +1768,12 @@ const T = class T extends Fe {
1680
1768
  }
1681
1769
  connectedCallback() {
1682
1770
  if (this.persistir) {
1683
- const a = W(this.obterChaveStorageAtual());
1771
+ const a = ee(this.obterChaveStorageAtual());
1684
1772
  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));
1685
1773
  }
1686
1774
  this.hasAttribute("altura") && this.resizerController.definirAltura(this.getAttribute("altura"), !1), this.persistir && !this.storageKey && !this.id && (T.instanciasChavePadrao.size > 0 && console.warn(
1687
1775
  "[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."
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();
1776
+ ), T.instanciasChavePadrao.add(this)), this.resizerController.init(), this.render(), this.conectarEventosGerais(), La(this, this, this.shadow, this.corpoElement, this.listeners), this.conectado = !0, this.camadas.length > 0 && this.salvarLembrancaEstado();
1689
1777
  }
1690
1778
  disconnectedCallback() {
1691
1779
  var a;
@@ -1804,7 +1892,7 @@ const T = class T extends Fe {
1804
1892
  }
1805
1893
  // --- Gerenciamento de Persistência / Lembrança ---
1806
1894
  obterChaveStorageAtual() {
1807
- return Je(this.storageKey, this.id);
1895
+ return ea(this.storageKey, this.id);
1808
1896
  }
1809
1897
  /** Versão com debounce, para interações contínuas (seletor de cor, slider de opacidade). */
1810
1898
  agendarSalvarLembranca() {
@@ -1812,8 +1900,8 @@ const T = class T extends Fe {
1812
1900
  }
1813
1901
  salvarLembrancaEstado() {
1814
1902
  if (!this.persistir || !this.conectado) return;
1815
- const a = this.obterChaveStorageAtual(), t = aa({
1816
- estadoAnterior: W(a),
1903
+ const a = this.obterChaveStorageAtual(), t = ia({
1904
+ estadoAnterior: ee(a),
1817
1905
  origensCamadas: this.origensCamadas,
1818
1906
  camadas: this.camadas,
1819
1907
  expandedLayers: this.expandedLayers,
@@ -1824,10 +1912,10 @@ const T = class T extends Fe {
1824
1912
  altura: this.alturaCustomizada,
1825
1913
  camadasRemovidas: this.camadasRemovidas
1826
1914
  });
1827
- this.camadasRemovidas.clear(), We(a, t);
1915
+ this.camadasRemovidas.clear(), aa(a, t);
1828
1916
  }
1829
1917
  limparLembranca() {
1830
- Ze(this.obterChaveStorageAtual());
1918
+ ta(this.obterChaveStorageAtual());
1831
1919
  }
1832
1920
  // --- API Pública de Alta Ergonomia ---
1833
1921
  //
@@ -1867,11 +1955,11 @@ const T = class T extends Fe {
1867
1955
  }
1868
1956
  definirCamadas(a, t) {
1869
1957
  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);
1958
+ const r = ee(this.obterChaveStorageAtual());
1959
+ ra(this.camadas, r, this.expandedLayers, this.origensCamadas), r != null && r.camadaAtivaId && this.camadas.some((n) => n.id === r.camadaAtivaId) && (this.camadaAtivaId = r.camadaAtivaId);
1872
1960
  } else
1873
1961
  this.camadas.forEach((r) => {
1874
- this.origensCamadas.set(r.id, ee(r)), this.expandedLayers.has(r.id) || this.expandedLayers.add(r.id);
1962
+ this.origensCamadas.set(r.id, re(r)), this.expandedLayers.has(r.id) || this.expandedLayers.add(r.id);
1875
1963
  });
1876
1964
  if (Array.isArray(t)) {
1877
1965
  this.feicoes = t.map((s) => ({ ...s }));
@@ -1915,7 +2003,7 @@ const T = class T extends Fe {
1915
2003
  return;
1916
2004
  }
1917
2005
  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();
2006
+ this.camadas.push(t), this.origensCamadas.set(t.id, re(t)), this.expandedLayers.add(t.id), t.parentId && this.expandedLayers.add(t.parentId), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
1919
2007
  }
1920
2008
  removerCamada(a) {
1921
2009
  var t;
@@ -1940,7 +2028,7 @@ const T = class T extends Fe {
1940
2028
  this.feicoes = this.feicoes.filter((t) => t.id !== a), this.selectedFeatureIds.delete(a), this.solicitarRenderizacao();
1941
2029
  }
1942
2030
  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(
2031
+ const n = Ve(this.camadas, this.feicoes, this.expandedLayers, this.searchQuery), s = !i && !n.includes(a) && this.feicoes.some((c) => c.id === a), l = Ue(
1944
2032
  s ? [...n, a] : n,
1945
2033
  this.selectedFeatureIds,
1946
2034
  this.lastClickedFeatureId,
@@ -2013,7 +2101,7 @@ const T = class T extends Fe {
2013
2101
  render() {
2014
2102
  var d, m;
2015
2103
  if (!this.corpoElement) return;
2016
- const a = Ke({
2104
+ const a = Qe({
2017
2105
  camadas: this.camadas,
2018
2106
  feicoes: this.feicoes,
2019
2107
  camadaAtivaId: this.camadaAtivaId,
@@ -2024,7 +2112,7 @@ const T = class T extends Fe {
2024
2112
  editingFeatureId: this.editingFeatureId,
2025
2113
  searchQuery: this.searchQuery,
2026
2114
  mostrarBotaoColapsar: this.flutuante && this.getAttribute("colapsavel") !== "false"
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;
2115
+ }), t = this.mostrarMapasBase ? Ne(this.mapasBase, this.mapaBaseAtivo) : "", i = this.mostrarRodape ? Ge(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;
2028
2116
  this.corpoElement.innerHTML = `
2029
2117
  ${a}
2030
2118
  ${i}
@@ -2039,7 +2127,7 @@ const T = class T extends Fe {
2039
2127
  } catch {
2040
2128
  }
2041
2129
  }
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();
2130
+ !c && f && ((d = B(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"), xa(this, this.shadow), this.dragDropManager.bindAll();
2043
2131
  }
2044
2132
  // --- Conexão de Eventos ---
2045
2133
  conectarEventosGerais() {
@@ -2047,14 +2135,14 @@ const T = class T extends Fe {
2047
2135
  }
2048
2136
  // --- Sincronização de DOM (delegada) ---
2049
2137
  sincronizarCamadaAtivaDOM() {
2050
- xa(this, this.shadow);
2138
+ Ca(this, this.shadow);
2051
2139
  }
2052
2140
  sincronizarSelecaoDOM() {
2053
- ya(this, this.shadow);
2141
+ $a(this, this.shadow);
2054
2142
  }
2055
2143
  // --- Auxiliares Internos ---
2056
2144
  sincronizarSelecoesComFeicoesValidas() {
2057
- Ge(this.selectedFeatureIds, this.feicoes);
2145
+ Ye(this.selectedFeatureIds, this.feicoes);
2058
2146
  }
2059
2147
  notificarMudancaSelecao() {
2060
2148
  const a = this.feicoes.filter((t) => this.selectedFeatureIds.has(t.id));
@@ -2071,16 +2159,16 @@ const T = class T extends Fe {
2071
2159
  }
2072
2160
  };
2073
2161
  /** Painéis conectados sem `id` nem `storage-key`: dividem a mesma chave de persistência. */
2074
- A(T, "instanciasChavePadrao", /* @__PURE__ */ new Set());
2162
+ I(T, "instanciasChavePadrao", /* @__PURE__ */ new Set());
2075
2163
  let j = T;
2076
- class Ea extends j {
2164
+ class Ma extends j {
2077
2165
  }
2078
- class Aa extends j {
2166
+ class za extends j {
2079
2167
  }
2080
- ae("ui-camadas", j);
2081
- ae("ui-painel-camadas", Ea);
2082
- ae("ui-layer-panel", Aa);
2083
- function $a(e) {
2168
+ oe("ui-camadas", j);
2169
+ oe("ui-painel-camadas", Ma);
2170
+ oe("ui-layer-panel", za);
2171
+ function Ta(e) {
2084
2172
  var o;
2085
2173
  return {
2086
2174
  id: e.id,
@@ -2097,7 +2185,7 @@ function $a(e) {
2097
2185
  dados: e.dados
2098
2186
  };
2099
2187
  }
2100
- function Sa(e, o = "levantamento", a = "feicoes") {
2188
+ function Pa(e, o = "levantamento", a = "feicoes") {
2101
2189
  return {
2102
2190
  id: e.id,
2103
2191
  nome: e.name,
@@ -2116,7 +2204,7 @@ function Sa(e, o = "levantamento", a = "feicoes") {
2116
2204
  dados: typeof e.dados == "object" && e.dados !== null ? e.dados : void 0
2117
2205
  };
2118
2206
  }
2119
- function Ma(e, o = "") {
2207
+ function Oa(e, o = "") {
2120
2208
  var r, n, s, l;
2121
2209
  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
2210
  return {
@@ -2135,39 +2223,39 @@ function Ma(e, o = "") {
2135
2223
  };
2136
2224
  }
2137
2225
  export {
2138
- Qe as CamadasDragDropManager,
2226
+ We as CamadasDragDropManager,
2139
2227
  g as ICONES,
2140
- be as LIMITE_FEICOES_POR_CAMADA,
2141
- ve as MAPAS_BASE_PADRAO,
2228
+ we as LIMITE_FEICOES_POR_CAMADA,
2229
+ ye as MAPAS_BASE_PADRAO,
2142
2230
  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
2231
+ za as UILayerPanel,
2232
+ Na as UIMapaBase,
2233
+ Ma as UIPainelCamadas,
2234
+ Ha as UISeletorMapaBase,
2235
+ J as calcularAreaAnelSimples,
2236
+ ve as calcularAreaPoligono,
2237
+ ge as calcularComprimentoLinha,
2238
+ Pe as calcularDistanciaPontos,
2239
+ Ue as calcularSelecaoFeicao,
2240
+ ee as carregarEstadoPersistido,
2241
+ Xe as construirHierarquiaCamadas,
2242
+ Pa as converterCamadaItemParaCanvasLayer,
2243
+ Ta as converterCanvasLayerParaCamadaItem,
2244
+ Oa as converterFeicaoParaItem,
2245
+ S as escapeHtml,
2246
+ U as filtrarFeicoesPorBusca,
2247
+ be as formatarMetricaFeicoes,
2248
+ He as formatarOpcoesCamadasHierarquicas,
2249
+ ea as gerarChaveStorage,
2250
+ ta as limparEstadoPersistido,
2251
+ ia as montarEstadoPersistido,
2252
+ Ve as obterIdsVisiveisFeicoes,
2253
+ ra as reidratarCamadasComOverrides,
2254
+ Ye as removerSelecoesInvalidas,
2255
+ Qe as renderizarArvoreCamadas,
2256
+ Ne as renderizarGridMapasBase,
2257
+ Ge as renderizarRodapeAcoes,
2258
+ Ke as renderizarThumbGeometria,
2259
+ aa as salvarEstadoPersistido,
2260
+ re as snapshotCamada
2173
2261
  };