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