@thibezer/ui-components-kit 2.8.1 → 2.8.2

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