@thibezer/ui-components-kit 2.6.1 → 2.8.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 (161) hide show
  1. package/CHANGELOG.md +265 -204
  2. package/README.md +815 -791
  3. package/dist/acessibilidade-CSzX-DkG.cjs +1 -0
  4. package/dist/acessibilidade-CUlSXc2X.js +38 -0
  5. package/dist/altura-controle-ukMRPckR.cjs +1 -0
  6. package/dist/altura-controle-vxQiXG4q.js +62 -0
  7. package/dist/botao.cjs +1 -1
  8. package/dist/botao.js +1 -1
  9. package/dist/camadas.cjs +94 -94
  10. package/dist/camadas.js +1218 -1124
  11. package/dist/campo-texto.cjs +1 -1
  12. package/dist/campo-texto.js +1 -1
  13. package/dist/canvas.cjs +66 -65
  14. package/dist/canvas.js +3769 -3389
  15. package/dist/card.cjs +1 -1
  16. package/dist/card.js +1 -1
  17. package/dist/components/ui-alerta/ui-toast.d.ts +4 -15
  18. package/dist/components/ui-avatar/ui-avatar.d.ts +11 -0
  19. package/dist/components/ui-badge/ui-badge.d.ts +2 -0
  20. package/dist/components/ui-barra-ferramentas/paleta-atalhos.d.ts +16 -0
  21. package/dist/components/ui-barra-ferramentas/paleta-pressao-longa.d.ts +24 -0
  22. package/dist/components/ui-barra-ferramentas/ribbon-render.d.ts +14 -0
  23. package/dist/components/ui-barra-ferramentas/ribbon-teclado.d.ts +17 -0
  24. package/dist/components/ui-barra-ferramentas/ui-paleta-ferramentas.d.ts +1 -7
  25. package/dist/components/ui-barra-ferramentas/ui-ribbon.d.ts +0 -1
  26. package/dist/components/ui-camadas/camadas-arraste-controles.d.ts +2 -0
  27. package/dist/components/ui-camadas/camadas-arvore-renderer.d.ts +4 -11
  28. package/dist/components/ui-camadas/camadas-colecao.d.ts +27 -0
  29. package/dist/components/ui-camadas/camadas-drag-drop.d.ts +13 -1
  30. package/dist/components/ui-camadas/camadas-drop-ops.d.ts +31 -0
  31. package/dist/components/ui-camadas/camadas-hierarquia.d.ts +10 -0
  32. package/dist/components/ui-camadas/camadas-lembranca.d.ts +34 -0
  33. package/dist/components/ui-camadas/camadas-render.d.ts +14 -0
  34. package/dist/components/ui-camadas/camadas-renomear.d.ts +12 -0
  35. package/dist/components/ui-camadas/camadas-selecao-api.d.ts +17 -0
  36. package/dist/components/ui-camadas/camadas-thumb.d.ts +1 -0
  37. package/dist/components/ui-camadas/ui-camadas.d.ts +3 -5
  38. package/dist/components/ui-canvas-cad/cad-acessibilidade.d.ts +15 -0
  39. package/dist/components/ui-canvas-cad/cad-atributos-sync.d.ts +2 -1
  40. package/dist/components/ui-canvas-cad/cad-broadcast.d.ts +1 -1
  41. package/dist/components/ui-canvas-cad/cad-evento-coordenadas.d.ts +22 -0
  42. package/dist/components/ui-canvas-cad/cad-eventos-canvas.d.ts +3 -8
  43. package/dist/components/ui-canvas-cad/cad-feicoes-camera.d.ts +26 -0
  44. package/dist/components/ui-canvas-cad/cad-feicoes-consulta.d.ts +21 -0
  45. package/dist/components/ui-canvas-cad/cad-feicoes-dados.d.ts +39 -0
  46. package/dist/components/ui-canvas-cad/cad-feicoes-desenho.d.ts +68 -0
  47. package/dist/components/ui-canvas-cad/cad-feicoes-edicao.d.ts +37 -0
  48. package/dist/components/ui-canvas-cad/cad-feicoes-operacoes.d.ts +48 -0
  49. package/dist/components/ui-canvas-cad/cad-feicoes-ponteiro.d.ts +24 -0
  50. package/dist/components/ui-canvas-cad/cad-feicoes-selecao-regiao.d.ts +22 -0
  51. package/dist/components/ui-canvas-cad/cad-feicoes-tipos.d.ts +53 -0
  52. package/dist/components/ui-canvas-cad/cad-feicoes-versoes.d.ts +33 -0
  53. package/dist/components/ui-canvas-cad/cad-feicoes.d.ts +26 -106
  54. package/dist/components/ui-canvas-cad/cad-inicializador.d.ts +3 -1
  55. package/dist/components/ui-canvas-cad/cad-leaflet-adaptador.d.ts +5 -0
  56. package/dist/components/ui-canvas-cad/cad-selecao-pontos.d.ts +5 -0
  57. package/dist/components/ui-canvas-cad/tipos.d.ts +37 -0
  58. package/dist/components/ui-canvas-cad/ui-canvas-cad.d.ts +4 -1
  59. package/dist/components/ui-checkbox/ui-checkbox.d.ts +4 -1
  60. package/dist/components/ui-linha/index.d.ts +1 -0
  61. package/dist/components/ui-linha/ui-linha.d.ts +48 -0
  62. package/dist/components/ui-mapa/mapa-atributos.d.ts +14 -0
  63. package/dist/components/ui-mapa/mapa-basemaps.d.ts +7 -0
  64. package/dist/components/ui-mapa/mapa-icones.d.ts +4 -0
  65. package/dist/components/ui-mapa/mapa-leaflet.d.ts +5 -0
  66. package/dist/components/ui-mapa/mapa-vinculo-pai.d.ts +22 -0
  67. package/dist/components/ui-mapa/tipos.d.ts +13 -0
  68. package/dist/components/ui-mapa/ui-mapa-linha.d.ts +12 -5
  69. package/dist/components/ui-mapa/ui-mapa-marcador.d.ts +15 -6
  70. package/dist/components/ui-mapa/ui-mapa.d.ts +14 -1
  71. package/dist/components/ui-modal/modal-acessibilidade.d.ts +5 -5
  72. package/dist/components/ui-modal/modal-foco.d.ts +28 -0
  73. package/dist/components/ui-modal/ui-modal.d.ts +1 -11
  74. package/dist/components/ui-radio/radio-grupo-registry.d.ts +10 -0
  75. package/dist/components/ui-radio/ui-radio.d.ts +9 -2
  76. package/dist/components/ui-skeleton/ui-skeleton.d.ts +9 -0
  77. package/dist/components/ui-switch/ui-switch.d.ts +3 -1
  78. package/dist/components/ui-tabela/tabela-estados.d.ts +16 -0
  79. package/dist/components/ui-tabela/tabela-rolagem.d.ts +44 -0
  80. package/dist/components/ui-tabela/tabela-teclado.d.ts +16 -0
  81. package/dist/components/ui-tabela/ui-tabela.d.ts +1 -19
  82. package/dist/components/ui-tooltip/tooltip-popover.d.ts +7 -0
  83. package/dist/components/ui-tooltip/tooltip-posicionamento.d.ts +29 -0
  84. package/dist/components/ui-tooltip/ui-tooltip.d.ts +24 -1
  85. package/dist/core/altura-controle.d.ts +34 -0
  86. package/dist/core/index.d.ts +1 -0
  87. package/dist/core/opcoes.d.ts +9 -0
  88. package/dist/core/rotulo-controle.d.ts +13 -0
  89. package/dist/core/tipos-toast.d.ts +16 -0
  90. package/dist/core/ui-bus.d.ts +9 -1
  91. package/dist/core.cjs +1 -1
  92. package/dist/core.js +29 -19
  93. package/dist/custom-elements.json +20984 -15700
  94. package/dist/data.cjs +1 -1
  95. package/dist/data.js +2 -2
  96. package/dist/feedback.cjs +1 -1
  97. package/dist/feedback.js +21 -21
  98. package/dist/form-validacao-BlQFxUVj.js +104 -0
  99. package/dist/form-validacao-DIeyQVH5.cjs +1 -0
  100. package/dist/forms.cjs +1 -1
  101. package/dist/forms.js +2 -2
  102. package/dist/index.cjs +1 -1
  103. package/dist/index.d.ts +3 -0
  104. package/dist/index.js +178 -177
  105. package/dist/mapa.cjs +11 -16
  106. package/dist/mapa.js +242 -170
  107. package/dist/modal.cjs +1 -1
  108. package/dist/modal.js +1 -1
  109. package/dist/opcoes-CJYLi6kd.js +12 -0
  110. package/dist/opcoes-CkyDxBuQ.cjs +1 -0
  111. package/dist/register.cjs +1 -1
  112. package/dist/register.js +13 -14
  113. package/dist/tabela.cjs +1 -1
  114. package/dist/tabela.js +1 -1
  115. package/dist/tipos-elementos.d.ts +33 -3
  116. package/dist/tipos-react.d.ts +2 -0
  117. package/dist/tipos-vue.d.ts +32 -3
  118. package/dist/tools.cjs +1 -1
  119. package/dist/tools.js +1 -1
  120. package/dist/ui-badge-BWhoGgo9.js +197 -0
  121. package/dist/ui-badge-SIR81R9l.cjs +28 -0
  122. package/dist/ui-botao-D24oXySA.cjs +12 -0
  123. package/dist/ui-botao-Dsj08jjw.js +165 -0
  124. package/dist/{zero-js-triggers-C_KrvFOQ.js → ui-bus-CUd99VJi.js} +36 -103
  125. package/dist/ui-bus-XqBLlTYQ.cjs +1 -0
  126. package/dist/{ui-campo-texto-Uu2dJE_0.js → ui-campo-texto-B_OHVGiN.js} +51 -51
  127. package/dist/ui-campo-texto-DauJCde3.cjs +16 -0
  128. package/dist/{ui-card-C_o5_0cB.js → ui-card-BNYCQ7g-.js} +50 -42
  129. package/dist/ui-card-BrjBL-yo.cjs +20 -0
  130. package/dist/ui-kit.css +1 -1
  131. package/dist/ui-linha-C6HBnsaw.cjs +19 -0
  132. package/dist/{ui-segmented-wUraId2e.js → ui-linha-nCDh2wPm.js} +200 -105
  133. package/dist/{ui-modal-DBOtSTbR.js → ui-modal-BkYvNP0G.js} +116 -140
  134. package/dist/ui-modal-CUNbpbZ1.cjs +18 -0
  135. package/dist/{ui-paleta-ferramentas-DNN5i6nL.js → ui-paleta-ferramentas-Ksh6gMW3.js} +359 -329
  136. package/dist/{ui-paleta-ferramentas-Ccmo-rB5.cjs → ui-paleta-ferramentas-bDLPbiGA.cjs} +7 -7
  137. package/dist/ui-skeleton-B2Rgrv8o.js +648 -0
  138. package/dist/ui-skeleton-DiOxTBZK.cjs +52 -0
  139. package/dist/ui-switch-D9a8XlVX.cjs +53 -0
  140. package/dist/{ui-switch-BcOqOkiV.js → ui-switch-DO1R0Ce7.js} +187 -128
  141. package/dist/{ui-tabela-propriedades-BokvDD3b.js → ui-tabela-propriedades-D9Echt2X.js} +845 -826
  142. package/dist/{ui-tabela-propriedades-BecPqC-e.cjs → ui-tabela-propriedades-DzZlyNZ_.cjs} +10 -10
  143. package/dist/zero-js-triggers-CJT988bR.js +83 -0
  144. package/dist/zero-js-triggers-CgM9IIQB.cjs +1 -0
  145. package/package.json +9 -2
  146. package/dist/form-validacao-BIOXxt-1.js +0 -140
  147. package/dist/form-validacao-ytRYSF3E.cjs +0 -1
  148. package/dist/ui-badge-BxT-sDmV.cjs +0 -28
  149. package/dist/ui-badge-C0eKBI8E.js +0 -183
  150. package/dist/ui-botao-BOOnP8ds.cjs +0 -12
  151. package/dist/ui-botao-DfqSivHl.js +0 -165
  152. package/dist/ui-campo-texto-Cnn2UAkS.cjs +0 -16
  153. package/dist/ui-card-B86lJXTP.cjs +0 -20
  154. package/dist/ui-modal-CvGFGh1h.cjs +0 -18
  155. package/dist/ui-segmented-D6b6zxVs.cjs +0 -19
  156. package/dist/ui-skeleton-DI4_9WOX.js +0 -428
  157. package/dist/ui-skeleton-elhKIh2B.cjs +0 -33
  158. package/dist/ui-switch-D7iPKDj-.cjs +0 -53
  159. package/dist/ui-toast-Bp_NlM5G.js +0 -156
  160. package/dist/ui-toast-DGTZKne5.cjs +0 -20
  161. package/dist/zero-js-triggers-C_gtaojZ.cjs +0 -1
