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