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