@thibezer/ui-components-kit 2.11.0 → 2.12.0

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