@thibezer/ui-components-kit 2.2.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/README.md +760 -760
- package/dist/camadas.cjs +68 -68
- package/dist/camadas.js +493 -458
- package/dist/components/ui-camadas/camadas-arvore-renderer.d.ts +1 -1
- package/dist/custom-elements.json +3880 -3873
- package/package.json +169 -169
- package/dist/ui-botao-OGJV6Vfk.js +0 -165
- package/dist/ui-botao-psS1juof.cjs +0 -12
package/dist/camadas.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
1
|
+
var Me = Object.defineProperty;
|
|
2
|
+
var ze = (e, o, a) => o in e ? Me(e, o, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[o] = a;
|
|
3
|
+
var A = (e, o, a) => ze(e, typeof o != "symbol" ? o + "" : o, a);
|
|
4
4
|
/* empty css */
|
|
5
|
-
import { d as
|
|
6
|
-
import { L as
|
|
7
|
-
import { UIMapaBase as
|
|
5
|
+
import { d as ae, S as Fe } from "./ssr-safe-5cWfJP-s.js";
|
|
6
|
+
import { L as Be } from "./listener-bag-DQgv7OON.js";
|
|
7
|
+
import { UIMapaBase as Ba, UISeletorMapaBase as qa } from "./seletor-mapa-base.js";
|
|
8
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,20 +103,20 @@ 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
|
-
},
|
|
107
|
-
function
|
|
106
|
+
}, Z = 6378137;
|
|
107
|
+
function qe(e, o) {
|
|
108
108
|
if (!e || !o) return 0;
|
|
109
|
-
const a = e[0] * Math.PI / 180, t = e[1] * Math.PI / 180, i = o[0] * Math.PI / 180, r = o[1] * Math.PI / 180,
|
|
110
|
-
return
|
|
109
|
+
const a = e[0] * Math.PI / 180, t = e[1] * Math.PI / 180, i = o[0] * Math.PI / 180, r = o[1] * Math.PI / 180, n = i - a, s = r - t, l = Math.sin(n / 2) * Math.sin(n / 2) + Math.cos(a) * Math.cos(i) * Math.sin(s / 2) * Math.sin(s / 2);
|
|
110
|
+
return Z * 2 * Math.atan2(Math.sqrt(l), Math.sqrt(1 - l));
|
|
111
111
|
}
|
|
112
|
-
function
|
|
112
|
+
function fe(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 +
|
|
115
|
+
return e.reduce((a, t) => a + fe(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 +=
|
|
119
|
+
Array.isArray(t) && Array.isArray(i) && t.length >= 2 && i.length >= 2 && (o += qe([t[0], t[1]], [i[0], i[1]]));
|
|
120
120
|
}
|
|
121
121
|
return o;
|
|
122
122
|
}
|
|
@@ -126,21 +126,21 @@ function Q(e) {
|
|
|
126
126
|
if (o < 3) return 0;
|
|
127
127
|
let a = 0;
|
|
128
128
|
for (let i = 0; i < o; i++) {
|
|
129
|
-
const r = e[i],
|
|
130
|
-
if (!Array.isArray(r) || !Array.isArray(
|
|
131
|
-
const l = (
|
|
129
|
+
const r = e[i], n = e[(i + 1) % o], s = e[(i + 2) % o];
|
|
130
|
+
if (!Array.isArray(r) || !Array.isArray(n) || !Array.isArray(s)) continue;
|
|
131
|
+
const l = (n[1] - r[1]) * (Math.PI / 180), c = (n[0] - r[0]) * (Math.PI / 180), f = (s[1] - n[1]) * (Math.PI / 180), u = (s[0] - n[0]) * (Math.PI / 180);
|
|
132
132
|
a += l * u - c * f;
|
|
133
133
|
}
|
|
134
|
-
const t = Math.abs(a * (
|
|
134
|
+
const t = Math.abs(a * (Z * Z) / 2);
|
|
135
135
|
return isNaN(t) ? 0 : t;
|
|
136
136
|
}
|
|
137
|
-
function
|
|
137
|
+
function me(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
140
|
return Q(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 +
|
|
143
|
+
return e.reduce((t, i) => t + me(i), 0);
|
|
144
144
|
const o = Q(e[0]);
|
|
145
145
|
let a = 0;
|
|
146
146
|
for (let t = 1; t < e.length; t++)
|
|
@@ -149,14 +149,14 @@ function ue(e) {
|
|
|
149
149
|
}
|
|
150
150
|
return 0;
|
|
151
151
|
}
|
|
152
|
-
function
|
|
152
|
+
function he(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 + (
|
|
159
|
+
(i, r) => i + (me(r.coordinates) || 0),
|
|
160
160
|
0
|
|
161
161
|
);
|
|
162
162
|
return t >= 1e4 ? `${(t / 1e4).toLocaleString("pt-BR", {
|
|
@@ -169,7 +169,7 @@ function pe(e) {
|
|
|
169
169
|
);
|
|
170
170
|
if (a.length > 0) {
|
|
171
171
|
const t = a.reduce(
|
|
172
|
-
(i, r) => i + (
|
|
172
|
+
(i, r) => i + (fe(r.coordinates) || 0),
|
|
173
173
|
0
|
|
174
174
|
);
|
|
175
175
|
return t >= 1e3 ? `${(t / 1e3).toLocaleString("pt-BR", {
|
|
@@ -179,23 +179,23 @@ function pe(e) {
|
|
|
179
179
|
}
|
|
180
180
|
return "";
|
|
181
181
|
}
|
|
182
|
-
function
|
|
182
|
+
function $(e) {
|
|
183
183
|
return e == null ? "" : String(e).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
184
184
|
}
|
|
185
|
-
const
|
|
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
186
|
function G(e, o = "#00E08A") {
|
|
187
187
|
if (!e || typeof e != "string") return o;
|
|
188
188
|
const a = e.trim();
|
|
189
|
-
return
|
|
189
|
+
return Te.test(a) ? a : o;
|
|
190
190
|
}
|
|
191
|
-
function
|
|
191
|
+
function X(e) {
|
|
192
192
|
return Math.max(0, Math.min(255, Math.round(e))).toString(16).padStart(2, "0");
|
|
193
193
|
}
|
|
194
|
-
function
|
|
195
|
-
const t = o / 100, i = a / 100, r = (l) => (l + e / 30) % 12,
|
|
196
|
-
return [
|
|
194
|
+
function De(e, o, a) {
|
|
195
|
+
const t = o / 100, i = a / 100, r = (l) => (l + e / 30) % 12, n = t * Math.min(i, 1 - i), s = (l) => i - n * Math.max(-1, Math.min(r(l) - 3, Math.min(9 - r(l), 1)));
|
|
196
|
+
return [s(0) * 255, s(8) * 255, s(4) * 255];
|
|
197
197
|
}
|
|
198
|
-
function
|
|
198
|
+
function Pe(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) {
|
|
@@ -204,21 +204,21 @@ function Be(e, o = "#000000") {
|
|
|
204
204
|
}
|
|
205
205
|
const i = /^(rgb|hsl)a?\(([^)]+)\)$/.exec(a);
|
|
206
206
|
if (i) {
|
|
207
|
-
const r = i[2].split(/[\s,/]+/).filter(Boolean).map((
|
|
208
|
-
if (r.length >= 3 && r.slice(0, 3).every((
|
|
209
|
-
const [
|
|
210
|
-
return `#${
|
|
207
|
+
const r = i[2].split(/[\s,/]+/).filter(Boolean).map((n) => parseFloat(n));
|
|
208
|
+
if (r.length >= 3 && r.slice(0, 3).every((n) => !isNaN(n))) {
|
|
209
|
+
const [n, s, l] = r, [c, f, u] = i[1] === "rgb" ? [n, s, l] : De(n, s, l);
|
|
210
|
+
return `#${X(c)}${X(f)}${X(u)}`;
|
|
211
211
|
}
|
|
212
212
|
}
|
|
213
213
|
return o;
|
|
214
214
|
}
|
|
215
|
-
function
|
|
215
|
+
function F(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
|
|
221
|
+
function ge(e, o = 80) {
|
|
222
222
|
let a = null;
|
|
223
223
|
return (...t) => {
|
|
224
224
|
a && clearTimeout(a), a = setTimeout(() => {
|
|
@@ -226,10 +226,10 @@ function fe(e, o = 80) {
|
|
|
226
226
|
}, o);
|
|
227
227
|
};
|
|
228
228
|
}
|
|
229
|
-
function
|
|
229
|
+
function B(e, o) {
|
|
230
230
|
e.setAttribute("title", o), e.setAttribute("aria-label", o);
|
|
231
231
|
}
|
|
232
|
-
const
|
|
232
|
+
const ve = [
|
|
233
233
|
{
|
|
234
234
|
id: "none",
|
|
235
235
|
nome: "Sem Mapa",
|
|
@@ -272,18 +272,18 @@ const me = [
|
|
|
272
272
|
thumbnailUrl: "https://images.unsplash.com/photo-1518709268805-4e9042af9f23?w=160&auto=format&fit=crop&q=80"
|
|
273
273
|
}
|
|
274
274
|
];
|
|
275
|
-
function
|
|
275
|
+
function je(e = ve, 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 =
|
|
281
|
+
const i = o === t.id, r = $(t.id), n = $(t.nome), s = $(t.descricao || t.nome);
|
|
282
282
|
let l = "";
|
|
283
|
-
return t.thumbnailUrl ? l = `<img class="ui-basemap-preview" src="${
|
|
284
|
-
<div class="ui-basemap-card ${i ? "active" : ""}" data-basemap-id="${r}" role="button" tabindex="0" aria-pressed="${i}" title="${
|
|
283
|
+
return t.thumbnailUrl ? l = `<img class="ui-basemap-preview" src="${$(t.thumbnailUrl)}" alt="" loading="lazy" referrerpolicy="no-referrer" data-basemap-thumb />` : l = `<div class="ui-basemap-preview-none">${g.gradeCad}</div>`, `
|
|
284
|
+
<div class="ui-basemap-card ${i ? "active" : ""}" data-basemap-id="${r}" role="button" tabindex="0" aria-pressed="${i}" title="${s}">
|
|
285
285
|
${l}
|
|
286
|
-
<span>${
|
|
286
|
+
<span>${n}</span>
|
|
287
287
|
</div>
|
|
288
288
|
`;
|
|
289
289
|
}).join("")}
|
|
@@ -291,26 +291,26 @@ function qe(e = me, o = "satelite") {
|
|
|
291
291
|
</div>
|
|
292
292
|
`;
|
|
293
293
|
}
|
|
294
|
-
function
|
|
294
|
+
function Oe(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 = [];
|
|
298
298
|
e.forEach((r) => {
|
|
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
|
-
const i = (r,
|
|
302
|
-
const
|
|
301
|
+
const i = (r, n) => {
|
|
302
|
+
const s = a.get(r.id) || (Array.isArray(r.children) ? r.children : []), l = n > 0 ? " ".repeat(n) + "↳ " : s.length > 0 || r.isGroup ? "📁 " : "", c = `<option value="${$(r.id)}">${l}${$(r.name)}</option>`, f = s.map((u) => i(u, n + 1)).join("");
|
|
303
303
|
return c + f;
|
|
304
304
|
};
|
|
305
305
|
return t.map((r) => i(r, 0)).join("");
|
|
306
306
|
}
|
|
307
|
-
function
|
|
308
|
-
const t = o.filter((c) => a.has(c.id)), i = t.length > 0, r =
|
|
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);
|
|
309
309
|
return `
|
|
310
310
|
<div class="ui-tree-footer ${i ? "tem-selecao" : "sem-selecao"}">
|
|
311
311
|
<div class="ui-footer-left">
|
|
312
|
-
<span class="ui-footer-count" id="footer-count">${
|
|
313
|
-
<span class="ui-footer-label" id="footer-label">${
|
|
312
|
+
<span class="ui-footer-count" id="footer-count">${n}</span>
|
|
313
|
+
<span class="ui-footer-label" id="footer-label">${s}</span>
|
|
314
314
|
<span class="ui-footer-metric" id="footer-metric" style="display: ${r ? "inline-flex" : "none"};">${r ? `${g.reguaMetrica} ${r}` : ""}</span>
|
|
315
315
|
</div>
|
|
316
316
|
|
|
@@ -357,87 +357,122 @@ function Te(e, o, a) {
|
|
|
357
357
|
</div>
|
|
358
358
|
`;
|
|
359
359
|
}
|
|
360
|
-
const
|
|
361
|
-
function
|
|
360
|
+
const be = 80;
|
|
361
|
+
function te(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
|
|
368
|
-
const r = (t || "").trim() !== "",
|
|
367
|
+
function Ne(e, o, a, t = "", i = be) {
|
|
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 || "";
|
|
371
|
-
|
|
371
|
+
s.has(f) || s.set(f, []), s.get(f).push(c);
|
|
372
372
|
}
|
|
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 =
|
|
376
|
+
const f = te(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
|
-
return
|
|
381
|
+
return n;
|
|
382
382
|
}
|
|
383
|
-
function
|
|
383
|
+
function He(e, o, a, t, i, r) {
|
|
384
384
|
if (!e.includes(t)) return null;
|
|
385
|
-
const
|
|
386
|
-
let
|
|
385
|
+
const n = new Set(o);
|
|
386
|
+
let s = a;
|
|
387
387
|
if (r && a && e.includes(a)) {
|
|
388
388
|
const l = e.indexOf(a), c = e.indexOf(t), f = Math.min(l, c), u = Math.max(l, c);
|
|
389
|
-
i ||
|
|
389
|
+
i || n.clear();
|
|
390
390
|
for (let p = f; p <= u; p++)
|
|
391
|
-
|
|
392
|
-
} else i ? (
|
|
393
|
-
return { selecionados:
|
|
391
|
+
n.add(e[p]);
|
|
392
|
+
} else i ? (n.has(t) ? n.delete(t) : n.add(t), s = t) : (n.clear(), n.add(t), s = t);
|
|
393
|
+
return { selecionados: n, ultimoClicadoId: s };
|
|
394
394
|
}
|
|
395
|
-
function
|
|
395
|
+
function Ge(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
|
-
|
|
402
|
-
|
|
403
|
-
return
|
|
401
|
+
const J = 64;
|
|
402
|
+
function ue(e) {
|
|
403
|
+
return Array.isArray(e) && e.length >= 2 && Number.isFinite(e[0]) && Number.isFinite(e[1]);
|
|
404
|
+
}
|
|
405
|
+
function xe(e) {
|
|
406
|
+
return !Array.isArray(e) || e.length === 0 ? [] : ue(e[0]) ? [e.filter(ue)] : e.flatMap(xe);
|
|
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)]);
|
|
412
|
+
return a.push(e[e.length - 1]), a;
|
|
413
|
+
}
|
|
414
|
+
function Ve(e, o, a) {
|
|
415
|
+
const t = xe(o).filter((w) => w.length > 0);
|
|
416
|
+
if (t.length === 0) return "";
|
|
417
|
+
let i = 1 / 0, r = -1 / 0, n = 1 / 0, s = -1 / 0;
|
|
418
|
+
for (const w of t)
|
|
419
|
+
for (const [E, M] of w)
|
|
420
|
+
M < i && (i = M), M > r && (r = M), -E < n && (n = -E), -E > s && (s = -E);
|
|
421
|
+
const l = 16, c = 2, f = l - c * 2, u = r - i, p = s - n, d = Math.max(u, p), m = d > 0 ? f / d : 0, h = c + (f - u * m) / 2, I = c + (f - p * m) / 2, v = (w) => Math.round(w * 100) / 100, b = ([w, E]) => `${v(h + (E - i) * m)},${v(I + (-w - n) * m)}`, C = e === "polygon" || e === "multipolygon", x = e === "linestring" || e === "multilinestring", y = (w) => `<svg viewBox="0 0 ${l} ${l}" width="100%" height="100%" aria-hidden="true">${w}</svg>`;
|
|
422
|
+
if (C) {
|
|
423
|
+
const w = t.filter((E) => E.length >= 3).map((E) => `M${pe(E).map(b).join("L")}Z`).join("");
|
|
424
|
+
return w ? y(
|
|
425
|
+
`<path d="${w}" fill="${a}" fill-opacity="0.45" fill-rule="evenodd" stroke="${a}" stroke-width="1.2" stroke-linejoin="round"/>`
|
|
426
|
+
) : "";
|
|
427
|
+
}
|
|
428
|
+
if (x) {
|
|
429
|
+
const w = t.filter((E) => E.length >= 2).map((E) => `M${pe(E).map(b).join("L")}`).join("");
|
|
430
|
+
return w ? y(
|
|
431
|
+
`<path d="${w}" fill="none" stroke="${a}" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>`
|
|
432
|
+
) : "";
|
|
433
|
+
}
|
|
434
|
+
return "";
|
|
404
435
|
}
|
|
405
|
-
function
|
|
436
|
+
function Ue(e, o, a) {
|
|
437
|
+
const t = G(o, "#00E08A"), i = (e || "").toLowerCase(), r = a !== void 0 ? Ve(i, a, t) : "";
|
|
438
|
+
return r || (i === "polygon" || i === "multipolygon" ? `<svg viewBox="0 0 16 16" width="11" height="11"><polygon points="2,14 14,14 12,2 4,4" fill="${t}" fill-opacity="0.45" stroke="${t}" stroke-width="1.5"/></svg>` : i === "linestring" || i === "multilinestring" ? `<svg viewBox="0 0 16 16" width="11" height="11"><polyline points="2,13 8,3 14,10" fill="none" stroke="${t}" stroke-width="2"/></svg>` : i === "text" ? `<svg viewBox="0 0 16 16" width="11" height="11"><text x="8" y="12" font-size="12" font-weight="bold" fill="${t}" text-anchor="middle" font-family="sans-serif">T</text></svg>` : `<svg viewBox="0 0 16 16" width="11" height="11"><circle cx="8" cy="8" r="4.2" fill="${t}" stroke="#ffffff" stroke-width="1.2"/></svg>`);
|
|
439
|
+
}
|
|
440
|
+
function _e(e) {
|
|
406
441
|
const o = /* @__PURE__ */ new Map();
|
|
407
442
|
e.forEach((r) => o.set(r.id, r));
|
|
408
443
|
const a = /* @__PURE__ */ new Map(), t = [];
|
|
409
444
|
e.forEach((r) => {
|
|
410
445
|
r.parentId && o.has(r.parentId) && r.parentId !== r.id ? (a.has(r.parentId) || a.set(r.parentId, []), a.get(r.parentId).push(r)) : t.push(r);
|
|
411
446
|
});
|
|
412
|
-
function i(r,
|
|
413
|
-
const
|
|
447
|
+
function i(r, n) {
|
|
448
|
+
const s = a.get(r.id) || (Array.isArray(r.children) ? r.children : []);
|
|
414
449
|
return {
|
|
415
450
|
camada: r,
|
|
416
|
-
depth:
|
|
417
|
-
subcamadas:
|
|
451
|
+
depth: n,
|
|
452
|
+
subcamadas: s.map((l) => i(l, n + 1))
|
|
418
453
|
};
|
|
419
454
|
}
|
|
420
455
|
return t.map((r) => i(r, 0));
|
|
421
456
|
}
|
|
422
|
-
function
|
|
457
|
+
function Ke(e) {
|
|
423
458
|
const {
|
|
424
459
|
camadas: o,
|
|
425
460
|
feicoes: a,
|
|
426
461
|
camadaAtivaId: t,
|
|
427
462
|
expandedLayers: i,
|
|
428
463
|
selectedFeatureIds: r,
|
|
429
|
-
activeSettingsLayerId:
|
|
430
|
-
editingLayerId:
|
|
464
|
+
activeSettingsLayerId: n,
|
|
465
|
+
editingLayerId: s,
|
|
431
466
|
editingFeatureId: l,
|
|
432
467
|
searchQuery: c,
|
|
433
|
-
limiteFeicoesPorCamada: f =
|
|
468
|
+
limiteFeicoesPorCamada: f = be,
|
|
434
469
|
mostrarBotaoColapsar: u = !1
|
|
435
470
|
} = e, p = (c || "").trim().toLowerCase(), d = /* @__PURE__ */ new Map();
|
|
436
471
|
for (let x = 0; x < a.length; x++) {
|
|
437
|
-
const
|
|
438
|
-
d.has(
|
|
472
|
+
const y = a[x], w = y.layerId || "";
|
|
473
|
+
d.has(w) || d.set(w, []), d.get(w).push(y);
|
|
439
474
|
}
|
|
440
|
-
const m = o.every((x) => x.visible !== !1), h = o.length > 0 && o.every((x) => i.has(x.id)),
|
|
475
|
+
const m = o.every((x) => x.visible !== !1), h = o.length > 0 && o.every((x) => i.has(x.id)), I = `
|
|
441
476
|
<div class="ui-tree-toolbar">
|
|
442
477
|
<div class="ui-tree-title-group">
|
|
443
478
|
<span class="ui-tree-section-title">CAMADAS</span>
|
|
@@ -462,33 +497,33 @@ function He(e) {
|
|
|
462
497
|
|
|
463
498
|
<div class="ui-tree-search-wrapper">
|
|
464
499
|
<span class="ui-tree-search-icon">${g.busca}</span>
|
|
465
|
-
<input type="text" class="ui-tree-search-input" id="input-layer-search" aria-label="Buscar camada ou feição" placeholder="Buscar camada ou feição..." value="${
|
|
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="${$(
|
|
466
501
|
c
|
|
467
502
|
)}" />
|
|
468
503
|
${c ? `<button class="ui-tree-search-clear" id="btn-clear-layer-search" title="Limpar busca" aria-label="Limpar busca">${g.fechar}</button>` : ""}
|
|
469
504
|
</div>
|
|
470
505
|
`, v = (x) => {
|
|
471
|
-
const
|
|
472
|
-
const z =
|
|
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;
|
|
473
508
|
let Y = "";
|
|
474
|
-
return
|
|
475
|
-
<div class="ui-feat-row ${K ? "selected-row" : ""} ${N ? "" : "hidden-row"}" data-feat-row="${z}" data-feat-select="${z}" data-feat-layer="${
|
|
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">
|
|
476
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"}">
|
|
477
512
|
${N ? g.olhoAberto : g.olhoFechado}
|
|
478
513
|
</div>
|
|
479
514
|
|
|
480
|
-
<div class="ui-col ui-col-lock ${_ ? "" : "ui-lock-open"}" data-feat-lock="${z}" ${U ? 'data-locked-by-layer="true"' : ""} role="button" tabindex="0" aria-label="${
|
|
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}">
|
|
481
516
|
${_ ? g.cadeadoTrancado : g.cadeadoAberto}
|
|
482
517
|
</div>
|
|
483
518
|
|
|
484
|
-
<div class="ui-col ui-col-colorbar" style="background: ${
|
|
519
|
+
<div class="ui-col ui-col-colorbar" style="background: ${le};"></div>
|
|
485
520
|
<div class="ui-col ui-col-branch"><span style="opacity: 0.35;">└─</span></div>
|
|
486
521
|
<div class="ui-col ui-col-thumb">
|
|
487
|
-
<div class="ui-thumb-box">${
|
|
522
|
+
<div class="ui-thumb-box">${Ue(k.type || k.geometryType, le, k.coordinates)}</div>
|
|
488
523
|
</div>
|
|
489
524
|
|
|
490
525
|
<div class="ui-col ui-col-name" data-feat-name-trigger="${z}" title="Duplo clique para renomear">
|
|
491
|
-
${l ===
|
|
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}`}
|
|
492
527
|
</div>
|
|
493
528
|
|
|
494
529
|
<div class="ui-col ui-col-actions">
|
|
@@ -500,16 +535,16 @@ function He(e) {
|
|
|
500
535
|
</div>
|
|
501
536
|
</div>
|
|
502
537
|
`;
|
|
503
|
-
}).join(""),
|
|
504
|
-
(
|
|
505
|
-
).join(""),
|
|
506
|
-
<div class="ui-layer-settings-drawer" id="settings-drawer-${
|
|
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};">
|
|
507
542
|
<div class="ui-drawer-header">
|
|
508
543
|
<div class="ui-drawer-header-left">
|
|
509
544
|
<span class="ui-drawer-icon">${g.engrenagem}</span>
|
|
510
545
|
<span class="ui-drawer-title">Configurações da Camada</span>
|
|
511
546
|
</div>
|
|
512
|
-
<button type="button" class="ui-drawer-btn-fechar" data-layer-settings-close="${
|
|
547
|
+
<button type="button" class="ui-drawer-btn-fechar" data-layer-settings-close="${L}" title="Fechar configurações (Esc)" aria-label="Fechar configurações">
|
|
513
548
|
${g.fechar}
|
|
514
549
|
</button>
|
|
515
550
|
</div>
|
|
@@ -522,9 +557,9 @@ function He(e) {
|
|
|
522
557
|
</div>
|
|
523
558
|
<div class="ui-drawer-color-group">
|
|
524
559
|
<label class="ui-drawer-color-pill" title="Clique para alterar a cor da camada">
|
|
525
|
-
<span class="ui-drawer-color-sample" id="sample-color-${
|
|
526
|
-
<span class="ui-drawer-color-hex" id="hex-color-${
|
|
527
|
-
<input type="color" aria-label="Cor da camada" data-layer-color-picker="${
|
|
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" />
|
|
528
563
|
</label>
|
|
529
564
|
</div>
|
|
530
565
|
</div>
|
|
@@ -533,10 +568,10 @@ function He(e) {
|
|
|
533
568
|
<div class="ui-drawer-row">
|
|
534
569
|
<div class="ui-drawer-row-label">
|
|
535
570
|
<span>Opacidade</span>
|
|
536
|
-
<span class="ui-drawer-badge" id="badge-op-${
|
|
571
|
+
<span class="ui-drawer-badge" id="badge-op-${L}">${Le}%</span>
|
|
537
572
|
</div>
|
|
538
573
|
<div class="ui-drawer-slider-container">
|
|
539
|
-
<input type="range" aria-label="Opacidade da camada" min="0.05" max="1" step="0.05" value="${Number(
|
|
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" />
|
|
540
575
|
</div>
|
|
541
576
|
</div>
|
|
542
577
|
|
|
@@ -546,9 +581,9 @@ function He(e) {
|
|
|
546
581
|
<span>Pertence ao Grupo</span>
|
|
547
582
|
</div>
|
|
548
583
|
<div class="ui-drawer-select-wrapper">
|
|
549
|
-
<select class="ui-drawer-select" data-layer-parent-select="${
|
|
550
|
-
<option value="" ${
|
|
551
|
-
${
|
|
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}
|
|
552
587
|
</select>
|
|
553
588
|
</div>
|
|
554
589
|
</div>
|
|
@@ -556,78 +591,78 @@ function He(e) {
|
|
|
556
591
|
|
|
557
592
|
<div class="ui-drawer-footer">
|
|
558
593
|
<div class="ui-drawer-meta-info">
|
|
559
|
-
<span>${
|
|
594
|
+
<span>${E.length > 0 ? `${E.length} subcamadas · ` : ""}${S.length} ${S.length === 1 ? "feição" : "feições"}</span>
|
|
560
595
|
</div>
|
|
561
596
|
<div class="ui-drawer-actions">
|
|
562
|
-
<button type="button" class="ui-drawer-btn-sublayer" data-add-sublayer="${
|
|
597
|
+
<button type="button" class="ui-drawer-btn-sublayer" data-add-sublayer="${L}" title="Adicionar nova camada dentro desta">
|
|
563
598
|
${g.mais} Subcamada
|
|
564
599
|
</button>
|
|
565
|
-
<button type="button" class="ui-drawer-btn-danger" data-delete-layer="${
|
|
600
|
+
<button type="button" class="ui-drawer-btn-danger" data-delete-layer="${L}" title="Excluir esta camada e suas feições">
|
|
566
601
|
${g.lixeira}
|
|
567
602
|
<span class="ui-btn-label">Excluir</span>
|
|
568
603
|
</button>
|
|
569
604
|
</div>
|
|
570
605
|
</div>
|
|
571
606
|
</div>
|
|
572
|
-
` : "",
|
|
607
|
+
` : "", Se = E.map((k) => v(k)).join("");
|
|
573
608
|
return `
|
|
574
|
-
<div class="ui-layer-group ${
|
|
575
|
-
<div class="ui-layer-row ${
|
|
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};">
|
|
576
611
|
<div class="ui-col ui-col-drag" title="Arrastar para reordenar Z-Index">${g.dragHandle}</div>
|
|
577
612
|
|
|
578
|
-
<div class="ui-col ui-col-eye" data-layer-eye="${
|
|
579
|
-
${
|
|
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}
|
|
580
615
|
</div>
|
|
581
616
|
|
|
582
|
-
<div class="ui-col ui-col-lock ${
|
|
583
|
-
${
|
|
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}
|
|
584
619
|
</div>
|
|
585
620
|
|
|
586
|
-
<div class="ui-col ui-col-colorbar" style="background: ${
|
|
621
|
+
<div class="ui-col ui-col-colorbar" style="background: ${q};"></div>
|
|
587
622
|
|
|
588
|
-
<div class="ui-col ui-col-chevron" data-layer-expand="${
|
|
623
|
+
<div class="ui-col ui-col-chevron" data-layer-expand="${L}" role="button" tabindex="0" aria-label="${R ? "Recolher grupo" : "Expandir grupo"}">
|
|
589
624
|
<span class="ui-chevron-icon ${R ? "open" : ""}">${g.chevronDir}</span>
|
|
590
625
|
</div>
|
|
591
626
|
|
|
592
|
-
<div class="ui-col ui-col-name" data-layer-name-trigger="${
|
|
593
|
-
${
|
|
594
|
-
<span class="ui-name-text">${
|
|
595
|
-
${
|
|
596
|
-
${
|
|
597
|
-
${S.length > 0 || !
|
|
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>` : ""}`}
|
|
598
633
|
</div>
|
|
599
634
|
|
|
600
635
|
<div class="ui-col ui-col-actions">
|
|
601
|
-
<button class="ui-micro-btn" data-layer-fit="${
|
|
602
|
-
<button class="ui-micro-btn ${V ? "active" : ""}" data-layer-settings="${
|
|
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>
|
|
603
638
|
</div>
|
|
604
639
|
|
|
605
|
-
<div class="ui-col ui-col-target" data-layer-target="${
|
|
606
|
-
<div class="ui-target-circle ${
|
|
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>
|
|
607
642
|
</div>
|
|
608
643
|
</div>
|
|
609
644
|
|
|
610
|
-
${
|
|
645
|
+
${$e}
|
|
611
646
|
|
|
612
|
-
<div class="ui-children-container ${
|
|
647
|
+
<div class="ui-children-container ${w > 0 ? "is-subchildren" : ""}" role="group" style="display: ${R ? "block" : "none"};">
|
|
648
|
+
${Se}
|
|
649
|
+
${ke}
|
|
613
650
|
${Ie}
|
|
614
|
-
${
|
|
615
|
-
${we}
|
|
616
|
-
${C.length === 0 && S.length === 0 ? `<div class="ui-empty-row"><span>${p ? "Nenhum item correspondente" : D ? "Grupo vazio (adicione subcamadas ou feições)" : "Nenhum elemento neste grupo"}</span></div>` : ""}
|
|
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>` : ""}
|
|
617
652
|
</div>
|
|
618
653
|
</div>
|
|
619
654
|
`;
|
|
620
|
-
},
|
|
655
|
+
}, C = _e(o).map((x) => v(x)).join("");
|
|
621
656
|
return `
|
|
622
|
-
${
|
|
657
|
+
${I}
|
|
623
658
|
<div class="ui-panel-box">
|
|
624
659
|
<div class="ui-layer-tree" id="ui-layer-tree-mount" role="tree" aria-label="Camadas e feições" aria-multiselectable="true">
|
|
625
|
-
${
|
|
660
|
+
${C}
|
|
626
661
|
</div>
|
|
627
662
|
</div>
|
|
628
663
|
`;
|
|
629
664
|
}
|
|
630
|
-
function
|
|
665
|
+
function Ye(e, o, a) {
|
|
631
666
|
let t = e.find((i) => i.id === o);
|
|
632
667
|
for (; t && t.parentId; ) {
|
|
633
668
|
if (t.parentId === a) return !0;
|
|
@@ -635,10 +670,10 @@ function Ge(e, o, a) {
|
|
|
635
670
|
}
|
|
636
671
|
return !1;
|
|
637
672
|
}
|
|
638
|
-
class
|
|
673
|
+
class Qe {
|
|
639
674
|
constructor(o, a) {
|
|
640
|
-
|
|
641
|
-
|
|
675
|
+
A(this, "host");
|
|
676
|
+
A(this, "shadow");
|
|
642
677
|
this.host = o, this.shadow = a;
|
|
643
678
|
}
|
|
644
679
|
bindAll() {
|
|
@@ -651,7 +686,7 @@ class Ve {
|
|
|
651
686
|
const t = o.getAttribute("data-layer-name-trigger");
|
|
652
687
|
if (!t) return;
|
|
653
688
|
this.host.editingLayerId = t, this.host.solicitarRenderizacao();
|
|
654
|
-
const i =
|
|
689
|
+
const i = F(
|
|
655
690
|
this.shadow,
|
|
656
691
|
"data-inline-layer-input",
|
|
657
692
|
t
|
|
@@ -659,10 +694,10 @@ class Ve {
|
|
|
659
694
|
if (i) {
|
|
660
695
|
i.focus(), i.select();
|
|
661
696
|
let r = !1;
|
|
662
|
-
const
|
|
697
|
+
const n = (s) => {
|
|
663
698
|
var l, c;
|
|
664
699
|
if (!r) {
|
|
665
|
-
if (r = !0, this.host.editingLayerId = null,
|
|
700
|
+
if (r = !0, this.host.editingLayerId = null, s) {
|
|
666
701
|
const f = i.value.trim(), u = this.host.camadas.find((p) => p.id === t);
|
|
667
702
|
f && u && u.name !== f && (u.name = f, (c = (l = this.host).salvarLembrancaEstado) == null || c.call(l), this.host.dispararEvento("ui-camada-renomeada", {
|
|
668
703
|
camadaId: t,
|
|
@@ -673,9 +708,9 @@ class Ve {
|
|
|
673
708
|
this.host.solicitarRenderizacao();
|
|
674
709
|
}
|
|
675
710
|
};
|
|
676
|
-
i.addEventListener("keydown", (
|
|
677
|
-
|
|
678
|
-
}), i.addEventListener("blur", () =>
|
|
711
|
+
i.addEventListener("keydown", (s) => {
|
|
712
|
+
s.key === "Enter" ? (s.preventDefault(), n(!0)) : s.key === "Escape" && (s.preventDefault(), n(!1));
|
|
713
|
+
}), i.addEventListener("blur", () => n(!0));
|
|
679
714
|
}
|
|
680
715
|
});
|
|
681
716
|
}), this.shadow.querySelectorAll("[data-feat-name-trigger]").forEach((o) => {
|
|
@@ -684,7 +719,7 @@ class Ve {
|
|
|
684
719
|
const t = o.getAttribute("data-feat-name-trigger");
|
|
685
720
|
if (!t) return;
|
|
686
721
|
this.host.editingFeatureId = t, this.host.solicitarRenderizacao();
|
|
687
|
-
const i =
|
|
722
|
+
const i = F(
|
|
688
723
|
this.shadow,
|
|
689
724
|
"data-inline-feat-input",
|
|
690
725
|
t
|
|
@@ -692,9 +727,9 @@ class Ve {
|
|
|
692
727
|
if (i) {
|
|
693
728
|
i.focus(), i.select();
|
|
694
729
|
let r = !1;
|
|
695
|
-
const
|
|
730
|
+
const n = (s) => {
|
|
696
731
|
if (!r) {
|
|
697
|
-
if (r = !0, this.host.editingFeatureId = null,
|
|
732
|
+
if (r = !0, this.host.editingFeatureId = null, s) {
|
|
698
733
|
const l = i.value.trim(), c = this.host.feicoes.find((f) => f.id === t);
|
|
699
734
|
l && c && c.name !== l && (c.name = l, this.host.dispararEvento("ui-feicao-renomeada", {
|
|
700
735
|
feicaoId: t,
|
|
@@ -705,9 +740,9 @@ class Ve {
|
|
|
705
740
|
this.host.solicitarRenderizacao();
|
|
706
741
|
}
|
|
707
742
|
};
|
|
708
|
-
i.addEventListener("keydown", (
|
|
709
|
-
|
|
710
|
-
}), i.addEventListener("blur", () =>
|
|
743
|
+
i.addEventListener("keydown", (s) => {
|
|
744
|
+
s.key === "Enter" ? (s.preventDefault(), n(!0)) : s.key === "Escape" && (s.preventDefault(), n(!1));
|
|
745
|
+
}), i.addEventListener("blur", () => n(!0));
|
|
711
746
|
}
|
|
712
747
|
});
|
|
713
748
|
});
|
|
@@ -720,35 +755,35 @@ class Ve {
|
|
|
720
755
|
});
|
|
721
756
|
};
|
|
722
757
|
this.shadow.querySelectorAll('.ui-layer-row[draggable="true"]').forEach((r) => {
|
|
723
|
-
const
|
|
724
|
-
|
|
725
|
-
const l =
|
|
758
|
+
const n = r.getAttribute("data-layer-id");
|
|
759
|
+
n && (r.addEventListener("dragstart", (s) => {
|
|
760
|
+
const l = s;
|
|
726
761
|
if (l.target.closest("input, button, select") || this.host.editingLayerId || this.host.editingFeatureId) {
|
|
727
762
|
l.preventDefault();
|
|
728
763
|
return;
|
|
729
764
|
}
|
|
730
|
-
o = "layer", a =
|
|
731
|
-
}), r.addEventListener("dragover", (
|
|
732
|
-
const l =
|
|
765
|
+
o = "layer", a = n, l.dataTransfer && (l.dataTransfer.setData("text/plain", JSON.stringify({ type: "layer", id: n })), l.dataTransfer.effectAllowed = "move"), r.classList.add("dragging");
|
|
766
|
+
}), r.addEventListener("dragover", (s) => {
|
|
767
|
+
const l = s;
|
|
733
768
|
if (l.preventDefault(), l.stopPropagation(), l.dataTransfer && (l.dataTransfer.dropEffect = "move"), o === "layer") {
|
|
734
|
-
if (a ===
|
|
769
|
+
if (a === n) return;
|
|
735
770
|
const c = r.getBoundingClientRect(), f = (l.clientY - c.top) / c.height;
|
|
736
771
|
f < 0.25 ? (r.classList.add("drop-above"), r.classList.remove("drop-below", "drop-into")) : f > 0.75 ? (r.classList.add("drop-below"), r.classList.remove("drop-above", "drop-into")) : (r.classList.add("drop-into"), r.classList.remove("drop-above", "drop-below"));
|
|
737
772
|
} else o === "feature" && r.classList.add("drop-into");
|
|
738
|
-
}), r.addEventListener("dragleave", (
|
|
739
|
-
const l =
|
|
773
|
+
}), r.addEventListener("dragleave", (s) => {
|
|
774
|
+
const l = s.relatedTarget;
|
|
740
775
|
l && r.contains(l) || r.classList.remove("drop-above", "drop-below", "drop-into");
|
|
741
|
-
}), r.addEventListener("drop", (
|
|
776
|
+
}), r.addEventListener("drop", (s) => {
|
|
742
777
|
var u, p;
|
|
743
|
-
const l =
|
|
778
|
+
const l = s;
|
|
744
779
|
l.preventDefault(), l.stopPropagation();
|
|
745
780
|
const c = r.classList.contains("drop-above"), f = r.classList.contains("drop-into");
|
|
746
781
|
if (i(), o === "layer") {
|
|
747
|
-
if (!a || a ===
|
|
748
|
-
const d = this.host.camadas.find((h) => h.id === a), m = this.host.camadas.find((h) => h.id ===
|
|
782
|
+
if (!a || a === n) return;
|
|
783
|
+
const d = this.host.camadas.find((h) => h.id === a), m = this.host.camadas.find((h) => h.id === n);
|
|
749
784
|
if (!d || !m) return;
|
|
750
785
|
if (f)
|
|
751
|
-
|
|
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", {
|
|
752
787
|
camadaId: d.id,
|
|
753
788
|
novoParentId: m.id,
|
|
754
789
|
camada: d
|
|
@@ -757,21 +792,21 @@ class Ve {
|
|
|
757
792
|
const h = this.host.camadas.findIndex((v) => v.id === a);
|
|
758
793
|
if (h === -1) return;
|
|
759
794
|
this.host.camadas.splice(h, 1);
|
|
760
|
-
const
|
|
761
|
-
|
|
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;
|
|
762
797
|
}
|
|
763
798
|
(p = (u = this.host).salvarLembrancaEstado) == null || p.call(u), this.host.dispararEvento("ui-camadas-reordenadas", {
|
|
764
799
|
camadas: [...this.host.camadas]
|
|
765
800
|
}), this.host.solicitarRenderizacao();
|
|
766
801
|
} else if (o === "feature") {
|
|
767
802
|
if (!t) return;
|
|
768
|
-
const d = this.host.feicoes.find((h) => h.id === t), m = this.host.camadas.find((h) => h.id ===
|
|
769
|
-
if (d && m && d.layerId !==
|
|
803
|
+
const d = this.host.feicoes.find((h) => h.id === t), m = this.host.camadas.find((h) => h.id === n);
|
|
804
|
+
if (d && m && d.layerId !== n) {
|
|
770
805
|
const h = d.layerId;
|
|
771
|
-
d.layerId =
|
|
806
|
+
d.layerId = n, this.host.dispararEvento("ui-feicao-movida", {
|
|
772
807
|
feicaoId: d.id,
|
|
773
808
|
camadaOrigemId: h,
|
|
774
|
-
camadaDestinoId:
|
|
809
|
+
camadaDestinoId: n,
|
|
775
810
|
feicao: d
|
|
776
811
|
}), this.host.solicitarRenderizacao();
|
|
777
812
|
}
|
|
@@ -780,20 +815,20 @@ class Ve {
|
|
|
780
815
|
o = null, a = null, t = null, i();
|
|
781
816
|
}));
|
|
782
817
|
}), this.shadow.querySelectorAll('.ui-feat-row[draggable="true"]').forEach((r) => {
|
|
783
|
-
const
|
|
784
|
-
|
|
818
|
+
const n = r.getAttribute("data-feat-row"), s = r.getAttribute("data-feat-layer");
|
|
819
|
+
n && (r.addEventListener("dragstart", (l) => {
|
|
785
820
|
const c = l;
|
|
786
821
|
if (c.target.closest("input, button, select") || this.host.editingLayerId || this.host.editingFeatureId) {
|
|
787
822
|
c.preventDefault();
|
|
788
823
|
return;
|
|
789
824
|
}
|
|
790
|
-
c.stopPropagation(), o = "feature", t =
|
|
825
|
+
c.stopPropagation(), o = "feature", t = n, a = s, c.dataTransfer && (c.dataTransfer.setData(
|
|
791
826
|
"text/plain",
|
|
792
|
-
JSON.stringify({ type: "feature", id:
|
|
827
|
+
JSON.stringify({ type: "feature", id: n, layerId: s })
|
|
793
828
|
), c.dataTransfer.effectAllowed = "move"), r.classList.add("dragging");
|
|
794
829
|
}), r.addEventListener("dragover", (l) => {
|
|
795
830
|
const c = l;
|
|
796
|
-
if (o !== "feature" || t ===
|
|
831
|
+
if (o !== "feature" || t === n) return;
|
|
797
832
|
c.preventDefault(), c.stopPropagation(), c.dataTransfer && (c.dataTransfer.dropEffect = "move");
|
|
798
833
|
const f = r.getBoundingClientRect(), u = c.clientY - f.top < f.height / 2;
|
|
799
834
|
r.classList.toggle("drop-above", u), r.classList.toggle("drop-below", !u);
|
|
@@ -802,18 +837,18 @@ class Ve {
|
|
|
802
837
|
c && r.contains(c) || r.classList.remove("drop-above", "drop-below");
|
|
803
838
|
}), r.addEventListener("drop", (l) => {
|
|
804
839
|
const c = l;
|
|
805
|
-
if (o !== "feature" || !t || t ===
|
|
840
|
+
if (o !== "feature" || !t || t === n) return;
|
|
806
841
|
c.preventDefault(), c.stopPropagation();
|
|
807
842
|
const f = r.classList.contains("drop-above");
|
|
808
843
|
i();
|
|
809
844
|
const u = this.host.feicoes.findIndex((b) => b.id === t);
|
|
810
845
|
if (u === -1) return;
|
|
811
|
-
const p = this.host.feicoes.find((b) => b.id ===
|
|
846
|
+
const p = this.host.feicoes.find((b) => b.id === n);
|
|
812
847
|
if (!p) return;
|
|
813
|
-
const [d] = this.host.feicoes.splice(u, 1), m = d.layerId, h = p.layerId,
|
|
814
|
-
|
|
815
|
-
const v = this.host.feicoes.findIndex((b) => b.id ===
|
|
816
|
-
v === -1 ? this.host.feicoes.push(d) : this.host.feicoes.splice(f ? v : v + 1, 0, d),
|
|
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", {
|
|
817
852
|
feicaoId: d.id,
|
|
818
853
|
camadaOrigemId: m,
|
|
819
854
|
camadaDestinoId: h,
|
|
@@ -837,27 +872,27 @@ class Ve {
|
|
|
837
872
|
t && o.addEventListener("pointerdown", (i) => {
|
|
838
873
|
const r = i;
|
|
839
874
|
if (r.pointerType === "mouse" && r.button !== 0 || this.host.editingLayerId || this.host.editingFeatureId) return;
|
|
840
|
-
let
|
|
875
|
+
let n = null, s = !1;
|
|
841
876
|
const l = t, c = () => {
|
|
842
877
|
this.shadow.querySelectorAll(".ui-layer-row, .ui-feat-row, .ui-layer-group").forEach((p) => p.classList.remove("dragging", "drop-above", "drop-below"));
|
|
843
878
|
}, f = (p) => {
|
|
844
879
|
p.preventDefault(), a.classList.add("dragging");
|
|
845
880
|
const d = this.shadow.elementFromPoint(p.clientX, p.clientY), m = d ? d.closest(".ui-layer-row") : null;
|
|
846
|
-
if (
|
|
847
|
-
|
|
881
|
+
if (n && n !== m && n.classList.remove("drop-above", "drop-below"), m && m !== a) {
|
|
882
|
+
n = m;
|
|
848
883
|
const h = m.getBoundingClientRect();
|
|
849
|
-
|
|
884
|
+
s = p.clientY - h.top < h.height / 2, m.classList.toggle("drop-above", s), m.classList.toggle("drop-below", !s);
|
|
850
885
|
} else
|
|
851
|
-
|
|
886
|
+
n = null;
|
|
852
887
|
}, u = () => {
|
|
853
888
|
var p, d;
|
|
854
|
-
if (window.removeEventListener("pointermove", f), window.removeEventListener("pointerup", u), window.removeEventListener("pointercancel", u),
|
|
855
|
-
const m =
|
|
889
|
+
if (window.removeEventListener("pointermove", f), window.removeEventListener("pointerup", u), window.removeEventListener("pointercancel", u), n) {
|
|
890
|
+
const m = n.getAttribute("data-layer-id");
|
|
856
891
|
if (c(), m && l && m !== l) {
|
|
857
|
-
const h = this.host.camadas.findIndex((
|
|
892
|
+
const h = this.host.camadas.findIndex((I) => I.id === l);
|
|
858
893
|
if (h !== -1) {
|
|
859
|
-
const [
|
|
860
|
-
v === -1 ? this.host.camadas.push(
|
|
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", {
|
|
861
896
|
camadas: [...this.host.camadas]
|
|
862
897
|
}), this.host.solicitarRenderizacao();
|
|
863
898
|
}
|
|
@@ -870,10 +905,10 @@ class Ve {
|
|
|
870
905
|
});
|
|
871
906
|
}
|
|
872
907
|
}
|
|
873
|
-
const
|
|
874
|
-
function
|
|
908
|
+
const Xe = "ui_camadas_estado_";
|
|
909
|
+
function Je(e, o) {
|
|
875
910
|
const a = (e || o || "default").trim();
|
|
876
|
-
return `${
|
|
911
|
+
return `${Xe}${a}`;
|
|
877
912
|
}
|
|
878
913
|
function W(e) {
|
|
879
914
|
if (typeof window > "u" || typeof localStorage > "u")
|
|
@@ -889,7 +924,7 @@ function W(e) {
|
|
|
889
924
|
}
|
|
890
925
|
return null;
|
|
891
926
|
}
|
|
892
|
-
function
|
|
927
|
+
function We(e, o) {
|
|
893
928
|
if (!(typeof window > "u" || typeof localStorage > "u"))
|
|
894
929
|
try {
|
|
895
930
|
localStorage.setItem(e, JSON.stringify(o));
|
|
@@ -897,14 +932,14 @@ function Ke(e, o) {
|
|
|
897
932
|
console.warn(`[UI-Camadas] Não foi possível salvar o estado persistido (${e}):`, a);
|
|
898
933
|
}
|
|
899
934
|
}
|
|
900
|
-
function
|
|
935
|
+
function Ze(e) {
|
|
901
936
|
if (!(typeof window > "u" || typeof localStorage > "u"))
|
|
902
937
|
try {
|
|
903
938
|
localStorage.removeItem(e);
|
|
904
939
|
} catch {
|
|
905
940
|
}
|
|
906
941
|
}
|
|
907
|
-
function
|
|
942
|
+
function ee(e) {
|
|
908
943
|
return {
|
|
909
944
|
name: e.name,
|
|
910
945
|
visible: e.visible !== !1,
|
|
@@ -914,20 +949,20 @@ function Z(e) {
|
|
|
914
949
|
parentId: e.parentId !== void 0 ? e.parentId : null
|
|
915
950
|
};
|
|
916
951
|
}
|
|
917
|
-
function
|
|
952
|
+
function ea(e, o, a, t) {
|
|
918
953
|
if (!Array.isArray(e)) return;
|
|
919
|
-
const i = (o == null ? void 0 : o.camadasOverrides) || {}, r = new Set((o == null ? void 0 : o.expandedLayerIds) || []),
|
|
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;
|
|
920
955
|
for (let u = 0; u < e.length; u++) {
|
|
921
956
|
const p = e[u], d = i[p.id];
|
|
922
|
-
if (t == null || t.set(p.id,
|
|
923
|
-
const m = d.origem, h = (
|
|
957
|
+
if (t == null || t.set(p.id, ee(p)), d) {
|
|
958
|
+
const m = d.origem, h = (I) => {
|
|
924
959
|
var b;
|
|
925
|
-
const v = (b = t == null ? void 0 : t.get(p.id)) == null ? void 0 : b[
|
|
926
|
-
return m !== void 0 && m[
|
|
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;
|
|
927
962
|
};
|
|
928
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);
|
|
929
964
|
}
|
|
930
|
-
|
|
965
|
+
s ? r.has(p.id) ? a.add(p.id) : n.has(p.id) ? a.delete(p.id) : a.add(p.id) : a.add(p.id);
|
|
931
966
|
}
|
|
932
967
|
const l = new Set(e.map((u) => u.id)), c = o == null ? void 0 : o.ordemOrigemIds;
|
|
933
968
|
if (!(Array.isArray(c) && (() => {
|
|
@@ -941,13 +976,13 @@ function Qe(e, o, a, t) {
|
|
|
941
976
|
});
|
|
942
977
|
}
|
|
943
978
|
}
|
|
944
|
-
function
|
|
979
|
+
function aa(e) {
|
|
945
980
|
const { estadoAnterior: o, camadas: a, expandedLayers: t } = e;
|
|
946
|
-
let i = (o == null ? void 0 : o.expandedLayerIds) || [], r = (o == null ? void 0 : o.collapsedLayerIds) || [],
|
|
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;
|
|
947
982
|
const l = {
|
|
948
983
|
...(o == null ? void 0 : o.camadasOverrides) || {}
|
|
949
984
|
};
|
|
950
|
-
a.length > 0 && (i = [], r = [],
|
|
985
|
+
a.length > 0 && (i = [], r = [], n = a.map((c) => c.id), s = e.origensCamadas ? [...e.origensCamadas.keys()] : n, a.forEach((c) => {
|
|
951
986
|
var f, u;
|
|
952
987
|
t.has(c.id) ? i.push(c.id) : r.push(c.id), l[c.id] = {
|
|
953
988
|
name: c.name,
|
|
@@ -965,8 +1000,8 @@ function Je(e) {
|
|
|
965
1000
|
collapsedLayerIds: r,
|
|
966
1001
|
camadaAtivaId: e.camadaAtivaId,
|
|
967
1002
|
painelColapsado: e.painelColapsado,
|
|
968
|
-
ordemCamadasIds:
|
|
969
|
-
ordemOrigemIds:
|
|
1003
|
+
ordemCamadasIds: n,
|
|
1004
|
+
ordemOrigemIds: s,
|
|
970
1005
|
mapaBaseAtivo: e.mapaBaseAtivo,
|
|
971
1006
|
densidade: e.densidade,
|
|
972
1007
|
altura: e.altura,
|
|
@@ -974,26 +1009,26 @@ function Je(e) {
|
|
|
974
1009
|
ultimaAtualizacao: Date.now()
|
|
975
1010
|
};
|
|
976
1011
|
}
|
|
977
|
-
const We = ':host{display:flex;flex-direction:column;box-sizing:border-box;font-family:inherit;font-size:11px;color:var(--ui-cor-texto, #e1e1e6);-webkit-user-select:none;user-select:none;width:100%;height:var(--ui-camadas-altura, 100%);min-height:var(--ui-camadas-min-altura, 140px);position:relative;--camada-linha-altura: 25px;--camada-thumb-tamanho: 15px;--camada-transicao: .16s cubic-bezier(.16, 1, .3, 1)}:host([densidade="compacto"]){--camada-linha-altura: 22px;--camada-thumb-tamanho: 13px;font-size:10px}:host([flutuante]){position:absolute;top:10px;right:10px;bottom:46px;z-index:var(--ui-z-workspace-hud, 500);width:auto;height:var(--ui-camadas-altura, auto)}*,*:before,*:after{box-sizing:border-box}:host(:not([flutuante])) .ui-camadas-container{max-width:100%;min-width:0;border:none;box-shadow:none;border-radius:0;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none}.ui-camadas-container{display:flex;flex-direction:column;flex:1 1 auto;height:100%;min-height:0;width:100%;max-width:380px;min-width:270px;background:var(--ui-cor-superficie, #141417);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));border-radius:var(--ui-raio-borda, 8px);box-shadow:var(--ui-sombra-lg, 0 10px 30px -4px rgba(0, 0, 0, .5)),0 0 0 1px color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 5%,transparent);overflow:hidden;position:relative;transition:transform .24s cubic-bezier(.16,1,.3,1),opacity .2s ease;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}:host([colapsado]) .ui-camadas-container{transform:translate(calc(100% + 24px));opacity:0;pointer-events:none}.ui-camadas-toggle-flutuante{display:none;position:absolute;top:10px;right:10px;z-index:calc(var(--ui-z-workspace-hud, 500) - 1);background:var(--ui-cor-superficie, #141417);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .18));border-radius:var(--ui-raio-borda, 6px);color:var(--ui-cor-texto, #ffffff);width:34px;height:34px;cursor:pointer;align-items:center;justify-content:center;box-shadow:var(--ui-sombra-md, 0 8px 20px rgba(0, 0, 0, .45));transition:all var(--camada-transicao)}:host([colapsado][flutuante]) .ui-camadas-toggle-flutuante{display:flex}.ui-camadas-toggle-flutuante:hover{border-color:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-primaria, #00E08A);transform:scale(1.08);box-shadow:0 0 14px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-camadas-header{height:32px;min-height:32px;max-height:32px;display:flex;align-items:center;justify-content:space-between;padding:0 5px;border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));background:var(--ui-cor-fundo-elevado, rgba(0, 0, 0, .28));gap:4px}.ui-camadas-tabs{display:flex;gap:3px;flex:1}.ui-camadas-tab-btn{flex:1;background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);height:24px;padding:0 6px;font-size:11px;font-weight:500;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:5px;white-space:nowrap;transition:all var(--camada-transicao)}.ui-camadas-tab-btn:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .07))}.ui-camadas-tab-btn.active{color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 25%,transparent);font-weight:600}.ui-camadas-btn-colapsar{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:22px;height:22px;cursor:pointer;border-radius:var(--ui-raio-sm, 4px);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all var(--camada-transicao)}.ui-camadas-btn-colapsar:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .09))}.ui-camadas-corpo{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding:6px 6px 4px;display:flex;flex-direction:column;gap:6px;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 16%,transparent) transparent}.ui-camadas-corpo::-webkit-scrollbar{width:4px}.ui-camadas-corpo::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 18%,transparent);border-radius:var(--ui-raio-sm, 4px)}.ui-camadas-corpo::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 32%,transparent)}.ui-tree-toolbar{display:flex;align-items:center;justify-content:space-between;padding:1px 2px 3px;border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .06))}.ui-tree-title-group{display:flex;align-items:center;gap:5px}.ui-tree-section-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-cor-texto-secundario, #888899)}.ui-tree-count-badge{font-size:9px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent);color:var(--ui-cor-texto-secundario, #888899);padding:1px 5px;border-radius:8px;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent)}.ui-tree-actions{display:flex;align-items:center;gap:3px}.ui-tree-action-btn{background:transparent;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));color:var(--ui-cor-texto-secundario, #888899);border-radius:var(--ui-raio-sm, 4px);width:22px;height:22px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-tree-action-btn:hover{color:var(--ui-cor-texto, #ffffff);border-color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .09))}.ui-tree-btn-new{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);border:1px solid color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent);color:var(--ui-cor-primaria, #00E08A);border-radius:var(--ui-raio-sm, 4px);height:22px;padding:0 8px;font-size:10px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-tree-btn-new:hover{background:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-texto-sobre-primaria, #000000);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-tree-search-wrapper{position:relative;display:flex;align-items:center;margin:1px 0}.ui-tree-search-icon{position:absolute;left:8px;color:var(--ui-cor-texto-secundario, #888899);pointer-events:none;display:flex;align-items:center}.ui-tree-search-input{width:100%;height:25px;background:var(--ui-cor-fundo, #0a0a0c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));border-radius:var(--ui-raio-borda, 5px);padding:0 24px 0 26px;color:var(--ui-cor-texto, #ffffff);font-size:10.5px;outline:none;transition:border-color var(--camada-transicao),box-shadow var(--camada-transicao)}.ui-tree-search-input:focus{border-color:var(--ui-cor-primaria, #00E08A);box-shadow:0 0 0 2px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 18%,transparent)}.ui-tree-search-clear{position:absolute;right:5px;background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);cursor:pointer;width:18px;height:18px;display:flex;align-items:center;justify-content:center;border-radius:3px;transition:all var(--camada-transicao)}.ui-tree-search-clear:hover{color:var(--ui-cor-texto, #ffffff);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 10%,transparent)}.ui-panel-box{background:var(--ui-cor-fundo, #0c0c0f);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));border-radius:var(--ui-raio-borda, 6px);overflow:hidden;display:flex;flex-direction:column;flex:1 1 0%;min-height:80px}.ui-layer-tree{flex:1 1 0%;min-height:40px;overflow-y:auto;overflow-x:hidden}.ui-layer-group{border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .04));transition:background var(--camada-transicao)}.ui-layer-group.drop-into{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 9%,transparent)!important;outline:1.5px dashed var(--ui-cor-primaria, #00E08A);outline-offset:-1.5px}.ui-layer-row,.ui-feat-row{display:flex;align-items:center;height:var(--camada-linha-altura);min-height:var(--camada-linha-altura);max-height:var(--camada-linha-altura);padding:0 4px;-webkit-user-select:none;user-select:none;cursor:default;transition:background .1s ease;position:relative}.ui-layer-row{background:var(--ui-cor-fundo-elevado, #18181d);font-weight:600;cursor:pointer;border-left:3px solid transparent}.ui-layer-row:hover{background:var(--ui-cor-hover-menu, #22222a)}.ui-layer-row.active-drawing-layer{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent)!important;border-left:3px solid var(--layer-active-color, var(--ui-cor-primaria, #00E08A))!important;box-shadow:inset 0 0 12px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 7%,transparent)}.ui-layer-row.active-drawing-layer .ui-name-text{color:var(--ui-cor-texto, #e1e1e6);font-weight:700}.ui-feat-row{background:var(--ui-cor-fundo, #101014);font-weight:400;cursor:pointer}.ui-feat-row:hover{background:var(--ui-cor-hover-menu, #19191f)}.ui-feat-row.selected-row{background:color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 18%,transparent)!important;outline:1px solid color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 50%,transparent)!important;outline-offset:-1px}.ui-layer-row.hidden-layer,.ui-feat-row.hidden-row{opacity:.52}.ui-layer-row.hidden-layer .ui-col-eye,.ui-feat-row.hidden-row .ui-col-eye{color:var(--ui-cor-texto-alerta, #ffb86c);opacity:.95}.ui-layer-row.dragging,.ui-feat-row.dragging{opacity:.35;background:color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 16%,transparent)!important}.ui-layer-row.drop-above:before,.ui-feat-row.drop-above:before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:var(--ui-cor-texto-info, #33b5ff);box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 100%,transparent);z-index:20;pointer-events:none}.ui-layer-row.drop-below:after,.ui-feat-row.drop-below:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background:var(--ui-cor-texto-info, #33b5ff);box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 100%,transparent);z-index:20;pointer-events:none}.ui-layer-row.drop-into{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 16%,transparent)!important;outline:1.5px dashed var(--ui-cor-primaria, #00E08A)!important;outline-offset:-2px;border-radius:var(--ui-raio-sm, 4px)}.ui-layer-row.is-sublayer{padding-left:calc(6px + var(--layer-depth, 1) * 16px);background:color-mix(in srgb,var(--ui-cor-fundo-elevado, #18181d) 70%,transparent);border-left:2px solid color-mix(in srgb,var(--layer-active-color, #00E08A) 40%,transparent)}.ui-children-container.is-subchildren{position:relative;margin-left:calc(var(--layer-depth, 0) * 8px);border-left:1px dashed var(--ui-cor-borda, rgba(255, 255, 255, .1))}.ui-group-folder-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--ui-cor-texto-alerta, #ffb86c);margin-right:4px;flex-shrink:0}.ui-group-badge{font-size:8.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;padding:1px 4px;border-radius:3px;background:color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 15%,transparent);color:var(--ui-cor-texto-alerta, #ffb86c);border:1px solid color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 30%,transparent);margin-left:4px;flex-shrink:0}.ui-col{display:flex;align-items:center;justify-content:center;flex-shrink:0;height:var(--camada-linha-altura)}.ui-col-drag{width:14px;cursor:grab;color:var(--ui-cor-texto-secundario, #888899);opacity:.35;touch-action:none;transition:opacity var(--camada-transicao),color var(--camada-transicao)}.ui-layer-row:hover .ui-col-drag,.ui-feat-row:hover .ui-col-drag{opacity:.9;color:var(--ui-cor-primaria, #00E08A)}.ui-col-drag:active{cursor:grabbing}.ui-col-eye{width:20px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);transition:color var(--camada-transicao)}.ui-col-eye:hover{color:var(--ui-cor-primaria, #00E08A)}.ui-col-lock{width:18px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);transition:color var(--camada-transicao)}.ui-col-lock:hover{color:var(--ui-cor-texto-alerta, #ffb86c)}.ui-col-colorbar{width:3.5px;height:16px;margin:0 3px 0 2px;border-radius:1.5px;flex-shrink:0}.ui-col-chevron{width:14px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);display:flex;align-items:center;justify-content:center}.ui-chevron-icon{display:inline-flex;align-items:center;justify-content:center;transition:transform var(--camada-transicao)}.ui-chevron-icon.open{transform:rotate(90deg)}.ui-col-branch{width:14px;display:flex;align-items:center;justify-content:center;color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 22%,transparent);font-size:10px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace)}.ui-col-thumb{width:18px;margin-right:4px;display:flex;align-items:center;justify-content:center}.ui-thumb-box{width:var(--camada-thumb-tamanho);height:var(--camada-thumb-tamanho);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 15%,transparent);border-radius:2.5px;background:var(--ui-cor-fundo, #0d0d10);display:flex;align-items:center;justify-content:center}.ui-col-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;color:var(--ui-cor-texto, #e1e1e6);padding-left:2px;padding-right:4px;cursor:pointer;display:flex;align-items:center;justify-content:flex-start;text-align:left;gap:4px}.ui-name-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-active-badge{font-size:8px;font-weight:700;color:var(--ui-cor-texto-sobre-primaria, #000000);background:var(--ui-cor-primaria, #00E08A);border:1px solid color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 45%,transparent);padding:1px 4px;border-radius:3px;display:inline-flex;align-items:center;gap:2px;white-space:nowrap;flex-shrink:0;animation:pulseBadge 2.8s infinite}@keyframes pulseBadge{0%{opacity:.85}50%{opacity:1;filter:drop-shadow(0 0 4px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 50%,transparent))}to{opacity:.85}}.ui-count-chip{font-size:9px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;color:var(--ui-cor-texto, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent);padding:0 4px;border-radius:8px}.ui-col-actions{display:flex;align-items:center;gap:2px;opacity:0;transition:opacity var(--camada-transicao)}.ui-layer-row:hover .ui-col-actions,.ui-feat-row:hover .ui-col-actions{opacity:1}.ui-micro-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:18px;height:18px;padding:0;border-radius:3px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-micro-btn:hover{color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12))}.ui-micro-btn.active{color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 18%,transparent)}.ui-col-target{width:22px;cursor:pointer}.ui-target-circle{width:11px;height:11px;border-radius:50%;border:1.5px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 32%,transparent);background:transparent;transition:all .12s ease}.ui-col-target:hover .ui-target-circle{border-color:var(--ui-cor-texto-info, #33b5ff);transform:scale(1.18)}.ui-target-circle.selected{border:2px solid var(--ui-cor-texto-info, #33b5ff);background:var(--ui-cor-texto-info, #33b5ff);box-shadow:inset 0 0 0 2px var(--ui-cor-superficie, #141418)}.ui-target-circle.partial{border:2px solid var(--ui-cor-texto-info, #33b5ff);background:color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 40%,transparent)}.ui-inline-rename-input{width:100%;height:20px;background:var(--ui-cor-fundo, #0d0d10);color:var(--ui-cor-texto, #e1e1e6);border:1px solid var(--ui-cor-primaria, #00E08A);border-radius:3px;font-size:10.5px;padding:0 4px;outline:none;box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 40%,transparent)}.ui-layer-settings-drawer{background:linear-gradient(180deg,var(--ui-cor-fundo-elevado, #17171e) 0%,var(--ui-cor-superficie, #0f0f13) 100%);padding:10px 14px 12px;border-top:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);border-bottom:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent);border-left:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));display:flex;flex-direction:column;gap:10px;box-shadow:inset 0 1px color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent),0 6px 16px #00000073;animation:drawerSlideDown .18s cubic-bezier(.16,1,.3,1);position:relative;z-index:10}@keyframes drawerSlideDown{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.ui-drawer-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:6px;border-bottom:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent)}.ui-drawer-header-left{display:flex;align-items:center;gap:7px;min-width:0}.ui-drawer-icon{color:var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));display:flex;align-items:center;flex-shrink:0}.ui-drawer-title{font-size:10.5px;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);text-transform:uppercase;letter-spacing:.6px;white-space:nowrap}.ui-drawer-layer-chip{font-size:9.5px;font-weight:500;color:var(--ui-cor-texto-secundario, #888899);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent);padding:1px 6px;border-radius:var(--ui-raio-sm, 4px);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-drawer-btn-fechar{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:20px;height:20px;padding:0;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-drawer-btn-fechar:hover{color:var(--ui-cor-texto, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-body{display:flex;flex-direction:column;gap:10px}.ui-drawer-row{display:flex;flex-direction:column;gap:5px}.ui-drawer-row-label{display:flex;justify-content:space-between;align-items:center;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:var(--ui-cor-texto-secundario, #888899)}.ui-drawer-color-group{display:flex;align-items:center;justify-content:space-between;gap:8px}.ui-drawer-color-pill{position:relative;display:inline-flex;align-items:center;gap:6px;padding:3px 8px 3px 5px;background:var(--ui-cor-fundo, #0b0b0d);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 16%,transparent);border-radius:var(--ui-raio-sm, 4px);cursor:pointer;transition:all var(--camada-transicao);-webkit-user-select:none;user-select:none}.ui-drawer-color-pill:hover{border-color:var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 25%,transparent)}.ui-drawer-color-sample{width:14px;height:14px;border-radius:3px;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 35%,transparent);box-shadow:var(--ui-sombra-sm, 0 1px 3px rgba(0, 0, 0, .5));flex-shrink:0;transition:background-color .1s ease}.ui-drawer-color-hex{font-size:10px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);letter-spacing:.5px}.ui-drawer-color-native{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.ui-drawer-badge{font-size:9.5px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 10%,transparent);padding:1px 6px;border-radius:var(--ui-raio-sm, 4px);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-slider-container{display:flex;flex-direction:column;gap:4px}.ui-drawer-slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:5px;background:linear-gradient(90deg,color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent) 0%,var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A)) 100%);border-radius:3px;outline:none;margin:3px 0;cursor:pointer;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-slider::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:#fff;border:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));box-shadow:0 0 6px #0009,0 0 10px var(--drawer-cor-camada, rgba(0, 224, 138, .6));cursor:pointer;transition:transform .12s ease}.ui-drawer-slider::-webkit-slider-thumb:hover{transform:scale(1.22)}.ui-drawer-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:#fff;border:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));box-shadow:0 0 6px #0009,0 0 10px var(--drawer-cor-camada, rgba(0, 224, 138, .6));cursor:pointer}.ui-drawer-footer{display:flex;align-items:center;justify-content:space-between;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent)}.ui-drawer-meta-info{font-size:9.5px;color:var(--ui-cor-texto-secundario, #888899);font-style:italic}.ui-drawer-actions{display:flex;align-items:center;gap:6px}.ui-drawer-btn-danger{background:color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 10%,transparent);border:1px solid color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 35%,transparent);color:var(--ui-cor-texto-erro, #ff5555);border-radius:var(--ui-raio-sm, 4px);height:24px;padding:0 10px;font-size:10px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:all var(--camada-transicao)}.ui-drawer-btn-danger:hover{background:var(--ui-cor-botao-destrutivo-fundo, #d32f2f);color:var(--ui-cor-botao-destrutivo-texto, #ffffff);border-color:var(--ui-cor-botao-destrutivo-fundo, #d32f2f);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 45%,transparent);transform:translateY(-.5px)}.ui-drawer-btn-danger.confirming{background:var(--ui-cor-botao-destrutivo-hover, #b71c1c);color:var(--ui-cor-botao-destrutivo-texto, #ffffff);border-color:var(--ui-cor-botao-destrutivo-hover, #b71c1c);animation:pulseDanger 1.2s infinite}@keyframes pulseDanger{0%{transform:scale(1)}50%{transform:scale(1.02)}to{transform:scale(1)}}.ui-geom-tag{font-size:8px;font-weight:700;letter-spacing:.4px;padding:1px 4px;border-radius:3px;margin-left:4px;text-transform:uppercase;flex-shrink:0}.ui-geom-tag.oficial{background:color-mix(in srgb,var(--ui-cor-texto-sucesso, #00E08A) 16%,transparent);color:var(--ui-cor-texto-sucesso, #00E08A);border:1px solid color-mix(in srgb,var(--ui-cor-texto-sucesso, #00E08A) 35%,transparent)}.ui-geom-tag.previa{background:color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 16%,transparent);color:var(--ui-cor-texto-alerta, #ffb86c);border:1px solid color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 35%,transparent)}.ui-tree-footer{height:32px;min-height:32px;background:var(--ui-cor-fundo-elevado, #121216);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));display:flex;align-items:center;justify-content:space-between;padding:0 8px;gap:6px;box-sizing:border-box;overflow:hidden;position:relative}.ui-footer-left{display:flex;align-items:center;gap:5px;white-space:nowrap;min-width:0;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis}.ui-footer-count{font-size:11px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-primaria, #00E08A);flex-shrink:0}.ui-footer-label{font-size:10px;font-weight:500;color:var(--ui-cor-texto-secundario, #888899);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-footer-metric{font-size:9.5px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;color:var(--ui-cor-primaria, #00E08A);display:inline-flex;align-items:center;gap:3px;white-space:nowrap;background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);padding:1px 5px;border-radius:3px;border:1px solid color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 24%,transparent);flex-shrink:0}.ui-footer-actions-gerais{display:flex;align-items:center;gap:4px;flex-shrink:0}.ui-footer-chip-btn{background:#ffffff0a;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));color:var(--ui-cor-texto-secundario, #a0a0b0);font-size:10px;font-weight:600;height:22px;padding:0 7px;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-footer-chip-btn:hover{background:#ffffff1a;color:var(--ui-cor-texto, #ffffff);border-color:#fff3}.ui-footer-chip-btn.primario{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);border-color:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 32%,transparent);color:var(--ui-cor-primaria, #00E08A)}.ui-footer-chip-btn.primario:hover{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 22%,transparent);border-color:var(--ui-cor-primaria, #00E08A);color:#fff}.ui-footer-right{display:flex;align-items:center;gap:3px;flex-shrink:0}.ui-footer-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:22px;height:22px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all var(--camada-transicao);flex-shrink:0}.ui-footer-btn:hover:not(.disabled){color:var(--ui-cor-texto, #e1e1e6);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12))}.ui-footer-btn.disabled{opacity:.25;cursor:not-allowed}.ui-footer-btn.btn-danger-footer:hover:not(.disabled){color:#f55;background:#ff555526}.ui-footer-btn.confirming{background:#f55!important;color:#fff!important}.ui-footer-btn.btn-clear-footer{color:var(--ui-cor-texto-secundario, #888899);margin-left:2px}.ui-footer-btn.btn-clear-footer:hover{color:#fff;background:#ffffff1f}.ui-footer-color-wrapper{position:relative;display:flex;align-items:center;justify-content:center;width:18px;height:18px;cursor:pointer;flex-shrink:0}.ui-footer-color-preview{width:14px;height:14px;border-radius:50%;border:1.5px solid rgba(255,255,255,.35);box-shadow:0 0 4px #0006;pointer-events:none;transition:transform .15s ease,border-color .15s ease}.ui-footer-color-wrapper:hover .ui-footer-color-preview{transform:scale(1.15);border-color:#fff}.ui-footer-color{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer;padding:0;margin:0;border:none}.ui-footer-move-wrapper{position:relative;display:flex;align-items:center;max-width:95px;flex-shrink:0}.ui-footer-select{background:var(--ui-cor-fundo, #16161c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #e1e1e6);border-radius:4px;font-size:10px;height:22px;padding:0 4px;cursor:pointer;max-width:95px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-footer-select:hover:not(:disabled){border-color:#ffffff40}.ui-footer-select:focus{outline:none;border-color:var(--ui-cor-primaria, #00E08A)}.ui-tree-btn-group{background:#ffffff0a;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto-secundario, #a0a0b0);border-radius:var(--ui-raio-sm, 4px);height:22px;padding:0 7px;font-size:10px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-tree-btn-group:hover{background:#ffffff1a;color:var(--ui-cor-texto, #ffffff);border-color:#ffffff40}.ui-drawer-btn-sublayer{background:#ffffff0f;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #e1e1e6);font-size:10.5px;font-weight:500;padding:4px 8px;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-drawer-btn-sublayer:hover{background:#ffffff1f;color:var(--ui-cor-primaria, #00E08A);border-color:var(--ui-cor-primaria, #00E08A)}.ui-drawer-select-wrapper{display:flex;align-items:center}.ui-drawer-select{background:var(--ui-cor-fundo, #16161c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .15));color:var(--ui-cor-texto, #e1e1e6);border-radius:4px;font-size:10.5px;height:24px;padding:0 6px;cursor:pointer;max-width:140px}.ui-basemap-section{display:flex;flex-direction:column;gap:4px;flex-shrink:0}.ui-basemap-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:4px}.ui-basemap-card{display:flex;flex-direction:column;align-items:center;gap:2px;padding:3px;border-radius:var(--ui-raio-borda, 5px);background:var(--ui-cor-fundo, #101014);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:pointer;transition:all var(--camada-transicao);text-align:center;overflow:hidden}.ui-basemap-card:hover{border-color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-fundo-elevado, #17171c)}.ui-basemap-card.active{border-color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);color:var(--ui-cor-primaria, #00E08A);font-weight:600;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-basemap-preview{width:100%;height:22px;border-radius:3px;object-fit:cover;opacity:.85;transition:opacity var(--camada-transicao)}.ui-basemap-preview-none{width:100%;height:22px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 4%,transparent);border-radius:3px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-card:hover .ui-basemap-preview,.ui-basemap-card.active .ui-basemap-preview{opacity:1}.ui-basemap-card span{font-size:9.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.ui-search-hidden{display:none!important}.ui-empty-row{height:22px;display:flex;align-items:center;padding-left:36px;font-size:10px;color:var(--ui-cor-texto-secundario, #666677);font-style:italic;background:var(--ui-cor-fundo-recuado, rgba(0, 0, 0, .15))}.ui-camadas-resizer-altura{display:none;flex-shrink:0;width:100%;height:9px;background:var(--ui-cor-superficie, #141417);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:ns-resize;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;touch-action:none;transition:background .15s ease,border-color .15s ease;position:relative;z-index:10}:host([redimensionavel]) .ui-camadas-resizer-altura,:host([redimensionavel-altura]) .ui-camadas-resizer-altura{display:flex}.ui-camadas-resizer-altura:hover,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 9%,transparent);border-top-color:var(--ui-cor-primaria, #00E08A)}.ui-camadas-resizer-grip{width:32px;height:3px;border-radius:2px;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 22%,transparent);transition:all .15s ease}.ui-camadas-resizer-altura:hover .ui-camadas-resizer-grip,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo .ui-camadas-resizer-grip{background:var(--ui-cor-primaria, #00E08A);width:46px;box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 45%,transparent)}:host(.ui-camadas--redimensionando){-webkit-user-select:none!important;user-select:none!important;cursor:ns-resize!important}:host(.ui-camadas--redimensionando) *{-webkit-user-select:none!important;user-select:none!important}.ui-col-lock.ui-lock-open{opacity:.28}.ui-col-lock.ui-lock-open:hover,.ui-col-lock.ui-lock-open:focus-visible{opacity:.8}.ui-col-lock[data-locked-by-layer]{cursor:not-allowed}.ui-col[role=button]:focus-visible,.ui-basemap-card:focus-visible,.ui-feat-row:focus-visible,.ui-layer-row:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:-2px}.ui-footer-btn.confirming{color:var(--ui-cor-botao-destrutivo-texto, #ffffff);background:var(--ui-cor-botao-destrutivo-hover, #b71c1c);width:auto;padding:0 6px}';
|
|
978
|
-
function
|
|
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) {
|
|
979
1014
|
o.querySelectorAll("[data-layer-row]").forEach((i) => {
|
|
980
1015
|
i.addEventListener("click", (r) => {
|
|
981
1016
|
if (r.target.closest(
|
|
982
1017
|
"[data-layer-eye], [data-layer-lock], [data-layer-expand], [data-layer-target], [data-layer-fit], [data-layer-settings], input, button"
|
|
983
1018
|
))
|
|
984
1019
|
return;
|
|
985
|
-
const
|
|
986
|
-
|
|
1020
|
+
const s = i.getAttribute("data-layer-row");
|
|
1021
|
+
s && e.definirCamadaAtiva(s, !0);
|
|
987
1022
|
});
|
|
988
1023
|
}), o.querySelectorAll("[data-layer-expand]").forEach((i) => {
|
|
989
1024
|
i.addEventListener("click", (r) => {
|
|
990
1025
|
r.stopPropagation();
|
|
991
|
-
const
|
|
992
|
-
if (!
|
|
993
|
-
e.expandedLayers.has(
|
|
994
|
-
const
|
|
995
|
-
if (l && l.classList.toggle("open", c),
|
|
996
|
-
const f =
|
|
1026
|
+
const n = i.getAttribute("data-layer-expand");
|
|
1027
|
+
if (!n) return;
|
|
1028
|
+
e.expandedLayers.has(n) ? e.expandedLayers.delete(n) : e.expandedLayers.add(n);
|
|
1029
|
+
const s = i.closest(".ui-layer-group"), l = i.querySelector(".ui-chevron-icon"), c = e.expandedLayers.has(n);
|
|
1030
|
+
if (l && l.classList.toggle("open", c), s) {
|
|
1031
|
+
const f = s.querySelector(".ui-children-container");
|
|
997
1032
|
f && (f.style.display = c ? "block" : "none");
|
|
998
1033
|
}
|
|
999
1034
|
e.salvarLembrancaEstado();
|
|
@@ -1001,14 +1036,14 @@ function Xe(e, o) {
|
|
|
1001
1036
|
}), o.querySelectorAll("[data-layer-eye]").forEach((i) => {
|
|
1002
1037
|
i.addEventListener("click", (r) => {
|
|
1003
1038
|
r.stopPropagation();
|
|
1004
|
-
const
|
|
1005
|
-
if (
|
|
1006
|
-
|
|
1007
|
-
const l =
|
|
1008
|
-
i.innerHTML = l ? g.olhoAberto : g.olhoFechado,
|
|
1039
|
+
const n = i.getAttribute("data-layer-eye"), s = e.camadas.find((l) => l.id === n);
|
|
1040
|
+
if (s) {
|
|
1041
|
+
s.visible = s.visible === !1;
|
|
1042
|
+
const l = s.visible !== !1;
|
|
1043
|
+
i.innerHTML = l ? g.olhoAberto : g.olhoFechado, B(i, l ? "Ocultar Camada" : "Exibir Camada");
|
|
1009
1044
|
const c = i.closest(".ui-layer-row");
|
|
1010
|
-
c && c.classList.toggle("hidden-layer", !l),
|
|
1011
|
-
camadaId:
|
|
1045
|
+
c && c.classList.toggle("hidden-layer", !l), ia(e, o), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-visibilidade", {
|
|
1046
|
+
camadaId: s.id,
|
|
1012
1047
|
visivel: l
|
|
1013
1048
|
});
|
|
1014
1049
|
}
|
|
@@ -1016,85 +1051,85 @@ function Xe(e, o) {
|
|
|
1016
1051
|
}), o.querySelectorAll("[data-layer-lock]").forEach((i) => {
|
|
1017
1052
|
i.addEventListener("click", (r) => {
|
|
1018
1053
|
r.stopPropagation();
|
|
1019
|
-
const
|
|
1020
|
-
|
|
1021
|
-
camadaId:
|
|
1022
|
-
bloqueado:
|
|
1054
|
+
const n = i.getAttribute("data-layer-lock"), s = e.camadas.find((l) => l.id === n);
|
|
1055
|
+
s && (s.locked = !s.locked, i.innerHTML = s.locked ? g.cadeadoTrancado : g.cadeadoAberto, i.classList.toggle("ui-lock-open", !s.locked), B(i, s.locked ? "Desbloquear Camada" : "Bloquear Camada"), oa(e, o, s.id, s.locked === !0), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-bloqueio", {
|
|
1056
|
+
camadaId: s.id,
|
|
1057
|
+
bloqueado: s.locked
|
|
1023
1058
|
}));
|
|
1024
1059
|
});
|
|
1025
1060
|
}), o.querySelectorAll("[data-layer-fit]").forEach((i) => {
|
|
1026
1061
|
i.addEventListener("click", (r) => {
|
|
1027
1062
|
r.stopPropagation();
|
|
1028
|
-
const
|
|
1029
|
-
|
|
1063
|
+
const n = i.getAttribute("data-layer-fit");
|
|
1064
|
+
n && e.dispararEvento("ui-camada-enquadrar", { camadaId: n });
|
|
1030
1065
|
});
|
|
1031
1066
|
}), o.querySelectorAll("[data-layer-settings]").forEach((i) => {
|
|
1032
1067
|
i.addEventListener("click", (r) => {
|
|
1033
1068
|
r.stopPropagation();
|
|
1034
|
-
const
|
|
1035
|
-
e.activeSettingsLayerId = e.activeSettingsLayerId ===
|
|
1069
|
+
const n = i.getAttribute("data-layer-settings");
|
|
1070
|
+
e.activeSettingsLayerId = e.activeSettingsLayerId === n ? null : n, e.solicitarRenderizacao();
|
|
1036
1071
|
});
|
|
1037
1072
|
}), o.querySelectorAll("[data-layer-settings-close]").forEach((i) => {
|
|
1038
1073
|
i.addEventListener("click", (r) => {
|
|
1039
1074
|
r.stopPropagation(), e.activeSettingsLayerId = null, e.solicitarRenderizacao();
|
|
1040
1075
|
});
|
|
1041
1076
|
});
|
|
1042
|
-
const a = (i, r,
|
|
1043
|
-
const
|
|
1044
|
-
if (!
|
|
1045
|
-
const l = G(r,
|
|
1046
|
-
|
|
1077
|
+
const a = (i, r, n) => {
|
|
1078
|
+
const s = e.camadas.find((d) => d.id === i);
|
|
1079
|
+
if (!s) return;
|
|
1080
|
+
const l = G(r, s.color || "#00E08A");
|
|
1081
|
+
s.color = l;
|
|
1047
1082
|
const c = o.getElementById(`sample-color-${i}`);
|
|
1048
1083
|
c && (c.style.backgroundColor = l);
|
|
1049
1084
|
const f = o.getElementById(`hex-color-${i}`);
|
|
1050
1085
|
f && (f.textContent = l.toUpperCase());
|
|
1051
1086
|
const u = o.getElementById(`settings-drawer-${i}`);
|
|
1052
1087
|
u && u.style.setProperty("--drawer-cor-camada", l);
|
|
1053
|
-
const p =
|
|
1088
|
+
const p = F(o, "data-layer-row", i);
|
|
1054
1089
|
if (p) {
|
|
1055
1090
|
p.style.setProperty("--layer-active-color", l);
|
|
1056
1091
|
const d = p.querySelector(".ui-col-colorbar");
|
|
1057
1092
|
d && (d.style.backgroundColor = l);
|
|
1058
1093
|
}
|
|
1059
|
-
|
|
1094
|
+
n ? e.salvarLembrancaEstado() : e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-cor", { camadaId: s.id, cor: l });
|
|
1060
1095
|
};
|
|
1061
1096
|
o.querySelectorAll("[data-layer-color-picker]").forEach((i) => {
|
|
1062
|
-
const r = i,
|
|
1097
|
+
const r = i, n = (s) => (l) => {
|
|
1063
1098
|
const c = r.getAttribute("data-layer-color-picker");
|
|
1064
1099
|
if (!c) return;
|
|
1065
1100
|
const f = l.target.value;
|
|
1066
|
-
a(c, f,
|
|
1101
|
+
a(c, f, s);
|
|
1067
1102
|
};
|
|
1068
|
-
r.addEventListener("input",
|
|
1103
|
+
r.addEventListener("input", n(!1)), r.addEventListener("change", n(!0));
|
|
1069
1104
|
});
|
|
1070
1105
|
const t = (i, r) => {
|
|
1071
|
-
const
|
|
1072
|
-
if (!
|
|
1073
|
-
|
|
1074
|
-
const
|
|
1075
|
-
|
|
1076
|
-
const l =
|
|
1077
|
-
l && parseFloat(l.value) !== r && (l.value = String(r)), e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-opacidade", { camadaId:
|
|
1106
|
+
const n = e.camadas.find((c) => c.id === i);
|
|
1107
|
+
if (!n) return;
|
|
1108
|
+
n.opacity = r;
|
|
1109
|
+
const s = o.getElementById(`badge-op-${i}`);
|
|
1110
|
+
s && (s.textContent = `${Math.round(r * 100)}%`);
|
|
1111
|
+
const l = F(o, "data-layer-opacity-slider", i);
|
|
1112
|
+
l && parseFloat(l.value) !== r && (l.value = String(r)), e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-opacidade", { camadaId: n.id, opacidade: r });
|
|
1078
1113
|
};
|
|
1079
1114
|
o.querySelectorAll("[data-layer-opacity-slider]").forEach((i) => {
|
|
1080
1115
|
i.addEventListener("input", (r) => {
|
|
1081
|
-
const
|
|
1082
|
-
if (!
|
|
1083
|
-
const
|
|
1084
|
-
t(
|
|
1116
|
+
const n = i.getAttribute("data-layer-opacity-slider");
|
|
1117
|
+
if (!n) return;
|
|
1118
|
+
const s = parseFloat(r.target.value);
|
|
1119
|
+
t(n, s);
|
|
1085
1120
|
});
|
|
1086
1121
|
}), o.querySelectorAll("[data-delete-layer]").forEach((i) => {
|
|
1087
1122
|
let r = null;
|
|
1088
|
-
i.addEventListener("click", (
|
|
1089
|
-
|
|
1090
|
-
const
|
|
1091
|
-
if (!
|
|
1123
|
+
i.addEventListener("click", (n) => {
|
|
1124
|
+
n.stopPropagation();
|
|
1125
|
+
const s = i.getAttribute("data-delete-layer");
|
|
1126
|
+
if (!s) return;
|
|
1092
1127
|
if (i.classList.contains("confirming")) {
|
|
1093
|
-
r && clearTimeout(r), e.dispararEvento("ui-camada-excluida", { camadaId:
|
|
1128
|
+
r && clearTimeout(r), e.dispararEvento("ui-camada-excluida", { camadaId: s });
|
|
1094
1129
|
const c = e.selectedFeatureIds.size;
|
|
1095
1130
|
e.camadas.forEach((f) => {
|
|
1096
|
-
f.parentId ===
|
|
1097
|
-
}), e.removerCamada(
|
|
1131
|
+
f.parentId === s && (f.parentId = null);
|
|
1132
|
+
}), e.removerCamada(s), e.selectedFeatureIds.size !== c && e.notificarMudancaSelecao();
|
|
1098
1133
|
} else {
|
|
1099
1134
|
i.classList.add("confirming");
|
|
1100
1135
|
const c = i.querySelector(".ui-btn-label");
|
|
@@ -1105,7 +1140,7 @@ function Xe(e, o) {
|
|
|
1105
1140
|
});
|
|
1106
1141
|
}), o.querySelectorAll("[data-layer-parent-select]").forEach((i) => {
|
|
1107
1142
|
i.addEventListener("change", (r) => {
|
|
1108
|
-
const
|
|
1143
|
+
const n = r.target, s = n.getAttribute("data-layer-parent-select"), l = n.value || null, c = e.camadas.find((f) => f.id === s);
|
|
1109
1144
|
c && (c.parentId = l, e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-mover-hierarquia", {
|
|
1110
1145
|
camadaId: c.id,
|
|
1111
1146
|
novoParentId: l,
|
|
@@ -1115,39 +1150,39 @@ function Xe(e, o) {
|
|
|
1115
1150
|
}), o.querySelectorAll("[data-add-sublayer]").forEach((i) => {
|
|
1116
1151
|
i.addEventListener("click", (r) => {
|
|
1117
1152
|
r.stopPropagation();
|
|
1118
|
-
const
|
|
1119
|
-
e.dispararEvento("ui-camada-adicionar", { parentId:
|
|
1153
|
+
const n = i.getAttribute("data-add-sublayer");
|
|
1154
|
+
e.dispararEvento("ui-camada-adicionar", { parentId: n });
|
|
1120
1155
|
});
|
|
1121
1156
|
}), o.querySelectorAll("[data-layer-target]").forEach((i) => {
|
|
1122
1157
|
i.addEventListener("click", (r) => {
|
|
1123
1158
|
r.stopPropagation();
|
|
1124
|
-
const
|
|
1125
|
-
e.feicoes.filter((f) => f.layerId ===
|
|
1159
|
+
const n = r, s = i.getAttribute("data-layer-target"), l = te(
|
|
1160
|
+
e.feicoes.filter((f) => f.layerId === s),
|
|
1126
1161
|
e.searchQuery
|
|
1127
1162
|
);
|
|
1128
1163
|
if (l.length === 0) return;
|
|
1129
|
-
l.every((f) => e.selectedFeatureIds.has(f.id)) ? l.forEach((f) => e.selectedFeatureIds.delete(f.id)) : (!
|
|
1164
|
+
l.every((f) => e.selectedFeatureIds.has(f.id)) ? l.forEach((f) => e.selectedFeatureIds.delete(f.id)) : (!n.ctrlKey && !n.metaKey && e.selectedFeatureIds.clear(), l.forEach((f) => e.selectedFeatureIds.add(f.id))), e.lastClickedFeatureId = l[l.length - 1].id, e.sincronizarSelecaoDOM(), e.notificarMudancaSelecao();
|
|
1130
1165
|
});
|
|
1131
1166
|
});
|
|
1132
1167
|
}
|
|
1133
|
-
function
|
|
1168
|
+
function ia(e, o) {
|
|
1134
1169
|
const a = o.getElementById("btn-toggle-all-vis");
|
|
1135
1170
|
if (!a) return;
|
|
1136
1171
|
const t = e.camadas.every((i) => i.visible !== !1);
|
|
1137
|
-
a.innerHTML = t ? g.olhoAberto : g.olhoFechado,
|
|
1172
|
+
a.innerHTML = t ? g.olhoAberto : g.olhoFechado, B(a, t ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas");
|
|
1138
1173
|
}
|
|
1139
|
-
function
|
|
1174
|
+
function oa(e, o, a, t) {
|
|
1140
1175
|
e.feicoes.filter((i) => i.layerId === a).forEach((i) => {
|
|
1141
|
-
const r =
|
|
1176
|
+
const r = F(o, "data-feat-lock", i.id);
|
|
1142
1177
|
if (!r) return;
|
|
1143
|
-
const
|
|
1144
|
-
r.innerHTML =
|
|
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(
|
|
1145
1180
|
r,
|
|
1146
|
-
t ? "Bloqueada pela camada" :
|
|
1181
|
+
t ? "Bloqueada pela camada" : n ? "Desbloquear Feição" : "Bloquear Feição"
|
|
1147
1182
|
);
|
|
1148
1183
|
});
|
|
1149
1184
|
}
|
|
1150
|
-
function
|
|
1185
|
+
function na(e, o) {
|
|
1151
1186
|
const a = o.getElementById("btn-footer-vis");
|
|
1152
1187
|
a && a.addEventListener("click", () => {
|
|
1153
1188
|
const u = e.feicoes.filter((m) => e.selectedFeatureIds.has(m.id));
|
|
@@ -1189,8 +1224,8 @@ function aa(e, o) {
|
|
|
1189
1224
|
valor: p
|
|
1190
1225
|
}), e.solicitarRenderizacao());
|
|
1191
1226
|
}));
|
|
1192
|
-
const
|
|
1193
|
-
|
|
1227
|
+
const n = o.getElementById("select-footer-move");
|
|
1228
|
+
n && n.addEventListener("change", (u) => {
|
|
1194
1229
|
const p = u.target.value;
|
|
1195
1230
|
if (!p) return;
|
|
1196
1231
|
const d = e.feicoes.filter((h) => e.selectedFeatureIds.has(h.id));
|
|
@@ -1210,8 +1245,8 @@ function aa(e, o) {
|
|
|
1210
1245
|
valor: p
|
|
1211
1246
|
}), e.solicitarRenderizacao();
|
|
1212
1247
|
});
|
|
1213
|
-
const
|
|
1214
|
-
|
|
1248
|
+
const s = o.getElementById("btn-footer-new-layer");
|
|
1249
|
+
s && s.addEventListener("click", () => {
|
|
1215
1250
|
e.dispararEvento("ui-camada-adicionar", {});
|
|
1216
1251
|
});
|
|
1217
1252
|
const l = o.getElementById("btn-footer-new-group");
|
|
@@ -1226,8 +1261,8 @@ function aa(e, o) {
|
|
|
1226
1261
|
const d = Array.from(e.selectedFeatureIds);
|
|
1227
1262
|
if (d.length === 0) return;
|
|
1228
1263
|
if (!c.classList.contains("confirming")) {
|
|
1229
|
-
c.classList.add("confirming"),
|
|
1230
|
-
c.classList.remove("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);
|
|
1231
1266
|
}, 3500);
|
|
1232
1267
|
return;
|
|
1233
1268
|
}
|
|
@@ -1243,12 +1278,12 @@ function aa(e, o) {
|
|
|
1243
1278
|
const f = o.getElementById("btn-footer-clear");
|
|
1244
1279
|
f && f.addEventListener("click", () => e.limparSelecao(!0));
|
|
1245
1280
|
}
|
|
1246
|
-
function
|
|
1281
|
+
function sa(e, o) {
|
|
1247
1282
|
const a = o.getElementById("btn-toggle-all-vis");
|
|
1248
1283
|
a && a.addEventListener("click", () => e.alternarVisibilidadeTodas(!0));
|
|
1249
1284
|
const t = o.getElementById("btn-toggle-all-expand");
|
|
1250
|
-
t && t.addEventListener("click", (
|
|
1251
|
-
|
|
1285
|
+
t && t.addEventListener("click", (s) => {
|
|
1286
|
+
s.stopPropagation(), e.camadas.length > 0 && e.camadas.every((c) => e.expandedLayers.has(c.id)) ? e.colapsarTodas() : e.expandirTodas();
|
|
1252
1287
|
});
|
|
1253
1288
|
const i = o.getElementById("btn-add-layer");
|
|
1254
1289
|
i && i.addEventListener("click", () => {
|
|
@@ -1258,25 +1293,25 @@ function ta(e, o) {
|
|
|
1258
1293
|
r && r.addEventListener("click", () => {
|
|
1259
1294
|
e.dispararEvento("ui-camada-grupo-adicionar", { isGroup: !0 });
|
|
1260
1295
|
});
|
|
1261
|
-
const
|
|
1262
|
-
|
|
1296
|
+
const n = o.getElementById("btn-colapsar");
|
|
1297
|
+
n && n.addEventListener("click", () => e.colapsar(!0)), la(e, o);
|
|
1263
1298
|
}
|
|
1264
|
-
function
|
|
1299
|
+
function la(e, o) {
|
|
1265
1300
|
const a = o.getElementById("input-layer-search"), t = o.getElementById("btn-clear-layer-search"), i = () => {
|
|
1266
1301
|
var r;
|
|
1267
1302
|
e.searchQuery = "", e.solicitarRenderizacao(), (r = o.getElementById("input-layer-search")) == null || r.focus();
|
|
1268
1303
|
};
|
|
1269
1304
|
if (a) {
|
|
1270
|
-
const r =
|
|
1271
|
-
a.addEventListener("input", (
|
|
1272
|
-
e.searchQuery =
|
|
1273
|
-
}), a.addEventListener("keydown", (
|
|
1274
|
-
|
|
1305
|
+
const r = ge(() => e.solicitarRenderizacao(), 75);
|
|
1306
|
+
a.addEventListener("input", (n) => {
|
|
1307
|
+
e.searchQuery = n.target.value, r();
|
|
1308
|
+
}), a.addEventListener("keydown", (n) => {
|
|
1309
|
+
n.key === "Escape" && e.searchQuery && (n.preventDefault(), i());
|
|
1275
1310
|
});
|
|
1276
1311
|
}
|
|
1277
1312
|
t && t.addEventListener("click", i);
|
|
1278
1313
|
}
|
|
1279
|
-
function
|
|
1314
|
+
function ca(e, o) {
|
|
1280
1315
|
o.querySelectorAll("[data-feat-select]").forEach((a) => {
|
|
1281
1316
|
a.addEventListener("click", (t) => {
|
|
1282
1317
|
if (e.editingFeatureId) return;
|
|
@@ -1285,8 +1320,8 @@ function ia(e, o) {
|
|
|
1285
1320
|
"[data-feat-eye], [data-feat-lock], [data-feat-fit], [data-feat-target], input, button"
|
|
1286
1321
|
))
|
|
1287
1322
|
return;
|
|
1288
|
-
const
|
|
1289
|
-
|
|
1323
|
+
const n = a.getAttribute("data-feat-select");
|
|
1324
|
+
n && e.selecionarFeicao(n, i.ctrlKey || i.metaKey, i.shiftKey, !0);
|
|
1290
1325
|
});
|
|
1291
1326
|
}), o.querySelectorAll("[data-feat-target]").forEach((a) => {
|
|
1292
1327
|
a.addEventListener("click", (t) => {
|
|
@@ -1297,23 +1332,23 @@ function ia(e, o) {
|
|
|
1297
1332
|
}), o.querySelectorAll("[data-feat-eye]").forEach((a) => {
|
|
1298
1333
|
a.addEventListener("click", (t) => {
|
|
1299
1334
|
t.stopPropagation();
|
|
1300
|
-
const i = a.getAttribute("data-feat-eye"), r = e.feicoes.find((
|
|
1335
|
+
const i = a.getAttribute("data-feat-eye"), r = e.feicoes.find((n) => n.id === i);
|
|
1301
1336
|
if (r) {
|
|
1302
1337
|
r.visible = r.visible === !1;
|
|
1303
|
-
const
|
|
1304
|
-
a.innerHTML =
|
|
1305
|
-
const
|
|
1306
|
-
|
|
1338
|
+
const n = r.visible !== !1;
|
|
1339
|
+
a.innerHTML = n ? g.olhoAberto : g.olhoFechado, B(a, n ? "Ocultar Feição" : "Exibir Feição");
|
|
1340
|
+
const s = a.closest(".ui-feat-row");
|
|
1341
|
+
s && s.classList.toggle("hidden-row", !n), e.dispararEvento("ui-feicao-visibilidade", {
|
|
1307
1342
|
feicaoId: r.id,
|
|
1308
|
-
visivel:
|
|
1343
|
+
visivel: n
|
|
1309
1344
|
});
|
|
1310
1345
|
}
|
|
1311
1346
|
});
|
|
1312
1347
|
}), o.querySelectorAll("[data-feat-lock]").forEach((a) => {
|
|
1313
1348
|
a.addEventListener("click", (t) => {
|
|
1314
1349
|
if (t.stopPropagation(), a.hasAttribute("data-locked-by-layer")) return;
|
|
1315
|
-
const i = a.getAttribute("data-feat-lock"), r = e.feicoes.find((
|
|
1316
|
-
r && (r.locked = !r.locked, a.innerHTML = r.locked ? g.cadeadoTrancado : g.cadeadoAberto, a.classList.toggle("ui-lock-open", !r.locked),
|
|
1350
|
+
const i = a.getAttribute("data-feat-lock"), r = e.feicoes.find((n) => n.id === i);
|
|
1351
|
+
r && (r.locked = !r.locked, a.innerHTML = r.locked ? g.cadeadoTrancado : g.cadeadoAberto, a.classList.toggle("ui-lock-open", !r.locked), B(a, r.locked ? "Desbloquear Feição" : "Bloquear Feição"), e.dispararEvento("ui-feicao-bloqueio", {
|
|
1317
1352
|
feicaoId: r.id,
|
|
1318
1353
|
bloqueado: r.locked
|
|
1319
1354
|
}));
|
|
@@ -1326,7 +1361,7 @@ function ia(e, o) {
|
|
|
1326
1361
|
});
|
|
1327
1362
|
});
|
|
1328
1363
|
}
|
|
1329
|
-
function
|
|
1364
|
+
function da(e, o) {
|
|
1330
1365
|
o.querySelectorAll("[data-basemap-thumb]").forEach((a) => {
|
|
1331
1366
|
a.addEventListener(
|
|
1332
1367
|
"error",
|
|
@@ -1343,14 +1378,14 @@ function oa(e, o) {
|
|
|
1343
1378
|
});
|
|
1344
1379
|
});
|
|
1345
1380
|
}
|
|
1346
|
-
function
|
|
1347
|
-
|
|
1381
|
+
function ua(e, o) {
|
|
1382
|
+
sa(e, o), ra(e, o), ca(e, o), da(e, o), na(e, o);
|
|
1348
1383
|
}
|
|
1349
|
-
const
|
|
1350
|
-
function
|
|
1351
|
-
return e instanceof HTMLSelectElement || e instanceof HTMLTextAreaElement ? !0 : e instanceof HTMLInputElement && !
|
|
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);
|
|
1352
1387
|
}
|
|
1353
|
-
function
|
|
1388
|
+
function ma(e) {
|
|
1354
1389
|
return Array.from(e.querySelectorAll(P)).filter((o) => {
|
|
1355
1390
|
const a = o.closest(".ui-children-container");
|
|
1356
1391
|
return !(a && a.style.display === "none") && !o.classList.contains("ui-search-hidden");
|
|
@@ -1359,7 +1394,7 @@ function ca(e) {
|
|
|
1359
1394
|
function H(e, o) {
|
|
1360
1395
|
o && (e.querySelectorAll(P).forEach((a) => a.setAttribute("tabindex", "-1")), o.setAttribute("tabindex", "0"), o.focus());
|
|
1361
1396
|
}
|
|
1362
|
-
function
|
|
1397
|
+
function ha(e, o) {
|
|
1363
1398
|
e.dispatchEvent(
|
|
1364
1399
|
new MouseEvent("click", {
|
|
1365
1400
|
bubbles: !0,
|
|
@@ -1368,28 +1403,28 @@ function da(e, o) {
|
|
|
1368
1403
|
})
|
|
1369
1404
|
);
|
|
1370
1405
|
}
|
|
1371
|
-
function
|
|
1406
|
+
function ga(e, o, a) {
|
|
1372
1407
|
var t;
|
|
1373
|
-
if (!
|
|
1408
|
+
if (!ye(a.composedPath()[0])) {
|
|
1374
1409
|
if (e.activeSettingsLayerId) {
|
|
1375
1410
|
a.preventDefault();
|
|
1376
1411
|
const i = e.activeSettingsLayerId;
|
|
1377
|
-
e.activeSettingsLayerId = null, e.solicitarRenderizacao(), (t =
|
|
1412
|
+
e.activeSettingsLayerId = null, e.solicitarRenderizacao(), (t = F(o, "data-layer-settings", i)) == null || t.focus();
|
|
1378
1413
|
return;
|
|
1379
1414
|
}
|
|
1380
1415
|
e.selectedFeatureIds.size > 0 && (a.preventDefault(), e.limparSelecao(!0));
|
|
1381
1416
|
}
|
|
1382
1417
|
}
|
|
1383
|
-
function
|
|
1384
|
-
var
|
|
1418
|
+
function va(e, o, a) {
|
|
1419
|
+
var n;
|
|
1385
1420
|
const t = a.composedPath()[0];
|
|
1386
|
-
if (!(t instanceof HTMLElement) ||
|
|
1387
|
-
if ((a.key === "Enter" || a.key === " ") && t.matches(
|
|
1421
|
+
if (!(t instanceof HTMLElement) || ye(t)) return;
|
|
1422
|
+
if ((a.key === "Enter" || a.key === " ") && t.matches(pa)) {
|
|
1388
1423
|
a.preventDefault(), t.click();
|
|
1389
1424
|
return;
|
|
1390
1425
|
}
|
|
1391
1426
|
if (!t.matches(P)) return;
|
|
1392
|
-
const i =
|
|
1427
|
+
const i = ma(e), r = i.indexOf(t);
|
|
1393
1428
|
switch (a.key) {
|
|
1394
1429
|
case "ArrowDown":
|
|
1395
1430
|
a.preventDefault(), H(e, i[Math.min(i.length - 1, r + 1)]);
|
|
@@ -1405,58 +1440,58 @@ function pa(e, o, a) {
|
|
|
1405
1440
|
break;
|
|
1406
1441
|
case "ArrowRight":
|
|
1407
1442
|
case "ArrowLeft": {
|
|
1408
|
-
const
|
|
1409
|
-
if (!
|
|
1443
|
+
const s = t.getAttribute("data-layer-row");
|
|
1444
|
+
if (!s) return;
|
|
1410
1445
|
const l = t.closest(".ui-layer-group"), c = (l == null ? void 0 : l.getAttribute("aria-expanded")) === "true";
|
|
1411
|
-
a.key === "ArrowRight" !== c && (a.preventDefault(), (
|
|
1446
|
+
a.key === "ArrowRight" !== c && (a.preventDefault(), (n = F(o, "data-layer-expand", s)) == null || n.click());
|
|
1412
1447
|
break;
|
|
1413
1448
|
}
|
|
1414
1449
|
case "Enter":
|
|
1415
1450
|
case " ":
|
|
1416
|
-
a.preventDefault(),
|
|
1451
|
+
a.preventDefault(), ha(t, a);
|
|
1417
1452
|
break;
|
|
1418
1453
|
}
|
|
1419
1454
|
}
|
|
1420
|
-
function
|
|
1455
|
+
function ba(e, o, a, t, i) {
|
|
1421
1456
|
i.add(o, "keydown", (r) => {
|
|
1422
|
-
r.key === "Escape" &&
|
|
1423
|
-
}), i.add(t, "keydown", (r) =>
|
|
1424
|
-
const
|
|
1425
|
-
|
|
1457
|
+
r.key === "Escape" && ga(e, a, r);
|
|
1458
|
+
}), i.add(t, "keydown", (r) => va(t, a, r)), i.add(t, "focusin", (r) => {
|
|
1459
|
+
const n = r.composedPath()[0];
|
|
1460
|
+
n instanceof HTMLElement && n.matches(P) && (t.querySelectorAll(P).forEach((s) => s.setAttribute("tabindex", "-1")), n.setAttribute("tabindex", "0"));
|
|
1426
1461
|
});
|
|
1427
1462
|
}
|
|
1428
|
-
function
|
|
1463
|
+
function xa(e, o) {
|
|
1429
1464
|
o.querySelectorAll("[data-layer-row]").forEach((t) => {
|
|
1430
1465
|
const r = t.getAttribute("data-layer-row") === e.camadaAtivaId;
|
|
1431
1466
|
t.classList.toggle("active-drawing-layer", r);
|
|
1432
|
-
const
|
|
1433
|
-
if (
|
|
1434
|
-
let
|
|
1435
|
-
if (r && !
|
|
1436
|
-
|
|
1437
|
-
const l =
|
|
1438
|
-
l ?
|
|
1439
|
-
} else !r &&
|
|
1467
|
+
const n = t.querySelector(".ui-col-name");
|
|
1468
|
+
if (n) {
|
|
1469
|
+
let s = n.querySelector(".ui-active-badge");
|
|
1470
|
+
if (r && !s) {
|
|
1471
|
+
s = document.createElement("span"), s.className = "ui-active-badge", s.textContent = "✓ Ativa";
|
|
1472
|
+
const l = n.querySelector(".ui-count-chip");
|
|
1473
|
+
l ? n.insertBefore(s, l) : n.appendChild(s);
|
|
1474
|
+
} else !r && s && s.remove();
|
|
1440
1475
|
}
|
|
1441
1476
|
});
|
|
1442
1477
|
}
|
|
1443
|
-
function
|
|
1478
|
+
function ya(e, o) {
|
|
1444
1479
|
o.querySelectorAll(".ui-feat-row").forEach((v) => {
|
|
1445
|
-
const b = v.getAttribute("data-feat-row"),
|
|
1446
|
-
v.classList.toggle("selected-row",
|
|
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));
|
|
1447
1482
|
const x = v.querySelector(".ui-target-circle");
|
|
1448
|
-
x && x.classList.toggle("selected",
|
|
1483
|
+
x && x.classList.toggle("selected", C);
|
|
1449
1484
|
}), o.querySelectorAll(".ui-layer-group").forEach((v) => {
|
|
1450
|
-
const b = v.getAttribute("data-layer-id"),
|
|
1451
|
-
if (x &&
|
|
1452
|
-
const
|
|
1453
|
-
x.classList.toggle("selected",
|
|
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);
|
|
1454
1489
|
} else x && x.classList.remove("selected", "partial");
|
|
1455
1490
|
});
|
|
1456
1491
|
const a = e.feicoes.filter((v) => e.selectedFeatureIds.has(v.id)), t = a.length > 0, i = o.getElementById("footer-count"), r = o.getElementById("footer-label");
|
|
1457
1492
|
i && (i.textContent = String(t ? a.length : e.camadas.length)), r && (r.textContent = t ? a.length > 1 ? "selecionados" : "selecionado" : e.camadas.length > 1 ? "camadas" : "camada");
|
|
1458
|
-
const
|
|
1459
|
-
|
|
1493
|
+
const n = o.querySelector(".ui-footer-metric"), s = he(a);
|
|
1494
|
+
n && (s ? (n.innerHTML = `${g.reguaMetrica} ${s}`, n.style.display = "inline-flex") : n.style.display = "none");
|
|
1460
1495
|
const l = o.querySelector(".ui-tree-footer");
|
|
1461
1496
|
l && (l.classList.toggle("tem-selecao", t), l.classList.toggle("sem-selecao", !t));
|
|
1462
1497
|
const c = o.querySelector(".ui-footer-actions-gerais");
|
|
@@ -1475,10 +1510,10 @@ function ha(e, o) {
|
|
|
1475
1510
|
const m = o.getElementById("input-footer-color");
|
|
1476
1511
|
m && (m.disabled = !t);
|
|
1477
1512
|
let h = o.getElementById("btn-footer-clear");
|
|
1478
|
-
const
|
|
1479
|
-
t && !h &&
|
|
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();
|
|
1480
1515
|
}
|
|
1481
|
-
function
|
|
1516
|
+
function wa(e) {
|
|
1482
1517
|
function t() {
|
|
1483
1518
|
return e.getMinAltura ? e.getMinAltura() : 140;
|
|
1484
1519
|
}
|
|
@@ -1507,8 +1542,8 @@ function ga(e) {
|
|
|
1507
1542
|
})
|
|
1508
1543
|
);
|
|
1509
1544
|
}
|
|
1510
|
-
let
|
|
1511
|
-
function
|
|
1545
|
+
let n = null;
|
|
1546
|
+
function s() {
|
|
1512
1547
|
if (!e.resizerElement) return;
|
|
1513
1548
|
let c = !1, f = 0, u = 0;
|
|
1514
1549
|
const p = (m) => {
|
|
@@ -1521,7 +1556,7 @@ function ga(e) {
|
|
|
1521
1556
|
const h = (b) => {
|
|
1522
1557
|
if (!c) return;
|
|
1523
1558
|
b.preventDefault();
|
|
1524
|
-
const
|
|
1559
|
+
const C = b.clientY - f, x = Math.max(t(), Math.min(i(), Math.round(u + C)));
|
|
1525
1560
|
e.hostElement.style.height = `${x}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${x}px`), e.onRedimensionando && e.onRedimensionando(x), e.hostElement.dispatchEvent(
|
|
1526
1561
|
new CustomEvent("ui-redimensionando-altura", {
|
|
1527
1562
|
bubbles: !0,
|
|
@@ -1529,9 +1564,9 @@ function ga(e) {
|
|
|
1529
1564
|
detail: { altura: x }
|
|
1530
1565
|
})
|
|
1531
1566
|
);
|
|
1532
|
-
},
|
|
1567
|
+
}, I = () => {
|
|
1533
1568
|
var b;
|
|
1534
|
-
c = !1,
|
|
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");
|
|
1535
1570
|
}, v = (b) => {
|
|
1536
1571
|
if (!c) return;
|
|
1537
1572
|
c = !1, e.resizerElement.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
|
|
@@ -1540,7 +1575,7 @@ function ga(e) {
|
|
|
1540
1575
|
} catch {
|
|
1541
1576
|
}
|
|
1542
1577
|
window.removeEventListener("pointermove", h), window.removeEventListener("pointerup", v), window.removeEventListener("pointercancel", v);
|
|
1543
|
-
const
|
|
1578
|
+
const C = e.hostElement.getBoundingClientRect().height, x = Math.round(C);
|
|
1544
1579
|
e.onAlturaAlterada && e.onAlturaAlterada(x), e.hostElement.dispatchEvent(
|
|
1545
1580
|
new CustomEvent("ui-redimensionar-altura", {
|
|
1546
1581
|
bubbles: !0,
|
|
@@ -1549,50 +1584,50 @@ function ga(e) {
|
|
|
1549
1584
|
})
|
|
1550
1585
|
);
|
|
1551
1586
|
};
|
|
1552
|
-
|
|
1587
|
+
n = I, window.addEventListener("pointermove", h), window.addEventListener("pointerup", v), window.addEventListener("pointercancel", v);
|
|
1553
1588
|
}, d = (m) => {
|
|
1554
1589
|
m.preventDefault(), m.stopPropagation(), r(null, !0), e.onAlturaAlterada && e.onAlturaAlterada(null);
|
|
1555
1590
|
};
|
|
1556
1591
|
e.listeners.add(e.resizerElement, "pointerdown", p), e.listeners.add(e.resizerElement, "dblclick", d);
|
|
1557
1592
|
}
|
|
1558
1593
|
function l() {
|
|
1559
|
-
|
|
1594
|
+
n == null || n(), e.listeners.cleanup();
|
|
1560
1595
|
}
|
|
1561
1596
|
return {
|
|
1562
|
-
init:
|
|
1597
|
+
init: s,
|
|
1563
1598
|
definirAltura: r,
|
|
1564
1599
|
destruir: l
|
|
1565
1600
|
};
|
|
1566
1601
|
}
|
|
1567
|
-
const
|
|
1602
|
+
const T = class T extends Fe {
|
|
1568
1603
|
constructor() {
|
|
1569
1604
|
super();
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
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));
|
|
1581
1616
|
// Estado interno
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
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");
|
|
1594
1629
|
this.shadow = this.attachShadow({ mode: "open" }), this.shadow.innerHTML = `
|
|
1595
|
-
<style>${
|
|
1630
|
+
<style>${ta}</style>
|
|
1596
1631
|
<div class="ui-camadas-container" id="panel-container" role="region" aria-label="Painel de Camadas">
|
|
1597
1632
|
<div class="ui-camadas-corpo" id="painel-corpo"></div>
|
|
1598
1633
|
<div class="ui-camadas-resizer-altura" id="resizer-altura" title="Arraste para redimensionar a altura (duplo-clique para resetar)" aria-label="Redimensionar altura">
|
|
@@ -1602,9 +1637,9 @@ const q = class q extends $e {
|
|
|
1602
1637
|
<button class="ui-camadas-toggle-flutuante" id="btn-expandir-flutuante" title="Expandir Painel de Camadas" aria-label="Expandir Painel de Camadas">
|
|
1603
1638
|
${g.camadas}
|
|
1604
1639
|
</button>
|
|
1605
|
-
`, this.corpoElement = this.shadow.getElementById("painel-corpo"), this.btnExpandirFlutuante = this.shadow.getElementById("btn-expandir-flutuante"), this.dragDropManager = new
|
|
1640
|
+
`, this.corpoElement = this.shadow.getElementById("painel-corpo"), this.btnExpandirFlutuante = this.shadow.getElementById("btn-expandir-flutuante"), this.dragDropManager = new Qe(this, this.shadow);
|
|
1606
1641
|
const a = this.shadow.getElementById("resizer-altura");
|
|
1607
|
-
this.resizerController =
|
|
1642
|
+
this.resizerController = wa({
|
|
1608
1643
|
hostElement: this,
|
|
1609
1644
|
resizerElement: a,
|
|
1610
1645
|
listeners: this.listeners,
|
|
@@ -1648,13 +1683,13 @@ const q = class q extends $e {
|
|
|
1648
1683
|
const a = W(this.obterChaveStorageAtual());
|
|
1649
1684
|
a && (a.painelColapsado === !0 && !this.hasAttribute("colapsado") && (this.colapsado = !0), a.camadaAtivaId && !this.getAttribute("camada-ativa") && (this.camadaAtivaId = a.camadaAtivaId), a.mapaBaseAtivo && !this.getAttribute("mapa-base-ativo") && (this.mapaBaseAtivo = a.mapaBaseAtivo), a.densidade && !this.getAttribute("densidade") && (this.densidade = a.densidade), typeof a.altura == "number" && !this.getAttribute("altura") && !this.style.height && (this.resizerController.definirAltura(a.altura, !1), this.alturaCustomizada = a.altura));
|
|
1650
1685
|
}
|
|
1651
|
-
this.hasAttribute("altura") && this.resizerController.definirAltura(this.getAttribute("altura"), !1), this.persistir && !this.storageKey && !this.id && (
|
|
1686
|
+
this.hasAttribute("altura") && this.resizerController.definirAltura(this.getAttribute("altura"), !1), this.persistir && !this.storageKey && !this.id && (T.instanciasChavePadrao.size > 0 && console.warn(
|
|
1652
1687
|
"[UI-Camadas] Mais de um painel sem 'id' nem 'storage-key' divide a mesma chave de persistência e um sobrescreve o estado do outro. Defina 'storage-key' (ou 'id') em cada um."
|
|
1653
|
-
),
|
|
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();
|
|
1654
1689
|
}
|
|
1655
1690
|
disconnectedCallback() {
|
|
1656
1691
|
var a;
|
|
1657
|
-
this.conectado = !1,
|
|
1692
|
+
this.conectado = !1, T.instanciasChavePadrao.delete(this), (a = this.resizerController) == null || a.destruir(), this.listeners.cleanup();
|
|
1658
1693
|
}
|
|
1659
1694
|
attributeChangedCallback(a, t, i) {
|
|
1660
1695
|
var r;
|
|
@@ -1769,7 +1804,7 @@ const q = class q extends $e {
|
|
|
1769
1804
|
}
|
|
1770
1805
|
// --- Gerenciamento de Persistência / Lembrança ---
|
|
1771
1806
|
obterChaveStorageAtual() {
|
|
1772
|
-
return
|
|
1807
|
+
return Je(this.storageKey, this.id);
|
|
1773
1808
|
}
|
|
1774
1809
|
/** Versão com debounce, para interações contínuas (seletor de cor, slider de opacidade). */
|
|
1775
1810
|
agendarSalvarLembranca() {
|
|
@@ -1777,7 +1812,7 @@ const q = class q extends $e {
|
|
|
1777
1812
|
}
|
|
1778
1813
|
salvarLembrancaEstado() {
|
|
1779
1814
|
if (!this.persistir || !this.conectado) return;
|
|
1780
|
-
const a = this.obterChaveStorageAtual(), t =
|
|
1815
|
+
const a = this.obterChaveStorageAtual(), t = aa({
|
|
1781
1816
|
estadoAnterior: W(a),
|
|
1782
1817
|
origensCamadas: this.origensCamadas,
|
|
1783
1818
|
camadas: this.camadas,
|
|
@@ -1789,10 +1824,10 @@ const q = class q extends $e {
|
|
|
1789
1824
|
altura: this.alturaCustomizada,
|
|
1790
1825
|
camadasRemovidas: this.camadasRemovidas
|
|
1791
1826
|
});
|
|
1792
|
-
this.camadasRemovidas.clear(),
|
|
1827
|
+
this.camadasRemovidas.clear(), We(a, t);
|
|
1793
1828
|
}
|
|
1794
1829
|
limparLembranca() {
|
|
1795
|
-
|
|
1830
|
+
Ze(this.obterChaveStorageAtual());
|
|
1796
1831
|
}
|
|
1797
1832
|
// --- API Pública de Alta Ergonomia ---
|
|
1798
1833
|
//
|
|
@@ -1825,25 +1860,25 @@ const q = class q extends $e {
|
|
|
1825
1860
|
achatarCamadas(a, t = null) {
|
|
1826
1861
|
const i = [];
|
|
1827
1862
|
for (const r of a) {
|
|
1828
|
-
const
|
|
1829
|
-
t &&
|
|
1863
|
+
const n = { ...r };
|
|
1864
|
+
t && n.parentId === void 0 && (n.parentId = t), i.push(n), Array.isArray(r.children) && r.children.length > 0 && i.push(...this.achatarCamadas(r.children, r.id));
|
|
1830
1865
|
}
|
|
1831
1866
|
return i;
|
|
1832
1867
|
}
|
|
1833
1868
|
definirCamadas(a, t) {
|
|
1834
1869
|
if (this.camadas = Array.isArray(a) ? this.achatarCamadas(a) : [], this.origensCamadas.clear(), this.persistir) {
|
|
1835
1870
|
const r = W(this.obterChaveStorageAtual());
|
|
1836
|
-
|
|
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);
|
|
1837
1872
|
} else
|
|
1838
1873
|
this.camadas.forEach((r) => {
|
|
1839
|
-
this.origensCamadas.set(r.id,
|
|
1874
|
+
this.origensCamadas.set(r.id, ee(r)), this.expandedLayers.has(r.id) || this.expandedLayers.add(r.id);
|
|
1840
1875
|
});
|
|
1841
1876
|
if (Array.isArray(t)) {
|
|
1842
|
-
this.feicoes = t.map((
|
|
1843
|
-
const r = new Set(this.camadas.map((
|
|
1844
|
-
|
|
1845
|
-
`[UI-Camadas] ${
|
|
1846
|
-
|
|
1877
|
+
this.feicoes = t.map((s) => ({ ...s }));
|
|
1878
|
+
const r = new Set(this.camadas.map((s) => s.id)), n = this.feicoes.filter((s) => s.layerId && !r.has(s.layerId));
|
|
1879
|
+
n.length > 0 && console.warn(
|
|
1880
|
+
`[UI-Camadas] ${n.length} feição(ões) possuem 'layerId' não cadastrado nas camadas:`,
|
|
1881
|
+
n.map((s) => ({ id: s.id, nome: s.name, layerId: s.layerId }))
|
|
1847
1882
|
), this.sincronizarSelecoesComFeicoesValidas();
|
|
1848
1883
|
}
|
|
1849
1884
|
const i = this.getAttribute("camada-ativa");
|
|
@@ -1880,7 +1915,7 @@ const q = class q extends $e {
|
|
|
1880
1915
|
return;
|
|
1881
1916
|
}
|
|
1882
1917
|
const t = { ...a };
|
|
1883
|
-
this.camadas.push(t), this.origensCamadas.set(t.id,
|
|
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();
|
|
1884
1919
|
}
|
|
1885
1920
|
removerCamada(a) {
|
|
1886
1921
|
var t;
|
|
@@ -1905,8 +1940,8 @@ const q = class q extends $e {
|
|
|
1905
1940
|
this.feicoes = this.feicoes.filter((t) => t.id !== a), this.selectedFeatureIds.delete(a), this.solicitarRenderizacao();
|
|
1906
1941
|
}
|
|
1907
1942
|
selecionarFeicao(a, t = !1, i = !1, r = !1) {
|
|
1908
|
-
const
|
|
1909
|
-
|
|
1943
|
+
const n = Ne(this.camadas, this.feicoes, this.expandedLayers, this.searchQuery), s = !i && !n.includes(a) && this.feicoes.some((c) => c.id === a), l = He(
|
|
1944
|
+
s ? [...n, a] : n,
|
|
1910
1945
|
this.selectedFeatureIds,
|
|
1911
1946
|
this.lastClickedFeatureId,
|
|
1912
1947
|
a,
|
|
@@ -1917,7 +1952,7 @@ const q = class q extends $e {
|
|
|
1917
1952
|
}
|
|
1918
1953
|
selecionarFeicoes(a, t = !1) {
|
|
1919
1954
|
const i = a || [];
|
|
1920
|
-
i.length === this.selectedFeatureIds.size && i.every((
|
|
1955
|
+
i.length === this.selectedFeatureIds.size && i.every((s) => this.selectedFeatureIds.has(s)) || (this.selectedFeatureIds.clear(), i.forEach((s) => this.selectedFeatureIds.add(s)), this.lastClickedFeatureId = i.length > 0 ? i[i.length - 1] : null, this.sincronizarSelecaoDOM(), t && this.notificarMudancaSelecao());
|
|
1921
1956
|
}
|
|
1922
1957
|
limparSelecao(a = !1) {
|
|
1923
1958
|
this.selectedFeatureIds.size !== 0 && (this.selectedFeatureIds.clear(), this.lastClickedFeatureId = null, this.sincronizarSelecaoDOM(), a && this.notificarMudancaSelecao());
|
|
@@ -1978,7 +2013,7 @@ const q = class q extends $e {
|
|
|
1978
2013
|
render() {
|
|
1979
2014
|
var d, m;
|
|
1980
2015
|
if (!this.corpoElement) return;
|
|
1981
|
-
const a =
|
|
2016
|
+
const a = Ke({
|
|
1982
2017
|
camadas: this.camadas,
|
|
1983
2018
|
feicoes: this.feicoes,
|
|
1984
2019
|
camadaAtivaId: this.camadaAtivaId,
|
|
@@ -1989,14 +2024,14 @@ const q = class q extends $e {
|
|
|
1989
2024
|
editingFeatureId: this.editingFeatureId,
|
|
1990
2025
|
searchQuery: this.searchQuery,
|
|
1991
2026
|
mostrarBotaoColapsar: this.flutuante && this.getAttribute("colapsavel") !== "false"
|
|
1992
|
-
}), t = this.mostrarMapasBase ?
|
|
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;
|
|
1993
2028
|
this.corpoElement.innerHTML = `
|
|
1994
2029
|
${a}
|
|
1995
2030
|
${i}
|
|
1996
2031
|
${t}
|
|
1997
|
-
`, this.corpoElement.scrollTop =
|
|
2032
|
+
`, this.corpoElement.scrollTop = n;
|
|
1998
2033
|
const p = this.shadow.getElementById("ui-layer-tree-mount");
|
|
1999
|
-
if (p && (p.scrollTop =
|
|
2034
|
+
if (p && (p.scrollTop = s), c) {
|
|
2000
2035
|
const h = this.shadow.getElementById(c);
|
|
2001
2036
|
if (h && (h.focus({ preventScroll: !0 }), u !== null && typeof h.setSelectionRange == "function"))
|
|
2002
2037
|
try {
|
|
@@ -2004,7 +2039,7 @@ const q = class q extends $e {
|
|
|
2004
2039
|
} catch {
|
|
2005
2040
|
}
|
|
2006
2041
|
}
|
|
2007
|
-
!c && f && ((d =
|
|
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();
|
|
2008
2043
|
}
|
|
2009
2044
|
// --- Conexão de Eventos ---
|
|
2010
2045
|
conectarEventosGerais() {
|
|
@@ -2012,14 +2047,14 @@ const q = class q extends $e {
|
|
|
2012
2047
|
}
|
|
2013
2048
|
// --- Sincronização de DOM (delegada) ---
|
|
2014
2049
|
sincronizarCamadaAtivaDOM() {
|
|
2015
|
-
|
|
2050
|
+
xa(this, this.shadow);
|
|
2016
2051
|
}
|
|
2017
2052
|
sincronizarSelecaoDOM() {
|
|
2018
|
-
|
|
2053
|
+
ya(this, this.shadow);
|
|
2019
2054
|
}
|
|
2020
2055
|
// --- Auxiliares Internos ---
|
|
2021
2056
|
sincronizarSelecoesComFeicoesValidas() {
|
|
2022
|
-
|
|
2057
|
+
Ge(this.selectedFeatureIds, this.feicoes);
|
|
2023
2058
|
}
|
|
2024
2059
|
notificarMudancaSelecao() {
|
|
2025
2060
|
const a = this.feicoes.filter((t) => this.selectedFeatureIds.has(t.id));
|
|
@@ -2036,16 +2071,16 @@ const q = class q extends $e {
|
|
|
2036
2071
|
}
|
|
2037
2072
|
};
|
|
2038
2073
|
/** Painéis conectados sem `id` nem `storage-key`: dividem a mesma chave de persistência. */
|
|
2039
|
-
|
|
2040
|
-
let
|
|
2041
|
-
class
|
|
2074
|
+
A(T, "instanciasChavePadrao", /* @__PURE__ */ new Set());
|
|
2075
|
+
let j = T;
|
|
2076
|
+
class Ea extends j {
|
|
2042
2077
|
}
|
|
2043
|
-
class
|
|
2078
|
+
class Aa extends j {
|
|
2044
2079
|
}
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
function
|
|
2080
|
+
ae("ui-camadas", j);
|
|
2081
|
+
ae("ui-painel-camadas", Ea);
|
|
2082
|
+
ae("ui-layer-panel", Aa);
|
|
2083
|
+
function $a(e) {
|
|
2049
2084
|
var o;
|
|
2050
2085
|
return {
|
|
2051
2086
|
id: e.id,
|
|
@@ -2062,7 +2097,7 @@ function Aa(e) {
|
|
|
2062
2097
|
dados: e.dados
|
|
2063
2098
|
};
|
|
2064
2099
|
}
|
|
2065
|
-
function
|
|
2100
|
+
function Sa(e, o = "levantamento", a = "feicoes") {
|
|
2066
2101
|
return {
|
|
2067
2102
|
id: e.id,
|
|
2068
2103
|
nome: e.name,
|
|
@@ -2081,9 +2116,9 @@ function ka(e, o = "levantamento", a = "feicoes") {
|
|
|
2081
2116
|
dados: typeof e.dados == "object" && e.dados !== null ? e.dados : void 0
|
|
2082
2117
|
};
|
|
2083
2118
|
}
|
|
2084
|
-
function
|
|
2085
|
-
var r,
|
|
2086
|
-
const a = ((r = e.geometria) == null ? void 0 : r.tipo) || ((
|
|
2119
|
+
function Ma(e, o = "") {
|
|
2120
|
+
var r, n, s, l;
|
|
2121
|
+
const a = ((r = e.geometria) == null ? void 0 : r.tipo) || ((n = e.geometria) == null ? void 0 : n.type) || e.tipo || e.type || "Polygon", t = ((s = e.geometria) == null ? void 0 : s.coordenadas) || ((l = e.geometria) == null ? void 0 : l.coordinates) || e.coordinates, i = e.cor || e.color;
|
|
2087
2122
|
return {
|
|
2088
2123
|
id: String(e.id),
|
|
2089
2124
|
name: e.nome || e.name || `Feição ${e.id}`,
|
|
@@ -2100,39 +2135,39 @@ function Ia(e, o = "") {
|
|
|
2100
2135
|
};
|
|
2101
2136
|
}
|
|
2102
2137
|
export {
|
|
2103
|
-
|
|
2138
|
+
Qe as CamadasDragDropManager,
|
|
2104
2139
|
g as ICONES,
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2140
|
+
be as LIMITE_FEICOES_POR_CAMADA,
|
|
2141
|
+
ve as MAPAS_BASE_PADRAO,
|
|
2142
|
+
j as UICamadas,
|
|
2143
|
+
Aa as UILayerPanel,
|
|
2144
|
+
Ba as UIMapaBase,
|
|
2145
|
+
Ea as UIPainelCamadas,
|
|
2146
|
+
qa as UISeletorMapaBase,
|
|
2112
2147
|
Q as calcularAreaAnelSimples,
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2148
|
+
me as calcularAreaPoligono,
|
|
2149
|
+
fe as calcularComprimentoLinha,
|
|
2150
|
+
qe as calcularDistanciaPontos,
|
|
2151
|
+
He as calcularSelecaoFeicao,
|
|
2117
2152
|
W as carregarEstadoPersistido,
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
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
|
|
2138
2173
|
};
|