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