package/dist/camadas.js CHANGED
@@ -1,11 +1,11 @@
1
- var Be = Object.defineProperty;
2
- var qe = (e, o, a) => o in e ? Be(e, o, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[o] = a;
3
- var I = (e, o, a) => qe(e, typeof o != "symbol" ? o + "" : o, a);
1
+ var Te = Object.defineProperty;
2
+ var Pe = (e, r, a) => r in e ? Te(e, r, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[r] = a;
3
+ var E = (e, r, a) => Pe(e, typeof r != "symbol" ? r + "" : r, a);
4
4
  /* empty css */
5
- import { d as oe, S as De } from "./ssr-safe-5cWfJP-s.js";
6
- import { L as Te } from "./listener-bag-DQgv7OON.js";
7
- import { UIMapaBase as Na, UISeletorMapaBase as Ha } from "./seletor-mapa-base.js";
8
- const g = {
5
+ import { d as oe, S as Re } from "./ssr-safe-5cWfJP-s.js";
6
+ import { L as Oe } from "./listener-bag-DQgv7OON.js";
7
+ import { UIMapaBase as ur, UISeletorMapaBase as pr } from "./seletor-mapa-base.js";
8
+ const b = {
9
9
  camadas: `<svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
10
10
  <polygon points="12 2 2 7 12 12 22 7 12 2"></polygon>
11
11
  <polyline points="2 17 12 22 22 17"></polyline>
@@ -103,133 +103,133 @@ const g = {
103
103
  <line x1="9" y1="3" x2="9" y2="21"></line>
104
104
  <line x1="15" y1="3" x2="15" y2="21"></line>
105
105
  </svg>`
106
- }, te = 6378137;
107
- function Pe(e, o) {
108
- if (!e || !o) return 0;
109
- const a = e[0] * Math.PI / 180, t = e[1] * Math.PI / 180, i = o[0] * Math.PI / 180, r = o[1] * Math.PI / 180, n = i - a, s = r - t, l = Math.sin(n / 2) * Math.sin(n / 2) + Math.cos(a) * Math.cos(i) * Math.sin(s / 2) * Math.sin(s / 2);
110
- return te * 2 * Math.atan2(Math.sqrt(l), Math.sqrt(1 - l));
106
+ }, re = 6378137;
107
+ function je(e, r) {
108
+ if (!e || !r) return 0;
109
+ 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);
110
+ return re * 2 * Math.atan2(Math.sqrt(l), Math.sqrt(1 - l));
111
111
  }
112
- function ge(e) {
112
+ function be(e) {
113
113
  if (!Array.isArray(e) || e.length < 2) return 0;
114
114
  if (Array.isArray(e[0]) && Array.isArray(e[0][0]))
115
- return e.reduce((a, t) => a + ge(t), 0);
116
- let o = 0;
115
+ return e.reduce((a, i) => a + be(i), 0);
116
+ let r = 0;
117
117
  for (let a = 0; a < e.length - 1; a++) {
118
- const t = e[a], i = e[a + 1];
119
- Array.isArray(t) && Array.isArray(i) && t.length >= 2 && i.length >= 2 && (o += Pe([t[0], t[1]], [i[0], i[1]]));
118
+ const i = e[a], t = e[a + 1];
119
+ Array.isArray(i) && Array.isArray(t) && i.length >= 2 && t.length >= 2 && (r += je([i[0], i[1]], [t[0], t[1]]));
120
120
  }
121
- return o;
121
+ return r;
122
122
  }
123
- function J(e) {
123
+ function W(e) {
124
124
  if (!Array.isArray(e)) return 0;
125
- const o = e.length;
126
- if (o < 3) return 0;
125
+ const r = e.length;
126
+ if (r < 3) return 0;
127
127
  let a = 0;
128
- for (let i = 0; i < o; i++) {
129
- const r = e[i], n = e[(i + 1) % o], s = e[(i + 2) % o];
130
- if (!Array.isArray(r) || !Array.isArray(n) || !Array.isArray(s)) continue;
131
- const l = (n[1] - r[1]) * (Math.PI / 180), c = (n[0] - r[0]) * (Math.PI / 180), f = (s[1] - n[1]) * (Math.PI / 180), u = (s[0] - n[0]) * (Math.PI / 180);
132
- a += l * u - c * f;
128
+ for (let t = 0; t < r; t++) {
129
+ const o = e[t], n = e[(t + 1) % r], s = e[(t + 2) % r];
130
+ if (!Array.isArray(o) || !Array.isArray(n) || !Array.isArray(s)) continue;
131
+ 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), u = (s[0] - n[0]) * (Math.PI / 180);
132
+ a += l * u - c * d;
133
133
  }
134
- const t = Math.abs(a * (te * te) / 2);
135
- return isNaN(t) ? 0 : t;
134
+ const i = Math.abs(a * (re * re) / 2);
135
+ return isNaN(i) ? 0 : i;
136
136
  }
137
- function ve(e) {
137
+ function he(e) {
138
138
  if (!Array.isArray(e) || e.length === 0) return 0;
139
139
  if (Array.isArray(e[0]) && typeof e[0][0] == "number")
140
- return J(e);
140
+ return W(e);
141
141
  if (Array.isArray(e[0]) && Array.isArray(e[0][0])) {
142
142
  if (Array.isArray(e[0][0][0]))
143
- return e.reduce((t, i) => t + ve(i), 0);
144
- const o = J(e[0]);
143
+ return e.reduce((i, t) => i + he(t), 0);
144
+ const r = W(e[0]);
145
145
  let a = 0;
146
- for (let t = 1; t < e.length; t++)
147
- a += J(e[t]);
148
- return Math.max(0, o - a);
146
+ for (let i = 1; i < e.length; i++)
147
+ a += W(e[i]);
148
+ return Math.max(0, r - a);
149
149
  }
150
150
  return 0;
151
151
  }
152
- function be(e) {
152
+ function xe(e) {
153
153
  if (!e || e.length === 0) return "";
154
- const o = e.filter(
155
- (t) => t.type === "Polygon" || t.type === "MultiPolygon" || t.geometryType === "Polygon"
154
+ const r = e.filter(
155
+ (i) => i.type === "Polygon" || i.type === "MultiPolygon" || i.geometryType === "Polygon"
156
156
  );
157
- if (o.length > 0) {
158
- const t = o.reduce(
159
- (i, r) => i + (ve(r.coordinates) || 0),
157
+ if (r.length > 0) {
158
+ const i = r.reduce(
159
+ (t, o) => t + (he(o.coordinates) || 0),
160
160
  0
161
161
  );
162
- return t >= 1e4 ? `${(t / 1e4).toLocaleString("pt-BR", {
162
+ return i >= 1e4 ? `${(i / 1e4).toLocaleString("pt-BR", {
163
163
  minimumFractionDigits: 1,
164
164
  maximumFractionDigits: 2
165
- })} ha` : `${Math.round(t).toLocaleString("pt-BR")} m²`;
165
+ })} ha` : `${Math.round(i).toLocaleString("pt-BR")} m²`;
166
166
  }
167
167
  const a = e.filter(
168
- (t) => t.type === "LineString" || t.type === "MultiLineString" || t.geometryType === "LineString"
168
+ (i) => i.type === "LineString" || i.type === "MultiLineString" || i.geometryType === "LineString"
169
169
  );
170
170
  if (a.length > 0) {
171
- const t = a.reduce(
172
- (i, r) => i + (ge(r.coordinates) || 0),
171
+ const i = a.reduce(
172
+ (t, o) => t + (be(o.coordinates) || 0),
173
173
  0
174
174
  );
175
- return t >= 1e3 ? `${(t / 1e3).toLocaleString("pt-BR", {
175
+ return i >= 1e3 ? `${(i / 1e3).toLocaleString("pt-BR", {
176
176
  minimumFractionDigits: 1,
177
177
  maximumFractionDigits: 2
178
- })} km` : `${Math.round(t).toLocaleString("pt-BR")} m`;
178
+ })} km` : `${Math.round(i).toLocaleString("pt-BR")} m`;
179
179
  }
180
180
  return "";
181
181
  }
182
- function S(e) {
182
+ function M(e) {
183
183
  return e == null ? "" : String(e).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
184
184
  }
185
- const Oe = /^(#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})|(?:rgb|hsl)a?\(\s*[\w.%\s,/+-]+\)|[a-z]{3,30})$/i;
186
- function V(e, o = "#00E08A") {
187
- if (!e || typeof e != "string") return o;
185
+ const He = /^(#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})|(?:rgb|hsl)a?\(\s*[\w.%\s,/+-]+\)|[a-z]{3,30})$/i;
186
+ function Y(e, r = "#00E08A") {
187
+ if (!e || typeof e != "string") return r;
188
188
  const a = e.trim();
189
- return Oe.test(a) ? a : o;
189
+ return He.test(a) ? a : r;
190
190
  }
191
- function W(e) {
191
+ function Z(e) {
192
192
  return Math.max(0, Math.min(255, Math.round(e))).toString(16).padStart(2, "0");
193
193
  }
194
- function je(e, o, a) {
195
- const t = o / 100, i = a / 100, r = (l) => (l + e / 30) % 12, n = t * Math.min(i, 1 - i), s = (l) => i - n * Math.max(-1, Math.min(r(l) - 3, Math.min(9 - r(l), 1)));
194
+ function Ne(e, r, a) {
195
+ 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)));
196
196
  return [s(0) * 255, s(8) * 255, s(4) * 255];
197
197
  }
198
- function Re(e, o = "#000000") {
199
- if (!e || typeof e != "string") return o;
200
- const a = e.trim().toLowerCase(), t = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.exec(a);
201
- if (t) {
202
- const r = t[1];
203
- return r.length <= 4 ? `#${r[0]}${r[0]}${r[1]}${r[1]}${r[2]}${r[2]}` : `#${r.slice(0, 6)}`;
204
- }
205
- const i = /^(rgb|hsl)a?\(([^)]+)\)$/.exec(a);
198
+ function Ge(e, r = "#000000") {
199
+ if (!e || typeof e != "string") return r;
200
+ const a = e.trim().toLowerCase(), i = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.exec(a);
206
201
  if (i) {
207
- const r = i[2].split(/[\s,/]+/).filter(Boolean).map((n) => parseFloat(n));
208
- if (r.length >= 3 && r.slice(0, 3).every((n) => !isNaN(n))) {
209
- const [n, s, l] = r, [c, f, u] = i[1] === "rgb" ? [n, s, l] : je(n, s, l);
210
- return `#${W(c)}${W(f)}${W(u)}`;
202
+ const o = i[1];
203
+ return o.length <= 4 ? `#${o[0]}${o[0]}${o[1]}${o[1]}${o[2]}${o[2]}` : `#${o.slice(0, 6)}`;
204
+ }
205
+ const t = /^(rgb|hsl)a?\(([^)]+)\)$/.exec(a);
206
+ if (t) {
207
+ const o = t[2].split(/[\s,/]+/).filter(Boolean).map((n) => parseFloat(n));
208
+ if (o.length >= 3 && o.slice(0, 3).every((n) => !isNaN(n))) {
209
+ const [n, s, l] = o, [c, d, u] = t[1] === "rgb" ? [n, s, l] : Ne(n, s, l);
210
+ return `#${Z(c)}${Z(d)}${Z(u)}`;
211
211
  }
212
212
  }
213
- return o;
213
+ return r;
214
214
  }
215
- function B(e, o, a) {
216
- const t = e.querySelectorAll(`[${o}]`);
217
- for (let i = 0; i < t.length; i++)
218
- if (t[i].getAttribute(o) === a) return t[i];
215
+ function P(e, r, a) {
216
+ const i = e.querySelectorAll(`[${r}]`);
217
+ for (let t = 0; t < i.length; t++)
218
+ if (i[t].getAttribute(r) === a) return i[t];
219
219
  return null;
220
220
  }
221
- function xe(e, o = 80) {
221
+ function ye(e, r = 80) {
222
222
  let a = null;
223
- return (...t) => {
223
+ return (...i) => {
224
224
  a && clearTimeout(a), a = setTimeout(() => {
225
- e(...t), a = null;
226
- }, o);
225
+ e(...i), a = null;
226
+ }, r);
227
227
  };
228
228
  }
229
- function q(e, o) {
230
- e.setAttribute("title", o), e.setAttribute("aria-label", o);
229
+ function T(e, r) {
230
+ e.setAttribute("title", r), e.setAttribute("aria-label", r);
231
231
  }
232
- const ye = [
232
+ const we = [
233
233
  {
234
234
  id: "none",
235
235
  nome: "Sem Mapa",
@@ -272,16 +272,16 @@ const ye = [
272
272
  thumbnailUrl: "https://images.unsplash.com/photo-1518709268805-4e9042af9f23?w=160&auto=format&fit=crop&q=80"
273
273
  }
274
274
  ];
275
- function Ne(e = ye, o = "satelite") {
275
+ function Ue(e = we, r = "satelite") {
276
276
  return !e || e.length === 0 ? "" : `
277
277
  <div class="ui-basemap-section">
278
278
  <div class="ui-basemap-title">Mapa Base</div>
279
279
  <div class="ui-basemap-grid">
280
- ${e.map((t) => {
281
- const i = o === t.id, r = S(t.id), n = S(t.nome), s = S(t.descricao || t.nome);
280
+ ${e.map((i) => {
281
+ const t = r === i.id, o = M(i.id), n = M(i.nome), s = M(i.descricao || i.nome);
282
282
  let l = "";
283
- return t.thumbnailUrl ? l = `<img class="ui-basemap-preview" src="${S(t.thumbnailUrl)}" alt="" loading="lazy" referrerpolicy="no-referrer" data-basemap-thumb />` : l = `<div class="ui-basemap-preview-none">${g.gradeCad}</div>`, `
284
- <div class="ui-basemap-card ${i ? "active" : ""}" data-basemap-id="${r}" role="button" tabindex="0" aria-pressed="${i}" title="${s}">
283
+ return i.thumbnailUrl ? l = `<img class="ui-basemap-preview" src="${M(i.thumbnailUrl)}" alt="" loading="lazy" referrerpolicy="no-referrer" data-basemap-thumb />` : l = `<div class="ui-basemap-preview-none">${b.gradeCad}</div>`, `
284
+ <div class="ui-basemap-card ${t ? "active" : ""}" data-basemap-id="${o}" role="button" tabindex="0" aria-pressed="${t}" title="${s}">
285
285
  ${l}
286
286
  <span>${n}</span>
287
287
  </div>
@@ -291,261 +291,261 @@ function Ne(e = ye, o = "satelite") {
291
291
  </div>
292
292
  `;
293
293
  }
294
- function He(e) {
295
- const o = /* @__PURE__ */ new Map();
296
- e.forEach((r) => o.set(r.id, r));
297
- const a = /* @__PURE__ */ new Map(), t = [];
298
- e.forEach((r) => {
299
- r.parentId && o.has(r.parentId) ? (a.has(r.parentId) || a.set(r.parentId, []), a.get(r.parentId).push(r)) : t.push(r);
294
+ function Ye(e) {
295
+ const r = /* @__PURE__ */ new Map();
296
+ e.forEach((o) => r.set(o.id, o));
297
+ const a = /* @__PURE__ */ new Map(), i = [];
298
+ e.forEach((o) => {
299
+ o.parentId && r.has(o.parentId) ? (a.has(o.parentId) || a.set(o.parentId, []), a.get(o.parentId).push(o)) : i.push(o);
300
300
  });
301
- const i = (r, n) => {
302
- const s = a.get(r.id) || (Array.isArray(r.children) ? r.children : []), l = n > 0 ? "&nbsp;&nbsp;".repeat(n) + "↳ " : s.length > 0 || r.isGroup ? "📁 " : "", c = `<option value="${S(r.id)}">${l}${S(r.name)}</option>`, f = s.map((u) => i(u, n + 1)).join("");
303
- return c + f;
301
+ const t = (o, n) => {
302
+ 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="${M(o.id)}">${l}${M(o.name)}</option>`, d = s.map((u) => t(u, n + 1)).join("");
303
+ return c + d;
304
304
  };
305
- return t.map((r) => i(r, 0)).join("");
305
+ return i.map((o) => t(o, 0)).join("");
306
306
  }
307
- function Ge(e, o, a) {
308
- const t = o.filter((c) => a.has(c.id)), i = t.length > 0, r = be(t), n = i ? t.length : e.length, s = i ? t.length > 1 ? "selecionados" : "selecionado" : e.length > 1 ? "camadas" : "camada", l = He(e);
307
+ function _e(e, r, a) {
308
+ 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 = Ye(e);
309
309
  return `
310
- <div class="ui-tree-footer ${i ? "tem-selecao" : "sem-selecao"}">
310
+ <div class="ui-tree-footer ${t ? "tem-selecao" : "sem-selecao"}">
311
311
  <div class="ui-footer-left">
312
312
  <span class="ui-footer-count" id="footer-count">${n}</span>
313
313
  <span class="ui-footer-label" id="footer-label">${s}</span>
314
- <span class="ui-footer-metric" id="footer-metric" style="display: ${r ? "inline-flex" : "none"};">${r ? `${g.reguaMetrica} ${r}` : ""}</span>
314
+ <span class="ui-footer-metric" id="footer-metric" style="display: ${o ? "inline-flex" : "none"};">${o ? `${b.reguaMetrica} ${o}` : ""}</span>
315
315
  </div>
316
316
 
317
317
  <!-- Ações de topo/gerais quando não há nada selecionado -->
318
- <div class="ui-footer-actions-gerais" style="display: ${i ? "none" : "flex"};">
318
+ <div class="ui-footer-actions-gerais" style="display: ${t ? "none" : "flex"};">
319
319
  <button class="ui-footer-chip-btn" id="btn-footer-new-group" title="Criar Nova Pasta/Grupo de Camadas" aria-label="Criar Grupo de Camadas">
320
- ${g.moverPasta}
320
+ ${b.moverPasta}
321
321
  <span>+ Grupo</span>
322
322
  </button>
323
323
  <button class="ui-footer-chip-btn primario" id="btn-footer-new-layer" title="Criar Nova Camada Vetorial" aria-label="Criar Nova Camada">
324
- ${g.mais}
324
+ ${b.mais}
325
325
  <span>+ Camada</span>
326
326
  </button>
327
327
  </div>
328
328
 
329
329
  <!-- Ações em massa ativadas quando há seleção -->
330
- <div class="ui-footer-right ui-footer-bulk-actions" style="display: ${i ? "flex" : "none"};">
331
- <button class="ui-footer-btn ${i ? "" : "disabled"}" id="btn-footer-vis" title="Alternar visibilidade coletiva" aria-label="Alternar visibilidade coletiva" ${i ? "" : "disabled"}>
332
- ${g.olhoAberto}
330
+ <div class="ui-footer-right ui-footer-bulk-actions" style="display: ${t ? "flex" : "none"};">
331
+ <button class="ui-footer-btn ${t ? "" : "disabled"}" id="btn-footer-vis" title="Alternar visibilidade coletiva" aria-label="Alternar visibilidade coletiva" ${t ? "" : "disabled"}>
332
+ ${b.olhoAberto}
333
333
  </button>
334
334
 
335
- <button class="ui-footer-btn ${i ? "" : "disabled"}" id="btn-footer-lock" title="Alternar bloqueio coletivo" aria-label="Alternar bloqueio coletivo" ${i ? "" : "disabled"}>
336
- ${g.cadeadoTrancado}
335
+ <button class="ui-footer-btn ${t ? "" : "disabled"}" id="btn-footer-lock" title="Alternar bloqueio coletivo" aria-label="Alternar bloqueio coletivo" ${t ? "" : "disabled"}>
336
+ ${b.cadeadoTrancado}
337
337
  </button>
338
338
 
339
- <div class="ui-footer-color-wrapper ${i ? "" : "disabled"}" title="Alterar cor dos selecionados">
339
+ <div class="ui-footer-color-wrapper ${t ? "" : "disabled"}" title="Alterar cor dos selecionados">
340
340
  <span class="ui-footer-color-preview" id="preview-footer-color" style="background-color: #00E08A;"></span>
341
- <input type="color" id="input-footer-color" aria-label="Cor dos selecionados" value="#00E08A" class="ui-footer-color" ${i ? "" : "disabled"} />
341
+ <input type="color" id="input-footer-color" aria-label="Cor dos selecionados" value="#00E08A" class="ui-footer-color" ${t ? "" : "disabled"} />
342
342
  </div>
343
343
 
344
- <div class="ui-footer-move-wrapper ${i ? "" : "disabled"}" title="Mover selecionados para outra camada">
345
- <select id="select-footer-move" aria-label="Mover selecionados para outra camada" class="ui-footer-select" ${i ? "" : "disabled"}>
344
+ <div class="ui-footer-move-wrapper ${t ? "" : "disabled"}" title="Mover selecionados para outra camada">
345
+ <select id="select-footer-move" aria-label="Mover selecionados para outra camada" class="ui-footer-select" ${t ? "" : "disabled"}>
346
346
  <option value="" disabled selected>📂 Mover para...</option>
347
347
  ${l}
348
348
  </select>
349
349
  </div>
350
350
 
351
- <button class="ui-footer-btn btn-danger-footer ${i ? "" : "disabled"}" id="btn-footer-del" title="Excluir selecionados" aria-label="Excluir selecionados" ${i ? "" : "disabled"}>
352
- ${g.lixeira}
351
+ <button class="ui-footer-btn btn-danger-footer ${t ? "" : "disabled"}" id="btn-footer-del" title="Excluir selecionados" aria-label="Excluir selecionados" ${t ? "" : "disabled"}>
352
+ ${b.lixeira}
353
353
  </button>
354
354
 
355
- ${i ? `<button class="ui-footer-btn btn-clear-footer" id="btn-footer-clear" title="Limpar seleção" aria-label="Limpar seleção">${g.fechar}</button>` : ""}
355
+ ${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>` : ""}
356
356
  </div>
357
357
  </div>
358
358
  `;
359
359
  }
360
- const we = 80;
361
- function U(e, o) {
362
- const a = (o || "").trim().toLowerCase();
363
- return a ? e.filter(
364
- (t) => (t.name || "").toLowerCase().includes(a) || (t.category || "").toLowerCase().includes(a) || (t.type || "").toLowerCase().includes(a)
365
- ) : e;
366
- }
367
- function Ve(e, o, a, t = "", i = we) {
368
- const r = (t || "").trim() !== "", n = [], s = /* @__PURE__ */ new Map();
369
- for (let l = 0; l < o.length; l++) {
370
- const c = o[l], f = c.layerId || "";
371
- s.has(f) || s.set(f, []), s.get(f).push(c);
372
- }
373
- for (let l = 0; l < e.length; l++) {
374
- const c = e[l];
375
- if (r || a.has(c.id)) {
376
- const f = U(s.get(c.id) || [], t).slice(0, i);
377
- for (let u = 0; u < f.length; u++)
378
- n.push(f[u].id);
379
- }
380
- }
381
- return n;
382
- }
383
- function Ue(e, o, a, t, i, r) {
384
- if (!e.includes(t)) return null;
385
- const n = new Set(o);
386
- let s = a;
387
- if (r && a && e.includes(a)) {
388
- const l = e.indexOf(a), c = e.indexOf(t), f = Math.min(l, c), u = Math.max(l, c);
389
- i || n.clear();
390
- for (let p = f; p <= u; p++)
391
- n.add(e[p]);
392
- } else i ? (n.has(t) ? n.delete(t) : n.add(t), s = t) : (n.clear(), n.add(t), s = t);
393
- return { selecionados: n, ultimoClicadoId: s };
394
- }
395
- function Ye(e, o) {
396
- if (e.size === 0) return;
397
- const a = new Set(o.map((t) => t.id));
398
- for (const t of e)
399
- a.has(t) || e.delete(t);
400
- }
401
- const Z = 64;
402
- function fe(e) {
360
+ const ee = 64;
361
+ function me(e) {
403
362
  return Array.isArray(e) && e.length >= 2 && Number.isFinite(e[0]) && Number.isFinite(e[1]);
404
363
  }
405
364
  function Ee(e) {
406
- return !Array.isArray(e) || e.length === 0 ? [] : fe(e[0]) ? [e.filter(fe)] : e.flatMap(Ee);
365
+ return !Array.isArray(e) || e.length === 0 ? [] : me(e[0]) ? [e.filter(me)] : e.flatMap(Ee);
407
366
  }
408
- function me(e) {
409
- if (e.length <= Z) return e;
410
- const o = e.length / Z, a = [];
411
- for (let t = 0; t < Z; t++) a.push(e[Math.floor(t * o)]);
367
+ function ge(e) {
368
+ if (e.length <= ee) return e;
369
+ const r = e.length / ee, a = [];
370
+ for (let i = 0; i < ee; i++) a.push(e[Math.floor(i * r)]);
412
371
  return a.push(e[e.length - 1]), a;
413
372
  }
414
- function _e(e, o, a) {
415
- const t = Ee(o).filter((E) => E.length > 0);
416
- if (t.length === 0) return "";
417
- let i = 1 / 0, r = -1 / 0, n = 1 / 0, s = -1 / 0;
418
- for (const E of t)
419
- for (const [A, $] of E)
420
- $ < i && (i = $), $ > r && (r = $), -A < n && (n = -A), -A > s && (s = -A);
421
- const l = 16, c = 2, f = l - c * 2, u = r - i, p = s - n, d = Math.max(u, p), m = d > 0 ? f / d : 0, h = c + (f - u * m) / 2, L = c + (f - p * m) / 2, v = (E) => Math.round(E * 100) / 100, x = ([E, A]) => `${v(h + (A - i) * m)},${v(L + (-E - n) * m)}`, b = e === "polygon" || e === "multipolygon", y = e === "linestring" || e === "multilinestring", w = (E) => `<svg viewBox="0 0 ${l} ${l}" width="100%" height="100%" aria-hidden="true">${E}</svg>`;
422
- if (b) {
423
- const E = t.filter((A) => A.length >= 3).map((A) => `M${me(A).map(x).join("L")}Z`).join("");
424
- return E ? w(
425
- `<path d="${E}" fill="${a}" fill-opacity="0.45" fill-rule="evenodd" stroke="${a}" stroke-width="1.2" stroke-linejoin="round"/>`
373
+ function Ve(e, r, a) {
374
+ const i = Ee(r).filter((y) => y.length > 0);
375
+ if (i.length === 0) return "";
376
+ let t = 1 / 0, o = -1 / 0, n = 1 / 0, s = -1 / 0;
377
+ for (const y of i)
378
+ for (const [w, $] of y)
379
+ $ < t && (t = $), $ > o && (o = $), -w < n && (n = -w), -w > s && (s = -w);
380
+ const l = 16, c = 2, d = l - c * 2, u = o - t, p = s - n, f = Math.max(u, p), m = f > 0 ? d / f : 0, g = c + (d - u * m) / 2, C = c + (d - p * m) / 2, h = (y) => Math.round(y * 100) / 100, A = ([y, w]) => `${h(g + (w - t) * m)},${h(C + (-y - n) * m)}`, L = e === "polygon" || e === "multipolygon", x = e === "linestring" || e === "multilinestring", v = (y) => `<svg viewBox="0 0 ${l} ${l}" width="100%" height="100%" aria-hidden="true">${y}</svg>`;
381
+ if (L) {
382
+ const y = i.filter((w) => w.length >= 3).map((w) => `M${ge(w).map(A).join("L")}Z`).join("");
383
+ return y ? v(
384
+ `<path d="${y}" fill="${a}" fill-opacity="0.45" fill-rule="evenodd" stroke="${a}" stroke-width="1.2" stroke-linejoin="round"/>`
426
385
  ) : "";
427
386
  }
428
- if (y) {
429
- const E = t.filter((A) => A.length >= 2).map((A) => `M${me(A).map(x).join("L")}`).join("");
430
- return E ? w(
431
- `<path d="${E}" fill="none" stroke="${a}" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>`
387
+ if (x) {
388
+ const y = i.filter((w) => w.length >= 2).map((w) => `M${ge(w).map(A).join("L")}`).join("");
389
+ return y ? v(
390
+ `<path d="${y}" fill="none" stroke="${a}" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>`
432
391
  ) : "";
433
392
  }
434
393
  return "";
435
394
  }
436
- function Ke(e, o, a) {
437
- const t = V(o, "#00E08A"), i = (e || "").toLowerCase(), r = a !== void 0 ? _e(i, a, t) : "";
438
- return r || (i === "polygon" || i === "multipolygon" ? `<svg viewBox="0 0 16 16" width="11" height="11"><polygon points="2,14 14,14 12,2 4,4" fill="${t}" fill-opacity="0.45" stroke="${t}" stroke-width="1.5"/></svg>` : i === "linestring" || i === "multilinestring" ? `<svg viewBox="0 0 16 16" width="11" height="11"><polyline points="2,13 8,3 14,10" fill="none" stroke="${t}" stroke-width="2"/></svg>` : i === "text" ? `<svg viewBox="0 0 16 16" width="11" height="11"><text x="8" y="12" font-size="12" font-weight="bold" fill="${t}" text-anchor="middle" font-family="sans-serif">T</text></svg>` : `<svg viewBox="0 0 16 16" width="11" height="11"><circle cx="8" cy="8" r="4.2" fill="${t}" stroke="#ffffff" stroke-width="1.2"/></svg>`);
395
+ function Ke(e, r, a) {
396
+ const i = Y(r, "#00E08A"), t = (e || "").toLowerCase(), o = a !== void 0 ? Ve(t, a, i) : "";
397
+ 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>`);
439
398
  }
440
399
  function Xe(e) {
441
- const o = /* @__PURE__ */ new Map();
442
- e.forEach((r) => o.set(r.id, r));
443
- const a = /* @__PURE__ */ new Map(), t = [];
444
- e.forEach((r) => {
445
- r.parentId && o.has(r.parentId) && r.parentId !== r.id ? (a.has(r.parentId) || a.set(r.parentId, []), a.get(r.parentId).push(r)) : t.push(r);
400
+ const r = /* @__PURE__ */ new Map();
401
+ e.forEach((o) => r.set(o.id, o));
402
+ const a = /* @__PURE__ */ new Map(), i = [];
403
+ e.forEach((o) => {
404
+ 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);
446
405
  });
447
- function i(r, n) {
448
- const s = a.get(r.id) || (Array.isArray(r.children) ? r.children : []);
406
+ function t(o, n) {
407
+ const s = a.get(o.id) || (Array.isArray(o.children) ? o.children : []);
449
408
  return {
450
- camada: r,
409
+ camada: o,
451
410
  depth: n,
452
- subcamadas: s.map((l) => i(l, n + 1))
411
+ subcamadas: s.map((l) => t(l, n + 1))
453
412
  };
454
413
  }
455
- return t.map((r) => i(r, 0));
414
+ return i.map((o) => t(o, 0));
415
+ }
416
+ const Ae = 80;
417
+ function _(e, r) {
418
+ const a = (r || "").trim().toLowerCase();
419
+ return a ? e.filter(
420
+ (i) => (i.name || "").toLowerCase().includes(a) || (i.category || "").toLowerCase().includes(a) || (i.type || "").toLowerCase().includes(a)
421
+ ) : e;
422
+ }
423
+ function Qe(e, r, a, i = "", t = Ae) {
424
+ const o = (i || "").trim() !== "", n = [], s = /* @__PURE__ */ new Map();
425
+ for (let l = 0; l < r.length; l++) {
426
+ const c = r[l], d = c.layerId || "";
427
+ s.has(d) || s.set(d, []), s.get(d).push(c);
428
+ }
429
+ for (let l = 0; l < e.length; l++) {
430
+ const c = e[l];
431
+ if (o || a.has(c.id)) {
432
+ const d = _(s.get(c.id) || [], i).slice(0, t);
433
+ for (let u = 0; u < d.length; u++)
434
+ n.push(d[u].id);
435
+ }
436
+ }
437
+ return n;
456
438
  }
457
- function Qe(e) {
439
+ function Je(e, r, a, i, t, o) {
440
+ if (!e.includes(i)) return null;
441
+ const n = new Set(r);
442
+ let s = a;
443
+ if (o && a && e.includes(a)) {
444
+ const l = e.indexOf(a), c = e.indexOf(i), d = Math.min(l, c), u = Math.max(l, c);
445
+ t || n.clear();
446
+ for (let p = d; p <= u; p++)
447
+ n.add(e[p]);
448
+ } else t ? (n.has(i) ? n.delete(i) : n.add(i), s = i) : (n.clear(), n.add(i), s = i);
449
+ return { selecionados: n, ultimoClicadoId: s };
450
+ }
451
+ function ne(e, r) {
452
+ if (e.size === 0) return;
453
+ const a = new Set(r.map((i) => i.id));
454
+ for (const i of e)
455
+ a.has(i) || e.delete(i);
456
+ }
457
+ function We(e) {
458
458
  const {
459
- camadas: o,
459
+ camadas: r,
460
460
  feicoes: a,
461
- camadaAtivaId: t,
462
- expandedLayers: i,
463
- selectedFeatureIds: r,
461
+ camadaAtivaId: i,
462
+ expandedLayers: t,
463
+ selectedFeatureIds: o,
464
464
  activeSettingsLayerId: n,
465
465
  editingLayerId: s,
466
466
  editingFeatureId: l,
467
467
  searchQuery: c,
468
- limiteFeicoesPorCamada: f = we,
468
+ limiteFeicoesPorCamada: d = Ae,
469
469
  mostrarBotaoColapsar: u = !1
470
- } = e, p = (c || "").trim().toLowerCase(), d = /* @__PURE__ */ new Map();
471
- for (let y = 0; y < a.length; y++) {
472
- const w = a[y], E = w.layerId || "";
473
- d.has(E) || d.set(E, []), d.get(E).push(w);
470
+ } = e, p = (c || "").trim().toLowerCase(), f = /* @__PURE__ */ new Map();
471
+ for (let x = 0; x < a.length; x++) {
472
+ const v = a[x], y = v.layerId || "";
473
+ f.has(y) || f.set(y, []), f.get(y).push(v);
474
474
  }
475
- const m = o.every((y) => y.visible !== !1), h = o.length > 0 && o.every((y) => i.has(y.id)), L = `
475
+ const m = r.every((x) => x.visible !== !1), g = r.length > 0 && r.every((x) => t.has(x.id)), C = `
476
476
  <div class="ui-tree-toolbar">
477
477
  <div class="ui-tree-title-group">
478
478
  <span class="ui-tree-section-title">CAMADAS</span>
479
- <span class="ui-tree-count-badge">${o.length}</span>
479
+ <span class="ui-tree-count-badge">${r.length}</span>
480
480
  </div>
481
481
  <div class="ui-tree-actions">
482
482
  <button id="btn-toggle-all-vis" class="ui-tree-action-btn" title="${m ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas"}" aria-label="${m ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas"}">
483
- ${m ? g.olhoAberto : g.olhoFechado}
483
+ ${m ? b.olhoAberto : b.olhoFechado}
484
484
  </button>
485
- <button id="btn-toggle-all-expand" class="ui-tree-action-btn" aria-label="${h ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}" title="${h ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}">
486
- <span class="ui-chevron-icon ${h ? "open" : ""}">${g.chevronDir}</span>
485
+ <button id="btn-toggle-all-expand" class="ui-tree-action-btn" aria-label="${g ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}" title="${g ? "Recolher Todos os Grupos" : "Expandir Todos os Grupos"}">
486
+ <span class="ui-chevron-icon ${g ? "open" : ""}">${b.chevronDir}</span>
487
487
  </button>
488
488
  <button id="btn-add-group" class="ui-tree-btn-group" title="Criar grupo / pasta de camadas" aria-label="Criar grupo de camadas">
489
- ${g.moverPasta} Grupo
489
+ ${b.moverPasta} Grupo
490
490
  </button>
491
491
  <button id="btn-add-layer" class="ui-tree-btn-new" title="Adicionar nova camada vetorial">
492
- ${g.mais} Camada
492
+ ${b.mais} Camada
493
493
  </button>
494
- ${u ? `<button id="btn-colapsar" class="ui-camadas-btn-colapsar" title="Recolher painel" aria-label="Recolher painel">${g.recolherPainel}</button>` : ""}
494
+ ${u ? `<button id="btn-colapsar" class="ui-camadas-btn-colapsar" title="Recolher painel" aria-label="Recolher painel">${b.recolherPainel}</button>` : ""}
495
495
  </div>
496
496
  </div>
497
497
 
498
498
  <div class="ui-tree-search-wrapper">
499
- <span class="ui-tree-search-icon">${g.busca}</span>
500
- <input type="text" class="ui-tree-search-input" id="input-layer-search" aria-label="Buscar camada ou feição" placeholder="Buscar camada ou feição..." value="${S(
499
+ <span class="ui-tree-search-icon">${b.busca}</span>
500
+ <input type="text" class="ui-tree-search-input" id="input-layer-search" aria-label="Buscar camada ou feição" placeholder="Buscar camada ou feição..." value="${M(
501
501
  c
502
502
  )}" />
503
- ${c ? `<button class="ui-tree-search-clear" id="btn-clear-layer-search" title="Limpar busca" aria-label="Limpar busca">${g.fechar}</button>` : ""}
503
+ ${c ? `<button class="ui-tree-search-clear" id="btn-clear-layer-search" title="Limpar busca" aria-label="Limpar busca">${b.fechar}</button>` : ""}
504
504
  </div>
505
- `, v = (y) => {
506
- const w = y.camada, E = y.depth, A = y.subcamadas, $ = !!(w.isGroup || A.length > 0), k = S(w.id), D = S(w.name || ($ ? "Novo Grupo" : "Camada")), z = V(w.color, "#00E08A"), R = w.visible !== !1, P = w.locked === !0, N = p ? !0 : i.has(w.id), Y = n === w.id, ne = t === w.id, M = U(d.get(w.id) || [], p), se = M.length > 0 && M.every((C) => r.has(C.id)), ke = !se && M.some((C) => r.has(C.id)), Ie = M.slice(0, f), Le = M.length > f, Ce = Ie.map((C) => {
507
- const F = S(C.id), ce = S(C.name || "Feição"), de = V(C.color, z), H = C.visible !== !1, _ = P, K = C.locked === !0 || _, ue = _ ? "Bloqueada pela camada" : K ? "Desbloquear Feição" : "Bloquear Feição", X = r.has(C.id), pe = C.status;
508
- let Q = "";
509
- return pe === "oficial" ? Q = '<span class="ui-geom-tag oficial" title="Geometria Oficial">OFICIAL</span>' : pe === "previa" && (Q = '<span class="ui-geom-tag previa" title="Geometria Prévia">PRÉVIA</span>'), `
510
- <div class="ui-feat-row ${X ? "selected-row" : ""} ${H ? "" : "hidden-row"}" data-feat-row="${F}" data-feat-select="${F}" data-feat-layer="${k}" role="treeitem" aria-selected="${X}" tabindex="-1" draggable="true" title="Clique para selecionar | Arraste para reordenar">
511
- <div class="ui-col ui-col-eye" data-feat-eye="${F}" role="button" tabindex="0" aria-label="${H ? "Ocultar Feição" : "Exibir Feição"}" title="${H ? "Ocultar Feição" : "Exibir Feição"}">
512
- ${H ? g.olhoAberto : g.olhoFechado}
505
+ `, h = (x) => {
506
+ const v = x.camada, y = x.depth, w = x.subcamadas, $ = !!(v.isGroup || w.length > 0), k = M(v.id), O = M(v.name || ($ ? "Novo Grupo" : "Camada")), S = Y(v.color, "#00E08A"), B = v.visible !== !1, q = v.locked === !0, N = p ? !0 : t.has(v.id), V = n === v.id, se = i === v.id, F = _(f.get(v.id) || [], p), le = F.length > 0 && F.every((I) => o.has(I.id)), Ce = !le && F.some((I) => o.has(I.id)), $e = F.slice(0, d), Se = F.length > d, Me = $e.map((I) => {
507
+ const D = M(I.id), de = M(I.name || "Feição"), ue = Y(I.color, S), G = I.visible !== !1, K = q, X = I.locked === !0 || K, pe = K ? "Bloqueada pela camada" : X ? "Desbloquear Feição" : "Bloquear Feição", Q = o.has(I.id), fe = I.status;
508
+ let J = "";
509
+ return fe === "oficial" ? J = '<span class="ui-geom-tag oficial" title="Geometria Oficial">OFICIAL</span>' : fe === "previa" && (J = '<span class="ui-geom-tag previa" title="Geometria Prévia">PRÉVIA</span>'), `
510
+ <div class="ui-feat-row ${Q ? "selected-row" : ""} ${G ? "" : "hidden-row"}" data-feat-row="${D}" data-feat-select="${D}" data-feat-layer="${k}" role="treeitem" aria-selected="${Q}" tabindex="-1" draggable="true" title="Clique para selecionar | Arraste para reordenar">
511
+ <div class="ui-col ui-col-eye" data-feat-eye="${D}" role="button" tabindex="0" aria-label="${G ? "Ocultar Feição" : "Exibir Feição"}" title="${G ? "Ocultar Feição" : "Exibir Feição"}">
512
+ ${G ? b.olhoAberto : b.olhoFechado}
513
513
  </div>
514
514
 
515
- <div class="ui-col ui-col-lock ${K ? "" : "ui-lock-open"}" data-feat-lock="${F}" ${_ ? 'data-locked-by-layer="true"' : ""} role="button" tabindex="0" aria-label="${ue}" title="${ue}">
516
- ${K ? g.cadeadoTrancado : g.cadeadoAberto}
515
+ <div class="ui-col ui-col-lock ${X ? "" : "ui-lock-open"}" data-feat-lock="${D}" ${K ? 'data-locked-by-layer="true"' : ""} role="button" tabindex="0" aria-label="${pe}" title="${pe}">
516
+ ${X ? b.cadeadoTrancado : b.cadeadoAberto}
517
517
  </div>
518
518
 
519
- <div class="ui-col ui-col-colorbar" style="background: ${de};"></div>
519
+ <div class="ui-col ui-col-colorbar" style="background: ${ue};"></div>
520
520
  <div class="ui-col ui-col-branch"><span style="opacity: 0.35;">└─</span></div>
521
521
  <div class="ui-col ui-col-thumb">
522
- <div class="ui-thumb-box">${Ke(C.type || C.geometryType, de, C.coordinates)}</div>
522
+ <div class="ui-thumb-box">${Ke(I.type || I.geometryType, ue, I.coordinates)}</div>
523
523
  </div>
524
524
 
525
- <div class="ui-col ui-col-name" data-feat-name-trigger="${F}" title="Duplo clique para renomear">
526
- ${l === C.id ? `<input type="text" class="ui-inline-rename-input" data-inline-feat-input="${F}" value="${ce}" />` : `<span class="ui-name-text">${ce}</span>${Q}`}
525
+ <div class="ui-col ui-col-name" data-feat-name-trigger="${D}" title="Duplo clique para renomear">
526
+ ${l === I.id ? `<input type="text" class="ui-inline-rename-input" data-inline-feat-input="${D}" value="${de}" />` : `<span class="ui-name-text">${de}</span>${J}`}
527
527
  </div>
528
528
 
529
529
  <div class="ui-col ui-col-actions">
530
- <button class="ui-micro-btn" data-feat-fit="${F}" title="Enquadrar no mapa" aria-label="Enquadrar feição no mapa">${g.alvoEnquadrar}</button>
530
+ <button class="ui-micro-btn" data-feat-fit="${D}" title="Enquadrar no mapa" aria-label="Enquadrar feição no mapa">${b.alvoEnquadrar}</button>
531
531
  </div>
532
532
 
533
- <div class="ui-col ui-col-target" data-feat-target="${F}" role="button" tabindex="0" aria-label="Selecionar feição" title="Selecionar feição">
534
- <div class="ui-target-circle ${X ? "selected" : ""}"></div>
533
+ <div class="ui-col ui-col-target" data-feat-target="${D}" role="button" tabindex="0" aria-label="Selecionar feição" title="Selecionar feição">
534
+ <div class="ui-target-circle ${Q ? "selected" : ""}"></div>
535
535
  </div>
536
536
  </div>
537
537
  `;
538
- }).join(""), $e = Le ? `<div style="padding: 4px 10px; font-size: 10px; color: var(--ui-cor-texto-secundario, #888899); font-style: italic; background: rgba(0,0,0,0.2);">Exibindo ${f} de ${M.length} feições. Use a busca acima para filtrar.</div>` : "", le = w.opacity !== void 0 ? w.opacity : 1, Se = Math.round(le * 100), Me = o.filter((C) => C.id !== w.id).map(
539
- (C) => `<option value="${S(C.id)}" ${w.parentId === C.id ? "selected" : ""}>${C.isGroup ? "📁 " : ""}${S(C.name)}</option>`
540
- ).join(""), ze = Y ? `
541
- <div class="ui-layer-settings-drawer" id="settings-drawer-${k}" style="--drawer-cor-camada: ${z};">
538
+ }).join(""), ze = Se ? `<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 ${F.length} feições. Use a busca acima para filtrar.</div>` : "", ce = v.opacity !== void 0 ? v.opacity : 1, Fe = Math.round(ce * 100), Be = r.filter((I) => I.id !== v.id).map(
539
+ (I) => `<option value="${M(I.id)}" ${v.parentId === I.id ? "selected" : ""}>${I.isGroup ? "📁 " : ""}${M(I.name)}</option>`
540
+ ).join(""), qe = V ? `
541
+ <div class="ui-layer-settings-drawer" id="settings-drawer-${k}" style="--drawer-cor-camada: ${S};">
542
542
  <div class="ui-drawer-header">
543
543
  <div class="ui-drawer-header-left">
544
- <span class="ui-drawer-icon">${g.engrenagem}</span>
544
+ <span class="ui-drawer-icon">${b.engrenagem}</span>
545
545
  <span class="ui-drawer-title">Configurações da Camada</span>
546
546
  </div>
547
547
  <button type="button" class="ui-drawer-btn-fechar" data-layer-settings-close="${k}" title="Fechar configurações (Esc)" aria-label="Fechar configurações">
548
- ${g.fechar}
548
+ ${b.fechar}
549
549
  </button>
550
550
  </div>
551
551
 
@@ -557,9 +557,9 @@ function Qe(e) {
557
557
  </div>
558
558
  <div class="ui-drawer-color-group">
559
559
  <label class="ui-drawer-color-pill" title="Clique para alterar a cor da camada">
560
- <span class="ui-drawer-color-sample" id="sample-color-${k}" style="background-color: ${z};"></span>
561
- <span class="ui-drawer-color-hex" id="hex-color-${k}">${z.toUpperCase()}</span>
562
- <input type="color" aria-label="Cor da camada" data-layer-color-picker="${k}" value="${Re(z, "#00e08a")}" class="ui-drawer-color-native" />
560
+ <span class="ui-drawer-color-sample" id="sample-color-${k}" style="background-color: ${S};"></span>
561
+ <span class="ui-drawer-color-hex" id="hex-color-${k}">${S.toUpperCase()}</span>
562
+ <input type="color" aria-label="Cor da camada" data-layer-color-picker="${k}" value="${Ge(S, "#00e08a")}" class="ui-drawer-color-native" />
563
563
  </label>
564
564
  </div>
565
565
  </div>
@@ -568,10 +568,10 @@ function Qe(e) {
568
568
  <div class="ui-drawer-row">
569
569
  <div class="ui-drawer-row-label">
570
570
  <span>Opacidade</span>
571
- <span class="ui-drawer-badge" id="badge-op-${k}">${Se}%</span>
571
+ <span class="ui-drawer-badge" id="badge-op-${k}">${Fe}%</span>
572
572
  </div>
573
573
  <div class="ui-drawer-slider-container">
574
- <input type="range" aria-label="Opacidade da camada" min="0.05" max="1" step="0.05" value="${Number(le) || 0}" data-layer-opacity-slider="${k}" class="ui-drawer-slider" />
574
+ <input type="range" aria-label="Opacidade da camada" min="0.05" max="1" step="0.05" value="${Number(ce) || 0}" data-layer-opacity-slider="${k}" class="ui-drawer-slider" />
575
575
  </div>
576
576
  </div>
577
577
 
@@ -582,8 +582,8 @@ function Qe(e) {
582
582
  </div>
583
583
  <div class="ui-drawer-select-wrapper">
584
584
  <select class="ui-drawer-select" data-layer-parent-select="${k}" aria-label="Grupo pai da camada">
585
- <option value="" ${w.parentId ? "" : "selected"}>(Nenhum - Nível Principal)</option>
586
- ${Me}
585
+ <option value="" ${v.parentId ? "" : "selected"}>(Nenhum - Nível Principal)</option>
586
+ ${Be}
587
587
  </select>
588
588
  </div>
589
589
  </div>
@@ -591,355 +591,367 @@ function Qe(e) {
591
591
 
592
592
  <div class="ui-drawer-footer">
593
593
  <div class="ui-drawer-meta-info">
594
- <span>${A.length > 0 ? `${A.length} subcamadas · ` : ""}${M.length} ${M.length === 1 ? "feição" : "feições"}</span>
594
+ <span>${w.length > 0 ? `${w.length} subcamadas · ` : ""}${F.length} ${F.length === 1 ? "feição" : "feições"}</span>
595
595
  </div>
596
596
  <div class="ui-drawer-actions">
597
597
  <button type="button" class="ui-drawer-btn-sublayer" data-add-sublayer="${k}" title="Adicionar nova camada dentro desta">
598
- ${g.mais} Subcamada
598
+ ${b.mais} Subcamada
599
599
  </button>
600
600
  <button type="button" class="ui-drawer-btn-danger" data-delete-layer="${k}" title="Excluir esta camada e suas feições">
601
- ${g.lixeira}
601
+ ${b.lixeira}
602
602
  <span class="ui-btn-label">Excluir</span>
603
603
  </button>
604
604
  </div>
605
605
  </div>
606
606
  </div>
607
- ` : "", Fe = A.map((C) => v(C)).join("");
607
+ ` : "", De = w.map((I) => h(I)).join("");
608
608
  return `
609
- <div class="ui-layer-group ${E > 0 ? "is-sublayer-group" : ""}" data-layer-id="${k}" data-layer-depth="${E}" role="treeitem" aria-expanded="${N}">
610
- <div class="ui-layer-row ${R ? "" : "hidden-layer"} ${ne ? "active-drawing-layer" : ""} ${E > 0 ? "is-sublayer" : ""} ${$ ? "is-group-row" : ""}" data-layer-row="${k}" data-layer-id="${k}" tabindex="-1" draggable="true" style="--layer-depth: ${E}; --layer-active-color: ${z};">
611
- <div class="ui-col ui-col-drag" title="Arrastar para reordenar Z-Index">${g.dragHandle}</div>
609
+ <div class="ui-layer-group ${y > 0 ? "is-sublayer-group" : ""}" data-layer-id="${k}" data-layer-depth="${y}" role="treeitem" aria-expanded="${N}">
610
+ <div class="ui-layer-row ${B ? "" : "hidden-layer"} ${se ? "active-drawing-layer" : ""} ${y > 0 ? "is-sublayer" : ""} ${$ ? "is-group-row" : ""}" data-layer-row="${k}" data-layer-id="${k}" tabindex="-1" draggable="true" style="--layer-depth: ${y}; --layer-active-color: ${S};">
611
+ <div class="ui-col ui-col-drag" title="Arrastar para reordenar Z-Index">${b.dragHandle}</div>
612
612
 
613
- <div class="ui-col ui-col-eye" data-layer-eye="${k}" role="button" tabindex="0" aria-label="${R ? "Ocultar Camada" : "Exibir Camada"}" title="${R ? "Ocultar Camada" : "Exibir Camada"}">
614
- ${R ? g.olhoAberto : g.olhoFechado}
613
+ <div class="ui-col ui-col-eye" data-layer-eye="${k}" role="button" tabindex="0" aria-label="${B ? "Ocultar Camada" : "Exibir Camada"}" title="${B ? "Ocultar Camada" : "Exibir Camada"}">
614
+ ${B ? b.olhoAberto : b.olhoFechado}
615
615
  </div>
616
616
 
617
- <div class="ui-col ui-col-lock ${P ? "" : "ui-lock-open"}" data-layer-lock="${k}" role="button" tabindex="0" aria-label="${P ? "Desbloquear Camada" : "Bloquear Camada"}" title="${P ? "Desbloquear Camada" : "Bloquear Camada"}">
618
- ${P ? g.cadeadoTrancado : g.cadeadoAberto}
617
+ <div class="ui-col ui-col-lock ${q ? "" : "ui-lock-open"}" data-layer-lock="${k}" role="button" tabindex="0" aria-label="${q ? "Desbloquear Camada" : "Bloquear Camada"}" title="${q ? "Desbloquear Camada" : "Bloquear Camada"}">
618
+ ${q ? b.cadeadoTrancado : b.cadeadoAberto}
619
619
  </div>
620
620
 
621
- <div class="ui-col ui-col-colorbar" style="background: ${z};"></div>
621
+ <div class="ui-col ui-col-colorbar" style="background: ${S};"></div>
622
622
 
623
623
  <div class="ui-col ui-col-chevron" data-layer-expand="${k}" role="button" tabindex="0" aria-label="${N ? "Recolher grupo" : "Expandir grupo"}">
624
- <span class="ui-chevron-icon ${N ? "open" : ""}">${g.chevronDir}</span>
624
+ <span class="ui-chevron-icon ${N ? "open" : ""}">${b.chevronDir}</span>
625
625
  </div>
626
626
 
627
627
  <div class="ui-col ui-col-name" data-layer-name-trigger="${k}" title="Clique para ativar camada de desenho | Duplo clique para renomear">
628
- ${s === w.id ? `<input type="text" class="ui-inline-rename-input" data-inline-layer-input="${k}" value="${D}" />` : `${$ ? `<span class="ui-group-folder-icon" title="Grupo/Pasta">${g.moverPasta}</span>` : ""}
629
- <span class="ui-name-text">${D}</span>
630
- ${ne ? '<span class="ui-active-badge" title="Camada ativa para novos desenhos">✓ Ativa</span>' : ""}
631
- ${A.length > 0 ? `<span class="ui-group-badge" title="${A.length} subcamadas">${A.length} sub</span>` : ""}
632
- ${M.length > 0 || !$ ? `<span class="ui-count-chip">${M.length}</span>` : ""}`}
628
+ ${s === v.id ? `<input type="text" class="ui-inline-rename-input" data-inline-layer-input="${k}" value="${O}" />` : `${$ ? `<span class="ui-group-folder-icon" title="Grupo/Pasta">${b.moverPasta}</span>` : ""}
629
+ <span class="ui-name-text">${O}</span>
630
+ ${se ? '<span class="ui-active-badge" title="Camada ativa para novos desenhos">✓ Ativa</span>' : ""}
631
+ ${w.length > 0 ? `<span class="ui-group-badge" title="${w.length} subcamadas">${w.length} sub</span>` : ""}
632
+ ${F.length > 0 || !$ ? `<span class="ui-count-chip">${F.length}</span>` : ""}`}
633
633
  </div>
634
634
 
635
635
  <div class="ui-col ui-col-actions">
636
- <button class="ui-micro-btn" data-layer-fit="${k}" title="Enquadrar camada no mapa" aria-label="Enquadrar camada no mapa">${g.alvoEnquadrar}</button>
637
- <button class="ui-micro-btn ${Y ? "active" : ""}" data-layer-settings="${k}" title="Ajustar cor, hierarquia, opacidade e excluir" aria-label="Configurações da camada" aria-expanded="${Y}">${g.engrenagem}</button>
636
+ <button class="ui-micro-btn" data-layer-fit="${k}" title="Enquadrar camada no mapa" aria-label="Enquadrar camada no mapa">${b.alvoEnquadrar}</button>
637
+ <button class="ui-micro-btn ${V ? "active" : ""}" data-layer-settings="${k}" title="Ajustar cor, hierarquia, opacidade e excluir" aria-label="Configurações da camada" aria-expanded="${V}">${b.engrenagem}</button>
638
638
  </div>
639
639
 
640
640
  <div class="ui-col ui-col-target" data-layer-target="${k}" role="button" tabindex="0" aria-label="Selecionar todas as feições deste grupo" title="Selecionar todas as feições deste grupo">
641
- <div class="ui-target-circle ${se ? "selected" : ke ? "partial" : ""}"></div>
641
+ <div class="ui-target-circle ${le ? "selected" : Ce ? "partial" : ""}"></div>
642
642
  </div>
643
643
  </div>
644
644
 
645
- ${ze}
645
+ ${qe}
646
646
 
647
- <div class="ui-children-container ${E > 0 ? "is-subchildren" : ""}" role="group" style="display: ${N ? "block" : "none"};">
648
- ${Fe}
649
- ${Ce}
650
- ${$e}
651
- ${A.length === 0 && M.length === 0 ? `<div class="ui-empty-row"><span>${p ? "Nenhum item correspondente" : $ ? "Grupo vazio (adicione subcamadas ou feições)" : "Nenhum elemento neste grupo"}</span></div>` : ""}
647
+ <div class="ui-children-container ${y > 0 ? "is-subchildren" : ""}" role="group" style="display: ${N ? "block" : "none"};">
648
+ ${De}
649
+ ${Me}
650
+ ${ze}
651
+ ${w.length === 0 && F.length === 0 ? `<div class="ui-empty-row"><span>${p ? "Nenhum item correspondente" : $ ? "Grupo vazio (adicione subcamadas ou feições)" : "Nenhum elemento neste grupo"}</span></div>` : ""}
652
652
  </div>
653
653
  </div>
654
654
  `;
655
- }, b = Xe(o).map((y) => v(y)).join("");
655
+ }, L = Xe(r).map((x) => h(x)).join("");
656
656
  return `
657
- ${L}
657
+ ${C}
658
658
  <div class="ui-panel-box">
659
659
  <div class="ui-layer-tree" id="ui-layer-tree-mount" role="tree" aria-label="Camadas e feições" aria-multiselectable="true">
660
- ${b}
660
+ ${L}
661
661
  </div>
662
662
  </div>
663
663
  `;
664
664
  }
665
- function Je(e, o, a) {
666
- let t = e.find((i) => i.id === o);
665
+ function Ze(e) {
666
+ return [
667
+ {
668
+ gatilho: "data-layer-name-trigger",
669
+ input: "data-inline-layer-input",
670
+ marcarEditando: (r) => {
671
+ e.editingLayerId = r;
672
+ },
673
+ aplicar: (r, a) => {
674
+ const i = e.camadas.find((t) => t.id === r);
675
+ return !a || !i || i.name === a ? null : (i.name = a, { detalhe: { camadaId: r, novoNome: a, camada: i }, salvar: !0 });
676
+ },
677
+ emitir: (r) => e.dispararEvento("ui-camada-renomeada", r)
678
+ },
679
+ {
680
+ gatilho: "data-feat-name-trigger",
681
+ input: "data-inline-feat-input",
682
+ marcarEditando: (r) => {
683
+ e.editingFeatureId = r;
684
+ },
685
+ aplicar: (r, a) => {
686
+ const i = e.feicoes.find((t) => t.id === r);
687
+ return !a || !i || i.name === a ? null : (i.name = a, { detalhe: { feicaoId: r, novoNome: a, feicao: i }, salvar: !1 });
688
+ },
689
+ emitir: (r) => e.dispararEvento("ui-feicao-renomeada", r)
690
+ }
691
+ ];
692
+ }
693
+ function ea(e, r) {
694
+ for (const a of Ze(e))
695
+ r.querySelectorAll(`[${a.gatilho}]`).forEach((i) => {
696
+ i.addEventListener("dblclick", (t) => {
697
+ t.stopPropagation();
698
+ const o = i.getAttribute(a.gatilho);
699
+ if (!o) return;
700
+ a.marcarEditando(o), e.solicitarRenderizacao();
701
+ const n = P(r, a.input, o);
702
+ if (!n) return;
703
+ n.focus(), n.select();
704
+ let s = !1;
705
+ const l = (c) => {
706
+ var d;
707
+ if (!s) {
708
+ if (s = !0, a.marcarEditando(null), c) {
709
+ const u = a.aplicar(o, n.value.trim());
710
+ u && (u.salvar && ((d = e.salvarLembrancaEstado) == null || d.call(e)), a.emitir(u.detalhe));
711
+ }
712
+ e.solicitarRenderizacao();
713
+ }
714
+ };
715
+ n.addEventListener("keydown", (c) => {
716
+ c.key === "Enter" ? (c.preventDefault(), l(!0)) : c.key === "Escape" && (c.preventDefault(), l(!1));
717
+ }), n.addEventListener("blur", () => l(!0));
718
+ });
719
+ });
720
+ }
721
+ function aa(e, r, a) {
722
+ const i = /* @__PURE__ */ new Set();
723
+ let t = e.find((o) => o.id === r);
667
724
  for (; t && t.parentId; ) {
668
- if (t.parentId === a) return !0;
669
- t = e.find((i) => i.id === (t == null ? void 0 : t.parentId));
725
+ if (i.has(t.id) || (i.add(t.id), t.parentId === a)) return !0;
726
+ t = e.find((o) => o.id === (t == null ? void 0 : t.parentId));
670
727
  }
671
728
  return !1;
672
729
  }
673
- class We {
674
- constructor(o, a) {
675
- I(this, "host");
676
- I(this, "shadow");
677
- this.host = o, this.shadow = a;
730
+ function ra(e) {
731
+ return Number.isFinite(e) ? e < 0.25 ? "acima" : e > 0.75 ? "abaixo" : "dentro" : "dentro";
732
+ }
733
+ function ta(e, r, a, i) {
734
+ if (!r || !a || r === a) return null;
735
+ const t = e.find((l) => l.id === r), o = e.find((l) => l.id === a);
736
+ if (!t || !o) return null;
737
+ if (i === "dentro")
738
+ return aa(e, o.id, t.id) ? null : (t.parentId = o.id, { tipo: "hierarquia", camada: t, novoParentId: o.id });
739
+ const n = e.findIndex((l) => l.id === r);
740
+ e.splice(n, 1);
741
+ const s = e.findIndex((l) => l.id === a);
742
+ return s === -1 ? e.push(t) : e.splice(i === "acima" ? s : s + 1, 0, t), t.parentId = o.parentId ?? null, { tipo: "ordem", camada: t };
743
+ }
744
+ function ia(e, r, a, i) {
745
+ if (!r || !a || r === a) return !1;
746
+ const t = e.findIndex((s) => s.id === r);
747
+ if (t === -1) return !1;
748
+ const [o] = e.splice(t, 1), n = e.findIndex((s) => s.id === a);
749
+ return n === -1 ? e.push(o) : e.splice(i ? n : n + 1, 0, o), !0;
750
+ }
751
+ function oa(e, r, a, i) {
752
+ const t = e.find((s) => s.id === a), o = r.find((s) => s.id === i);
753
+ if (!t || !o || t.layerId === i) return null;
754
+ const n = t.layerId;
755
+ return t.layerId = i, { feicao: t, camadaOrigemId: n, camadaDestinoId: i, mudouDeCamada: !0 };
756
+ }
757
+ function na(e, r, a, i) {
758
+ if (!r || !a || r === a) return null;
759
+ const t = e.findIndex((u) => u.id === r);
760
+ if (t === -1) return null;
761
+ const o = e.find((u) => u.id === a);
762
+ if (!o) return null;
763
+ const [n] = e.splice(t, 1), s = n.layerId, l = o.layerId, c = s !== l;
764
+ c && (n.layerId = l);
765
+ const d = e.findIndex((u) => u.id === a);
766
+ return d === -1 ? e.push(n) : e.splice(i ? d : d + 1, 0, n), { feicao: n, camadaOrigemId: s, camadaDestinoId: l, mudouDeCamada: c };
767
+ }
768
+ const sa = ["dragging", "drop-above", "drop-below", "drop-into"];
769
+ class la {
770
+ constructor(r, a) {
771
+ E(this, "host");
772
+ E(this, "shadow");
773
+ /** Cancela um arraste por toque em andamento (remove os ouvintes de `window`). */
774
+ E(this, "cancelarToque", null);
775
+ this.host = r, this.shadow = a;
678
776
  }
679
777
  bindAll() {
680
778
  this.bindInlineRename(), this.bindDragAndDrop(), this.bindTouchDragAndDrop();
681
779
  }
780
+ /** Solta o que ficou em `window` (arraste por toque interrompido pela desconexão do componente). */
781
+ destruir() {
782
+ var r;
783
+ (r = this.cancelarToque) == null || r.call(this), this.cancelarToque = null;
784
+ }
682
785
  bindInlineRename() {
683
- this.shadow.querySelectorAll("[data-layer-name-trigger]").forEach((o) => {
684
- o.addEventListener("dblclick", (a) => {
685
- a.stopPropagation();
686
- const t = o.getAttribute("data-layer-name-trigger");
687
- if (!t) return;
688
- this.host.editingLayerId = t, this.host.solicitarRenderizacao();
689
- const i = B(
690
- this.shadow,
691
- "data-inline-layer-input",
692
- t
693
- );
694
- if (i) {
695
- i.focus(), i.select();
696
- let r = !1;
697
- const n = (s) => {
698
- var l, c;
699
- if (!r) {
700
- if (r = !0, this.host.editingLayerId = null, s) {
701
- const f = i.value.trim(), u = this.host.camadas.find((p) => p.id === t);
702
- f && u && u.name !== f && (u.name = f, (c = (l = this.host).salvarLembrancaEstado) == null || c.call(l), this.host.dispararEvento("ui-camada-renomeada", {
703
- camadaId: t,
704
- novoNome: f,
705
- camada: u
706
- }));
707
- }
708
- this.host.solicitarRenderizacao();
709
- }
710
- };
711
- i.addEventListener("keydown", (s) => {
712
- s.key === "Enter" ? (s.preventDefault(), n(!0)) : s.key === "Escape" && (s.preventDefault(), n(!1));
713
- }), i.addEventListener("blur", () => n(!0));
714
- }
715
- });
716
- }), this.shadow.querySelectorAll("[data-feat-name-trigger]").forEach((o) => {
717
- o.addEventListener("dblclick", (a) => {
718
- a.stopPropagation();
719
- const t = o.getAttribute("data-feat-name-trigger");
720
- if (!t) return;
721
- this.host.editingFeatureId = t, this.host.solicitarRenderizacao();
722
- const i = B(
723
- this.shadow,
724
- "data-inline-feat-input",
725
- t
726
- );
727
- if (i) {
728
- i.focus(), i.select();
729
- let r = !1;
730
- const n = (s) => {
731
- if (!r) {
732
- if (r = !0, this.host.editingFeatureId = null, s) {
733
- const l = i.value.trim(), c = this.host.feicoes.find((f) => f.id === t);
734
- l && c && c.name !== l && (c.name = l, this.host.dispararEvento("ui-feicao-renomeada", {
735
- feicaoId: t,
736
- novoNome: l,
737
- feicao: c
738
- }));
739
- }
740
- this.host.solicitarRenderizacao();
741
- }
742
- };
743
- i.addEventListener("keydown", (s) => {
744
- s.key === "Enter" ? (s.preventDefault(), n(!0)) : s.key === "Escape" && (s.preventDefault(), n(!1));
745
- }), i.addEventListener("blur", () => n(!0));
746
- }
747
- });
786
+ ea(this.host, this.shadow);
787
+ }
788
+ limparClassesDeArraste() {
789
+ this.shadow.querySelectorAll(".ui-layer-row, .ui-feat-row, .ui-layer-group").forEach((r) => {
790
+ r.classList.remove(...sa);
748
791
  });
749
792
  }
793
+ /** Depois de qualquer mudança na ordem/hierarquia de camadas. */
794
+ aposReordenarCamadas() {
795
+ var r, a;
796
+ (a = (r = this.host).salvarLembrancaEstado) == null || a.call(r), this.host.dispararEvento("ui-camadas-reordenadas", { camadas: [...this.host.camadas] }), this.host.solicitarRenderizacao();
797
+ }
798
+ emitirFeicaoMovida(r) {
799
+ this.host.dispararEvento("ui-feicao-movida", {
800
+ feicaoId: r.feicao.id,
801
+ camadaOrigemId: r.camadaOrigemId,
802
+ camadaDestinoId: r.camadaDestinoId,
803
+ feicao: r.feicao
804
+ });
805
+ }
806
+ arrasteBloqueado(r) {
807
+ return !!r.closest("input, button, select") || !!this.host.editingLayerId || !!this.host.editingFeatureId;
808
+ }
750
809
  bindDragAndDrop() {
751
- let o = null, a = null, t = null;
752
- const i = () => {
753
- this.shadow.querySelectorAll(".ui-layer-row, .ui-feat-row, .ui-layer-group").forEach((r) => {
754
- r.classList.remove("dragging", "drop-above", "drop-below", "drop-into");
755
- });
756
- };
757
- this.shadow.querySelectorAll('.ui-layer-row[draggable="true"]').forEach((r) => {
758
- const n = r.getAttribute("data-layer-id");
759
- n && (r.addEventListener("dragstart", (s) => {
810
+ let r = null, a = null, i = null;
811
+ this.shadow.querySelectorAll('.ui-layer-row[draggable="true"]').forEach((t) => {
812
+ const o = t.getAttribute("data-layer-id");
813
+ o && (t.addEventListener("dragstart", (n) => {
814
+ const s = n;
815
+ if (this.arrasteBloqueado(s.target)) {
816
+ s.preventDefault();
817
+ return;
818
+ }
819
+ 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");
820
+ }), t.addEventListener("dragover", (n) => {
821
+ const s = n;
822
+ if (s.preventDefault(), s.stopPropagation(), s.dataTransfer && (s.dataTransfer.dropEffect = "move"), r === "layer") {
823
+ if (a === o) return;
824
+ const l = t.getBoundingClientRect(), c = ra((s.clientY - l.top) / l.height);
825
+ t.classList.toggle("drop-above", c === "acima"), t.classList.toggle("drop-below", c === "abaixo"), t.classList.toggle("drop-into", c === "dentro");
826
+ } else r === "feature" && t.classList.add("drop-into");
827
+ }), t.addEventListener("dragleave", (n) => {
828
+ const s = n.relatedTarget;
829
+ s && t.contains(s) || t.classList.remove("drop-above", "drop-below", "drop-into");
830
+ }), t.addEventListener("drop", (n) => {
831
+ var c;
832
+ const s = n;
833
+ s.preventDefault(), s.stopPropagation();
834
+ const l = t.classList.contains("drop-into") ? "dentro" : t.classList.contains("drop-above") ? "acima" : "abaixo";
835
+ if (this.limparClassesDeArraste(), r === "layer") {
836
+ if (!a || a === o || !this.host.camadas.some((u) => u.id === a) || !this.host.camadas.some((u) => u.id === o)) return;
837
+ const d = ta(this.host.camadas, a, o, l);
838
+ (d == null ? void 0 : d.tipo) === "hierarquia" && ((c = this.host.expandedLayers) == null || c.add(d.novoParentId), this.host.dispararEvento("ui-camada-mover-hierarquia", {
839
+ camadaId: d.camada.id,
840
+ novoParentId: d.novoParentId,
841
+ camada: d.camada
842
+ })), this.aposReordenarCamadas();
843
+ } else if (r === "feature") {
844
+ if (!i) return;
845
+ const d = oa(this.host.feicoes, this.host.camadas, i, o);
846
+ d && (this.emitirFeicaoMovida(d), this.host.solicitarRenderizacao());
847
+ }
848
+ }), t.addEventListener("dragend", () => {
849
+ r = null, a = null, i = null, this.limparClassesDeArraste();
850
+ }));
851
+ }), this.shadow.querySelectorAll('.ui-feat-row[draggable="true"]').forEach((t) => {
852
+ const o = t.getAttribute("data-feat-row"), n = t.getAttribute("data-feat-layer");
853
+ o && (t.addEventListener("dragstart", (s) => {
760
854
  const l = s;
761
- if (l.target.closest("input, button, select") || this.host.editingLayerId || this.host.editingFeatureId) {
855
+ if (this.arrasteBloqueado(l.target)) {
762
856
  l.preventDefault();
763
857
  return;
764
858
  }
765
- o = "layer", a = n, l.dataTransfer && (l.dataTransfer.setData("text/plain", JSON.stringify({ type: "layer", id: n })), l.dataTransfer.effectAllowed = "move"), r.classList.add("dragging");
766
- }), r.addEventListener("dragover", (s) => {
859
+ 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");
860
+ }), t.addEventListener("dragover", (s) => {
767
861
  const l = s;
768
- if (l.preventDefault(), l.stopPropagation(), l.dataTransfer && (l.dataTransfer.dropEffect = "move"), o === "layer") {
769
- if (a === n) return;
770
- const c = r.getBoundingClientRect(), f = (l.clientY - c.top) / c.height;
771
- f < 0.25 ? (r.classList.add("drop-above"), r.classList.remove("drop-below", "drop-into")) : f > 0.75 ? (r.classList.add("drop-below"), r.classList.remove("drop-above", "drop-into")) : (r.classList.add("drop-into"), r.classList.remove("drop-above", "drop-below"));
772
- } else o === "feature" && r.classList.add("drop-into");
773
- }), r.addEventListener("dragleave", (s) => {
862
+ if (r !== "feature" || i === o) return;
863
+ l.preventDefault(), l.stopPropagation(), l.dataTransfer && (l.dataTransfer.dropEffect = "move");
864
+ const c = t.getBoundingClientRect(), d = l.clientY - c.top < c.height / 2;
865
+ t.classList.toggle("drop-above", d), t.classList.toggle("drop-below", !d);
866
+ }), t.addEventListener("dragleave", (s) => {
774
867
  const l = s.relatedTarget;
775
- l && r.contains(l) || r.classList.remove("drop-above", "drop-below", "drop-into");
776
- }), r.addEventListener("drop", (s) => {
777
- var u, p;
868
+ l && t.contains(l) || t.classList.remove("drop-above", "drop-below");
869
+ }), t.addEventListener("drop", (s) => {
778
870
  const l = s;
871
+ if (r !== "feature" || !i || i === o) return;
779
872
  l.preventDefault(), l.stopPropagation();
780
- const c = r.classList.contains("drop-above"), f = r.classList.contains("drop-into");
781
- if (i(), o === "layer") {
782
- if (!a || a === n) return;
783
- const d = this.host.camadas.find((h) => h.id === a), m = this.host.camadas.find((h) => h.id === n);
784
- if (!d || !m) return;
785
- if (f)
786
- Je(this.host.camadas, m.id, d.id) || (d.parentId = m.id, "expandedLayers" in this.host && this.host.expandedLayers && this.host.expandedLayers.add(m.id), this.host.dispararEvento("ui-camada-mover-hierarquia", {
787
- camadaId: d.id,
788
- novoParentId: m.id,
789
- camada: d
790
- }));
791
- else {
792
- const h = this.host.camadas.findIndex((v) => v.id === a);
793
- if (h === -1) return;
794
- this.host.camadas.splice(h, 1);
795
- const L = this.host.camadas.findIndex((v) => v.id === n);
796
- L === -1 ? this.host.camadas.push(d) : this.host.camadas.splice(c ? L : L + 1, 0, d), d.parentId = m.parentId ?? null;
797
- }
798
- (p = (u = this.host).salvarLembrancaEstado) == null || p.call(u), this.host.dispararEvento("ui-camadas-reordenadas", {
799
- camadas: [...this.host.camadas]
800
- }), this.host.solicitarRenderizacao();
801
- } else if (o === "feature") {
802
- if (!t) return;
803
- const d = this.host.feicoes.find((h) => h.id === t), m = this.host.camadas.find((h) => h.id === n);
804
- if (d && m && d.layerId !== n) {
805
- const h = d.layerId;
806
- d.layerId = n, this.host.dispararEvento("ui-feicao-movida", {
807
- feicaoId: d.id,
808
- camadaOrigemId: h,
809
- camadaDestinoId: n,
810
- feicao: d
811
- }), this.host.solicitarRenderizacao();
812
- }
813
- }
814
- }), r.addEventListener("dragend", () => {
815
- o = null, a = null, t = null, i();
816
- }));
817
- }), this.shadow.querySelectorAll('.ui-feat-row[draggable="true"]').forEach((r) => {
818
- const n = r.getAttribute("data-feat-row"), s = r.getAttribute("data-feat-layer");
819
- n && (r.addEventListener("dragstart", (l) => {
820
- const c = l;
821
- if (c.target.closest("input, button, select") || this.host.editingLayerId || this.host.editingFeatureId) {
822
- c.preventDefault();
823
- return;
824
- }
825
- c.stopPropagation(), o = "feature", t = n, a = s, c.dataTransfer && (c.dataTransfer.setData(
826
- "text/plain",
827
- JSON.stringify({ type: "feature", id: n, layerId: s })
828
- ), c.dataTransfer.effectAllowed = "move"), r.classList.add("dragging");
829
- }), r.addEventListener("dragover", (l) => {
830
- const c = l;
831
- if (o !== "feature" || t === n) return;
832
- c.preventDefault(), c.stopPropagation(), c.dataTransfer && (c.dataTransfer.dropEffect = "move");
833
- const f = r.getBoundingClientRect(), u = c.clientY - f.top < f.height / 2;
834
- r.classList.toggle("drop-above", u), r.classList.toggle("drop-below", !u);
835
- }), r.addEventListener("dragleave", (l) => {
836
- const c = l.relatedTarget;
837
- c && r.contains(c) || r.classList.remove("drop-above", "drop-below");
838
- }), r.addEventListener("drop", (l) => {
839
- const c = l;
840
- if (o !== "feature" || !t || t === n) return;
841
- c.preventDefault(), c.stopPropagation();
842
- const f = r.classList.contains("drop-above");
843
- i();
844
- const u = this.host.feicoes.findIndex((x) => x.id === t);
845
- if (u === -1) return;
846
- const p = this.host.feicoes.find((x) => x.id === n);
847
- if (!p) return;
848
- const [d] = this.host.feicoes.splice(u, 1), m = d.layerId, h = p.layerId, L = m !== h;
849
- L && (d.layerId = h);
850
- const v = this.host.feicoes.findIndex((x) => x.id === n);
851
- v === -1 ? this.host.feicoes.push(d) : this.host.feicoes.splice(f ? v : v + 1, 0, d), L && this.host.dispararEvento("ui-feicao-movida", {
852
- feicaoId: d.id,
853
- camadaOrigemId: m,
854
- camadaDestinoId: h,
855
- feicao: d
856
- }), this.host.dispararEvento("ui-feicoes-reordenadas", {
857
- feicoes: [...this.host.feicoes]
858
- }), this.host.solicitarRenderizacao();
859
- }), r.addEventListener("dragend", (l) => {
860
- l.stopPropagation(), o = null, t = null, a = null, i();
873
+ const c = t.classList.contains("drop-above");
874
+ this.limparClassesDeArraste();
875
+ const d = na(this.host.feicoes, i, o, c);
876
+ d && (d.mudouDeCamada && this.emitirFeicaoMovida(d), this.host.dispararEvento("ui-feicoes-reordenadas", { feicoes: [...this.host.feicoes] }), this.host.solicitarRenderizacao());
877
+ }), t.addEventListener("dragend", (s) => {
878
+ s.stopPropagation(), r = null, i = null, a = null, this.limparClassesDeArraste();
861
879
  }));
862
880
  });
863
881
  }
864
882
  /**
865
- * Suporte a arraste por toque e ponteiro no handle (.ui-col-drag) para tablets e mobile
883
+ * Suporte a arraste por toque e ponteiro no handle (.ui-col-drag) para tablets e mobile.
884
+ * Os ouvintes de `window` existem só durante o gesto e são soltos em `destruir()`.
866
885
  */
867
886
  bindTouchDragAndDrop() {
868
- this.shadow.querySelectorAll(".ui-layer-row .ui-col-drag").forEach((o) => {
869
- const a = o.closest(".ui-layer-row");
887
+ this.shadow.querySelectorAll(".ui-layer-row .ui-col-drag").forEach((r) => {
888
+ const a = r.closest(".ui-layer-row");
870
889
  if (!a) return;
871
- const t = a.getAttribute("data-layer-id");
872
- t && o.addEventListener("pointerdown", (i) => {
873
- const r = i;
874
- if (r.pointerType === "mouse" && r.button !== 0 || this.host.editingLayerId || this.host.editingFeatureId) return;
890
+ const i = a.getAttribute("data-layer-id");
891
+ i && r.addEventListener("pointerdown", (t) => {
892
+ var u;
893
+ const o = t;
894
+ if (o.pointerType === "mouse" && o.button !== 0 || this.host.editingLayerId || this.host.editingFeatureId) return;
895
+ (u = this.cancelarToque) == null || u.call(this);
875
896
  let n = null, s = !1;
876
- const l = t, c = () => {
877
- this.shadow.querySelectorAll(".ui-layer-row, .ui-feat-row, .ui-layer-group").forEach((p) => p.classList.remove("dragging", "drop-above", "drop-below"));
878
- }, f = (p) => {
897
+ const l = (p) => {
879
898
  p.preventDefault(), a.classList.add("dragging");
880
- const d = this.shadow.elementFromPoint(p.clientX, p.clientY), m = d ? d.closest(".ui-layer-row") : null;
899
+ const f = this.shadow.elementFromPoint(p.clientX, p.clientY), m = f ? f.closest(".ui-layer-row") : null;
881
900
  if (n && n !== m && n.classList.remove("drop-above", "drop-below"), m && m !== a) {
882
901
  n = m;
883
- const h = m.getBoundingClientRect();
884
- s = p.clientY - h.top < h.height / 2, m.classList.toggle("drop-above", s), m.classList.toggle("drop-below", !s);
902
+ const g = m.getBoundingClientRect();
903
+ s = p.clientY - g.top < g.height / 2, m.classList.toggle("drop-above", s), m.classList.toggle("drop-below", !s);
885
904
  } else
886
905
  n = null;
887
- }, u = () => {
888
- var p, d;
889
- if (window.removeEventListener("pointermove", f), window.removeEventListener("pointerup", u), window.removeEventListener("pointercancel", u), n) {
890
- const m = n.getAttribute("data-layer-id");
891
- if (c(), m && l && m !== l) {
892
- const h = this.host.camadas.findIndex((L) => L.id === l);
893
- if (h !== -1) {
894
- const [L] = this.host.camadas.splice(h, 1), v = this.host.camadas.findIndex((x) => x.id === m);
895
- v === -1 ? this.host.camadas.push(L) : this.host.camadas.splice(s ? v : v + 1, 0, L), (d = (p = this.host).salvarLembrancaEstado) == null || d.call(p), this.host.dispararEvento("ui-camadas-reordenadas", {
896
- camadas: [...this.host.camadas]
897
- }), this.host.solicitarRenderizacao();
898
- }
899
- }
900
- } else
901
- c();
906
+ }, c = () => {
907
+ window.removeEventListener("pointermove", l), window.removeEventListener("pointerup", d), window.removeEventListener("pointercancel", d), this.cancelarToque = null;
908
+ }, d = () => {
909
+ c();
910
+ const p = n == null ? void 0 : n.getAttribute("data-layer-id");
911
+ this.limparClassesDeArraste(), p && ia(this.host.camadas, i, p, s) && this.aposReordenarCamadas();
902
912
  };
903
- window.addEventListener("pointermove", f, { passive: !1 }), window.addEventListener("pointerup", u), window.addEventListener("pointercancel", u);
913
+ this.cancelarToque = () => {
914
+ c(), this.limparClassesDeArraste();
915
+ }, window.addEventListener("pointermove", l, { passive: !1 }), window.addEventListener("pointerup", d), window.addEventListener("pointercancel", d);
904
916
  });
905
917
  });
906
918
  }
907
919
  }
908
- const Ze = "ui_camadas_estado_";
909
- function ea(e, o) {
910
- const a = (e || o || "default").trim();
911
- return `${Ze}${a}`;
920
+ const ca = "ui_camadas_estado_";
921
+ function da(e, r) {
922
+ const a = (e || r || "default").trim();
923
+ return `${ca}${a}`;
912
924
  }
913
- function ee(e) {
925
+ function te(e) {
914
926
  if (typeof window > "u" || typeof localStorage > "u")
915
927
  return null;
916
928
  try {
917
- const o = localStorage.getItem(e);
918
- if (!o) return null;
919
- const a = JSON.parse(o);
929
+ const r = localStorage.getItem(e);
930
+ if (!r) return null;
931
+ const a = JSON.parse(r);
920
932
  if (a && typeof a == "object")
921
933
  return a;
922
- } catch (o) {
923
- console.warn(`[UI-Camadas] Não foi possível carregar o estado persistido (${e}):`, o);
934
+ } catch (r) {
935
+ console.warn(`[UI-Camadas] Não foi possível carregar o estado persistido (${e}):`, r);
924
936
  }
925
937
  return null;
926
938
  }
927
- function aa(e, o) {
939
+ function ua(e, r) {
928
940
  if (!(typeof window > "u" || typeof localStorage > "u"))
929
941
  try {
930
- localStorage.setItem(e, JSON.stringify(o));
942
+ localStorage.setItem(e, JSON.stringify(r));
931
943
  } catch (a) {
932
944
  console.warn(`[UI-Camadas] Não foi possível salvar o estado persistido (${e}):`, a);
933
945
  }
934
946
  }
935
- function ta(e) {
947
+ function pa(e) {
936
948
  if (!(typeof window > "u" || typeof localStorage > "u"))
937
949
  try {
938
950
  localStorage.removeItem(e);
939
951
  } catch {
940
952
  }
941
953
  }
942
- function re(e) {
954
+ function ke(e) {
943
955
  return {
944
956
  name: e.name,
945
957
  visible: e.visible !== !1,
@@ -949,55 +961,55 @@ function re(e) {
949
961
  parentId: e.parentId !== void 0 ? e.parentId : null
950
962
  };
951
963
  }
952
- function ra(e, o, a, t) {
964
+ function fa(e, r, a, i) {
953
965
  if (!Array.isArray(e)) return;
954
- const i = (o == null ? void 0 : o.camadasOverrides) || {}, r = new Set((o == null ? void 0 : o.expandedLayerIds) || []), n = new Set((o == null ? void 0 : o.collapsedLayerIds) || []), s = r.size > 0 || n.size > 0;
966
+ 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;
955
967
  for (let u = 0; u < e.length; u++) {
956
- const p = e[u], d = i[p.id];
957
- if (t == null || t.set(p.id, re(p)), d) {
958
- const m = d.origem, h = (L) => {
959
- var x;
960
- const v = (x = t == null ? void 0 : t.get(p.id)) == null ? void 0 : x[L];
961
- return m !== void 0 && m[L] !== v;
968
+ const p = e[u], f = t[p.id];
969
+ if (i == null || i.set(p.id, ke(p)), f) {
970
+ const m = f.origem, g = (C) => {
971
+ var A;
972
+ const h = (A = i == null ? void 0 : i.get(p.id)) == null ? void 0 : A[C];
973
+ return m !== void 0 && m[C] !== h;
962
974
  };
963
- typeof d.name == "string" && d.name.trim() && !h("name") && (p.name = d.name), typeof d.visible == "boolean" && !h("visible") && (p.visible = d.visible), typeof d.locked == "boolean" && !h("locked") && (p.locked = d.locked), typeof d.opacity == "number" && !h("opacity") && (p.opacity = d.opacity), typeof d.color == "string" && !h("color") && (p.color = d.color), d.parentId !== void 0 && !h("parentId") && (p.parentId = d.parentId);
975
+ typeof f.name == "string" && f.name.trim() && !g("name") && (p.name = f.name), typeof f.visible == "boolean" && !g("visible") && (p.visible = f.visible), typeof f.locked == "boolean" && !g("locked") && (p.locked = f.locked), typeof f.opacity == "number" && !g("opacity") && (p.opacity = f.opacity), typeof f.color == "string" && !g("color") && (p.color = f.color), f.parentId !== void 0 && !g("parentId") && (p.parentId = f.parentId);
964
976
  }
965
- s ? r.has(p.id) ? a.add(p.id) : n.has(p.id) ? a.delete(p.id) : a.add(p.id) : a.add(p.id);
977
+ s ? o.has(p.id) ? a.add(p.id) : n.has(p.id) ? a.delete(p.id) : a.add(p.id) : a.add(p.id);
966
978
  }
967
- const l = new Set(e.map((u) => u.id)), c = o == null ? void 0 : o.ordemOrigemIds;
979
+ const l = new Set(e.map((u) => u.id)), c = r == null ? void 0 : r.ordemOrigemIds;
968
980
  if (!(Array.isArray(c) && (() => {
969
- const u = new Set(c), p = (d) => d.filter((m) => l.has(m) && u.has(m)).join("|");
970
- return p(c) !== p(e.map((d) => d.id));
971
- })()) && Array.isArray(o == null ? void 0 : o.ordemCamadasIds) && o.ordemCamadasIds.length > 0) {
981
+ const u = new Set(c), p = (f) => f.filter((m) => l.has(m) && u.has(m)).join("|");
982
+ return p(c) !== p(e.map((f) => f.id));
983
+ })()) && Array.isArray(r == null ? void 0 : r.ordemCamadasIds) && r.ordemCamadasIds.length > 0) {
972
984
  const u = /* @__PURE__ */ new Map();
973
- o.ordemCamadasIds.forEach((p, d) => u.set(p, d)), e.sort((p, d) => {
974
- const m = u.has(p.id) ? u.get(p.id) : 9999, h = u.has(d.id) ? u.get(d.id) : 9999;
975
- return m - h;
985
+ r.ordemCamadasIds.forEach((p, f) => u.set(p, f)), e.sort((p, f) => {
986
+ const m = u.has(p.id) ? u.get(p.id) : 9999, g = u.has(f.id) ? u.get(f.id) : 9999;
987
+ return m - g;
976
988
  });
977
989
  }
978
990
  }
979
- function ia(e) {
980
- const { estadoAnterior: o, camadas: a, expandedLayers: t } = e;
981
- let i = (o == null ? void 0 : o.expandedLayerIds) || [], r = (o == null ? void 0 : o.collapsedLayerIds) || [], n = (o == null ? void 0 : o.ordemCamadasIds) || [], s = o == null ? void 0 : o.ordemOrigemIds;
991
+ function ma(e) {
992
+ const { estadoAnterior: r, camadas: a, expandedLayers: i } = e;
993
+ 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;
982
994
  const l = {
983
- ...(o == null ? void 0 : o.camadasOverrides) || {}
995
+ ...(r == null ? void 0 : r.camadasOverrides) || {}
984
996
  };
985
- a.length > 0 && (i = [], r = [], n = a.map((c) => c.id), s = e.origensCamadas ? [...e.origensCamadas.keys()] : n, a.forEach((c) => {
986
- var f, u;
987
- t.has(c.id) ? i.push(c.id) : r.push(c.id), l[c.id] = {
997
+ a.length > 0 && (t = [], o = [], n = a.map((c) => c.id), s = e.origensCamadas ? [...e.origensCamadas.keys()] : n, a.forEach((c) => {
998
+ var d, u;
999
+ i.has(c.id) ? t.push(c.id) : o.push(c.id), l[c.id] = {
988
1000
  name: c.name,
989
1001
  visible: c.visible !== !1,
990
1002
  locked: !!c.locked,
991
1003
  opacity: typeof c.opacity == "number" ? c.opacity : 1,
992
1004
  color: c.color || "#00E08A",
993
- origem: ((f = e.origensCamadas) == null ? void 0 : f.get(c.id)) ?? ((u = l[c.id]) == null ? void 0 : u.origem)
1005
+ origem: ((d = e.origensCamadas) == null ? void 0 : d.get(c.id)) ?? ((u = l[c.id]) == null ? void 0 : u.origem)
994
1006
  };
995
1007
  }));
996
1008
  for (const c of e.camadasRemovidas ?? []) delete l[c];
997
1009
  return {
998
1010
  versao: 1,
999
- expandedLayerIds: i,
1000
- collapsedLayerIds: r,
1011
+ expandedLayerIds: t,
1012
+ collapsedLayerIds: o,
1001
1013
  camadaAtivaId: e.camadaAtivaId,
1002
1014
  painelColapsado: e.painelColapsado,
1003
1015
  ordemCamadasIds: n,
@@ -1009,276 +1021,276 @@ function ia(e) {
1009
1021
  ultimaAtualizacao: Date.now()
1010
1022
  };
1011
1023
  }
1012
- const oa = ':host{display:flex;flex-direction:column;box-sizing:border-box;font-family:inherit;font-size:11px;color:var(--ui-cor-texto, #e1e1e6);-webkit-user-select:none;user-select:none;width:100%;height:var(--ui-camadas-altura, 100%);min-height:var(--ui-camadas-min-altura, 140px);position:relative;--camada-linha-altura: 25px;--camada-thumb-tamanho: 20px;--camada-transicao: .16s cubic-bezier(.16, 1, .3, 1)}:host([densidade="compacto"]){--camada-linha-altura: 22px;--camada-thumb-tamanho: 17px;font-size:10px}:host([flutuante]){position:absolute;top:10px;right:10px;bottom:46px;z-index:var(--ui-z-workspace-hud, 500);width:auto;height:var(--ui-camadas-altura, auto)}*,*:before,*:after{box-sizing:border-box}:host(:not([flutuante])) .ui-camadas-container{max-width:100%;min-width:0;border:none;box-shadow:none;border-radius:0;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none}.ui-camadas-container{display:flex;flex-direction:column;flex:1 1 auto;height:100%;min-height:0;width:100%;max-width:380px;min-width:270px;background:var(--ui-cor-superficie, #141417);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));border-radius:var(--ui-raio-borda, 8px);box-shadow:var(--ui-sombra-lg, 0 10px 30px -4px rgba(0, 0, 0, .5)),0 0 0 1px color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 5%,transparent);overflow:hidden;position:relative;transition:transform .24s cubic-bezier(.16,1,.3,1),opacity .2s ease;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}:host([colapsado]) .ui-camadas-container{transform:translate(calc(100% + 24px));opacity:0;pointer-events:none}.ui-camadas-toggle-flutuante{display:none;position:absolute;top:10px;right:10px;z-index:calc(var(--ui-z-workspace-hud, 500) - 1);background:var(--ui-cor-superficie, #141417);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .18));border-radius:var(--ui-raio-borda, 6px);color:var(--ui-cor-texto, #ffffff);width:34px;height:34px;cursor:pointer;align-items:center;justify-content:center;box-shadow:var(--ui-sombra-md, 0 8px 20px rgba(0, 0, 0, .45));transition:all var(--camada-transicao)}:host([colapsado][flutuante]) .ui-camadas-toggle-flutuante{display:flex}.ui-camadas-toggle-flutuante:hover{border-color:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-primaria, #00E08A);transform:scale(1.08);box-shadow:0 0 14px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-camadas-header{height:32px;min-height:32px;max-height:32px;display:flex;align-items:center;justify-content:space-between;padding:0 5px;border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));background:var(--ui-cor-fundo-elevado, rgba(0, 0, 0, .28));gap:4px}.ui-camadas-tabs{display:flex;gap:3px;flex:1}.ui-camadas-tab-btn{flex:1;background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);height:24px;padding:0 6px;font-size:11px;font-weight:500;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:5px;white-space:nowrap;transition:all var(--camada-transicao)}.ui-camadas-tab-btn:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .07))}.ui-camadas-tab-btn.active{color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 25%,transparent);font-weight:600}.ui-camadas-btn-colapsar{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:22px;height:22px;cursor:pointer;border-radius:var(--ui-raio-sm, 4px);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all var(--camada-transicao)}.ui-camadas-btn-colapsar:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .09))}.ui-camadas-corpo{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding:6px 6px 4px;display:flex;flex-direction:column;gap:6px;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 16%,transparent) transparent}.ui-camadas-corpo::-webkit-scrollbar{width:4px}.ui-camadas-corpo::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 18%,transparent);border-radius:var(--ui-raio-sm, 4px)}.ui-camadas-corpo::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 32%,transparent)}.ui-tree-toolbar{display:flex;align-items:center;justify-content:space-between;padding:1px 2px 3px;border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .06))}.ui-tree-title-group{display:flex;align-items:center;gap:5px}.ui-tree-section-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-cor-texto-secundario, #888899)}.ui-tree-count-badge{font-size:9px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent);color:var(--ui-cor-texto-secundario, #888899);padding:1px 5px;border-radius:8px;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent)}.ui-tree-actions{display:flex;align-items:center;gap:3px}.ui-tree-action-btn{background:transparent;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));color:var(--ui-cor-texto-secundario, #888899);border-radius:var(--ui-raio-sm, 4px);width:22px;height:22px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-tree-action-btn:hover{color:var(--ui-cor-texto, #ffffff);border-color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .09))}.ui-tree-btn-new{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);border:1px solid color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent);color:var(--ui-cor-primaria, #00E08A);border-radius:var(--ui-raio-sm, 4px);height:22px;padding:0 8px;font-size:10px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-tree-btn-new:hover{background:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-texto-sobre-primaria, #000000);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-tree-search-wrapper{position:relative;display:flex;align-items:center;margin:1px 0}.ui-tree-search-icon{position:absolute;left:8px;color:var(--ui-cor-texto-secundario, #888899);pointer-events:none;display:flex;align-items:center}.ui-tree-search-input{width:100%;height:25px;background:var(--ui-cor-fundo, #0a0a0c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));border-radius:var(--ui-raio-borda, 5px);padding:0 24px 0 26px;color:var(--ui-cor-texto, #ffffff);font-size:10.5px;outline:none;transition:border-color var(--camada-transicao),box-shadow var(--camada-transicao)}.ui-tree-search-input:focus{border-color:var(--ui-cor-primaria, #00E08A);box-shadow:0 0 0 2px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 18%,transparent)}.ui-tree-search-clear{position:absolute;right:5px;background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);cursor:pointer;width:18px;height:18px;display:flex;align-items:center;justify-content:center;border-radius:3px;transition:all var(--camada-transicao)}.ui-tree-search-clear:hover{color:var(--ui-cor-texto, #ffffff);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 10%,transparent)}.ui-panel-box{background:var(--ui-cor-fundo, #0c0c0f);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));border-radius:var(--ui-raio-borda, 6px);overflow:hidden;display:flex;flex-direction:column;flex:1 1 0%;min-height:80px}.ui-layer-tree{flex:1 1 0%;min-height:40px;overflow-y:auto;overflow-x:hidden}.ui-layer-group{border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .04));transition:background var(--camada-transicao)}.ui-layer-group.drop-into{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 9%,transparent)!important;outline:1.5px dashed var(--ui-cor-primaria, #00E08A);outline-offset:-1.5px}.ui-layer-row,.ui-feat-row{display:flex;align-items:center;height:var(--camada-linha-altura);min-height:var(--camada-linha-altura);max-height:var(--camada-linha-altura);padding:0 4px;-webkit-user-select:none;user-select:none;cursor:default;transition:background .1s ease;position:relative}.ui-layer-row{background:var(--ui-cor-fundo-elevado, #18181d);font-weight:600;cursor:pointer;border-left:3px solid transparent}.ui-layer-row:hover{background:var(--ui-cor-hover-menu, #22222a)}.ui-layer-row.active-drawing-layer{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent)!important;border-left:3px solid var(--layer-active-color, var(--ui-cor-primaria, #00E08A))!important;box-shadow:inset 0 0 12px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 7%,transparent)}.ui-layer-row.active-drawing-layer .ui-name-text{color:var(--ui-cor-texto, #e1e1e6);font-weight:700}.ui-feat-row{background:var(--ui-cor-fundo, #101014);font-weight:400;cursor:pointer}.ui-feat-row:hover{background:var(--ui-cor-hover-menu, #19191f)}.ui-feat-row.selected-row{background:color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 18%,transparent)!important;outline:1px solid color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 50%,transparent)!important;outline-offset:-1px}.ui-layer-row.hidden-layer,.ui-feat-row.hidden-row{opacity:.52}.ui-layer-row.hidden-layer .ui-col-eye,.ui-feat-row.hidden-row .ui-col-eye{color:var(--ui-cor-texto-alerta, #ffb86c);opacity:.95}.ui-layer-row.dragging,.ui-feat-row.dragging{opacity:.35;background:color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 16%,transparent)!important}.ui-layer-row.drop-above:before,.ui-feat-row.drop-above:before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:var(--ui-cor-texto-info, #33b5ff);box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 100%,transparent);z-index:20;pointer-events:none}.ui-layer-row.drop-below:after,.ui-feat-row.drop-below:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background:var(--ui-cor-texto-info, #33b5ff);box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 100%,transparent);z-index:20;pointer-events:none}.ui-layer-row.drop-into{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 16%,transparent)!important;outline:1.5px dashed var(--ui-cor-primaria, #00E08A)!important;outline-offset:-2px;border-radius:var(--ui-raio-sm, 4px)}.ui-layer-row.is-sublayer{padding-left:calc(6px + var(--layer-depth, 1) * 16px);background:color-mix(in srgb,var(--ui-cor-fundo-elevado, #18181d) 70%,transparent);border-left:2px solid color-mix(in srgb,var(--layer-active-color, #00E08A) 40%,transparent)}.ui-children-container.is-subchildren{position:relative;margin-left:calc(var(--layer-depth, 0) * 8px);border-left:1px dashed var(--ui-cor-borda, rgba(255, 255, 255, .1))}.ui-group-folder-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--ui-cor-texto-alerta, #ffb86c);margin-right:4px;flex-shrink:0}.ui-group-badge{font-size:8.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;padding:1px 4px;border-radius:3px;background:color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 15%,transparent);color:var(--ui-cor-texto-alerta, #ffb86c);border:1px solid color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 30%,transparent);margin-left:4px;flex-shrink:0}.ui-col{display:flex;align-items:center;justify-content:center;flex-shrink:0;height:var(--camada-linha-altura)}.ui-col-drag{width:14px;cursor:grab;color:var(--ui-cor-texto-secundario, #888899);opacity:.35;touch-action:none;transition:opacity var(--camada-transicao),color var(--camada-transicao)}.ui-layer-row:hover .ui-col-drag,.ui-feat-row:hover .ui-col-drag{opacity:.9;color:var(--ui-cor-primaria, #00E08A)}.ui-col-drag:active{cursor:grabbing}.ui-col-eye{width:20px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);transition:color var(--camada-transicao)}.ui-col-eye:hover{color:var(--ui-cor-primaria, #00E08A)}.ui-col-lock{width:18px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);transition:color var(--camada-transicao)}.ui-col-lock:hover{color:var(--ui-cor-texto-alerta, #ffb86c)}.ui-col-colorbar{width:3.5px;height:16px;margin:0 3px 0 2px;border-radius:1.5px;flex-shrink:0}.ui-col-chevron{width:14px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);display:flex;align-items:center;justify-content:center}.ui-chevron-icon{display:inline-flex;align-items:center;justify-content:center;transition:transform var(--camada-transicao)}.ui-chevron-icon.open{transform:rotate(90deg)}.ui-col-branch{width:14px;display:flex;align-items:center;justify-content:center;color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 22%,transparent);font-size:10px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace)}.ui-col-thumb{width:calc(var(--camada-thumb-tamanho) + 3px);margin-right:4px;display:flex;align-items:center;justify-content:center}.ui-thumb-box{width:var(--camada-thumb-tamanho);height:var(--camada-thumb-tamanho);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 15%,transparent);border-radius:3px;background:var(--ui-cor-fundo, #0d0d10);box-sizing:border-box;overflow:hidden;display:flex;align-items:center;justify-content:center}.ui-col-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;color:var(--ui-cor-texto, #e1e1e6);padding-left:2px;padding-right:4px;cursor:pointer;display:flex;align-items:center;justify-content:flex-start;text-align:left;gap:4px}.ui-name-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-active-badge{font-size:8px;font-weight:700;color:var(--ui-cor-texto-sobre-primaria, #000000);background:var(--ui-cor-primaria, #00E08A);border:1px solid color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 45%,transparent);padding:1px 4px;border-radius:3px;display:inline-flex;align-items:center;gap:2px;white-space:nowrap;flex-shrink:0;animation:pulseBadge 2.8s infinite}@keyframes pulseBadge{0%{opacity:.85}50%{opacity:1;filter:drop-shadow(0 0 4px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 50%,transparent))}to{opacity:.85}}.ui-count-chip{font-size:9px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;color:var(--ui-cor-texto, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent);padding:0 4px;border-radius:8px}.ui-col-actions{display:flex;align-items:center;gap:2px;opacity:0;transition:opacity var(--camada-transicao)}.ui-layer-row:hover .ui-col-actions,.ui-feat-row:hover .ui-col-actions{opacity:1}.ui-micro-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:18px;height:18px;padding:0;border-radius:3px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-micro-btn:hover{color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12))}.ui-micro-btn.active{color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 18%,transparent)}.ui-col-target{width:22px;cursor:pointer}.ui-target-circle{width:11px;height:11px;border-radius:50%;border:1.5px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 32%,transparent);background:transparent;transition:all .12s ease}.ui-col-target:hover .ui-target-circle{border-color:var(--ui-cor-texto-info, #33b5ff);transform:scale(1.18)}.ui-target-circle.selected{border:2px solid var(--ui-cor-texto-info, #33b5ff);background:var(--ui-cor-texto-info, #33b5ff);box-shadow:inset 0 0 0 2px var(--ui-cor-superficie, #141418)}.ui-target-circle.partial{border:2px solid var(--ui-cor-texto-info, #33b5ff);background:color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 40%,transparent)}.ui-inline-rename-input{width:100%;height:20px;background:var(--ui-cor-fundo, #0d0d10);color:var(--ui-cor-texto, #e1e1e6);border:1px solid var(--ui-cor-primaria, #00E08A);border-radius:3px;font-size:10.5px;padding:0 4px;outline:none;box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 40%,transparent)}.ui-layer-settings-drawer{background:linear-gradient(180deg,var(--ui-cor-fundo-elevado, #17171e) 0%,var(--ui-cor-superficie, #0f0f13) 100%);padding:10px 14px 12px;border-top:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);border-bottom:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent);border-left:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));display:flex;flex-direction:column;gap:10px;box-shadow:inset 0 1px color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent),0 6px 16px #00000073;animation:drawerSlideDown .18s cubic-bezier(.16,1,.3,1);position:relative;z-index:10}@keyframes drawerSlideDown{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.ui-drawer-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:6px;border-bottom:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent)}.ui-drawer-header-left{display:flex;align-items:center;gap:7px;min-width:0}.ui-drawer-icon{color:var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));display:flex;align-items:center;flex-shrink:0}.ui-drawer-title{font-size:10.5px;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);text-transform:uppercase;letter-spacing:.6px;white-space:nowrap}.ui-drawer-layer-chip{font-size:9.5px;font-weight:500;color:var(--ui-cor-texto-secundario, #888899);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent);padding:1px 6px;border-radius:var(--ui-raio-sm, 4px);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-drawer-btn-fechar{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:20px;height:20px;padding:0;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-drawer-btn-fechar:hover{color:var(--ui-cor-texto, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-body{display:flex;flex-direction:column;gap:10px}.ui-drawer-row{display:flex;flex-direction:column;gap:5px}.ui-drawer-row-label{display:flex;justify-content:space-between;align-items:center;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:var(--ui-cor-texto-secundario, #888899)}.ui-drawer-color-group{display:flex;align-items:center;justify-content:space-between;gap:8px}.ui-drawer-color-pill{position:relative;display:inline-flex;align-items:center;gap:6px;padding:3px 8px 3px 5px;background:var(--ui-cor-fundo, #0b0b0d);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 16%,transparent);border-radius:var(--ui-raio-sm, 4px);cursor:pointer;transition:all var(--camada-transicao);-webkit-user-select:none;user-select:none}.ui-drawer-color-pill:hover{border-color:var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 25%,transparent)}.ui-drawer-color-sample{width:14px;height:14px;border-radius:3px;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 35%,transparent);box-shadow:var(--ui-sombra-sm, 0 1px 3px rgba(0, 0, 0, .5));flex-shrink:0;transition:background-color .1s ease}.ui-drawer-color-hex{font-size:10px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);letter-spacing:.5px}.ui-drawer-color-native{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.ui-drawer-badge{font-size:9.5px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 10%,transparent);padding:1px 6px;border-radius:var(--ui-raio-sm, 4px);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-slider-container{display:flex;flex-direction:column;gap:4px}.ui-drawer-slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:5px;background:linear-gradient(90deg,color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent) 0%,var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A)) 100%);border-radius:3px;outline:none;margin:3px 0;cursor:pointer;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-slider::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:#fff;border:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));box-shadow:0 0 6px #0009,0 0 10px var(--drawer-cor-camada, rgba(0, 224, 138, .6));cursor:pointer;transition:transform .12s ease}.ui-drawer-slider::-webkit-slider-thumb:hover{transform:scale(1.22)}.ui-drawer-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:#fff;border:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));box-shadow:0 0 6px #0009,0 0 10px var(--drawer-cor-camada, rgba(0, 224, 138, .6));cursor:pointer}.ui-drawer-footer{display:flex;align-items:center;justify-content:space-between;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent)}.ui-drawer-meta-info{font-size:9.5px;color:var(--ui-cor-texto-secundario, #888899);font-style:italic}.ui-drawer-actions{display:flex;align-items:center;gap:6px}.ui-drawer-btn-danger{background:color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 10%,transparent);border:1px solid color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 35%,transparent);color:var(--ui-cor-texto-erro, #ff5555);border-radius:var(--ui-raio-sm, 4px);height:24px;padding:0 10px;font-size:10px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:all var(--camada-transicao)}.ui-drawer-btn-danger:hover{background:var(--ui-cor-botao-destrutivo-fundo, #d32f2f);color:var(--ui-cor-botao-destrutivo-texto, #ffffff);border-color:var(--ui-cor-botao-destrutivo-fundo, #d32f2f);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 45%,transparent);transform:translateY(-.5px)}.ui-drawer-btn-danger.confirming{background:var(--ui-cor-botao-destrutivo-hover, #b71c1c);color:var(--ui-cor-botao-destrutivo-texto, #ffffff);border-color:var(--ui-cor-botao-destrutivo-hover, #b71c1c);animation:pulseDanger 1.2s infinite}@keyframes pulseDanger{0%{transform:scale(1)}50%{transform:scale(1.02)}to{transform:scale(1)}}.ui-geom-tag{font-size:8px;font-weight:700;letter-spacing:.4px;padding:1px 4px;border-radius:3px;margin-left:4px;text-transform:uppercase;flex-shrink:0}.ui-geom-tag.oficial{background:color-mix(in srgb,var(--ui-cor-texto-sucesso, #00E08A) 16%,transparent);color:var(--ui-cor-texto-sucesso, #00E08A);border:1px solid color-mix(in srgb,var(--ui-cor-texto-sucesso, #00E08A) 35%,transparent)}.ui-geom-tag.previa{background:color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 16%,transparent);color:var(--ui-cor-texto-alerta, #ffb86c);border:1px solid color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 35%,transparent)}.ui-tree-footer{height:32px;min-height:32px;background:var(--ui-cor-fundo-elevado, #121216);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));display:flex;align-items:center;justify-content:space-between;padding:0 8px;gap:6px;box-sizing:border-box;overflow:hidden;position:relative}.ui-footer-left{display:flex;align-items:center;gap:5px;white-space:nowrap;min-width:0;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis}.ui-footer-count{font-size:11px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-primaria, #00E08A);flex-shrink:0}.ui-footer-label{font-size:10px;font-weight:500;color:var(--ui-cor-texto-secundario, #888899);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-footer-metric{font-size:9.5px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;color:var(--ui-cor-primaria, #00E08A);display:inline-flex;align-items:center;gap:3px;white-space:nowrap;background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);padding:1px 5px;border-radius:3px;border:1px solid color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 24%,transparent);flex-shrink:0}.ui-footer-actions-gerais{display:flex;align-items:center;gap:4px;flex-shrink:0}.ui-footer-chip-btn{background:#ffffff0a;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));color:var(--ui-cor-texto-secundario, #a0a0b0);font-size:10px;font-weight:600;height:22px;padding:0 7px;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-footer-chip-btn:hover{background:#ffffff1a;color:var(--ui-cor-texto, #ffffff);border-color:#fff3}.ui-footer-chip-btn.primario{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);border-color:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 32%,transparent);color:var(--ui-cor-primaria, #00E08A)}.ui-footer-chip-btn.primario:hover{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 22%,transparent);border-color:var(--ui-cor-primaria, #00E08A);color:#fff}.ui-footer-right{display:flex;align-items:center;gap:3px;flex-shrink:0}.ui-footer-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:22px;height:22px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all var(--camada-transicao);flex-shrink:0}.ui-footer-btn:hover:not(.disabled){color:var(--ui-cor-texto, #e1e1e6);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12))}.ui-footer-btn.disabled{opacity:.25;cursor:not-allowed}.ui-footer-btn.btn-danger-footer:hover:not(.disabled){color:#f55;background:#ff555526}.ui-footer-btn.confirming{background:#f55!important;color:#fff!important}.ui-footer-btn.btn-clear-footer{color:var(--ui-cor-texto-secundario, #888899);margin-left:2px}.ui-footer-btn.btn-clear-footer:hover{color:#fff;background:#ffffff1f}.ui-footer-color-wrapper{position:relative;display:flex;align-items:center;justify-content:center;width:18px;height:18px;cursor:pointer;flex-shrink:0}.ui-footer-color-preview{width:14px;height:14px;border-radius:50%;border:1.5px solid rgba(255,255,255,.35);box-shadow:0 0 4px #0006;pointer-events:none;transition:transform .15s ease,border-color .15s ease}.ui-footer-color-wrapper:hover .ui-footer-color-preview{transform:scale(1.15);border-color:#fff}.ui-footer-color{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer;padding:0;margin:0;border:none}.ui-footer-move-wrapper{position:relative;display:flex;align-items:center;max-width:95px;flex-shrink:0}.ui-footer-select{background:var(--ui-cor-fundo, #16161c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #e1e1e6);border-radius:4px;font-size:10px;height:22px;padding:0 4px;cursor:pointer;max-width:95px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-footer-select:hover:not(:disabled){border-color:#ffffff40}.ui-footer-select:focus{outline:none;border-color:var(--ui-cor-primaria, #00E08A)}.ui-tree-btn-group{background:#ffffff0a;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto-secundario, #a0a0b0);border-radius:var(--ui-raio-sm, 4px);height:22px;padding:0 7px;font-size:10px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-tree-btn-group:hover{background:#ffffff1a;color:var(--ui-cor-texto, #ffffff);border-color:#ffffff40}.ui-drawer-btn-sublayer{background:#ffffff0f;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #e1e1e6);font-size:10.5px;font-weight:500;padding:4px 8px;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-drawer-btn-sublayer:hover{background:#ffffff1f;color:var(--ui-cor-primaria, #00E08A);border-color:var(--ui-cor-primaria, #00E08A)}.ui-drawer-select-wrapper{display:flex;align-items:center}.ui-drawer-select{background:var(--ui-cor-fundo, #16161c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .15));color:var(--ui-cor-texto, #e1e1e6);border-radius:4px;font-size:10.5px;height:24px;padding:0 6px;cursor:pointer;max-width:140px}.ui-basemap-section{display:flex;flex-direction:column;gap:4px;flex-shrink:0}.ui-basemap-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:4px}.ui-basemap-card{display:flex;flex-direction:column;align-items:center;gap:2px;padding:3px;border-radius:var(--ui-raio-borda, 5px);background:var(--ui-cor-fundo, #101014);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:pointer;transition:all var(--camada-transicao);text-align:center;overflow:hidden}.ui-basemap-card:hover{border-color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-fundo-elevado, #17171c)}.ui-basemap-card.active{border-color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);color:var(--ui-cor-primaria, #00E08A);font-weight:600;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-basemap-preview{width:100%;height:22px;border-radius:3px;object-fit:cover;opacity:.85;transition:opacity var(--camada-transicao)}.ui-basemap-preview-none{width:100%;height:22px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 4%,transparent);border-radius:3px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-card:hover .ui-basemap-preview,.ui-basemap-card.active .ui-basemap-preview{opacity:1}.ui-basemap-card span{font-size:9.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.ui-search-hidden{display:none!important}.ui-empty-row{height:22px;display:flex;align-items:center;padding-left:36px;font-size:10px;color:var(--ui-cor-texto-secundario, #666677);font-style:italic;background:var(--ui-cor-fundo-recuado, rgba(0, 0, 0, .15))}.ui-camadas-resizer-altura{display:none;flex-shrink:0;width:100%;height:9px;background:var(--ui-cor-superficie, #141417);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:ns-resize;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;touch-action:none;transition:background .15s ease,border-color .15s ease;position:relative;z-index:10}:host([redimensionavel]) .ui-camadas-resizer-altura,:host([redimensionavel-altura]) .ui-camadas-resizer-altura{display:flex}.ui-camadas-resizer-altura:hover,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 9%,transparent);border-top-color:var(--ui-cor-primaria, #00E08A)}.ui-camadas-resizer-grip{width:32px;height:3px;border-radius:2px;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 22%,transparent);transition:all .15s ease}.ui-camadas-resizer-altura:hover .ui-camadas-resizer-grip,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo .ui-camadas-resizer-grip{background:var(--ui-cor-primaria, #00E08A);width:46px;box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 45%,transparent)}:host(.ui-camadas--redimensionando){-webkit-user-select:none!important;user-select:none!important;cursor:ns-resize!important}:host(.ui-camadas--redimensionando) *{-webkit-user-select:none!important;user-select:none!important}.ui-col-lock.ui-lock-open{opacity:.28}.ui-col-lock.ui-lock-open:hover,.ui-col-lock.ui-lock-open:focus-visible{opacity:.8}.ui-col-lock[data-locked-by-layer]{cursor:not-allowed}.ui-col[role=button]:focus-visible,.ui-basemap-card:focus-visible,.ui-feat-row:focus-visible,.ui-layer-row:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:-2px}.ui-footer-btn.confirming{color:var(--ui-cor-botao-destrutivo-texto, #ffffff);background:var(--ui-cor-botao-destrutivo-hover, #b71c1c);width:auto;padding:0 6px}';
1013
- function na(e, o) {
1014
- o.querySelectorAll("[data-layer-row]").forEach((i) => {
1015
- i.addEventListener("click", (r) => {
1016
- if (r.target.closest(
1024
+ const ga = ':host{display:flex;flex-direction:column;box-sizing:border-box;font-family:inherit;font-size:11px;color:var(--ui-cor-texto, #e1e1e6);-webkit-user-select:none;user-select:none;width:100%;height:var(--ui-camadas-altura, 100%);min-height:var(--ui-camadas-min-altura, 140px);position:relative;--camada-linha-altura: 25px;--camada-thumb-tamanho: 20px;--camada-transicao: .16s cubic-bezier(.16, 1, .3, 1)}:host([densidade="compacto"]){--camada-linha-altura: 22px;--camada-thumb-tamanho: 17px;font-size:10px}:host([flutuante]){position:absolute;top:10px;right:10px;bottom:46px;z-index:var(--ui-z-workspace-hud, 500);width:auto;height:var(--ui-camadas-altura, auto)}*,*:before,*:after{box-sizing:border-box}:host(:not([flutuante])) .ui-camadas-container{max-width:100%;min-width:0;border:none;box-shadow:none;border-radius:0;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none}.ui-camadas-container{display:flex;flex-direction:column;flex:1 1 auto;height:100%;min-height:0;width:100%;max-width:380px;min-width:270px;background:var(--ui-cor-superficie, #141417);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));border-radius:var(--ui-raio-borda, 8px);box-shadow:var(--ui-sombra-lg, 0 10px 30px -4px rgba(0, 0, 0, .5)),0 0 0 1px color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 5%,transparent);overflow:hidden;position:relative;transition:transform .24s cubic-bezier(.16,1,.3,1),opacity .2s ease;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}:host([colapsado]) .ui-camadas-container{transform:translate(calc(100% + 24px));opacity:0;pointer-events:none}.ui-camadas-toggle-flutuante{display:none;position:absolute;top:10px;right:10px;z-index:calc(var(--ui-z-workspace-hud, 500) - 1);background:var(--ui-cor-superficie, #141417);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .18));border-radius:var(--ui-raio-borda, 6px);color:var(--ui-cor-texto, #ffffff);width:34px;height:34px;cursor:pointer;align-items:center;justify-content:center;box-shadow:var(--ui-sombra-md, 0 8px 20px rgba(0, 0, 0, .45));transition:all var(--camada-transicao)}:host([colapsado][flutuante]) .ui-camadas-toggle-flutuante{display:flex}.ui-camadas-toggle-flutuante:hover{border-color:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-primaria, #00E08A);transform:scale(1.08);box-shadow:0 0 14px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-camadas-header{height:32px;min-height:32px;max-height:32px;display:flex;align-items:center;justify-content:space-between;padding:0 5px;border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));background:var(--ui-cor-fundo-elevado, rgba(0, 0, 0, .28));gap:4px}.ui-camadas-tabs{display:flex;gap:3px;flex:1}.ui-camadas-tab-btn{flex:1;background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);height:24px;padding:0 6px;font-size:11px;font-weight:500;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:5px;white-space:nowrap;transition:all var(--camada-transicao)}.ui-camadas-tab-btn:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .07))}.ui-camadas-tab-btn.active{color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 25%,transparent);font-weight:600}.ui-camadas-btn-colapsar{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:22px;height:22px;cursor:pointer;border-radius:var(--ui-raio-sm, 4px);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all var(--camada-transicao)}.ui-camadas-btn-colapsar:hover{color:var(--ui-cor-texto, #ffffff);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .09))}.ui-camadas-corpo{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding:6px 6px 4px;display:flex;flex-direction:column;gap:6px;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 16%,transparent) transparent}.ui-camadas-corpo::-webkit-scrollbar{width:4px}.ui-camadas-corpo::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 18%,transparent);border-radius:var(--ui-raio-sm, 4px)}.ui-camadas-corpo::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 32%,transparent)}.ui-tree-toolbar{display:flex;align-items:center;justify-content:space-between;padding:1px 2px 3px;border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .06))}.ui-tree-title-group{display:flex;align-items:center;gap:5px}.ui-tree-section-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-cor-texto-secundario, #888899)}.ui-tree-count-badge{font-size:9px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent);color:var(--ui-cor-texto-secundario, #888899);padding:1px 5px;border-radius:8px;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent)}.ui-tree-actions{display:flex;align-items:center;gap:3px}.ui-tree-action-btn{background:transparent;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));color:var(--ui-cor-texto-secundario, #888899);border-radius:var(--ui-raio-sm, 4px);width:22px;height:22px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-tree-action-btn:hover{color:var(--ui-cor-texto, #ffffff);border-color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .09))}.ui-tree-btn-new{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);border:1px solid color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent);color:var(--ui-cor-primaria, #00E08A);border-radius:var(--ui-raio-sm, 4px);height:22px;padding:0 8px;font-size:10px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-tree-btn-new:hover{background:var(--ui-cor-primaria, #00E08A);color:var(--ui-cor-texto-sobre-primaria, #000000);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-tree-search-wrapper{position:relative;display:flex;align-items:center;margin:1px 0}.ui-tree-search-icon{position:absolute;left:8px;color:var(--ui-cor-texto-secundario, #888899);pointer-events:none;display:flex;align-items:center}.ui-tree-search-input{width:100%;height:25px;background:var(--ui-cor-fundo, #0a0a0c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));border-radius:var(--ui-raio-borda, 5px);padding:0 24px 0 26px;color:var(--ui-cor-texto, #ffffff);font-size:10.5px;outline:none;transition:border-color var(--camada-transicao),box-shadow var(--camada-transicao)}.ui-tree-search-input:focus{border-color:var(--ui-cor-primaria, #00E08A);box-shadow:0 0 0 2px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 18%,transparent)}.ui-tree-search-clear{position:absolute;right:5px;background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);cursor:pointer;width:18px;height:18px;display:flex;align-items:center;justify-content:center;border-radius:3px;transition:all var(--camada-transicao)}.ui-tree-search-clear:hover{color:var(--ui-cor-texto, #ffffff);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 10%,transparent)}.ui-panel-box{background:var(--ui-cor-fundo, #0c0c0f);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));border-radius:var(--ui-raio-borda, 6px);overflow:hidden;display:flex;flex-direction:column;flex:1 1 0%;min-height:80px}.ui-layer-tree{flex:1 1 0%;min-height:40px;overflow-y:auto;overflow-x:hidden}.ui-layer-group{border-bottom:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .04));transition:background var(--camada-transicao)}.ui-layer-group.drop-into{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 9%,transparent)!important;outline:1.5px dashed var(--ui-cor-primaria, #00E08A);outline-offset:-1.5px}.ui-layer-row,.ui-feat-row{display:flex;align-items:center;height:var(--camada-linha-altura);min-height:var(--camada-linha-altura);max-height:var(--camada-linha-altura);padding:0 4px;-webkit-user-select:none;user-select:none;cursor:default;transition:background .1s ease;position:relative}.ui-layer-row{background:var(--ui-cor-fundo-elevado, #18181d);font-weight:600;cursor:pointer;border-left:3px solid transparent}.ui-layer-row:hover{background:var(--ui-cor-hover-menu, #22222a)}.ui-layer-row.active-drawing-layer{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent)!important;border-left:3px solid var(--layer-active-color, var(--ui-cor-primaria, #00E08A))!important;box-shadow:inset 0 0 12px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 7%,transparent)}.ui-layer-row.active-drawing-layer .ui-name-text{color:var(--ui-cor-texto, #e1e1e6);font-weight:700}.ui-feat-row{background:var(--ui-cor-fundo, #101014);font-weight:400;cursor:pointer}.ui-feat-row:hover{background:var(--ui-cor-hover-menu, #19191f)}.ui-feat-row.selected-row{background:color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 18%,transparent)!important;outline:1px solid color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 50%,transparent)!important;outline-offset:-1px}.ui-layer-row.hidden-layer,.ui-feat-row.hidden-row{opacity:.52}.ui-layer-row.hidden-layer .ui-col-eye,.ui-feat-row.hidden-row .ui-col-eye{color:var(--ui-cor-texto-alerta, #ffb86c);opacity:.95}.ui-layer-row.dragging,.ui-feat-row.dragging{opacity:.35;background:color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 16%,transparent)!important}.ui-layer-row.drop-above:before,.ui-feat-row.drop-above:before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:var(--ui-cor-texto-info, #33b5ff);box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 100%,transparent);z-index:20;pointer-events:none}.ui-layer-row.drop-below:after,.ui-feat-row.drop-below:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background:var(--ui-cor-texto-info, #33b5ff);box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 100%,transparent);z-index:20;pointer-events:none}.ui-layer-row.drop-into{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 16%,transparent)!important;outline:1.5px dashed var(--ui-cor-primaria, #00E08A)!important;outline-offset:-2px;border-radius:var(--ui-raio-sm, 4px)}.ui-layer-row.is-sublayer{padding-left:calc(6px + var(--layer-depth, 1) * 16px);background:color-mix(in srgb,var(--ui-cor-fundo-elevado, #18181d) 70%,transparent);border-left:2px solid color-mix(in srgb,var(--layer-active-color, #00E08A) 40%,transparent)}.ui-children-container.is-subchildren{position:relative;margin-left:calc(var(--layer-depth, 0) * 8px);border-left:1px dashed var(--ui-cor-borda, rgba(255, 255, 255, .1))}.ui-group-folder-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--ui-cor-texto-alerta, #ffb86c);margin-right:4px;flex-shrink:0}.ui-group-badge{font-size:8.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;padding:1px 4px;border-radius:3px;background:color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 15%,transparent);color:var(--ui-cor-texto-alerta, #ffb86c);border:1px solid color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 30%,transparent);margin-left:4px;flex-shrink:0}.ui-col{display:flex;align-items:center;justify-content:center;flex-shrink:0;height:var(--camada-linha-altura)}.ui-col-drag{width:14px;cursor:grab;color:var(--ui-cor-texto-secundario, #888899);opacity:.35;touch-action:none;transition:opacity var(--camada-transicao),color var(--camada-transicao)}.ui-layer-row:hover .ui-col-drag,.ui-feat-row:hover .ui-col-drag{opacity:.9;color:var(--ui-cor-primaria, #00E08A)}.ui-col-drag:active{cursor:grabbing}.ui-col-eye{width:20px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);transition:color var(--camada-transicao)}.ui-col-eye:hover{color:var(--ui-cor-primaria, #00E08A)}.ui-col-lock{width:18px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);transition:color var(--camada-transicao)}.ui-col-lock:hover{color:var(--ui-cor-texto-alerta, #ffb86c)}.ui-col-colorbar{width:3.5px;height:16px;margin:0 3px 0 2px;border-radius:1.5px;flex-shrink:0}.ui-col-chevron{width:14px;cursor:pointer;color:var(--ui-cor-texto-secundario, #888899);display:flex;align-items:center;justify-content:center}.ui-chevron-icon{display:inline-flex;align-items:center;justify-content:center;transition:transform var(--camada-transicao)}.ui-chevron-icon.open{transform:rotate(90deg)}.ui-col-branch{width:14px;display:flex;align-items:center;justify-content:center;color:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 22%,transparent);font-size:10px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace)}.ui-col-thumb{width:calc(var(--camada-thumb-tamanho) + 3px);margin-right:4px;display:flex;align-items:center;justify-content:center}.ui-thumb-box{width:var(--camada-thumb-tamanho);height:var(--camada-thumb-tamanho);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 15%,transparent);border-radius:3px;background:var(--ui-cor-fundo, #0d0d10);box-sizing:border-box;overflow:hidden;display:flex;align-items:center;justify-content:center}.ui-col-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;color:var(--ui-cor-texto, #e1e1e6);padding-left:2px;padding-right:4px;cursor:pointer;display:flex;align-items:center;justify-content:flex-start;text-align:left;gap:4px}.ui-name-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-active-badge{font-size:8px;font-weight:700;color:var(--ui-cor-texto-sobre-primaria, #000000);background:var(--ui-cor-primaria, #00E08A);border:1px solid color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 45%,transparent);padding:1px 4px;border-radius:3px;display:inline-flex;align-items:center;gap:2px;white-space:nowrap;flex-shrink:0;animation:pulseBadge 2.8s infinite}@keyframes pulseBadge{0%{opacity:.85}50%{opacity:1;filter:drop-shadow(0 0 4px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 50%,transparent))}to{opacity:.85}}.ui-count-chip{font-size:9px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;color:var(--ui-cor-texto, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent);padding:0 4px;border-radius:8px}.ui-col-actions{display:flex;align-items:center;gap:2px;opacity:0;transition:opacity var(--camada-transicao)}.ui-layer-row:hover .ui-col-actions,.ui-feat-row:hover .ui-col-actions{opacity:1}.ui-micro-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:18px;height:18px;padding:0;border-radius:3px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-micro-btn:hover{color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12))}.ui-micro-btn.active{color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 18%,transparent)}.ui-col-target{width:22px;cursor:pointer}.ui-target-circle{width:11px;height:11px;border-radius:50%;border:1.5px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 32%,transparent);background:transparent;transition:all .12s ease}.ui-col-target:hover .ui-target-circle{border-color:var(--ui-cor-texto-info, #33b5ff);transform:scale(1.18)}.ui-target-circle.selected{border:2px solid var(--ui-cor-texto-info, #33b5ff);background:var(--ui-cor-texto-info, #33b5ff);box-shadow:inset 0 0 0 2px var(--ui-cor-superficie, #141418)}.ui-target-circle.partial{border:2px solid var(--ui-cor-texto-info, #33b5ff);background:color-mix(in srgb,var(--ui-cor-texto-info, #33b5ff) 40%,transparent)}.ui-inline-rename-input{width:100%;height:20px;background:var(--ui-cor-fundo, #0d0d10);color:var(--ui-cor-texto, #e1e1e6);border:1px solid var(--ui-cor-primaria, #00E08A);border-radius:3px;font-size:10.5px;padding:0 4px;outline:none;box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 40%,transparent)}.ui-layer-settings-drawer{background:linear-gradient(180deg,var(--ui-cor-fundo-elevado, #17171e) 0%,var(--ui-cor-superficie, #0f0f13) 100%);padding:10px 14px 12px;border-top:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);border-bottom:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent);border-left:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));display:flex;flex-direction:column;gap:10px;box-shadow:inset 0 1px color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 6%,transparent),0 6px 16px #00000073;animation:drawerSlideDown .18s cubic-bezier(.16,1,.3,1);position:relative;z-index:10}@keyframes drawerSlideDown{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.ui-drawer-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:6px;border-bottom:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent)}.ui-drawer-header-left{display:flex;align-items:center;gap:7px;min-width:0}.ui-drawer-icon{color:var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));display:flex;align-items:center;flex-shrink:0}.ui-drawer-title{font-size:10.5px;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);text-transform:uppercase;letter-spacing:.6px;white-space:nowrap}.ui-drawer-layer-chip{font-size:9.5px;font-weight:500;color:var(--ui-cor-texto-secundario, #888899);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent);padding:1px 6px;border-radius:var(--ui-raio-sm, 4px);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-drawer-btn-fechar{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:20px;height:20px;padding:0;border-radius:var(--ui-raio-sm, 4px);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--camada-transicao)}.ui-drawer-btn-fechar:hover{color:var(--ui-cor-texto, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-body{display:flex;flex-direction:column;gap:10px}.ui-drawer-row{display:flex;flex-direction:column;gap:5px}.ui-drawer-row-label{display:flex;justify-content:space-between;align-items:center;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:var(--ui-cor-texto-secundario, #888899)}.ui-drawer-color-group{display:flex;align-items:center;justify-content:space-between;gap:8px}.ui-drawer-color-pill{position:relative;display:inline-flex;align-items:center;gap:6px;padding:3px 8px 3px 5px;background:var(--ui-cor-fundo, #0b0b0d);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 16%,transparent);border-radius:var(--ui-raio-sm, 4px);cursor:pointer;transition:all var(--camada-transicao);-webkit-user-select:none;user-select:none}.ui-drawer-color-pill:hover{border-color:var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 25%,transparent)}.ui-drawer-color-sample{width:14px;height:14px;border-radius:3px;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 35%,transparent);box-shadow:var(--ui-sombra-sm, 0 1px 3px rgba(0, 0, 0, .5));flex-shrink:0;transition:background-color .1s ease}.ui-drawer-color-hex{font-size:10px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);letter-spacing:.5px}.ui-drawer-color-native{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.ui-drawer-badge{font-size:9.5px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-texto, #e1e1e6);background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 10%,transparent);padding:1px 6px;border-radius:var(--ui-raio-sm, 4px);border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-slider-container{display:flex;flex-direction:column;gap:4px}.ui-drawer-slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:5px;background:linear-gradient(90deg,color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 8%,transparent) 0%,var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A)) 100%);border-radius:3px;outline:none;margin:3px 0;cursor:pointer;border:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 12%,transparent)}.ui-drawer-slider::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:#fff;border:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));box-shadow:0 0 6px #0009,0 0 10px var(--drawer-cor-camada, rgba(0, 224, 138, .6));cursor:pointer;transition:transform .12s ease}.ui-drawer-slider::-webkit-slider-thumb:hover{transform:scale(1.22)}.ui-drawer-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:#fff;border:3px solid var(--drawer-cor-camada, var(--ui-cor-primaria, #00E08A));box-shadow:0 0 6px #0009,0 0 10px var(--drawer-cor-camada, rgba(0, 224, 138, .6));cursor:pointer}.ui-drawer-footer{display:flex;align-items:center;justify-content:space-between;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 7%,transparent)}.ui-drawer-meta-info{font-size:9.5px;color:var(--ui-cor-texto-secundario, #888899);font-style:italic}.ui-drawer-actions{display:flex;align-items:center;gap:6px}.ui-drawer-btn-danger{background:color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 10%,transparent);border:1px solid color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 35%,transparent);color:var(--ui-cor-texto-erro, #ff5555);border-radius:var(--ui-raio-sm, 4px);height:24px;padding:0 10px;font-size:10px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:all var(--camada-transicao)}.ui-drawer-btn-danger:hover{background:var(--ui-cor-botao-destrutivo-fundo, #d32f2f);color:var(--ui-cor-botao-destrutivo-texto, #ffffff);border-color:var(--ui-cor-botao-destrutivo-fundo, #d32f2f);box-shadow:0 0 10px color-mix(in srgb,var(--ui-cor-texto-erro, #ff5555) 45%,transparent);transform:translateY(-.5px)}.ui-drawer-btn-danger.confirming{background:var(--ui-cor-botao-destrutivo-hover, #b71c1c);color:var(--ui-cor-botao-destrutivo-texto, #ffffff);border-color:var(--ui-cor-botao-destrutivo-hover, #b71c1c);animation:pulseDanger 1.2s infinite}@keyframes pulseDanger{0%{transform:scale(1)}50%{transform:scale(1.02)}to{transform:scale(1)}}.ui-geom-tag{font-size:8px;font-weight:700;letter-spacing:.4px;padding:1px 4px;border-radius:3px;margin-left:4px;text-transform:uppercase;flex-shrink:0}.ui-geom-tag.oficial{background:color-mix(in srgb,var(--ui-cor-texto-sucesso, #00E08A) 16%,transparent);color:var(--ui-cor-texto-sucesso, #00E08A);border:1px solid color-mix(in srgb,var(--ui-cor-texto-sucesso, #00E08A) 35%,transparent)}.ui-geom-tag.previa{background:color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 16%,transparent);color:var(--ui-cor-texto-alerta, #ffb86c);border:1px solid color-mix(in srgb,var(--ui-cor-texto-alerta, #ffb86c) 35%,transparent)}.ui-tree-footer{height:32px;min-height:32px;background:var(--ui-cor-fundo-elevado, #121216);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));display:flex;align-items:center;justify-content:space-between;padding:0 8px;gap:6px;box-sizing:border-box;overflow:hidden;position:relative}.ui-footer-left{display:flex;align-items:center;gap:5px;white-space:nowrap;min-width:0;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis}.ui-footer-count{font-size:11px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;font-weight:700;color:var(--ui-cor-primaria, #00E08A);flex-shrink:0}.ui-footer-label{font-size:10px;font-weight:500;color:var(--ui-cor-texto-secundario, #888899);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-footer-metric{font-size:9.5px;font-family:var(--ui-fonte-codigo, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;color:var(--ui-cor-primaria, #00E08A);display:inline-flex;align-items:center;gap:3px;white-space:nowrap;background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);padding:1px 5px;border-radius:3px;border:1px solid color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 24%,transparent);flex-shrink:0}.ui-footer-actions-gerais{display:flex;align-items:center;gap:4px;flex-shrink:0}.ui-footer-chip-btn{background:#ffffff0a;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .1));color:var(--ui-cor-texto-secundario, #a0a0b0);font-size:10px;font-weight:600;height:22px;padding:0 7px;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-footer-chip-btn:hover{background:#ffffff1a;color:var(--ui-cor-texto, #ffffff);border-color:#fff3}.ui-footer-chip-btn.primario{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);border-color:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 32%,transparent);color:var(--ui-cor-primaria, #00E08A)}.ui-footer-chip-btn.primario:hover{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 22%,transparent);border-color:var(--ui-cor-primaria, #00E08A);color:#fff}.ui-footer-right{display:flex;align-items:center;gap:3px;flex-shrink:0}.ui-footer-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:22px;height:22px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all var(--camada-transicao);flex-shrink:0}.ui-footer-btn:hover:not(.disabled){color:var(--ui-cor-texto, #e1e1e6);background:var(--ui-cor-hover-menu, rgba(255, 255, 255, .12))}.ui-footer-btn.disabled{opacity:.25;cursor:not-allowed}.ui-footer-btn.btn-danger-footer:hover:not(.disabled){color:#f55;background:#ff555526}.ui-footer-btn.confirming{background:#f55!important;color:#fff!important}.ui-footer-btn.btn-clear-footer{color:var(--ui-cor-texto-secundario, #888899);margin-left:2px}.ui-footer-btn.btn-clear-footer:hover{color:#fff;background:#ffffff1f}.ui-footer-color-wrapper{position:relative;display:flex;align-items:center;justify-content:center;width:18px;height:18px;cursor:pointer;flex-shrink:0}.ui-footer-color-preview{width:14px;height:14px;border-radius:50%;border:1.5px solid rgba(255,255,255,.35);box-shadow:0 0 4px #0006;pointer-events:none;transition:transform .15s ease,border-color .15s ease}.ui-footer-color-wrapper:hover .ui-footer-color-preview{transform:scale(1.15);border-color:#fff}.ui-footer-color{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer;padding:0;margin:0;border:none}.ui-footer-move-wrapper{position:relative;display:flex;align-items:center;max-width:95px;flex-shrink:0}.ui-footer-select{background:var(--ui-cor-fundo, #16161c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #e1e1e6);border-radius:4px;font-size:10px;height:22px;padding:0 4px;cursor:pointer;max-width:95px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-footer-select:hover:not(:disabled){border-color:#ffffff40}.ui-footer-select:focus{outline:none;border-color:var(--ui-cor-primaria, #00E08A)}.ui-tree-btn-group{background:#ffffff0a;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto-secundario, #a0a0b0);border-radius:var(--ui-raio-sm, 4px);height:22px;padding:0 7px;font-size:10px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-tree-btn-group:hover{background:#ffffff1a;color:var(--ui-cor-texto, #ffffff);border-color:#ffffff40}.ui-drawer-btn-sublayer{background:#ffffff0f;border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #e1e1e6);font-size:10.5px;font-weight:500;padding:4px 8px;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:all var(--camada-transicao)}.ui-drawer-btn-sublayer:hover{background:#ffffff1f;color:var(--ui-cor-primaria, #00E08A);border-color:var(--ui-cor-primaria, #00E08A)}.ui-drawer-select-wrapper{display:flex;align-items:center}.ui-drawer-select{background:var(--ui-cor-fundo, #16161c);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .15));color:var(--ui-cor-texto, #e1e1e6);border-radius:4px;font-size:10.5px;height:24px;padding:0 6px;cursor:pointer;max-width:140px}.ui-basemap-section{display:flex;flex-direction:column;gap:4px;flex-shrink:0}.ui-basemap-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:4px}.ui-basemap-card{display:flex;flex-direction:column;align-items:center;gap:2px;padding:3px;border-radius:var(--ui-raio-borda, 5px);background:var(--ui-cor-fundo, #101014);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:pointer;transition:all var(--camada-transicao);text-align:center;overflow:hidden}.ui-basemap-card:hover{border-color:var(--ui-cor-primaria, #00E08A);background:var(--ui-cor-fundo-elevado, #17171c)}.ui-basemap-card.active{border-color:var(--ui-cor-primaria, #00E08A);background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 12%,transparent);color:var(--ui-cor-primaria, #00E08A);font-weight:600;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 35%,transparent)}.ui-basemap-preview{width:100%;height:22px;border-radius:3px;object-fit:cover;opacity:.85;transition:opacity var(--camada-transicao)}.ui-basemap-preview-none{width:100%;height:22px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 4%,transparent);border-radius:3px;color:var(--ui-cor-texto-secundario, #888899)}.ui-basemap-card:hover .ui-basemap-preview,.ui-basemap-card.active .ui-basemap-preview{opacity:1}.ui-basemap-card span{font-size:9.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.ui-search-hidden{display:none!important}.ui-empty-row{height:22px;display:flex;align-items:center;padding-left:36px;font-size:10px;color:var(--ui-cor-texto-secundario, #666677);font-style:italic;background:var(--ui-cor-fundo-recuado, rgba(0, 0, 0, .15))}.ui-camadas-resizer-altura{display:none;flex-shrink:0;width:100%;height:9px;background:var(--ui-cor-superficie, #141417);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));cursor:ns-resize;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;touch-action:none;transition:background .15s ease,border-color .15s ease;position:relative;z-index:10}:host([redimensionavel]) .ui-camadas-resizer-altura,:host([redimensionavel-altura]) .ui-camadas-resizer-altura{display:flex}.ui-camadas-resizer-altura:hover,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo{background:color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 9%,transparent);border-top-color:var(--ui-cor-primaria, #00E08A)}.ui-camadas-resizer-grip{width:32px;height:3px;border-radius:2px;background:color-mix(in srgb,var(--ui-cor-texto, #e1e1e6) 22%,transparent);transition:all .15s ease}.ui-camadas-resizer-altura:hover .ui-camadas-resizer-grip,.ui-camadas-resizer-altura.ui-camadas-resizer--ativo .ui-camadas-resizer-grip{background:var(--ui-cor-primaria, #00E08A);width:46px;box-shadow:0 0 8px color-mix(in srgb,var(--ui-cor-primaria, #00E08A) 45%,transparent)}:host(.ui-camadas--redimensionando){-webkit-user-select:none!important;user-select:none!important;cursor:ns-resize!important}:host(.ui-camadas--redimensionando) *{-webkit-user-select:none!important;user-select:none!important}.ui-col-lock.ui-lock-open{opacity:.28}.ui-col-lock.ui-lock-open:hover,.ui-col-lock.ui-lock-open:focus-visible{opacity:.8}.ui-col-lock[data-locked-by-layer]{cursor:not-allowed}.ui-col[role=button]:focus-visible,.ui-basemap-card:focus-visible,.ui-feat-row:focus-visible,.ui-layer-row:focus-visible{outline:2px solid var(--ui-cor-primaria, #00E08A);outline-offset:-2px}.ui-footer-btn.confirming{color:var(--ui-cor-botao-destrutivo-texto, #ffffff);background:var(--ui-cor-botao-destrutivo-hover, #b71c1c);width:auto;padding:0 6px}';
1025
+ function va(e, r) {
1026
+ r.querySelectorAll("[data-layer-row]").forEach((t) => {
1027
+ t.addEventListener("click", (o) => {
1028
+ if (o.target.closest(
1017
1029
  "[data-layer-eye], [data-layer-lock], [data-layer-expand], [data-layer-target], [data-layer-fit], [data-layer-settings], input, button"
1018
1030
  ))
1019
1031
  return;
1020
- const s = i.getAttribute("data-layer-row");
1032
+ const s = t.getAttribute("data-layer-row");
1021
1033
  s && e.definirCamadaAtiva(s, !0);
1022
1034
  });
1023
- }), o.querySelectorAll("[data-layer-expand]").forEach((i) => {
1024
- i.addEventListener("click", (r) => {
1025
- r.stopPropagation();
1026
- const n = i.getAttribute("data-layer-expand");
1035
+ }), r.querySelectorAll("[data-layer-expand]").forEach((t) => {
1036
+ t.addEventListener("click", (o) => {
1037
+ o.stopPropagation();
1038
+ const n = t.getAttribute("data-layer-expand");
1027
1039
  if (!n) return;
1028
1040
  e.expandedLayers.has(n) ? e.expandedLayers.delete(n) : e.expandedLayers.add(n);
1029
- const s = i.closest(".ui-layer-group"), l = i.querySelector(".ui-chevron-icon"), c = e.expandedLayers.has(n);
1041
+ const s = t.closest(".ui-layer-group"), l = t.querySelector(".ui-chevron-icon"), c = e.expandedLayers.has(n);
1030
1042
  if (l && l.classList.toggle("open", c), s) {
1031
- const f = s.querySelector(".ui-children-container");
1032
- f && (f.style.display = c ? "block" : "none");
1043
+ const d = s.querySelector(".ui-children-container");
1044
+ d && (d.style.display = c ? "block" : "none");
1033
1045
  }
1034
1046
  e.salvarLembrancaEstado();
1035
1047
  });
1036
- }), o.querySelectorAll("[data-layer-eye]").forEach((i) => {
1037
- i.addEventListener("click", (r) => {
1038
- r.stopPropagation();
1039
- const n = i.getAttribute("data-layer-eye"), s = e.camadas.find((l) => l.id === n);
1048
+ }), r.querySelectorAll("[data-layer-eye]").forEach((t) => {
1049
+ t.addEventListener("click", (o) => {
1050
+ o.stopPropagation();
1051
+ const n = t.getAttribute("data-layer-eye"), s = e.camadas.find((l) => l.id === n);
1040
1052
  if (s) {
1041
1053
  s.visible = s.visible === !1;
1042
1054
  const l = s.visible !== !1;
1043
- i.innerHTML = l ? g.olhoAberto : g.olhoFechado, q(i, l ? "Ocultar Camada" : "Exibir Camada");
1044
- const c = i.closest(".ui-layer-row");
1045
- c && c.classList.toggle("hidden-layer", !l), sa(e, o), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-visibilidade", {
1055
+ t.innerHTML = l ? b.olhoAberto : b.olhoFechado, T(t, l ? "Ocultar Camada" : "Exibir Camada");
1056
+ const c = t.closest(".ui-layer-row");
1057
+ c && c.classList.toggle("hidden-layer", !l), ba(e, r), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-visibilidade", {
1046
1058
  camadaId: s.id,
1047
1059
  visivel: l
1048
1060
  });
1049
1061
  }
1050
1062
  });
1051
- }), o.querySelectorAll("[data-layer-lock]").forEach((i) => {
1052
- i.addEventListener("click", (r) => {
1053
- r.stopPropagation();
1054
- const n = i.getAttribute("data-layer-lock"), s = e.camadas.find((l) => l.id === n);
1055
- s && (s.locked = !s.locked, i.innerHTML = s.locked ? g.cadeadoTrancado : g.cadeadoAberto, i.classList.toggle("ui-lock-open", !s.locked), q(i, s.locked ? "Desbloquear Camada" : "Bloquear Camada"), la(e, o, s.id, s.locked === !0), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-bloqueio", {
1063
+ }), r.querySelectorAll("[data-layer-lock]").forEach((t) => {
1064
+ t.addEventListener("click", (o) => {
1065
+ o.stopPropagation();
1066
+ const n = t.getAttribute("data-layer-lock"), s = e.camadas.find((l) => l.id === n);
1067
+ s && (s.locked = !s.locked, t.innerHTML = s.locked ? b.cadeadoTrancado : b.cadeadoAberto, t.classList.toggle("ui-lock-open", !s.locked), T(t, s.locked ? "Desbloquear Camada" : "Bloquear Camada"), ha(e, r, s.id, s.locked === !0), e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-bloqueio", {
1056
1068
  camadaId: s.id,
1057
1069
  bloqueado: s.locked
1058
1070
  }));
1059
1071
  });
1060
- }), o.querySelectorAll("[data-layer-fit]").forEach((i) => {
1061
- i.addEventListener("click", (r) => {
1062
- r.stopPropagation();
1063
- const n = i.getAttribute("data-layer-fit");
1072
+ }), r.querySelectorAll("[data-layer-fit]").forEach((t) => {
1073
+ t.addEventListener("click", (o) => {
1074
+ o.stopPropagation();
1075
+ const n = t.getAttribute("data-layer-fit");
1064
1076
  n && e.dispararEvento("ui-camada-enquadrar", { camadaId: n });
1065
1077
  });
1066
- }), o.querySelectorAll("[data-layer-settings]").forEach((i) => {
1067
- i.addEventListener("click", (r) => {
1068
- r.stopPropagation();
1069
- const n = i.getAttribute("data-layer-settings");
1078
+ }), r.querySelectorAll("[data-layer-settings]").forEach((t) => {
1079
+ t.addEventListener("click", (o) => {
1080
+ o.stopPropagation();
1081
+ const n = t.getAttribute("data-layer-settings");
1070
1082
  e.activeSettingsLayerId = e.activeSettingsLayerId === n ? null : n, e.solicitarRenderizacao();
1071
1083
  });
1072
- }), o.querySelectorAll("[data-layer-settings-close]").forEach((i) => {
1073
- i.addEventListener("click", (r) => {
1074
- r.stopPropagation(), e.activeSettingsLayerId = null, e.solicitarRenderizacao();
1084
+ }), r.querySelectorAll("[data-layer-settings-close]").forEach((t) => {
1085
+ t.addEventListener("click", (o) => {
1086
+ o.stopPropagation(), e.activeSettingsLayerId = null, e.solicitarRenderizacao();
1075
1087
  });
1076
1088
  });
1077
- const a = (i, r, n) => {
1078
- const s = e.camadas.find((d) => d.id === i);
1089
+ const a = (t, o, n) => {
1090
+ const s = e.camadas.find((f) => f.id === t);
1079
1091
  if (!s) return;
1080
- const l = V(r, s.color || "#00E08A");
1092
+ const l = Y(o, s.color || "#00E08A");
1081
1093
  s.color = l;
1082
- const c = o.getElementById(`sample-color-${i}`);
1094
+ const c = r.getElementById(`sample-color-${t}`);
1083
1095
  c && (c.style.backgroundColor = l);
1084
- const f = o.getElementById(`hex-color-${i}`);
1085
- f && (f.textContent = l.toUpperCase());
1086
- const u = o.getElementById(`settings-drawer-${i}`);
1096
+ const d = r.getElementById(`hex-color-${t}`);
1097
+ d && (d.textContent = l.toUpperCase());
1098
+ const u = r.getElementById(`settings-drawer-${t}`);
1087
1099
  u && u.style.setProperty("--drawer-cor-camada", l);
1088
- const p = B(o, "data-layer-row", i);
1100
+ const p = P(r, "data-layer-row", t);
1089
1101
  if (p) {
1090
1102
  p.style.setProperty("--layer-active-color", l);
1091
- const d = p.querySelector(".ui-col-colorbar");
1092
- d && (d.style.backgroundColor = l);
1103
+ const f = p.querySelector(".ui-col-colorbar");
1104
+ f && (f.style.backgroundColor = l);
1093
1105
  }
1094
1106
  n ? e.salvarLembrancaEstado() : e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-cor", { camadaId: s.id, cor: l });
1095
1107
  };
1096
- o.querySelectorAll("[data-layer-color-picker]").forEach((i) => {
1097
- const r = i, n = (s) => (l) => {
1098
- const c = r.getAttribute("data-layer-color-picker");
1108
+ r.querySelectorAll("[data-layer-color-picker]").forEach((t) => {
1109
+ const o = t, n = (s) => (l) => {
1110
+ const c = o.getAttribute("data-layer-color-picker");
1099
1111
  if (!c) return;
1100
- const f = l.target.value;
1101
- a(c, f, s);
1112
+ const d = l.target.value;
1113
+ a(c, d, s);
1102
1114
  };
1103
- r.addEventListener("input", n(!1)), r.addEventListener("change", n(!0));
1115
+ o.addEventListener("input", n(!1)), o.addEventListener("change", n(!0));
1104
1116
  });
1105
- const t = (i, r) => {
1106
- const n = e.camadas.find((c) => c.id === i);
1117
+ const i = (t, o) => {
1118
+ const n = e.camadas.find((c) => c.id === t);
1107
1119
  if (!n) return;
1108
- n.opacity = r;
1109
- const s = o.getElementById(`badge-op-${i}`);
1110
- s && (s.textContent = `${Math.round(r * 100)}%`);
1111
- const l = B(o, "data-layer-opacity-slider", i);
1112
- l && parseFloat(l.value) !== r && (l.value = String(r)), e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-opacidade", { camadaId: n.id, opacidade: r });
1120
+ n.opacity = o;
1121
+ const s = r.getElementById(`badge-op-${t}`);
1122
+ s && (s.textContent = `${Math.round(o * 100)}%`);
1123
+ const l = P(r, "data-layer-opacity-slider", t);
1124
+ l && parseFloat(l.value) !== o && (l.value = String(o)), e.agendarSalvarLembranca(), e.dispararEvento("ui-camada-opacidade", { camadaId: n.id, opacidade: o });
1113
1125
  };
1114
- o.querySelectorAll("[data-layer-opacity-slider]").forEach((i) => {
1115
- i.addEventListener("input", (r) => {
1116
- const n = i.getAttribute("data-layer-opacity-slider");
1126
+ r.querySelectorAll("[data-layer-opacity-slider]").forEach((t) => {
1127
+ t.addEventListener("input", (o) => {
1128
+ const n = t.getAttribute("data-layer-opacity-slider");
1117
1129
  if (!n) return;
1118
- const s = parseFloat(r.target.value);
1119
- t(n, s);
1130
+ const s = parseFloat(o.target.value);
1131
+ i(n, s);
1120
1132
  });
1121
- }), o.querySelectorAll("[data-delete-layer]").forEach((i) => {
1122
- let r = null;
1123
- i.addEventListener("click", (n) => {
1133
+ }), r.querySelectorAll("[data-delete-layer]").forEach((t) => {
1134
+ let o = null;
1135
+ t.addEventListener("click", (n) => {
1124
1136
  n.stopPropagation();
1125
- const s = i.getAttribute("data-delete-layer");
1137
+ const s = t.getAttribute("data-delete-layer");
1126
1138
  if (!s) return;
1127
- if (i.classList.contains("confirming")) {
1128
- r && clearTimeout(r), e.dispararEvento("ui-camada-excluida", { camadaId: s });
1139
+ if (t.classList.contains("confirming")) {
1140
+ o && clearTimeout(o), e.dispararEvento("ui-camada-excluida", { camadaId: s });
1129
1141
  const c = e.selectedFeatureIds.size;
1130
- e.camadas.forEach((f) => {
1131
- f.parentId === s && (f.parentId = null);
1142
+ e.camadas.forEach((d) => {
1143
+ d.parentId === s && (d.parentId = null);
1132
1144
  }), e.removerCamada(s), e.selectedFeatureIds.size !== c && e.notificarMudancaSelecao();
1133
1145
  } else {
1134
- i.classList.add("confirming");
1135
- const c = i.querySelector(".ui-btn-label");
1136
- c && (c.textContent = "Confirmar Exclusão?"), r = setTimeout(() => {
1137
- i.classList.remove("confirming"), c && (c.textContent = "Excluir Camada");
1146
+ t.classList.add("confirming");
1147
+ const c = t.querySelector(".ui-btn-label");
1148
+ c && (c.textContent = "Confirmar Exclusão?"), o = setTimeout(() => {
1149
+ t.classList.remove("confirming"), c && (c.textContent = "Excluir Camada");
1138
1150
  }, 3500);
1139
1151
  }
1140
1152
  });
1141
- }), o.querySelectorAll("[data-layer-parent-select]").forEach((i) => {
1142
- i.addEventListener("change", (r) => {
1143
- const n = r.target, s = n.getAttribute("data-layer-parent-select"), l = n.value || null, c = e.camadas.find((f) => f.id === s);
1153
+ }), r.querySelectorAll("[data-layer-parent-select]").forEach((t) => {
1154
+ t.addEventListener("change", (o) => {
1155
+ const n = o.target, s = n.getAttribute("data-layer-parent-select"), l = n.value || null, c = e.camadas.find((d) => d.id === s);
1144
1156
  c && (c.parentId = l, e.salvarLembrancaEstado(), e.dispararEvento("ui-camada-mover-hierarquia", {
1145
1157
  camadaId: c.id,
1146
1158
  novoParentId: l,
1147
1159
  camada: c
1148
1160
  }), e.solicitarRenderizacao());
1149
1161
  });
1150
- }), o.querySelectorAll("[data-add-sublayer]").forEach((i) => {
1151
- i.addEventListener("click", (r) => {
1152
- r.stopPropagation();
1153
- const n = i.getAttribute("data-add-sublayer");
1162
+ }), r.querySelectorAll("[data-add-sublayer]").forEach((t) => {
1163
+ t.addEventListener("click", (o) => {
1164
+ o.stopPropagation();
1165
+ const n = t.getAttribute("data-add-sublayer");
1154
1166
  e.dispararEvento("ui-camada-adicionar", { parentId: n });
1155
1167
  });
1156
- }), o.querySelectorAll("[data-layer-target]").forEach((i) => {
1157
- i.addEventListener("click", (r) => {
1158
- r.stopPropagation();
1159
- const n = r, s = i.getAttribute("data-layer-target"), l = U(
1160
- e.feicoes.filter((f) => f.layerId === s),
1168
+ }), r.querySelectorAll("[data-layer-target]").forEach((t) => {
1169
+ t.addEventListener("click", (o) => {
1170
+ o.stopPropagation();
1171
+ const n = o, s = t.getAttribute("data-layer-target"), l = _(
1172
+ e.feicoes.filter((d) => d.layerId === s),
1161
1173
  e.searchQuery
1162
1174
  );
1163
1175
  if (l.length === 0) return;
1164
- l.every((f) => e.selectedFeatureIds.has(f.id)) ? l.forEach((f) => e.selectedFeatureIds.delete(f.id)) : (!n.ctrlKey && !n.metaKey && e.selectedFeatureIds.clear(), l.forEach((f) => e.selectedFeatureIds.add(f.id))), e.lastClickedFeatureId = l[l.length - 1].id, e.sincronizarSelecaoDOM(), e.notificarMudancaSelecao();
1176
+ 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();
1165
1177
  });
1166
1178
  });
1167
1179
  }
1168
- function sa(e, o) {
1169
- const a = o.getElementById("btn-toggle-all-vis");
1180
+ function ba(e, r) {
1181
+ const a = r.getElementById("btn-toggle-all-vis");
1170
1182
  if (!a) return;
1171
- const t = e.camadas.every((i) => i.visible !== !1);
1172
- a.innerHTML = t ? g.olhoAberto : g.olhoFechado, q(a, t ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas");
1173
- }
1174
- function la(e, o, a, t) {
1175
- e.feicoes.filter((i) => i.layerId === a).forEach((i) => {
1176
- const r = B(o, "data-feat-lock", i.id);
1177
- if (!r) return;
1178
- const n = i.locked === !0 || t;
1179
- r.innerHTML = n ? g.cadeadoTrancado : g.cadeadoAberto, r.classList.toggle("ui-lock-open", !n), t ? r.setAttribute("data-locked-by-layer", "true") : r.removeAttribute("data-locked-by-layer"), q(
1180
- r,
1181
- t ? "Bloqueada pela camada" : n ? "Desbloquear Feição" : "Bloquear Feição"
1183
+ const i = e.camadas.every((t) => t.visible !== !1);
1184
+ a.innerHTML = i ? b.olhoAberto : b.olhoFechado, T(a, i ? "Ocultar Todas as Camadas" : "Exibir Todas as Camadas");
1185
+ }
1186
+ function ha(e, r, a, i) {
1187
+ e.feicoes.filter((t) => t.layerId === a).forEach((t) => {
1188
+ const o = P(r, "data-feat-lock", t.id);
1189
+ if (!o) return;
1190
+ const n = t.locked === !0 || i;
1191
+ 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"), T(
1192
+ o,
1193
+ i ? "Bloqueada pela camada" : n ? "Desbloquear Feição" : "Bloquear Feição"
1182
1194
  );
1183
1195
  });
1184
1196
  }
1185
- function ca(e, o) {
1186
- const a = o.getElementById("btn-footer-vis");
1197
+ function xa(e, r) {
1198
+ const a = r.getElementById("btn-footer-vis");
1187
1199
  a && a.addEventListener("click", () => {
1188
1200
  const u = e.feicoes.filter((m) => e.selectedFeatureIds.has(m.id));
1189
1201
  if (u.length === 0) return;
1190
- const d = !u.some((m) => m.visible !== !1);
1191
- u.forEach((m) => m.visible = d), e.dispararEvento("ui-acao-massa", {
1202
+ const f = !u.some((m) => m.visible !== !1);
1203
+ u.forEach((m) => m.visible = f), e.dispararEvento("ui-acao-massa", {
1192
1204
  acao: "visibilidade",
1193
1205
  feicoesIds: u.map((m) => m.id),
1194
1206
  feicoes: u,
1195
- valor: d
1207
+ valor: f
1196
1208
  }), e.solicitarRenderizacao();
1197
1209
  });
1198
- const t = o.getElementById("btn-footer-lock");
1199
- t && t.addEventListener("click", () => {
1210
+ const i = r.getElementById("btn-footer-lock");
1211
+ i && i.addEventListener("click", () => {
1200
1212
  const u = e.feicoes.filter((m) => e.selectedFeatureIds.has(m.id));
1201
1213
  if (u.length === 0) return;
1202
- const d = !u.some((m) => m.locked === !0);
1203
- u.forEach((m) => m.locked = d), e.dispararEvento("ui-acao-massa", {
1214
+ const f = !u.some((m) => m.locked === !0);
1215
+ u.forEach((m) => m.locked = f), e.dispararEvento("ui-acao-massa", {
1204
1216
  acao: "bloqueio",
1205
1217
  feicoesIds: u.map((m) => m.id),
1206
1218
  feicoes: u,
1207
- valor: d
1219
+ valor: f
1208
1220
  }), e.solicitarRenderizacao();
1209
1221
  });
1210
- const i = o.getElementById("input-footer-color"), r = o.getElementById("preview-footer-color");
1211
- i && (i.addEventListener("input", (u) => {
1222
+ const t = r.getElementById("input-footer-color"), o = r.getElementById("preview-footer-color");
1223
+ t && (t.addEventListener("input", (u) => {
1212
1224
  const p = u.target.value;
1213
- r && (r.style.backgroundColor = p);
1214
- }), i.addEventListener("change", (u) => {
1225
+ o && (o.style.backgroundColor = p);
1226
+ }), t.addEventListener("change", (u) => {
1215
1227
  const p = u.target.value;
1216
- r && (r.style.backgroundColor = p);
1217
- const d = e.feicoes.filter((m) => e.selectedFeatureIds.has(m.id));
1218
- d.length !== 0 && (d.forEach((m) => {
1228
+ o && (o.style.backgroundColor = p);
1229
+ const f = e.feicoes.filter((m) => e.selectedFeatureIds.has(m.id));
1230
+ f.length !== 0 && (f.forEach((m) => {
1219
1231
  m.color = p, m.style = { ...m.style || {}, fillColor: p, strokeColor: p };
1220
1232
  }), e.dispararEvento("ui-acao-massa", {
1221
1233
  acao: "cor",
1222
- feicoesIds: d.map((m) => m.id),
1223
- feicoes: d,
1234
+ feicoesIds: f.map((m) => m.id),
1235
+ feicoes: f,
1224
1236
  valor: p
1225
1237
  }), e.solicitarRenderizacao());
1226
1238
  }));
1227
- const n = o.getElementById("select-footer-move");
1239
+ const n = r.getElementById("select-footer-move");
1228
1240
  n && n.addEventListener("change", (u) => {
1229
1241
  const p = u.target.value;
1230
1242
  if (!p) return;
1231
- const d = e.feicoes.filter((h) => e.selectedFeatureIds.has(h.id));
1232
- if (d.length === 0) return;
1233
- const m = new Map(d.map((h) => [h.id, h.layerId]));
1234
- d.forEach((h) => h.layerId = p), d.forEach((h) => {
1235
- m.get(h.id) !== p && e.dispararEvento("ui-feicao-movida", {
1236
- feicaoId: h.id,
1237
- camadaOrigemId: m.get(h.id),
1243
+ const f = e.feicoes.filter((g) => e.selectedFeatureIds.has(g.id));
1244
+ if (f.length === 0) return;
1245
+ const m = new Map(f.map((g) => [g.id, g.layerId]));
1246
+ f.forEach((g) => g.layerId = p), f.forEach((g) => {
1247
+ m.get(g.id) !== p && e.dispararEvento("ui-feicao-movida", {
1248
+ feicaoId: g.id,
1249
+ camadaOrigemId: m.get(g.id),
1238
1250
  camadaDestinoId: p,
1239
- feicao: h
1251
+ feicao: g
1240
1252
  });
1241
1253
  }), e.dispararEvento("ui-acao-massa", {
1242
1254
  acao: "mover",
1243
- feicoesIds: d.map((h) => h.id),
1244
- feicoes: d,
1255
+ feicoesIds: f.map((g) => g.id),
1256
+ feicoes: f,
1245
1257
  valor: p
1246
1258
  }), e.solicitarRenderizacao();
1247
1259
  });
1248
- const s = o.getElementById("btn-footer-new-layer");
1260
+ const s = r.getElementById("btn-footer-new-layer");
1249
1261
  s && s.addEventListener("click", () => {
1250
1262
  e.dispararEvento("ui-camada-adicionar", {});
1251
1263
  });
1252
- const l = o.getElementById("btn-footer-new-group");
1264
+ const l = r.getElementById("btn-footer-new-group");
1253
1265
  l && l.addEventListener("click", () => {
1254
1266
  e.dispararEvento("ui-camada-grupo-adicionar", { isGroup: !0 });
1255
1267
  });
1256
- const c = o.getElementById("btn-footer-del");
1268
+ const c = r.getElementById("btn-footer-del");
1257
1269
  if (c) {
1258
1270
  let u = null;
1259
1271
  const p = "Excluir selecionados";
1260
1272
  c.addEventListener("click", () => {
1261
- const d = Array.from(e.selectedFeatureIds);
1262
- if (d.length === 0) return;
1273
+ const f = Array.from(e.selectedFeatureIds);
1274
+ if (f.length === 0) return;
1263
1275
  if (!c.classList.contains("confirming")) {
1264
- c.classList.add("confirming"), q(c, `Clique novamente para excluir ${d.length} selecionado(s)`), u = setTimeout(() => {
1265
- c.classList.remove("confirming"), q(c, p);
1276
+ c.classList.add("confirming"), T(c, `Clique novamente para excluir ${f.length} selecionado(s)`), u = setTimeout(() => {
1277
+ c.classList.remove("confirming"), T(c, p);
1266
1278
  }, 3500);
1267
1279
  return;
1268
1280
  }
1269
1281
  u && clearTimeout(u);
1270
- const m = e.feicoes.filter((h) => e.selectedFeatureIds.has(h.id));
1271
- e.feicoes = e.feicoes.filter((h) => !e.selectedFeatureIds.has(h.id)), e.selectedFeatureIds.clear(), e.lastClickedFeatureId = null, e.dispararEvento("ui-acao-massa", {
1282
+ const m = e.feicoes.filter((g) => e.selectedFeatureIds.has(g.id));
1283
+ e.feicoes = e.feicoes.filter((g) => !e.selectedFeatureIds.has(g.id)), e.selectedFeatureIds.clear(), e.lastClickedFeatureId = null, e.dispararEvento("ui-acao-massa", {
1272
1284
  acao: "excluir",
1273
- feicoesIds: d,
1285
+ feicoesIds: f,
1274
1286
  feicoes: m
1275
1287
  }), e.notificarMudancaSelecao(), e.solicitarRenderizacao();
1276
1288
  });
1277
1289
  }
1278
- const f = o.getElementById("btn-footer-clear");
1279
- f && f.addEventListener("click", () => e.limparSelecao(!0));
1290
+ const d = r.getElementById("btn-footer-clear");
1291
+ d && d.addEventListener("click", () => e.limparSelecao(!0));
1280
1292
  }
1281
- const da = [
1293
+ const ya = [
1282
1294
  { tipo: "olho", atributo: "data-layer-eye", entidade: "camada" },
1283
1295
  { tipo: "olho", atributo: "data-feat-eye", entidade: "feicao" },
1284
1296
  { tipo: "cadeado", atributo: "data-layer-lock", entidade: "camada" },
@@ -1289,328 +1301,502 @@ const da = [
1289
1301
  olho: "[data-layer-eye], [data-feat-eye]",
1290
1302
  cadeado: "[data-layer-lock], [data-feat-lock]",
1291
1303
  selecao: "[data-layer-target], [data-feat-target]"
1292
- }, ua = 3;
1293
- function pa(e) {
1294
- return da.find((o) => e.hasAttribute(o.atributo)) ?? null;
1304
+ }, wa = 3;
1305
+ function Ea(e) {
1306
+ return ya.find((r) => e.hasAttribute(r.atributo)) ?? null;
1295
1307
  }
1296
- function ae(e, o) {
1297
- const a = pa(o);
1308
+ function ae(e, r) {
1309
+ const a = Ea(r);
1298
1310
  if (!a) return null;
1299
- const t = o.getAttribute(a.atributo);
1300
- if (!t) return null;
1311
+ const i = r.getAttribute(a.atributo);
1312
+ if (!i) return null;
1301
1313
  if (a.tipo === "olho") {
1302
- const r = a.entidade === "camada" ? e.camadas.find((n) => n.id === t) : e.feicoes.find((n) => n.id === t);
1303
- return r ? r.visible !== !1 : null;
1314
+ const o = a.entidade === "camada" ? e.camadas.find((n) => n.id === i) : e.feicoes.find((n) => n.id === i);
1315
+ return o ? o.visible !== !1 : null;
1304
1316
  }
1305
1317
  if (a.tipo === "cadeado") {
1306
- if (o.hasAttribute("data-locked-by-layer")) return null;
1307
- const r = a.entidade === "camada" ? e.camadas.find((n) => n.id === t) : e.feicoes.find((n) => n.id === t);
1308
- return r ? r.locked === !0 : null;
1318
+ if (r.hasAttribute("data-locked-by-layer")) return null;
1319
+ const o = a.entidade === "camada" ? e.camadas.find((n) => n.id === i) : e.feicoes.find((n) => n.id === i);
1320
+ return o ? o.locked === !0 : null;
1309
1321
  }
1310
- if (a.entidade === "feicao") return e.selectedFeatureIds.has(t);
1311
- const i = U(
1312
- e.feicoes.filter((r) => r.layerId === t),
1322
+ if (a.entidade === "feicao") return e.selectedFeatureIds.has(i);
1323
+ const t = _(
1324
+ e.feicoes.filter((o) => o.layerId === i),
1313
1325
  e.searchQuery
1314
1326
  );
1315
- return i.length === 0 ? null : i.every((r) => e.selectedFeatureIds.has(r.id));
1327
+ return t.length === 0 ? null : t.every((o) => e.selectedFeatureIds.has(o.id));
1316
1328
  }
1317
- function he(e, o, a = !1) {
1329
+ function ve(e, r, a = !1) {
1318
1330
  e.dispatchEvent(
1319
1331
  new MouseEvent("click", {
1320
1332
  bubbles: !0,
1321
1333
  cancelable: !0,
1322
- ctrlKey: o,
1334
+ ctrlKey: r,
1323
1335
  shiftKey: a
1324
1336
  })
1325
1337
  );
1326
1338
  }
1327
- function fa(e, o) {
1339
+ let z = null;
1340
+ function Aa(e) {
1341
+ (z == null ? void 0 : z.host) === e && z.cancelar();
1342
+ }
1343
+ function ka(e, r) {
1328
1344
  Object.keys(ie).forEach((a) => {
1329
- o.querySelectorAll(ie[a]).forEach((t) => {
1330
- t.addEventListener("pointerdown", (i) => ma(e, o, a, t, i));
1345
+ r.querySelectorAll(ie[a]).forEach((i) => {
1346
+ i.addEventListener("pointerdown", (t) => Ia(e, r, a, i, t));
1331
1347
  });
1332
1348
  });
1333
1349
  }
1334
- function ma(e, o, a, t, i) {
1335
- if (i.pointerType === "mouse" && i.button !== 0 || e.editingLayerId || e.editingFeatureId || ae(e, t) === null) return;
1336
- const r = ie[a], n = i.ctrlKey || i.metaKey, s = i.shiftKey;
1337
- let l = !1, c = !1, f = i.clientY;
1338
- const u = /* @__PURE__ */ new Set([t]), p = (b) => {
1339
- b.preventDefault(), b.stopImmediatePropagation();
1340
- }, d = (b) => {
1341
- b.stopPropagation(), b.preventDefault();
1342
- }, m = (b) => b.preventDefault(), h = (b) => {
1343
- u.has(b) || (u.add(b), ae(e, b) !== c && he(b, a === "selecao"));
1344
- }, L = () => {
1345
- l = !0, he(t, n, s), c = ae(e, t) === !0, o.addEventListener("selectstart", m), document.body.style.userSelect = "none";
1346
- }, v = (b) => {
1347
- var A, $;
1350
+ function Ia(e, r, a, i, t) {
1351
+ if (t.pointerType === "mouse" && t.button !== 0 || e.editingLayerId || e.editingFeatureId || ae(e, i) === null) return;
1352
+ z == null || z.cancelar();
1353
+ const o = ie[a], n = t.ctrlKey || t.metaKey, s = t.shiftKey;
1354
+ let l = !1, c = !1, d = t.clientY;
1355
+ const u = /* @__PURE__ */ new Set([i]), p = (v) => {
1356
+ v.preventDefault(), v.stopImmediatePropagation();
1357
+ }, f = (v) => {
1358
+ v.stopPropagation(), v.preventDefault();
1359
+ }, m = (v) => v.preventDefault(), g = (v) => {
1360
+ u.has(v) || (u.add(v), ae(e, v) !== c && ve(v, a === "selecao"));
1361
+ }, C = () => {
1362
+ l = !0, ve(i, n, s), c = ae(e, i) === !0, r.addEventListener("selectstart", m), document.body.style.userSelect = "none";
1363
+ }, h = (v) => {
1364
+ var k, O;
1348
1365
  if (!l) {
1349
- if (Math.hypot(b.clientX - i.clientX, b.clientY - i.clientY) < ua) return;
1350
- const k = (A = o.elementFromPoint(b.clientX, b.clientY)) == null ? void 0 : A.closest(r);
1351
- if (!k || k === t) return;
1352
- L();
1366
+ if (Math.hypot(v.clientX - t.clientX, v.clientY - t.clientY) < wa) return;
1367
+ const S = (k = r.elementFromPoint(v.clientX, v.clientY)) == null ? void 0 : k.closest(o);
1368
+ if (!S || S === i) return;
1369
+ C();
1353
1370
  }
1354
- b.preventDefault();
1355
- const y = Math.min(f, b.clientY), w = Math.max(f, b.clientY);
1356
- o.querySelectorAll(r).forEach((k) => {
1357
- const D = k.getBoundingClientRect();
1358
- if (D.height === 0) return;
1359
- const z = D.top + D.height / 2;
1360
- z >= y && z <= w && h(k);
1371
+ v.preventDefault();
1372
+ const y = Math.min(d, v.clientY), w = Math.max(d, v.clientY);
1373
+ r.querySelectorAll(o).forEach((S) => {
1374
+ const B = S.getBoundingClientRect();
1375
+ if (B.height === 0) return;
1376
+ const q = B.top + B.height / 2;
1377
+ q >= y && q <= w && g(S);
1361
1378
  });
1362
- const E = ($ = o.elementFromPoint(b.clientX, b.clientY)) == null ? void 0 : $.closest(r);
1363
- E && h(E), f = b.clientY;
1364
- }, x = () => {
1365
- window.removeEventListener("pointermove", v), window.removeEventListener("pointerup", x), window.removeEventListener("pointercancel", x), window.removeEventListener("dragstart", p, !0), o.removeEventListener("selectstart", m), l && (document.body.style.userSelect = "", window.addEventListener("click", d, { capture: !0, once: !0 }), setTimeout(() => window.removeEventListener("click", d, !0), 0));
1366
- };
1367
- window.addEventListener("dragstart", p, !0), window.addEventListener("pointermove", v, { passive: !1 }), window.addEventListener("pointerup", x), window.addEventListener("pointercancel", x);
1368
- }
1369
- function ha(e, o) {
1370
- const a = o.getElementById("btn-toggle-all-vis");
1379
+ const $ = (O = r.elementFromPoint(v.clientX, v.clientY)) == null ? void 0 : O.closest(o);
1380
+ $ && g($), d = v.clientY;
1381
+ }, A = (v = !1) => {
1382
+ (z == null ? void 0 : z.cancelar) === x && (z = null), window.removeEventListener("pointermove", h), window.removeEventListener("pointerup", L), window.removeEventListener("pointercancel", L), window.removeEventListener("dragstart", p, !0), r.removeEventListener("selectstart", m), l && (document.body.style.userSelect = "", v || (window.addEventListener("click", f, { capture: !0, once: !0 }), setTimeout(() => window.removeEventListener("click", f, !0), 0)));
1383
+ }, L = () => A(), x = () => A(!0);
1384
+ z = { host: e, cancelar: x }, window.addEventListener("dragstart", p, !0), window.addEventListener("pointermove", h, { passive: !1 }), window.addEventListener("pointerup", L), window.addEventListener("pointercancel", L);
1385
+ }
1386
+ function La(e, r) {
1387
+ const a = r.getElementById("btn-toggle-all-vis");
1371
1388
  a && a.addEventListener("click", () => e.alternarVisibilidadeTodas(!0));
1372
- const t = o.getElementById("btn-toggle-all-expand");
1373
- t && t.addEventListener("click", (s) => {
1389
+ const i = r.getElementById("btn-toggle-all-expand");
1390
+ i && i.addEventListener("click", (s) => {
1374
1391
  s.stopPropagation(), e.camadas.length > 0 && e.camadas.every((c) => e.expandedLayers.has(c.id)) ? e.colapsarTodas() : e.expandirTodas();
1375
1392
  });
1376
- const i = o.getElementById("btn-add-layer");
1377
- i && i.addEventListener("click", () => {
1393
+ const t = r.getElementById("btn-add-layer");
1394
+ t && t.addEventListener("click", () => {
1378
1395
  e.dispararEvento("ui-camada-adicionar", {});
1379
1396
  });
1380
- const r = o.getElementById("btn-add-group");
1381
- r && r.addEventListener("click", () => {
1397
+ const o = r.getElementById("btn-add-group");
1398
+ o && o.addEventListener("click", () => {
1382
1399
  e.dispararEvento("ui-camada-grupo-adicionar", { isGroup: !0 });
1383
1400
  });
1384
- const n = o.getElementById("btn-colapsar");
1385
- n && n.addEventListener("click", () => e.colapsar(!0)), ga(e, o);
1401
+ const n = r.getElementById("btn-colapsar");
1402
+ n && n.addEventListener("click", () => e.colapsar(!0)), Ca(e, r);
1386
1403
  }
1387
- function ga(e, o) {
1388
- const a = o.getElementById("input-layer-search"), t = o.getElementById("btn-clear-layer-search"), i = () => {
1389
- var r;
1390
- e.searchQuery = "", e.solicitarRenderizacao(), (r = o.getElementById("input-layer-search")) == null || r.focus();
1404
+ function Ca(e, r) {
1405
+ const a = r.getElementById("input-layer-search"), i = r.getElementById("btn-clear-layer-search"), t = () => {
1406
+ var o;
1407
+ e.searchQuery = "", e.solicitarRenderizacao(), (o = r.getElementById("input-layer-search")) == null || o.focus();
1391
1408
  };
1392
1409
  if (a) {
1393
- const r = xe(() => e.solicitarRenderizacao(), 75);
1410
+ const o = ye(() => e.solicitarRenderizacao(), 75);
1394
1411
  a.addEventListener("input", (n) => {
1395
- e.searchQuery = n.target.value, r();
1412
+ e.searchQuery = n.target.value, o();
1396
1413
  }), a.addEventListener("keydown", (n) => {
1397
- n.key === "Escape" && e.searchQuery && (n.preventDefault(), i());
1414
+ n.key === "Escape" && e.searchQuery && (n.preventDefault(), t());
1398
1415
  });
1399
1416
  }
1400
- t && t.addEventListener("click", i);
1417
+ i && i.addEventListener("click", t);
1401
1418
  }
1402
- function va(e, o) {
1403
- o.querySelectorAll("[data-feat-select]").forEach((a) => {
1404
- a.addEventListener("click", (t) => {
1419
+ function $a(e, r) {
1420
+ r.querySelectorAll("[data-feat-select]").forEach((a) => {
1421
+ a.addEventListener("click", (i) => {
1405
1422
  if (e.editingFeatureId) return;
1406
- const i = t;
1407
- if (i.target.closest(
1423
+ const t = i;
1424
+ if (t.target.closest(
1408
1425
  "[data-feat-eye], [data-feat-lock], [data-feat-fit], [data-feat-target], input, button"
1409
1426
  ))
1410
1427
  return;
1411
1428
  const n = a.getAttribute("data-feat-select");
1412
- n && e.selecionarFeicao(n, i.ctrlKey || i.metaKey, i.shiftKey, !0);
1429
+ n && e.selecionarFeicao(n, t.ctrlKey || t.metaKey, t.shiftKey, !0);
1413
1430
  });
1414
- }), o.querySelectorAll("[data-feat-target]").forEach((a) => {
1415
- a.addEventListener("click", (t) => {
1416
- t.stopPropagation();
1417
- const i = t, r = a.getAttribute("data-feat-target");
1418
- r && e.selecionarFeicao(r, i.ctrlKey || i.metaKey, i.shiftKey, !0);
1431
+ }), r.querySelectorAll("[data-feat-target]").forEach((a) => {
1432
+ a.addEventListener("click", (i) => {
1433
+ i.stopPropagation();
1434
+ const t = i, o = a.getAttribute("data-feat-target");
1435
+ o && e.selecionarFeicao(o, t.ctrlKey || t.metaKey, t.shiftKey, !0);
1419
1436
  });
1420
- }), o.querySelectorAll("[data-feat-eye]").forEach((a) => {
1421
- a.addEventListener("click", (t) => {
1422
- t.stopPropagation();
1423
- const i = a.getAttribute("data-feat-eye"), r = e.feicoes.find((n) => n.id === i);
1424
- if (r) {
1425
- r.visible = r.visible === !1;
1426
- const n = r.visible !== !1;
1427
- a.innerHTML = n ? g.olhoAberto : g.olhoFechado, q(a, n ? "Ocultar Feição" : "Exibir Feição");
1437
+ }), r.querySelectorAll("[data-feat-eye]").forEach((a) => {
1438
+ a.addEventListener("click", (i) => {
1439
+ i.stopPropagation();
1440
+ const t = a.getAttribute("data-feat-eye"), o = e.feicoes.find((n) => n.id === t);
1441
+ if (o) {
1442
+ o.visible = o.visible === !1;
1443
+ const n = o.visible !== !1;
1444
+ a.innerHTML = n ? b.olhoAberto : b.olhoFechado, T(a, n ? "Ocultar Feição" : "Exibir Feição");
1428
1445
  const s = a.closest(".ui-feat-row");
1429
1446
  s && s.classList.toggle("hidden-row", !n), e.dispararEvento("ui-feicao-visibilidade", {
1430
- feicaoId: r.id,
1447
+ feicaoId: o.id,
1431
1448
  visivel: n
1432
1449
  });
1433
1450
  }
1434
1451
  });
1435
- }), o.querySelectorAll("[data-feat-lock]").forEach((a) => {
1436
- a.addEventListener("click", (t) => {
1437
- if (t.stopPropagation(), a.hasAttribute("data-locked-by-layer")) return;
1438
- const i = a.getAttribute("data-feat-lock"), r = e.feicoes.find((n) => n.id === i);
1439
- r && (r.locked = !r.locked, a.innerHTML = r.locked ? g.cadeadoTrancado : g.cadeadoAberto, a.classList.toggle("ui-lock-open", !r.locked), q(a, r.locked ? "Desbloquear Feição" : "Bloquear Feição"), e.dispararEvento("ui-feicao-bloqueio", {
1440
- feicaoId: r.id,
1441
- bloqueado: r.locked
1452
+ }), r.querySelectorAll("[data-feat-lock]").forEach((a) => {
1453
+ a.addEventListener("click", (i) => {
1454
+ if (i.stopPropagation(), a.hasAttribute("data-locked-by-layer")) return;
1455
+ const t = a.getAttribute("data-feat-lock"), o = e.feicoes.find((n) => n.id === t);
1456
+ o && (o.locked = !o.locked, a.innerHTML = o.locked ? b.cadeadoTrancado : b.cadeadoAberto, a.classList.toggle("ui-lock-open", !o.locked), T(a, o.locked ? "Desbloquear Feição" : "Bloquear Feição"), e.dispararEvento("ui-feicao-bloqueio", {
1457
+ feicaoId: o.id,
1458
+ bloqueado: o.locked
1442
1459
  }));
1443
1460
  });
1444
- }), o.querySelectorAll("[data-feat-fit]").forEach((a) => {
1445
- a.addEventListener("click", (t) => {
1446
- t.stopPropagation();
1447
- const i = a.getAttribute("data-feat-fit");
1448
- i && e.dispararEvento("ui-feicao-enquadrar", { feicaoId: i });
1461
+ }), r.querySelectorAll("[data-feat-fit]").forEach((a) => {
1462
+ a.addEventListener("click", (i) => {
1463
+ i.stopPropagation();
1464
+ const t = a.getAttribute("data-feat-fit");
1465
+ t && e.dispararEvento("ui-feicao-enquadrar", { feicaoId: t });
1449
1466
  });
1450
1467
  });
1451
1468
  }
1452
- function ba(e, o) {
1453
- o.querySelectorAll("[data-basemap-thumb]").forEach((a) => {
1469
+ function Sa(e, r) {
1470
+ r.querySelectorAll("[data-basemap-thumb]").forEach((a) => {
1454
1471
  a.addEventListener(
1455
1472
  "error",
1456
1473
  () => {
1457
- const t = document.createElement("div");
1458
- t.className = "ui-basemap-preview-none", t.innerHTML = g.mapa, a.replaceWith(t);
1474
+ const i = document.createElement("div");
1475
+ i.className = "ui-basemap-preview-none", i.innerHTML = b.mapa, a.replaceWith(i);
1459
1476
  },
1460
1477
  { once: !0 }
1461
1478
  );
1462
- }), o.querySelectorAll("[data-basemap-id]").forEach((a) => {
1479
+ }), r.querySelectorAll("[data-basemap-id]").forEach((a) => {
1463
1480
  a.addEventListener("click", () => {
1464
- const t = a.getAttribute("data-basemap-id");
1465
- t && e.selecionarMapaBase(t, !0);
1481
+ const i = a.getAttribute("data-basemap-id");
1482
+ i && e.selecionarMapaBase(i, !0);
1466
1483
  });
1467
1484
  });
1468
1485
  }
1469
- function xa(e, o) {
1470
- ha(e, o), na(e, o), va(e, o), ba(e, o), ca(e, o), fa(e, o);
1486
+ function Ma(e, r) {
1487
+ La(e, r), va(e, r), $a(e, r), Sa(e, r), xa(e, r), ka(e, r);
1488
+ }
1489
+ function za(e, r, a, i) {
1490
+ var g, C;
1491
+ const t = We({
1492
+ camadas: e.camadas,
1493
+ feicoes: e.feicoes,
1494
+ camadaAtivaId: e.camadaAtivaId,
1495
+ expandedLayers: e.expandedLayers,
1496
+ selectedFeatureIds: e.selectedFeatureIds,
1497
+ activeSettingsLayerId: e.activeSettingsLayerId,
1498
+ editingLayerId: e.editingLayerId,
1499
+ editingFeatureId: e.editingFeatureId,
1500
+ searchQuery: e.searchQuery,
1501
+ mostrarBotaoColapsar: e.flutuante && e.getAttribute("colapsavel") !== "false"
1502
+ }), o = e.mostrarMapasBase ? Ue(e.mapasBase, e.mapaBaseAtivo) : "", n = e.mostrarRodape ? _e(e.camadas, e.feicoes, e.selectedFeatureIds) : "", s = r.getElementById("ui-layer-tree-mount"), l = a.scrollTop, c = s ? s.scrollTop : 0, d = r.activeElement, u = d && a.contains(d) ? d.id : "", p = d && !u && a.contains(d) ? Array.from(d.attributes).find((h) => h.name.startsWith("data-") && h.value !== "") : void 0, f = d && "selectionStart" in d ? d.selectionStart : null;
1503
+ a.innerHTML = `
1504
+ ${t}
1505
+ ${n}
1506
+ ${o}
1507
+ `, a.scrollTop = l;
1508
+ const m = r.getElementById("ui-layer-tree-mount");
1509
+ if (m && (m.scrollTop = c), u) {
1510
+ const h = r.getElementById(u);
1511
+ if (h && (h.focus({ preventScroll: !0 }), f !== null && typeof h.setSelectionRange == "function"))
1512
+ try {
1513
+ h.setSelectionRange(f, f);
1514
+ } catch {
1515
+ }
1516
+ }
1517
+ !u && p && ((g = P(a, p.name, p.value)) == null || g.focus({ preventScroll: !0 })), (C = r.querySelector("[data-layer-row], [data-feat-row]")) == null || C.setAttribute("tabindex", "0"), Ma(e, r), i.bindAll();
1471
1518
  }
1472
- const ya = '[role="button"][tabindex]', O = "[data-layer-row], [data-feat-row]", wa = ["color", "range", "checkbox", "radio", "button"];
1473
- function Ae(e) {
1474
- return e instanceof HTMLSelectElement || e instanceof HTMLTextAreaElement ? !0 : e instanceof HTMLInputElement && !wa.includes(e.type);
1519
+ const Fa = '[role="button"][tabindex]', j = "[data-layer-row], [data-feat-row]", Ba = ["color", "range", "checkbox", "radio", "button"];
1520
+ function Ie(e) {
1521
+ return e instanceof HTMLSelectElement || e instanceof HTMLTextAreaElement ? !0 : e instanceof HTMLInputElement && !Ba.includes(e.type);
1475
1522
  }
1476
- function Ea(e) {
1477
- return Array.from(e.querySelectorAll(O)).filter((o) => {
1478
- const a = o.closest(".ui-children-container");
1479
- return !(a && a.style.display === "none") && !o.classList.contains("ui-search-hidden");
1523
+ function qa(e) {
1524
+ return Array.from(e.querySelectorAll(j)).filter((r) => {
1525
+ const a = r.closest(".ui-children-container");
1526
+ return !(a && a.style.display === "none") && !r.classList.contains("ui-search-hidden");
1480
1527
  });
1481
1528
  }
1482
- function G(e, o) {
1483
- o && (e.querySelectorAll(O).forEach((a) => a.setAttribute("tabindex", "-1")), o.setAttribute("tabindex", "0"), o.focus());
1529
+ function U(e, r) {
1530
+ r && (e.querySelectorAll(j).forEach((a) => a.setAttribute("tabindex", "-1")), r.setAttribute("tabindex", "0"), r.focus());
1484
1531
  }
1485
- function Aa(e, o) {
1532
+ function Da(e, r) {
1486
1533
  e.dispatchEvent(
1487
1534
  new MouseEvent("click", {
1488
1535
  bubbles: !0,
1489
- ctrlKey: o.ctrlKey || o.metaKey,
1490
- shiftKey: o.shiftKey
1536
+ ctrlKey: r.ctrlKey || r.metaKey,
1537
+ shiftKey: r.shiftKey
1491
1538
  })
1492
1539
  );
1493
1540
  }
1494
- function ka(e, o, a) {
1495
- var t;
1496
- if (!Ae(a.composedPath()[0])) {
1541
+ function Ta(e, r, a) {
1542
+ var i;
1543
+ if (!Ie(a.composedPath()[0])) {
1497
1544
  if (e.activeSettingsLayerId) {
1498
1545
  a.preventDefault();
1499
- const i = e.activeSettingsLayerId;
1500
- e.activeSettingsLayerId = null, e.solicitarRenderizacao(), (t = B(o, "data-layer-settings", i)) == null || t.focus();
1546
+ const t = e.activeSettingsLayerId;
1547
+ e.activeSettingsLayerId = null, e.solicitarRenderizacao(), (i = P(r, "data-layer-settings", t)) == null || i.focus();
1501
1548
  return;
1502
1549
  }
1503
1550
  e.selectedFeatureIds.size > 0 && (a.preventDefault(), e.limparSelecao(!0));
1504
1551
  }
1505
1552
  }
1506
- function Ia(e, o, a) {
1553
+ function Pa(e, r, a) {
1507
1554
  var n;
1508
- const t = a.composedPath()[0];
1509
- if (!(t instanceof HTMLElement) || Ae(t)) return;
1510
- if ((a.key === "Enter" || a.key === " ") && t.matches(ya)) {
1511
- a.preventDefault(), t.click();
1555
+ const i = a.composedPath()[0];
1556
+ if (!(i instanceof HTMLElement) || Ie(i)) return;
1557
+ if ((a.key === "Enter" || a.key === " ") && i.matches(Fa)) {
1558
+ a.preventDefault(), i.click();
1512
1559
  return;
1513
1560
  }
1514
- if (!t.matches(O)) return;
1515
- const i = Ea(e), r = i.indexOf(t);
1561
+ if (!i.matches(j)) return;
1562
+ const t = qa(e), o = t.indexOf(i);
1516
1563
  switch (a.key) {
1517
1564
  case "ArrowDown":
1518
- a.preventDefault(), G(e, i[Math.min(i.length - 1, r + 1)]);
1565
+ a.preventDefault(), U(e, t[Math.min(t.length - 1, o + 1)]);
1519
1566
  break;
1520
1567
  case "ArrowUp":
1521
- a.preventDefault(), G(e, i[Math.max(0, r - 1)]);
1568
+ a.preventDefault(), U(e, t[Math.max(0, o - 1)]);
1522
1569
  break;
1523
1570
  case "Home":
1524
- a.preventDefault(), G(e, i[0]);
1571
+ a.preventDefault(), U(e, t[0]);
1525
1572
  break;
1526
1573
  case "End":
1527
- a.preventDefault(), G(e, i[i.length - 1]);
1574
+ a.preventDefault(), U(e, t[t.length - 1]);
1528
1575
  break;
1529
1576
  case "ArrowRight":
1530
1577
  case "ArrowLeft": {
1531
- const s = t.getAttribute("data-layer-row");
1578
+ const s = i.getAttribute("data-layer-row");
1532
1579
  if (!s) return;
1533
- const l = t.closest(".ui-layer-group"), c = (l == null ? void 0 : l.getAttribute("aria-expanded")) === "true";
1534
- a.key === "ArrowRight" !== c && (a.preventDefault(), (n = B(o, "data-layer-expand", s)) == null || n.click());
1580
+ const l = i.closest(".ui-layer-group"), c = (l == null ? void 0 : l.getAttribute("aria-expanded")) === "true";
1581
+ a.key === "ArrowRight" !== c && (a.preventDefault(), (n = P(r, "data-layer-expand", s)) == null || n.click());
1535
1582
  break;
1536
1583
  }
1537
1584
  case "Enter":
1538
1585
  case " ":
1539
- a.preventDefault(), Aa(t, a);
1586
+ a.preventDefault(), Da(i, a);
1540
1587
  break;
1541
1588
  }
1542
1589
  }
1543
- function La(e, o, a, t, i) {
1544
- i.add(o, "keydown", (r) => {
1545
- r.key === "Escape" && ka(e, a, r);
1546
- }), i.add(t, "keydown", (r) => Ia(t, a, r)), i.add(t, "focusin", (r) => {
1547
- const n = r.composedPath()[0];
1548
- n instanceof HTMLElement && n.matches(O) && (t.querySelectorAll(O).forEach((s) => s.setAttribute("tabindex", "-1")), n.setAttribute("tabindex", "0"));
1590
+ function Ra(e, r, a, i, t) {
1591
+ t.add(r, "keydown", (o) => {
1592
+ o.key === "Escape" && Ta(e, a, o);
1593
+ }), t.add(i, "keydown", (o) => Pa(i, a, o)), t.add(i, "focusin", (o) => {
1594
+ const n = o.composedPath()[0];
1595
+ n instanceof HTMLElement && n.matches(j) && (i.querySelectorAll(j).forEach((s) => s.setAttribute("tabindex", "-1")), n.setAttribute("tabindex", "0"));
1549
1596
  });
1550
1597
  }
1551
- function Ca(e, o) {
1552
- o.querySelectorAll("[data-layer-row]").forEach((t) => {
1553
- const r = t.getAttribute("data-layer-row") === e.camadaAtivaId;
1554
- t.classList.toggle("active-drawing-layer", r);
1555
- const n = t.querySelector(".ui-col-name");
1598
+ function Oa(e, r) {
1599
+ r.querySelectorAll("[data-layer-row]").forEach((i) => {
1600
+ const o = i.getAttribute("data-layer-row") === e.camadaAtivaId;
1601
+ i.classList.toggle("active-drawing-layer", o);
1602
+ const n = i.querySelector(".ui-col-name");
1556
1603
  if (n) {
1557
1604
  let s = n.querySelector(".ui-active-badge");
1558
- if (r && !s) {
1605
+ if (o && !s) {
1559
1606
  s = document.createElement("span"), s.className = "ui-active-badge", s.textContent = "✓ Ativa";
1560
1607
  const l = n.querySelector(".ui-count-chip");
1561
1608
  l ? n.insertBefore(s, l) : n.appendChild(s);
1562
- } else !r && s && s.remove();
1609
+ } else !o && s && s.remove();
1563
1610
  }
1564
1611
  });
1565
1612
  }
1566
- function $a(e, o) {
1567
- o.querySelectorAll(".ui-feat-row").forEach((v) => {
1568
- const x = v.getAttribute("data-feat-row"), b = x ? e.selectedFeatureIds.has(x) : !1;
1569
- v.classList.toggle("selected-row", b), v.setAttribute("aria-selected", String(b));
1570
- const y = v.querySelector(".ui-target-circle");
1571
- y && y.classList.toggle("selected", b);
1572
- }), o.querySelectorAll(".ui-layer-group").forEach((v) => {
1573
- const x = v.getAttribute("data-layer-id"), b = e.feicoes.filter((w) => w.layerId === x), y = v.querySelector(".ui-layer-row .ui-target-circle");
1574
- if (y && b.length > 0) {
1575
- const w = b.every((A) => e.selectedFeatureIds.has(A.id)), E = !w && b.some((A) => e.selectedFeatureIds.has(A.id));
1576
- y.classList.toggle("selected", w), y.classList.toggle("partial", E);
1577
- } else y && y.classList.remove("selected", "partial");
1613
+ function ja(e, r) {
1614
+ r.querySelectorAll(".ui-feat-row").forEach((h) => {
1615
+ const A = h.getAttribute("data-feat-row"), L = A ? e.selectedFeatureIds.has(A) : !1;
1616
+ h.classList.toggle("selected-row", L), h.setAttribute("aria-selected", String(L));
1617
+ const x = h.querySelector(".ui-target-circle");
1618
+ x && x.classList.toggle("selected", L);
1619
+ }), r.querySelectorAll(".ui-layer-group").forEach((h) => {
1620
+ const A = h.getAttribute("data-layer-id"), L = e.feicoes.filter((v) => v.layerId === A), x = h.querySelector(".ui-layer-row .ui-target-circle");
1621
+ if (x && L.length > 0) {
1622
+ const v = L.every((w) => e.selectedFeatureIds.has(w.id)), y = !v && L.some((w) => e.selectedFeatureIds.has(w.id));
1623
+ x.classList.toggle("selected", v), x.classList.toggle("partial", y);
1624
+ } else x && x.classList.remove("selected", "partial");
1578
1625
  });
1579
- const a = e.feicoes.filter((v) => e.selectedFeatureIds.has(v.id)), t = a.length > 0, i = o.getElementById("footer-count"), r = o.getElementById("footer-label");
1580
- i && (i.textContent = String(t ? a.length : e.camadas.length)), r && (r.textContent = t ? a.length > 1 ? "selecionados" : "selecionado" : e.camadas.length > 1 ? "camadas" : "camada");
1581
- const n = o.querySelector(".ui-footer-metric"), s = be(a);
1582
- n && (s ? (n.innerHTML = `${g.reguaMetrica} ${s}`, n.style.display = "inline-flex") : n.style.display = "none");
1583
- const l = o.querySelector(".ui-tree-footer");
1584
- l && (l.classList.toggle("tem-selecao", t), l.classList.toggle("sem-selecao", !t));
1585
- const c = o.querySelector(".ui-footer-actions-gerais");
1586
- c && (c.style.display = t ? "none" : "flex");
1587
- const f = o.querySelector(".ui-footer-bulk-actions");
1588
- f && (f.style.display = t ? "flex" : "none"), ["btn-footer-vis", "btn-footer-lock", "btn-footer-del"].forEach((v) => {
1589
- const x = o.getElementById(v);
1590
- x && (x.disabled = !t, x.classList.toggle("disabled", !t));
1626
+ const a = e.feicoes.filter((h) => e.selectedFeatureIds.has(h.id)), i = a.length > 0, t = r.getElementById("footer-count"), o = r.getElementById("footer-label");
1627
+ 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");
1628
+ const n = r.querySelector(".ui-footer-metric"), s = xe(a);
1629
+ n && (s ? (n.innerHTML = `${b.reguaMetrica} ${s}`, n.style.display = "inline-flex") : n.style.display = "none");
1630
+ const l = r.querySelector(".ui-tree-footer");
1631
+ l && (l.classList.toggle("tem-selecao", i), l.classList.toggle("sem-selecao", !i));
1632
+ const c = r.querySelector(".ui-footer-actions-gerais");
1633
+ c && (c.style.display = i ? "none" : "flex");
1634
+ const d = r.querySelector(".ui-footer-bulk-actions");
1635
+ d && (d.style.display = i ? "flex" : "none"), ["btn-footer-vis", "btn-footer-lock", "btn-footer-del"].forEach((h) => {
1636
+ const A = r.getElementById(h);
1637
+ A && (A.disabled = !i, A.classList.toggle("disabled", !i));
1591
1638
  });
1592
- const u = o.querySelector(".ui-footer-move-wrapper");
1593
- u && u.classList.toggle("disabled", !t);
1594
- const p = o.getElementById("select-footer-move");
1595
- p && (p.disabled = !t);
1596
- const d = o.querySelector(".ui-footer-color-wrapper");
1597
- d && d.classList.toggle("disabled", !t);
1598
- const m = o.getElementById("input-footer-color");
1599
- m && (m.disabled = !t);
1600
- let h = o.getElementById("btn-footer-clear");
1601
- const L = o.querySelector(".ui-footer-right");
1602
- t && !h && L ? (h = document.createElement("button"), h.id = "btn-footer-clear", h.className = "ui-footer-btn btn-clear-footer", h.title = "Limpar seleção", h.innerHTML = g.fechar, h.addEventListener("click", () => e.limparSelecao(!0)), L.appendChild(h)) : !t && h && h.remove();
1603
- }
1604
- function Sa(e) {
1605
- function t() {
1606
- return e.getMinAltura ? e.getMinAltura() : 140;
1639
+ const u = r.querySelector(".ui-footer-move-wrapper");
1640
+ u && u.classList.toggle("disabled", !i);
1641
+ const p = r.getElementById("select-footer-move");
1642
+ p && (p.disabled = !i);
1643
+ const f = r.querySelector(".ui-footer-color-wrapper");
1644
+ f && f.classList.toggle("disabled", !i);
1645
+ const m = r.getElementById("input-footer-color");
1646
+ m && (m.disabled = !i);
1647
+ let g = r.getElementById("btn-footer-clear");
1648
+ const C = r.querySelector(".ui-footer-right");
1649
+ i && !g && C ? (g = document.createElement("button"), g.id = "btn-footer-clear", g.className = "ui-footer-btn btn-clear-footer", g.title = "Limpar seleção", g.innerHTML = b.fechar, g.addEventListener("click", () => e.limparSelecao(!0)), C.appendChild(g)) : !i && g && g.remove();
1650
+ }
1651
+ function Ha(e, r, a, i, t) {
1652
+ const o = Qe(e.camadas, e.feicoes, e.expandedLayers, e.searchQuery), n = !i && !o.includes(r) && e.feicoes.some((l) => l.id === r), s = Je(
1653
+ n ? [...o, r] : o,
1654
+ e.selectedFeatureIds,
1655
+ e.lastClickedFeatureId,
1656
+ r,
1657
+ a,
1658
+ i
1659
+ );
1660
+ s && (e.selectedFeatureIds = s.selecionados, e.lastClickedFeatureId = s.ultimoClicadoId, e.sincronizarSelecaoDOM(), t && e.notificarMudancaSelecao());
1661
+ }
1662
+ function Na(e, r, a) {
1663
+ const i = r || [];
1664
+ 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());
1665
+ }
1666
+ function Ga(e, r) {
1667
+ e.selectedFeatureIds.size !== 0 && (e.selectedFeatureIds.clear(), e.lastClickedFeatureId = null, e.sincronizarSelecaoDOM(), r && e.notificarMudancaSelecao());
1668
+ }
1669
+ function Ua(e) {
1670
+ const r = e.feicoes.filter((a) => e.selectedFeatureIds.has(a.id));
1671
+ e.dispararEvento("ui-feicoes-selecionadas", {
1672
+ feicoesIds: Array.from(e.selectedFeatureIds),
1673
+ feicoes: r
1674
+ }), 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 });
1675
+ }
1676
+ class Ya {
1677
+ constructor(r) {
1678
+ E(this, "origens", /* @__PURE__ */ new Map());
1679
+ E(this, "removidas", /* @__PURE__ */ new Set());
1680
+ E(this, "salvarComDebounce", ye(() => this.salvar(), 200));
1681
+ this.instantaneo = r;
1682
+ }
1683
+ chaveAtual() {
1684
+ const r = this.instantaneo();
1685
+ return da(r.storageKey, r.id);
1686
+ }
1687
+ carregar() {
1688
+ return te(this.chaveAtual());
1689
+ }
1690
+ /** Versão com debounce, para interações contínuas (seletor de cor, slider de opacidade). */
1691
+ agendar() {
1692
+ this.salvarComDebounce();
1693
+ }
1694
+ salvar() {
1695
+ const r = this.instantaneo();
1696
+ if (!r.persistir || !r.conectado) return;
1697
+ const a = this.chaveAtual(), i = ma({
1698
+ estadoAnterior: te(a),
1699
+ origensCamadas: this.origens,
1700
+ camadas: r.camadas,
1701
+ expandedLayers: r.expandedLayers,
1702
+ camadaAtivaId: r.camadaAtivaId,
1703
+ painelColapsado: r.painelColapsado,
1704
+ mapaBaseAtivo: r.mapaBaseAtivo,
1705
+ densidade: r.densidade,
1706
+ altura: r.altura,
1707
+ camadasRemovidas: this.removidas
1708
+ });
1709
+ this.removidas.clear(), ua(a, i);
1710
+ }
1711
+ limpar() {
1712
+ pa(this.chaveAtual());
1713
+ }
1714
+ // --- Origens (como a camada chegou do consumidor) e remoções ---
1715
+ limparOrigens() {
1716
+ this.origens.clear();
1717
+ }
1718
+ registrarOrigem(r) {
1719
+ this.origens.set(r.id, ke(r));
1720
+ }
1721
+ esquecerCamada(r) {
1722
+ this.origens.delete(r), this.removidas.add(r);
1723
+ }
1724
+ /** Aplica por cima de `camadas` o que foi lembrado (expansão, visibilidade, travas, opacidade, cor, ordem). */
1725
+ reidratar(r, a, i) {
1726
+ fa(r, a, i, this.origens);
1727
+ }
1728
+ }
1729
+ function Le(e, r = null) {
1730
+ const a = [];
1731
+ for (const i of e) {
1732
+ const t = { ...i };
1733
+ r && t.parentId === void 0 && (t.parentId = r), a.push(t), Array.isArray(i.children) && i.children.length > 0 && a.push(...Le(i.children, i.id));
1734
+ }
1735
+ return a;
1736
+ }
1737
+ function _a(e, r, a) {
1738
+ if (e.camadas = Array.isArray(r) ? Le(r) : [], e.lembranca.limparOrigens(), e.persistir) {
1739
+ const t = e.lembranca.carregar();
1740
+ e.lembranca.reidratar(e.camadas, t, e.expandedLayers), t != null && t.camadaAtivaId && e.camadas.some((o) => o.id === t.camadaAtivaId) && (e.camadaAtivaId = t.camadaAtivaId);
1741
+ } else
1742
+ e.camadas.forEach((t) => {
1743
+ e.lembranca.registrarOrigem(t), e.expandedLayers.has(t.id) || e.expandedLayers.add(t.id);
1744
+ });
1745
+ if (Array.isArray(a)) {
1746
+ e.feicoes = a.map((n) => ({ ...n }));
1747
+ const t = new Set(e.camadas.map((n) => n.id)), o = e.feicoes.filter((n) => n.layerId && !t.has(n.layerId));
1748
+ o.length > 0 && console.warn(
1749
+ `[UI-Camadas] ${o.length} feição(ões) possuem 'layerId' não cadastrado nas camadas:`,
1750
+ o.map((n) => ({ id: n.id, nome: n.name, layerId: n.layerId }))
1751
+ ), ne(e.selectedFeatureIds, e.feicoes);
1752
+ }
1753
+ const i = e.getAttribute("camada-ativa");
1754
+ e.camadas.length > 0 && (!i || !e.camadas.some((t) => t.id === i)) && (e.camadaAtivaId = e.camadas[0].id), e.salvarLembrancaEstado(), e.solicitarRenderizacao();
1755
+ }
1756
+ function Va(e, r) {
1757
+ e.feicoes = Array.isArray(r) ? r.map((a) => ({ ...a })) : [], ne(e.selectedFeatureIds, e.feicoes), e.solicitarRenderizacao();
1758
+ }
1759
+ function Ka(e, r) {
1760
+ if (!r || !r.id) return;
1761
+ if (e.camadas.some((i) => i.id === r.id)) {
1762
+ console.warn(`[UI-Camadas] adicionarCamada ignorado: já existe uma camada com id '${r.id}'.`);
1763
+ return;
1764
+ }
1765
+ const a = { ...r };
1766
+ e.camadas.push(a), e.lembranca.registrarOrigem(a), e.expandedLayers.add(a.id), a.parentId && e.expandedLayers.add(a.parentId), e.salvarLembrancaEstado(), e.solicitarRenderizacao();
1767
+ }
1768
+ function Xa(e, r) {
1769
+ var a;
1770
+ e.camadas.forEach((i) => {
1771
+ i.parentId === r && (i.parentId = null);
1772
+ }), 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), ne(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();
1773
+ }
1774
+ function Qa(e, r) {
1775
+ if (!(!r || !r.id)) {
1776
+ if (e.feicoes.some((a) => a.id === r.id)) {
1777
+ console.warn(`[UI-Camadas] adicionarFeicao ignorado: já existe uma feição com id '${r.id}'.`);
1778
+ return;
1779
+ }
1780
+ e.feicoes.push({ ...r }), e.solicitarRenderizacao();
1607
1781
  }
1782
+ }
1783
+ function Ja(e, r) {
1784
+ const a = e.feicoes.findIndex((i) => i.id === r.id);
1785
+ a !== -1 && (e.feicoes[a] = { ...e.feicoes[a], ...r }, e.solicitarRenderizacao());
1786
+ }
1787
+ function Wa(e, r) {
1788
+ e.feicoes = e.feicoes.filter((a) => a.id !== r), e.selectedFeatureIds.delete(r), e.solicitarRenderizacao();
1789
+ }
1790
+ function Za(e) {
1608
1791
  function i() {
1792
+ return e.getMinAltura ? e.getMinAltura() : 140;
1793
+ }
1794
+ function t() {
1609
1795
  return e.getMaxAltura ? e.getMaxAltura() : 1600;
1610
1796
  }
1611
- function r(c, f = !1) {
1797
+ function o(c, d = !1) {
1612
1798
  if (c == null || c === "") {
1613
- e.hostElement.style.removeProperty("height"), e.hostElement.style.removeProperty("--ui-camadas-altura"), f && e.hostElement.dispatchEvent(
1799
+ e.hostElement.style.removeProperty("height"), e.hostElement.style.removeProperty("--ui-camadas-altura"), d && e.hostElement.dispatchEvent(
1614
1800
  new CustomEvent("ui-redimensionar-altura", {
1615
1801
  bubbles: !0,
1616
1802
  composed: !0,
@@ -1621,8 +1807,8 @@ function Sa(e) {
1621
1807
  }
1622
1808
  const u = typeof c == "number" ? c : parseFloat(String(c));
1623
1809
  if (isNaN(u)) return;
1624
- const p = Math.max(t(), Math.min(i(), Math.round(u)));
1625
- e.hostElement.style.height = `${p}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${p}px`), f && e.hostElement.dispatchEvent(
1810
+ const p = Math.max(i(), Math.min(t(), Math.round(u)));
1811
+ e.hostElement.style.height = `${p}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${p}px`), d && e.hostElement.dispatchEvent(
1626
1812
  new CustomEvent("ui-redimensionar-altura", {
1627
1813
  bubbles: !0,
1628
1814
  composed: !0,
@@ -1633,89 +1819,100 @@ function Sa(e) {
1633
1819
  let n = null;
1634
1820
  function s() {
1635
1821
  if (!e.resizerElement) return;
1636
- let c = !1, f = 0, u = 0;
1822
+ let c = !1, d = 0, u = 0;
1637
1823
  const p = (m) => {
1638
1824
  if (m.button !== 0) return;
1639
- m.preventDefault(), m.stopPropagation(), c = !0, f = m.clientY, u = e.hostElement.getBoundingClientRect().height, e.resizerElement.classList.add("ui-camadas-resizer--ativo"), e.hostElement.classList.add("ui-camadas--redimensionando");
1825
+ m.preventDefault(), m.stopPropagation(), c = !0, d = m.clientY, u = e.hostElement.getBoundingClientRect().height, e.resizerElement.classList.add("ui-camadas-resizer--ativo"), e.hostElement.classList.add("ui-camadas--redimensionando");
1640
1826
  try {
1641
1827
  e.resizerElement.setPointerCapture(m.pointerId);
1642
1828
  } catch {
1643
1829
  }
1644
- const h = (x) => {
1830
+ const g = (A) => {
1645
1831
  if (!c) return;
1646
- x.preventDefault();
1647
- const b = x.clientY - f, y = Math.max(t(), Math.min(i(), Math.round(u + b)));
1648
- e.hostElement.style.height = `${y}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${y}px`), e.onRedimensionando && e.onRedimensionando(y), e.hostElement.dispatchEvent(
1832
+ A.preventDefault();
1833
+ const L = A.clientY - d, x = Math.max(i(), Math.min(t(), Math.round(u + L)));
1834
+ e.hostElement.style.height = `${x}px`, e.hostElement.style.setProperty("--ui-camadas-altura", `${x}px`), e.onRedimensionando && e.onRedimensionando(x), e.hostElement.dispatchEvent(
1649
1835
  new CustomEvent("ui-redimensionando-altura", {
1650
1836
  bubbles: !0,
1651
1837
  composed: !0,
1652
- detail: { altura: y }
1838
+ detail: { altura: x }
1653
1839
  })
1654
1840
  );
1655
- }, L = () => {
1656
- var x;
1657
- c = !1, n = null, window.removeEventListener("pointermove", h), window.removeEventListener("pointerup", v), window.removeEventListener("pointercancel", v), (x = e.resizerElement) == null || x.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
1658
- }, v = (x) => {
1841
+ }, C = () => {
1842
+ var A;
1843
+ c = !1, n = null, window.removeEventListener("pointermove", g), window.removeEventListener("pointerup", h), window.removeEventListener("pointercancel", h), (A = e.resizerElement) == null || A.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
1844
+ }, h = (A) => {
1659
1845
  if (!c) return;
1660
1846
  c = !1, e.resizerElement.classList.remove("ui-camadas-resizer--ativo"), e.hostElement.classList.remove("ui-camadas--redimensionando");
1661
1847
  try {
1662
- e.resizerElement.hasPointerCapture(x.pointerId) && e.resizerElement.releasePointerCapture(x.pointerId);
1848
+ e.resizerElement.hasPointerCapture(A.pointerId) && e.resizerElement.releasePointerCapture(A.pointerId);
1663
1849
  } catch {
1664
1850
  }
1665
- window.removeEventListener("pointermove", h), window.removeEventListener("pointerup", v), window.removeEventListener("pointercancel", v);
1666
- const b = e.hostElement.getBoundingClientRect().height, y = Math.round(b);
1667
- e.onAlturaAlterada && e.onAlturaAlterada(y), e.hostElement.dispatchEvent(
1851
+ window.removeEventListener("pointermove", g), window.removeEventListener("pointerup", h), window.removeEventListener("pointercancel", h);
1852
+ const L = e.hostElement.getBoundingClientRect().height, x = Math.round(L);
1853
+ e.onAlturaAlterada && e.onAlturaAlterada(x), e.hostElement.dispatchEvent(
1668
1854
  new CustomEvent("ui-redimensionar-altura", {
1669
1855
  bubbles: !0,
1670
1856
  composed: !0,
1671
- detail: { altura: y }
1857
+ detail: { altura: x }
1672
1858
  })
1673
1859
  );
1674
1860
  };
1675
- n = L, window.addEventListener("pointermove", h), window.addEventListener("pointerup", v), window.addEventListener("pointercancel", v);
1676
- }, d = (m) => {
1677
- m.preventDefault(), m.stopPropagation(), r(null, !0), e.onAlturaAlterada && e.onAlturaAlterada(null);
1861
+ n = C, window.addEventListener("pointermove", g), window.addEventListener("pointerup", h), window.addEventListener("pointercancel", h);
1862
+ }, f = (m) => {
1863
+ m.preventDefault(), m.stopPropagation(), o(null, !0), e.onAlturaAlterada && e.onAlturaAlterada(null);
1678
1864
  };
1679
- e.listeners.add(e.resizerElement, "pointerdown", p), e.listeners.add(e.resizerElement, "dblclick", d);
1865
+ e.listeners.add(e.resizerElement, "pointerdown", p), e.listeners.add(e.resizerElement, "dblclick", f);
1680
1866
  }
1681
1867
  function l() {
1682
1868
  n == null || n(), e.listeners.cleanup();
1683
1869
  }
1684
1870
  return {
1685
1871
  init: s,
1686
- definirAltura: r,
1872
+ definirAltura: o,
1687
1873
  destruir: l
1688
1874
  };
1689
1875
  }
1690
- const T = class T extends De {
1876
+ const R = class R extends Re {
1691
1877
  constructor() {
1692
1878
  super();
1693
- I(this, "shadow");
1694
- I(this, "listeners", new Te());
1695
- I(this, "dragDropManager");
1696
- I(this, "resizerController");
1697
- I(this, "alturaCustomizada", null);
1698
- I(this, "conectado", !1);
1699
- I(this, "profundidadeLote", 0);
1700
- I(this, "renderPendente", !1);
1701
- I(this, "camadasRemovidas", /* @__PURE__ */ new Set());
1702
- I(this, "origensCamadas", /* @__PURE__ */ new Map());
1703
- I(this, "salvarLembrancaDebounced", xe(() => this.salvarLembrancaEstado(), 200));
1879
+ E(this, "shadow");
1880
+ E(this, "listeners", new Oe());
1881
+ E(this, "dragDropManager");
1882
+ E(this, "resizerController");
1883
+ E(this, "alturaCustomizada", null);
1884
+ E(this, "conectado", !1);
1885
+ E(this, "profundidadeLote", 0);
1886
+ E(this, "renderPendente", !1);
1887
+ /** @internal */
1888
+ E(this, "lembranca", new Ya(() => ({
1889
+ persistir: this.persistir,
1890
+ conectado: this.conectado,
1891
+ storageKey: this.storageKey,
1892
+ id: this.id,
1893
+ camadas: this.camadas,
1894
+ expandedLayers: this.expandedLayers,
1895
+ camadaAtivaId: this.camadaAtivaId,
1896
+ painelColapsado: this.colapsado,
1897
+ mapaBaseAtivo: this.mapaBaseAtivo,
1898
+ densidade: this.densidade,
1899
+ altura: this.alturaCustomizada
1900
+ })));
1704
1901
  // Estado interno
1705
- I(this, "camadas", []);
1706
- I(this, "feicoes", []);
1707
- I(this, "mapasBase", [...ye]);
1708
- I(this, "expandedLayers", /* @__PURE__ */ new Set());
1709
- I(this, "selectedFeatureIds", /* @__PURE__ */ new Set());
1710
- I(this, "lastClickedFeatureId", null);
1711
- I(this, "activeSettingsLayerId", null);
1712
- I(this, "editingLayerId", null);
1713
- I(this, "editingFeatureId", null);
1714
- I(this, "searchQuery", "");
1715
- I(this, "corpoElement");
1716
- I(this, "btnExpandirFlutuante");
1902
+ E(this, "camadas", []);
1903
+ E(this, "feicoes", []);
1904
+ E(this, "mapasBase", [...we]);
1905
+ E(this, "expandedLayers", /* @__PURE__ */ new Set());
1906
+ E(this, "selectedFeatureIds", /* @__PURE__ */ new Set());
1907
+ E(this, "lastClickedFeatureId", null);
1908
+ E(this, "activeSettingsLayerId", null);
1909
+ E(this, "editingLayerId", null);
1910
+ E(this, "editingFeatureId", null);
1911
+ E(this, "searchQuery", "");
1912
+ E(this, "corpoElement");
1913
+ E(this, "btnExpandirFlutuante");
1717
1914
  this.shadow = this.attachShadow({ mode: "open" }), this.shadow.innerHTML = `
1718
- <style>${oa}</style>
1915
+ <style>${ga}</style>
1719
1916
  <div class="ui-camadas-container" id="panel-container" role="region" aria-label="Painel de Camadas">
1720
1917
  <div class="ui-camadas-corpo" id="painel-corpo"></div>
1721
1918
  <div class="ui-camadas-resizer-altura" id="resizer-altura" title="Arraste para redimensionar a altura (duplo-clique para resetar)" aria-label="Redimensionar altura">
@@ -1723,24 +1920,24 @@ const T = class T extends De {
1723
1920
  </div>
1724
1921
  </div>
1725
1922
  <button class="ui-camadas-toggle-flutuante" id="btn-expandir-flutuante" title="Expandir Painel de Camadas" aria-label="Expandir Painel de Camadas">
1726
- ${g.camadas}
1923
+ ${b.camadas}
1727
1924
  </button>
1728
- `, this.corpoElement = this.shadow.getElementById("painel-corpo"), this.btnExpandirFlutuante = this.shadow.getElementById("btn-expandir-flutuante"), this.dragDropManager = new We(this, this.shadow);
1925
+ `, this.corpoElement = this.shadow.getElementById("painel-corpo"), this.btnExpandirFlutuante = this.shadow.getElementById("btn-expandir-flutuante"), this.dragDropManager = new la(this, this.shadow);
1729
1926
  const a = this.shadow.getElementById("resizer-altura");
1730
- this.resizerController = Sa({
1927
+ this.resizerController = Za({
1731
1928
  hostElement: this,
1732
1929
  resizerElement: a,
1733
1930
  listeners: this.listeners,
1734
1931
  getMinAltura: () => {
1735
- const t = this.getAttribute("min-altura");
1736
- return t && parseFloat(t) || 140;
1932
+ const i = this.getAttribute("min-altura");
1933
+ return i && parseFloat(i) || 140;
1737
1934
  },
1738
1935
  getMaxAltura: () => {
1739
- const t = this.getAttribute("max-altura");
1740
- return t && parseFloat(t) || 1600;
1936
+ const i = this.getAttribute("max-altura");
1937
+ return i && parseFloat(i) || 1600;
1741
1938
  },
1742
- onAlturaAlterada: (t) => {
1743
- this.alturaCustomizada = t, this.salvarLembrancaEstado();
1939
+ onAlturaAlterada: (i) => {
1940
+ this.alturaCustomizada = i, this.salvarLembrancaEstado();
1744
1941
  }
1745
1942
  });
1746
1943
  }
@@ -1768,20 +1965,20 @@ const T = class T extends De {
1768
1965
  }
1769
1966
  connectedCallback() {
1770
1967
  if (this.persistir) {
1771
- const a = ee(this.obterChaveStorageAtual());
1968
+ const a = te(this.obterChaveStorageAtual());
1772
1969
  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));
1773
1970
  }
1774
- this.hasAttribute("altura") && this.resizerController.definirAltura(this.getAttribute("altura"), !1), this.persistir && !this.storageKey && !this.id && (T.instanciasChavePadrao.size > 0 && console.warn(
1971
+ this.hasAttribute("altura") && this.resizerController.definirAltura(this.getAttribute("altura"), !1), this.persistir && !this.storageKey && !this.id && (R.instanciasChavePadrao.size > 0 && console.warn(
1775
1972
  "[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."
1776
- ), T.instanciasChavePadrao.add(this)), this.resizerController.init(), this.render(), this.conectarEventosGerais(), La(this, this, this.shadow, this.corpoElement, this.listeners), this.conectado = !0, this.camadas.length > 0 && this.salvarLembrancaEstado();
1973
+ ), R.instanciasChavePadrao.add(this)), this.resizerController.init(), this.render(), this.conectarEventosGerais(), Ra(this, this, this.shadow, this.corpoElement, this.listeners), this.conectado = !0, this.camadas.length > 0 && this.salvarLembrancaEstado();
1777
1974
  }
1778
1975
  disconnectedCallback() {
1779
- var a;
1780
- this.conectado = !1, T.instanciasChavePadrao.delete(this), (a = this.resizerController) == null || a.destruir(), this.listeners.cleanup();
1976
+ var a, i;
1977
+ this.conectado = !1, R.instanciasChavePadrao.delete(this), (a = this.resizerController) == null || a.destruir(), (i = this.dragDropManager) == null || i.destruir(), Aa(this), this.listeners.cleanup();
1781
1978
  }
1782
- attributeChangedCallback(a, t, i) {
1783
- var r;
1784
- t !== i && (a === "colapsado" ? this.salvarLembrancaEstado() : a === "camada-ativa" ? (this.sincronizarCamadaAtivaDOM(), this.salvarLembrancaEstado()) : a === "mapa-base-ativo" ? i && this.marcarMapaBaseAtivoNoDOM(i) : a === "mostrar-mapas-base" || a === "mostrar-rodape" || a === "mostrar-busca" || a === "colapsavel" || a === "flutuante" ? this.solicitarRenderizacao() : a === "altura" && ((r = this.resizerController) == null || r.definirAltura(i, !1)));
1979
+ attributeChangedCallback(a, i, t) {
1980
+ var o;
1981
+ 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 === "mostrar-rodape" || a === "mostrar-busca" || a === "colapsavel" || a === "flutuante" ? this.solicitarRenderizacao() : a === "altura" && ((o = this.resizerController) == null || o.definirAltura(t, !1)));
1785
1982
  }
1786
1983
  // --- Getters e Setters de Propriedades Reativas ---
1787
1984
  get titulo() {
@@ -1803,13 +2000,13 @@ const T = class T extends De {
1803
2000
  set mapaBaseAtivo(a) {
1804
2001
  this.setAttribute("mapa-base-ativo", a);
1805
2002
  }
1806
- selecionarMapaBase(a, t = !1) {
1807
- !a || this.mapaBaseAtivo === a || (this.mapaBaseAtivo = a, this.marcarMapaBaseAtivoNoDOM(a), this.salvarLembrancaEstado(), t && this.dispararEvento("ui-mapa-base-alterado", { mapaBaseId: a }));
2003
+ selecionarMapaBase(a, i = !1) {
2004
+ !a || this.mapaBaseAtivo === a || (this.mapaBaseAtivo = a, this.marcarMapaBaseAtivoNoDOM(a), this.salvarLembrancaEstado(), i && this.dispararEvento("ui-mapa-base-alterado", { mapaBaseId: a }));
1808
2005
  }
1809
2006
  marcarMapaBaseAtivoNoDOM(a) {
1810
- this.shadow.querySelectorAll("[data-basemap-id]").forEach((t) => {
1811
- const i = t.getAttribute("data-basemap-id") === a;
1812
- t.classList.toggle("active", i), t.setAttribute("aria-pressed", String(i));
2007
+ this.shadow.querySelectorAll("[data-basemap-id]").forEach((i) => {
2008
+ const t = i.getAttribute("data-basemap-id") === a;
2009
+ i.classList.toggle("active", t), i.setAttribute("aria-pressed", String(t));
1813
2010
  });
1814
2011
  }
1815
2012
  get abaAtiva() {
@@ -1884,38 +2081,25 @@ const T = class T extends De {
1884
2081
  set altura(a) {
1885
2082
  a != null ? (this.setAttribute("altura", String(a)), this.definirAltura(a)) : (this.removeAttribute("altura"), this.definirAltura(null));
1886
2083
  }
1887
- definirAltura(a, t = !0) {
1888
- var r;
1889
- (r = this.resizerController) == null || r.definirAltura(a, !1);
1890
- const i = a !== null ? parseFloat(String(a)) : null;
1891
- this.alturaCustomizada = isNaN(i) ? null : i, t && this.salvarLembrancaEstado();
2084
+ definirAltura(a, i = !0) {
2085
+ var o;
2086
+ (o = this.resizerController) == null || o.definirAltura(a, !1);
2087
+ const t = a !== null ? parseFloat(String(a)) : null;
2088
+ this.alturaCustomizada = isNaN(t) ? null : t, i && this.salvarLembrancaEstado();
1892
2089
  }
1893
2090
  // --- Gerenciamento de Persistência / Lembrança ---
1894
2091
  obterChaveStorageAtual() {
1895
- return ea(this.storageKey, this.id);
2092
+ return this.lembranca.chaveAtual();
1896
2093
  }
1897
2094
  /** Versão com debounce, para interações contínuas (seletor de cor, slider de opacidade). */
1898
2095
  agendarSalvarLembranca() {
1899
- this.salvarLembrancaDebounced();
2096
+ this.lembranca.agendar();
1900
2097
  }
1901
2098
  salvarLembrancaEstado() {
1902
- if (!this.persistir || !this.conectado) return;
1903
- const a = this.obterChaveStorageAtual(), t = ia({
1904
- estadoAnterior: ee(a),
1905
- origensCamadas: this.origensCamadas,
1906
- camadas: this.camadas,
1907
- expandedLayers: this.expandedLayers,
1908
- camadaAtivaId: this.camadaAtivaId,
1909
- painelColapsado: this.colapsado,
1910
- mapaBaseAtivo: this.mapaBaseAtivo,
1911
- densidade: this.densidade,
1912
- altura: this.alturaCustomizada,
1913
- camadasRemovidas: this.camadasRemovidas
1914
- });
1915
- this.camadasRemovidas.clear(), aa(a, t);
2099
+ this.lembranca.salvar();
1916
2100
  }
1917
2101
  limparLembranca() {
1918
- ta(this.obterChaveStorageAtual());
2102
+ this.lembranca.limpar();
1919
2103
  }
1920
2104
  // --- API Pública de Alta Ergonomia ---
1921
2105
  //
@@ -1945,105 +2129,56 @@ const T = class T extends De {
1945
2129
  set basemaps(a) {
1946
2130
  this.definirMapasBase(a);
1947
2131
  }
1948
- achatarCamadas(a, t = null) {
1949
- const i = [];
1950
- for (const r of a) {
1951
- const n = { ...r };
1952
- t && n.parentId === void 0 && (n.parentId = t), i.push(n), Array.isArray(r.children) && r.children.length > 0 && i.push(...this.achatarCamadas(r.children, r.id));
1953
- }
1954
- return i;
1955
- }
1956
- definirCamadas(a, t) {
1957
- if (this.camadas = Array.isArray(a) ? this.achatarCamadas(a) : [], this.origensCamadas.clear(), this.persistir) {
1958
- const r = ee(this.obterChaveStorageAtual());
1959
- ra(this.camadas, r, this.expandedLayers, this.origensCamadas), r != null && r.camadaAtivaId && this.camadas.some((n) => n.id === r.camadaAtivaId) && (this.camadaAtivaId = r.camadaAtivaId);
1960
- } else
1961
- this.camadas.forEach((r) => {
1962
- this.origensCamadas.set(r.id, re(r)), this.expandedLayers.has(r.id) || this.expandedLayers.add(r.id);
1963
- });
1964
- if (Array.isArray(t)) {
1965
- this.feicoes = t.map((s) => ({ ...s }));
1966
- const r = new Set(this.camadas.map((s) => s.id)), n = this.feicoes.filter((s) => s.layerId && !r.has(s.layerId));
1967
- n.length > 0 && console.warn(
1968
- `[UI-Camadas] ${n.length} feição(ões) possuem 'layerId' não cadastrado nas camadas:`,
1969
- n.map((s) => ({ id: s.id, nome: s.name, layerId: s.layerId }))
1970
- ), this.sincronizarSelecoesComFeicoesValidas();
1971
- }
1972
- const i = this.getAttribute("camada-ativa");
1973
- this.camadas.length > 0 && (!i || !this.camadas.some((r) => r.id === i)) && (this.camadaAtivaId = this.camadas[0].id), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
2132
+ definirCamadas(a, i) {
2133
+ _a(this, a, i);
1974
2134
  }
1975
2135
  definirFeicoes(a) {
1976
- this.feicoes = Array.isArray(a) ? a.map((t) => ({ ...t })) : [], this.sincronizarSelecoesComFeicoesValidas(), this.solicitarRenderizacao();
2136
+ Va(this, a);
1977
2137
  }
1978
2138
  definirMapasBase(a) {
1979
2139
  this.mapasBase = Array.isArray(a) ? [...a] : [], this.solicitarRenderizacao();
1980
2140
  }
1981
- definirCamadaAtiva(a, t = !1) {
1982
- !a || this.camadaAtivaId === a || (this.camadaAtivaId = a, this.sincronizarCamadaAtivaDOM(), this.salvarLembrancaEstado(), t && this.dispararEvento("ui-camada-selecionada", {
2141
+ definirCamadaAtiva(a, i = !1) {
2142
+ !a || this.camadaAtivaId === a || (this.camadaAtivaId = a, this.sincronizarCamadaAtivaDOM(), this.salvarLembrancaEstado(), i && this.dispararEvento("ui-camada-selecionada", {
1983
2143
  camadaId: a,
1984
- camada: this.camadas.find((i) => i.id === a)
2144
+ camada: this.camadas.find((t) => t.id === a)
1985
2145
  }));
1986
2146
  }
1987
2147
  obterCamada(a) {
1988
- return this.camadas.find((t) => t.id === a);
2148
+ return this.camadas.find((i) => i.id === a);
1989
2149
  }
1990
2150
  obterCamadaAtiva() {
1991
2151
  return this.camadas.find((a) => a.id === this.camadaAtivaId);
1992
2152
  }
1993
2153
  obterFeicao(a) {
1994
- return this.feicoes.find((t) => t.id === a);
2154
+ return this.feicoes.find((i) => i.id === a);
1995
2155
  }
1996
2156
  obterFeicoesSelecionadas() {
1997
2157
  return this.feicoes.filter((a) => this.selectedFeatureIds.has(a.id));
1998
2158
  }
1999
2159
  adicionarCamada(a) {
2000
- if (!a || !a.id) return;
2001
- if (this.camadas.some((i) => i.id === a.id)) {
2002
- console.warn(`[UI-Camadas] adicionarCamada ignorado: já existe uma camada com id '${a.id}'.`);
2003
- return;
2004
- }
2005
- const t = { ...a };
2006
- this.camadas.push(t), this.origensCamadas.set(t.id, re(t)), this.expandedLayers.add(t.id), t.parentId && this.expandedLayers.add(t.parentId), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
2160
+ Ka(this, a);
2007
2161
  }
2008
2162
  removerCamada(a) {
2009
- var t;
2010
- this.camadas.forEach((i) => {
2011
- i.parentId === a && (i.parentId = null);
2012
- }), this.camadas = this.camadas.filter((i) => i.id !== a), this.feicoes = this.feicoes.filter((i) => i.layerId !== a), this.origensCamadas.delete(a), this.camadasRemovidas.add(a), this.expandedLayers.delete(a), this.activeSettingsLayerId === a && (this.activeSettingsLayerId = null), this.sincronizarSelecoesComFeicoesValidas(), this.selectedFeatureIds.size === 0 && (this.lastClickedFeatureId = null), this.camadaAtivaId === a && (this.camadaAtivaId = ((t = this.camadas[0]) == null ? void 0 : t.id) ?? null), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
2163
+ Xa(this, a);
2013
2164
  }
2014
2165
  adicionarFeicao(a) {
2015
- if (!(!a || !a.id)) {
2016
- if (this.feicoes.some((t) => t.id === a.id)) {
2017
- console.warn(`[UI-Camadas] adicionarFeicao ignorado: já existe uma feição com id '${a.id}'.`);
2018
- return;
2019
- }
2020
- this.feicoes.push({ ...a }), this.solicitarRenderizacao();
2021
- }
2166
+ Qa(this, a);
2022
2167
  }
2023
2168
  atualizarFeicao(a) {
2024
- const t = this.feicoes.findIndex((i) => i.id === a.id);
2025
- t !== -1 && (this.feicoes[t] = { ...this.feicoes[t], ...a }, this.solicitarRenderizacao());
2169
+ Ja(this, a);
2026
2170
  }
2027
2171
  removerFeicao(a) {
2028
- this.feicoes = this.feicoes.filter((t) => t.id !== a), this.selectedFeatureIds.delete(a), this.solicitarRenderizacao();
2029
- }
2030
- selecionarFeicao(a, t = !1, i = !1, r = !1) {
2031
- const n = Ve(this.camadas, this.feicoes, this.expandedLayers, this.searchQuery), s = !i && !n.includes(a) && this.feicoes.some((c) => c.id === a), l = Ue(
2032
- s ? [...n, a] : n,
2033
- this.selectedFeatureIds,
2034
- this.lastClickedFeatureId,
2035
- a,
2036
- t,
2037
- i
2038
- );
2039
- l && (this.selectedFeatureIds = l.selecionados, this.lastClickedFeatureId = l.ultimoClicadoId, this.sincronizarSelecaoDOM(), r && this.notificarMudancaSelecao());
2172
+ Wa(this, a);
2040
2173
  }
2041
- selecionarFeicoes(a, t = !1) {
2042
- const i = a || [];
2043
- i.length === this.selectedFeatureIds.size && i.every((s) => this.selectedFeatureIds.has(s)) || (this.selectedFeatureIds.clear(), i.forEach((s) => this.selectedFeatureIds.add(s)), this.lastClickedFeatureId = i.length > 0 ? i[i.length - 1] : null, this.sincronizarSelecaoDOM(), t && this.notificarMudancaSelecao());
2174
+ selecionarFeicao(a, i = !1, t = !1, o = !1) {
2175
+ Ha(this, a, i, t, o);
2176
+ }
2177
+ selecionarFeicoes(a, i = !1) {
2178
+ Na(this, a, i);
2044
2179
  }
2045
2180
  limparSelecao(a = !1) {
2046
- this.selectedFeatureIds.size !== 0 && (this.selectedFeatureIds.clear(), this.lastClickedFeatureId = null, this.sincronizarSelecaoDOM(), a && this.notificarMudancaSelecao());
2181
+ Ga(this, a);
2047
2182
  }
2048
2183
  expandirTodas() {
2049
2184
  this.expandedLayers = new Set(this.camadas.map((a) => a.id)), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
@@ -2052,9 +2187,9 @@ const T = class T extends De {
2052
2187
  this.expandedLayers.clear(), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
2053
2188
  }
2054
2189
  alternarVisibilidadeTodas(a = !1) {
2055
- const i = !this.camadas.some((r) => r.visible !== !1);
2056
- this.camadas.forEach((r) => {
2057
- r.visible = i, a && this.dispararEvento("ui-camada-visibilidade", { camadaId: r.id, visivel: i });
2190
+ const t = !this.camadas.some((o) => o.visible !== !1);
2191
+ this.camadas.forEach((o) => {
2192
+ o.visible = t, a && this.dispararEvento("ui-camada-visibilidade", { camadaId: o.id, visivel: t });
2058
2193
  }), this.salvarLembrancaEstado(), this.solicitarRenderizacao();
2059
2194
  }
2060
2195
  colapsar(a = !1) {
@@ -2066,8 +2201,8 @@ const T = class T extends De {
2066
2201
  alternarColapso(a = !1) {
2067
2202
  this.definirColapso(!this.colapsado, a);
2068
2203
  }
2069
- definirColapso(a, t) {
2070
- this.colapsado !== a && (this.colapsado = a, t && this.dispararEvento("ui-colapso-alterado", { colapsado: a }));
2204
+ definirColapso(a, i) {
2205
+ this.colapsado !== a && (this.colapsado = a, i && this.dispararEvento("ui-colapso-alterado", { colapsado: a }));
2071
2206
  }
2072
2207
  // --- Renderização e Ciclo de Vida ---
2073
2208
  solicitarRenderizacao() {
@@ -2089,45 +2224,17 @@ const T = class T extends De {
2089
2224
  this.profundidadeLote--, this.profundidadeLote === 0 && this.renderPendente && (this.renderPendente = !1, this.render());
2090
2225
  }
2091
2226
  }
2092
- dispararEvento(a, t) {
2227
+ dispararEvento(a, i) {
2093
2228
  this.dispatchEvent(
2094
2229
  new CustomEvent(a, {
2095
- detail: t,
2230
+ detail: i,
2096
2231
  bubbles: !0,
2097
2232
  composed: !0
2098
2233
  })
2099
2234
  );
2100
2235
  }
2101
2236
  render() {
2102
- var d, m;
2103
- if (!this.corpoElement) return;
2104
- const a = Qe({
2105
- camadas: this.camadas,
2106
- feicoes: this.feicoes,
2107
- camadaAtivaId: this.camadaAtivaId,
2108
- expandedLayers: this.expandedLayers,
2109
- selectedFeatureIds: this.selectedFeatureIds,
2110
- activeSettingsLayerId: this.activeSettingsLayerId,
2111
- editingLayerId: this.editingLayerId,
2112
- editingFeatureId: this.editingFeatureId,
2113
- searchQuery: this.searchQuery,
2114
- mostrarBotaoColapsar: this.flutuante && this.getAttribute("colapsavel") !== "false"
2115
- }), t = this.mostrarMapasBase ? Ne(this.mapasBase, this.mapaBaseAtivo) : "", i = this.mostrarRodape ? Ge(this.camadas, this.feicoes, this.selectedFeatureIds) : "", r = this.shadow.getElementById("ui-layer-tree-mount"), n = this.corpoElement.scrollTop, s = r ? r.scrollTop : 0, l = this.shadow.activeElement, c = l && this.corpoElement.contains(l) ? l.id : "", f = l && !c && this.corpoElement.contains(l) ? Array.from(l.attributes).find((h) => h.name.startsWith("data-") && h.value !== "") : void 0, u = l && "selectionStart" in l ? l.selectionStart : null;
2116
- this.corpoElement.innerHTML = `
2117
- ${a}
2118
- ${i}
2119
- ${t}
2120
- `, this.corpoElement.scrollTop = n;
2121
- const p = this.shadow.getElementById("ui-layer-tree-mount");
2122
- if (p && (p.scrollTop = s), c) {
2123
- const h = this.shadow.getElementById(c);
2124
- if (h && (h.focus({ preventScroll: !0 }), u !== null && typeof h.setSelectionRange == "function"))
2125
- try {
2126
- h.setSelectionRange(u, u);
2127
- } catch {
2128
- }
2129
- }
2130
- !c && f && ((d = B(this.corpoElement, f.name, f.value)) == null || d.focus({ preventScroll: !0 })), (m = this.shadow.querySelector("[data-layer-row], [data-feat-row]")) == null || m.setAttribute("tabindex", "0"), xa(this, this.shadow), this.dragDropManager.bindAll();
2237
+ this.corpoElement && za(this, this.shadow, this.corpoElement, this.dragDropManager);
2131
2238
  }
2132
2239
  // --- Conexão de Eventos ---
2133
2240
  conectarEventosGerais() {
@@ -2135,45 +2242,32 @@ const T = class T extends De {
2135
2242
  }
2136
2243
  // --- Sincronização de DOM (delegada) ---
2137
2244
  sincronizarCamadaAtivaDOM() {
2138
- Ca(this, this.shadow);
2245
+ Oa(this, this.shadow);
2139
2246
  }
2140
2247
  sincronizarSelecaoDOM() {
2141
- $a(this, this.shadow);
2248
+ ja(this, this.shadow);
2142
2249
  }
2143
2250
  // --- Auxiliares Internos ---
2144
- sincronizarSelecoesComFeicoesValidas() {
2145
- Ye(this.selectedFeatureIds, this.feicoes);
2146
- }
2147
2251
  notificarMudancaSelecao() {
2148
- const a = this.feicoes.filter((t) => this.selectedFeatureIds.has(t.id));
2149
- this.dispararEvento("ui-feicoes-selecionadas", {
2150
- feicoesIds: Array.from(this.selectedFeatureIds),
2151
- feicoes: a
2152
- }), a.length === 1 ? this.dispararEvento("ui-feicao-selecionada", {
2153
- feicaoId: a[0].id,
2154
- feicao: a[0]
2155
- }) : a.length === 0 && this.dispararEvento("ui-feicao-selecionada", {
2156
- feicaoId: null,
2157
- feicao: null
2158
- });
2252
+ Ua(this);
2159
2253
  }
2160
2254
  };
2161
2255
  /** Painéis conectados sem `id` nem `storage-key`: dividem a mesma chave de persistência. */
2162
- I(T, "instanciasChavePadrao", /* @__PURE__ */ new Set());
2163
- let j = T;
2164
- class Ma extends j {
2256
+ E(R, "instanciasChavePadrao", /* @__PURE__ */ new Set());
2257
+ let H = R;
2258
+ class er extends H {
2165
2259
  }
2166
- class za extends j {
2260
+ class ar extends H {
2167
2261
  }
2168
- oe("ui-camadas", j);
2169
- oe("ui-painel-camadas", Ma);
2170
- oe("ui-layer-panel", za);
2171
- function Ta(e) {
2172
- var o;
2262
+ oe("ui-camadas", H);
2263
+ oe("ui-painel-camadas", er);
2264
+ oe("ui-layer-panel", ar);
2265
+ function nr(e) {
2266
+ var r;
2173
2267
  return {
2174
2268
  id: e.id,
2175
2269
  name: e.nome || e.id,
2176
- color: ((o = e.estilo) == null ? void 0 : o.corPrimaria) || "#00E08A",
2270
+ color: ((r = e.estilo) == null ? void 0 : r.corPrimaria) || "#00E08A",
2177
2271
  visible: e.visivel !== !1,
2178
2272
  locked: e.bloqueada === !0,
2179
2273
  opacity: typeof e.opacidade == "number" ? e.opacidade : 1,
@@ -2185,11 +2279,11 @@ function Ta(e) {
2185
2279
  dados: e.dados
2186
2280
  };
2187
2281
  }
2188
- function Pa(e, o = "levantamento", a = "feicoes") {
2282
+ function sr(e, r = "levantamento", a = "feicoes") {
2189
2283
  return {
2190
2284
  id: e.id,
2191
2285
  nome: e.name,
2192
- categoria: e.categoria || o,
2286
+ categoria: e.categoria || r,
2193
2287
  tipo: e.tipo || a,
2194
2288
  visivel: e.visible !== !1,
2195
2289
  opacidade: typeof e.opacity == "number" ? e.opacity : 1,
@@ -2204,17 +2298,17 @@ function Pa(e, o = "levantamento", a = "feicoes") {
2204
2298
  dados: typeof e.dados == "object" && e.dados !== null ? e.dados : void 0
2205
2299
  };
2206
2300
  }
2207
- function Oa(e, o = "") {
2208
- var r, n, s, l;
2209
- const a = ((r = e.geometria) == null ? void 0 : r.tipo) || ((n = e.geometria) == null ? void 0 : n.type) || e.tipo || e.type || "Polygon", t = ((s = e.geometria) == null ? void 0 : s.coordenadas) || ((l = e.geometria) == null ? void 0 : l.coordinates) || e.coordinates, i = e.cor || e.color;
2301
+ function lr(e, r = "") {
2302
+ var o, n, s, l;
2303
+ 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;
2210
2304
  return {
2211
2305
  id: String(e.id),
2212
2306
  name: e.nome || e.name || `Feição ${e.id}`,
2213
- layerId: e.layerId || e.camadaId || o,
2307
+ layerId: e.layerId || e.camadaId || r,
2214
2308
  type: a,
2215
2309
  geometryType: a,
2216
- coordinates: t,
2217
- color: i,
2310
+ coordinates: i,
2311
+ color: t,
2218
2312
  visible: e.visivel !== void 0 ? e.visivel : e.visible !== !1,
2219
2313
  locked: e.bloqueada !== void 0 ? e.bloqueada : e.locked === !0,
2220
2314
  status: e.status || "oficial",
@@ -2223,39 +2317,39 @@ function Oa(e, o = "") {
2223
2317
  };
2224
2318
  }
2225
2319
  export {
2226
- We as CamadasDragDropManager,
2227
- g as ICONES,
2228
- we as LIMITE_FEICOES_POR_CAMADA,
2229
- ye as MAPAS_BASE_PADRAO,
2230
- j as UICamadas,
2231
- za as UILayerPanel,
2232
- Na as UIMapaBase,
2233
- Ma as UIPainelCamadas,
2234
- Ha as UISeletorMapaBase,
2235
- J as calcularAreaAnelSimples,
2236
- ve as calcularAreaPoligono,
2237
- ge as calcularComprimentoLinha,
2238
- Pe as calcularDistanciaPontos,
2239
- Ue as calcularSelecaoFeicao,
2240
- ee as carregarEstadoPersistido,
2320
+ la as CamadasDragDropManager,
2321
+ b as ICONES,
2322
+ Ae as LIMITE_FEICOES_POR_CAMADA,
2323
+ we as MAPAS_BASE_PADRAO,
2324
+ H as UICamadas,
2325
+ ar as UILayerPanel,
2326
+ ur as UIMapaBase,
2327
+ er as UIPainelCamadas,
2328
+ pr as UISeletorMapaBase,
2329
+ W as calcularAreaAnelSimples,
2330
+ he as calcularAreaPoligono,
2331
+ be as calcularComprimentoLinha,
2332
+ je as calcularDistanciaPontos,
2333
+ Je as calcularSelecaoFeicao,
2334
+ te as carregarEstadoPersistido,
2241
2335
  Xe as construirHierarquiaCamadas,
2242
- Pa as converterCamadaItemParaCanvasLayer,
2243
- Ta as converterCanvasLayerParaCamadaItem,
2244
- Oa as converterFeicaoParaItem,
2245
- S as escapeHtml,
2246
- U as filtrarFeicoesPorBusca,
2247
- be as formatarMetricaFeicoes,
2248
- He as formatarOpcoesCamadasHierarquicas,
2249
- ea as gerarChaveStorage,
2250
- ta as limparEstadoPersistido,
2251
- ia as montarEstadoPersistido,
2252
- Ve as obterIdsVisiveisFeicoes,
2253
- ra as reidratarCamadasComOverrides,
2254
- Ye as removerSelecoesInvalidas,
2255
- Qe as renderizarArvoreCamadas,
2256
- Ne as renderizarGridMapasBase,
2257
- Ge as renderizarRodapeAcoes,
2336
+ sr as converterCamadaItemParaCanvasLayer,
2337
+ nr as converterCanvasLayerParaCamadaItem,
2338
+ lr as converterFeicaoParaItem,
2339
+ M as escapeHtml,
2340
+ _ as filtrarFeicoesPorBusca,
2341
+ xe as formatarMetricaFeicoes,
2342
+ Ye as formatarOpcoesCamadasHierarquicas,
2343
+ da as gerarChaveStorage,
2344
+ pa as limparEstadoPersistido,
2345
+ ma as montarEstadoPersistido,
2346
+ Qe as obterIdsVisiveisFeicoes,
2347
+ fa as reidratarCamadasComOverrides,
2348
+ ne as removerSelecoesInvalidas,
2349
+ We as renderizarArvoreCamadas,
2350
+ Ue as renderizarGridMapasBase,
2351
+ _e as renderizarRodapeAcoes,
2258
2352
  Ke as renderizarThumbGeometria,
2259
- aa as salvarEstadoPersistido,
2260
- re as snapshotCamada
2353
+ ua as salvarEstadoPersistido,
2354
+ ke as snapshotCamada
2261
2355
  };