@thibezer/ui-components-kit 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +54 -0
- package/README.md +760 -739
- package/dist/camadas.cjs +72 -72
- package/dist/camadas.js +700 -667
- package/dist/canvas.cjs +99 -140
- package/dist/canvas.js +5125 -1192
- package/dist/components/ui-camadas/camadas-persistencia.d.ts +4 -0
- package/dist/components/ui-camadas/ui-camadas.d.ts +10 -0
- package/dist/components/ui-canvas-cad/cad-estilos-externos.d.ts +16 -0
- package/dist/components/ui-canvas-cad/cad-eventos-canvas.d.ts +4 -0
- package/dist/components/ui-canvas-cad/cad-feicoes.d.ts +262 -0
- package/dist/components/ui-canvas-cad/cad-ferramentas-barra.d.ts +15 -0
- package/dist/components/ui-canvas-cad/cad-snap.d.ts +32 -0
- package/dist/components/ui-canvas-cad/cad-toolbar-painel.d.ts +1 -0
- package/dist/components/ui-canvas-cad/ui-canvas-cad.d.ts +143 -0
- package/dist/components/ui-lista-flutuante/lista-flutuante-posicionamento.d.ts +2 -0
- package/dist/components/ui-lista-flutuante/ui-lista-flutuante.d.ts +1 -0
- package/dist/components/ui-seletor-mapa-base/ui-seletor-mapa-base.d.ts +3 -0
- package/dist/components/ui-tabela/tabela-atributos-sync.d.ts +3 -0
- package/dist/components/ui-tabela/tabela-localizador.d.ts +8 -1
- package/dist/components/ui-tabela/tabela-orquestrador-dados.d.ts +4 -0
- package/dist/components/ui-tabela/tabela-selecao.d.ts +19 -9
- package/dist/components/ui-tabela/tipos.d.ts +6 -0
- package/dist/components/ui-tabela/ui-tabela.d.ts +41 -2
- package/dist/components/ui-tabela-propriedades/avaliador-expressao.d.ts +0 -5
- package/dist/components/ui-tabela-propriedades/propriedades-dom-utils.d.ts +17 -1
- package/dist/components/ui-tabela-propriedades/propriedades-flutuante.d.ts +2 -0
- package/dist/components/ui-tabela-propriedades/propriedades-gerenciador-valores.d.ts +10 -1
- package/dist/components/ui-tabela-propriedades/propriedades-render-arvore.d.ts +3 -1
- package/dist/components/ui-tabela-propriedades/ui-tabela-propriedades.d.ts +5 -1
- package/dist/core/alvo-digitavel.d.ts +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/svg-seguro.d.ts +10 -0
- package/dist/core.cjs +1 -1
- package/dist/core.js +12 -10
- package/dist/custom-elements.json +14782 -10666
- package/dist/data.cjs +1 -1
- package/dist/data.js +51 -46
- package/dist/forms.cjs +1 -1
- package/dist/forms.js +1 -1
- package/dist/gerencigeo-canvas/canvas_interacao.d.ts +18 -0
- package/dist/gerencigeo-canvas/feature_adapters.d.ts +35 -0
- package/dist/gerencigeo-canvas/feature_algoritmos.d.ts +45 -0
- package/dist/gerencigeo-canvas/feature_amostra.d.ts +4 -0
- package/dist/gerencigeo-canvas/feature_caixa.d.ts +19 -0
- package/dist/gerencigeo-canvas/feature_cluster.d.ts +61 -0
- package/dist/gerencigeo-canvas/feature_cursores.d.ts +17 -0
- package/dist/gerencigeo-canvas/feature_desenho.d.ts +53 -0
- package/dist/gerencigeo-canvas/feature_desenho_controle.d.ts +91 -0
- package/dist/gerencigeo-canvas/feature_edicao_ops.d.ts +19 -0
- package/dist/gerencigeo-canvas/feature_editor_vertices.d.ts +62 -0
- package/dist/gerencigeo-canvas/feature_formas.d.ts +7 -0
- package/dist/gerencigeo-canvas/feature_hud.d.ts +23 -0
- package/dist/gerencigeo-canvas/feature_indice.d.ts +36 -0
- package/dist/gerencigeo-canvas/feature_metricas.d.ts +16 -0
- package/dist/gerencigeo-canvas/feature_popup.d.ts +31 -0
- package/dist/gerencigeo-canvas/feature_selecao.d.ts +38 -0
- package/dist/gerencigeo-canvas/feature_simplificacao.d.ts +14 -0
- package/dist/gerencigeo-canvas/feature_snap.d.ts +25 -0
- package/dist/gerencigeo-canvas/feature_types.d.ts +86 -0
- package/dist/gerencigeo-canvas/feature_versoes.d.ts +19 -0
- package/dist/gerencigeo-canvas/index.d.ts +21 -0
- package/dist/gerencigeo-canvas/layer_hit_test.d.ts +30 -0
- package/dist/gerencigeo-canvas/layer_manager.d.ts +11 -3
- package/dist/gerencigeo-canvas/layer_pane_ops.d.ts +9 -0
- package/dist/gerencigeo-canvas/mapa_controller.d.ts +1 -0
- package/dist/gerencigeo-canvas/mapa_pontos_shapes.d.ts +24 -5
- package/dist/gerencigeo-canvas/renderers/feicoes_renderer.d.ts +89 -0
- package/dist/gerencigeo-canvas/renderers/vector_points_renderer.d.ts +1 -0
- package/dist/gerencigeo-canvas/renderers/vector_polygons_renderer.d.ts +2 -2
- package/dist/gerencigeo-canvas/types.d.ts +12 -0
- package/dist/gerencigeo-canvas/utils.d.ts +3 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +111 -106
- package/dist/leaflet-DcO7uRC-.cjs +1 -0
- package/dist/{leaflet-DkaFZYc5.js → leaflet-PPDKB6Dd.js} +37 -37
- package/dist/mapa.cjs +1 -1
- package/dist/mapa.js +1 -1
- package/dist/register.cjs +1 -1
- package/dist/register.js +3 -3
- package/dist/seletor-mapa-base.cjs +13 -13
- package/dist/seletor-mapa-base.js +101 -51
- package/dist/svg-seguro-BsbNQqpd.js +50 -0
- package/dist/svg-seguro-C76iLlAZ.cjs +1 -0
- package/dist/tabela.cjs +1 -1
- package/dist/tabela.js +41 -36
- package/dist/tipos-elementos.d.ts +17 -4
- package/dist/tipos-vue.d.ts +15 -4
- package/dist/tools.cjs +1 -1
- package/dist/tools.js +1 -1
- package/dist/{ui-paleta-ferramentas-BIytXQLh.js → ui-paleta-ferramentas-CEZYcN4J.js} +18 -27
- package/dist/{ui-paleta-ferramentas-DqLY51qa.cjs → ui-paleta-ferramentas-Dbj1kBS9.cjs} +6 -6
- package/dist/{ui-switch-DWLgVVnT.js → ui-switch-BcOqOkiV.js} +124 -96
- package/dist/ui-switch-D7iPKDj-.cjs +53 -0
- package/dist/ui-tabela-propriedades-BBr5sqki.cjs +145 -0
- package/dist/{ui-tabela-propriedades-BNcE6VLX.js → ui-tabela-propriedades-Boy7I5yW.js} +1304 -1072
- package/package.json +169 -169
- package/dist/leaflet-Cw6tqYFh.cjs +0 -1
- package/dist/ui-switch-yZIn3IW0.cjs +0 -53
- package/dist/ui-tabela-propriedades-D3pyQvyy.cjs +0 -145
package/dist/camadas.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var qe=Object.defineProperty;var De=(a,o,e)=>o in a?qe(a,o,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[o]=e;var x=(a,o,e)=>De(a,typeof o!="symbol"?o+"":o,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});;/* empty css */const N=require("./ssr-safe-CiHD1adl.cjs"),Te=require("./listener-bag-D5omxZ9h.cjs"),le=require("./seletor-mapa-base.cjs"),h={camadas:`<svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
2
2
|
<polygon points="12 2 2 7 12 12 22 7 12 2"></polygon>
|
|
3
3
|
<polyline points="2 17 12 22 22 17"></polyline>
|
|
4
4
|
<polyline points="2 12 12 17 22 12"></polyline>
|
|
@@ -74,32 +74,32 @@
|
|
|
74
74
|
<line x1="3" y1="15" x2="21" y2="15"></line>
|
|
75
75
|
<line x1="9" y1="3" x2="9" y2="21"></line>
|
|
76
76
|
<line x1="15" y1="3" x2="15" y2="21"></line>
|
|
77
|
-
</svg>`},
|
|
77
|
+
</svg>`},Y=6378137;function ce(a,o){if(!a||!o)return 0;const e=a[0]*Math.PI/180,t=a[1]*Math.PI/180,r=o[0]*Math.PI/180,i=o[1]*Math.PI/180,s=r-e,n=i-t,c=Math.sin(s/2)*Math.sin(s/2)+Math.cos(e)*Math.cos(r)*Math.sin(n/2)*Math.sin(n/2);return Y*2*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))}function J(a){if(!Array.isArray(a)||a.length<2)return 0;if(Array.isArray(a[0])&&Array.isArray(a[0][0]))return a.reduce((e,t)=>e+J(t),0);let o=0;for(let e=0;e<a.length-1;e++){const t=a[e],r=a[e+1];Array.isArray(t)&&Array.isArray(r)&&t.length>=2&&r.length>=2&&(o+=ce([t[0],t[1]],[r[0],r[1]]))}return o}function W(a){if(!Array.isArray(a)||a.length===0)return 0;if(Array.isArray(a[0])&&Array.isArray(a[0][0]))return a.reduce((r,i)=>r+W(i),0);const o=a.length;if(o<3)return 0;let e=0;for(let r=0;r<o;r++){const i=a[r],s=a[(r+1)%o],n=a[(r+2)%o];if(!Array.isArray(i)||!Array.isArray(s)||!Array.isArray(n))continue;const c=(s[1]-i[1])*(Math.PI/180),l=(s[0]-i[0])*(Math.PI/180),u=(n[1]-s[1])*(Math.PI/180),p=(n[0]-s[0])*(Math.PI/180);e+=c*p-l*u}const t=Math.abs(e*(Y*Y)/2);return isNaN(t)?0:t}function X(a){if(!a||a.length===0)return"";const o=a.filter(t=>t.type==="Polygon"||t.type==="MultiPolygon"||t.geometryType==="Polygon");if(o.length>0){const t=o.reduce((r,i)=>r+(W(i.coordinates)||0),0);return t>=1e4?`${(t/1e4).toLocaleString("pt-BR",{minimumFractionDigits:1,maximumFractionDigits:2})} ha`:`${Math.round(t).toLocaleString("pt-BR")} m²`}const e=a.filter(t=>t.type==="LineString"||t.type==="MultiLineString"||t.geometryType==="LineString");if(e.length>0){const t=e.reduce((r,i)=>r+(J(i.coordinates)||0),0);return t>=1e3?`${(t/1e3).toLocaleString("pt-BR",{minimumFractionDigits:1,maximumFractionDigits:2})} km`:`${Math.round(t).toLocaleString("pt-BR")} m`}return""}function k(a){return a==null?"":String(a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}const Pe=/^(#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})|(?:rgb|hsl)a?\(\s*[\w.%\s,/+-]+\)|[a-z]{3,30})$/i;function R(a,o="#00E08A"){if(!a||typeof a!="string")return o;const e=a.trim();return Pe.test(e)?e:o}function Q(a){return Math.max(0,Math.min(255,Math.round(a))).toString(16).padStart(2,"0")}function Oe(a,o,e){const t=o/100,r=e/100,i=c=>(c+a/30)%12,s=t*Math.min(r,1-r),n=c=>r-s*Math.max(-1,Math.min(i(c)-3,Math.min(9-i(c),1)));return[n(0)*255,n(8)*255,n(4)*255]}function Re(a,o="#000000"){if(!a||typeof a!="string")return o;const e=a.trim().toLowerCase(),t=/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.exec(e);if(t){const i=t[1];return i.length<=4?`#${i[0]}${i[0]}${i[1]}${i[1]}${i[2]}${i[2]}`:`#${i.slice(0,6)}`}const r=/^(rgb|hsl)a?\(([^)]+)\)$/.exec(e);if(r){const i=r[2].split(/[\s,/]+/).filter(Boolean).map(s=>parseFloat(s));if(i.length>=3&&i.slice(0,3).every(s=>!isNaN(s))){const[s,n,c]=i,[l,u,p]=r[1]==="rgb"?[s,n,c]:Oe(s,n,c);return`#${Q(l)}${Q(u)}${Q(p)}`}}return o}function S(a,o,e){const t=a.querySelectorAll(`[${o}]`);for(let r=0;r<t.length;r++)if(t[r].getAttribute(o)===e)return t[r];return null}function de(a,o=80){let e=null;return(...t)=>{e&&clearTimeout(e),e=setTimeout(()=>{a(...t),e=null},o)}}function $(a,o){a.setAttribute("title",o),a.setAttribute("aria-label",o)}const Z=[{id:"none",nome:"Sem Mapa",descricao:"Tela CAD neutra com grade quadriculada"},{id:"google_satelite_puro",nome:"Google Puro",descricao:"Satélite limpo sem ruas ou rótulos",thumbnailUrl:"https://images.unsplash.com/photo-1524661135-423995f22d0b?w=160&auto=format&fit=crop&q=80"},{id:"google_satelite",nome:"Google Híbrido",descricao:"Satélite com nomes de ruas e divisas",thumbnailUrl:"https://images.unsplash.com/photo-1524661135-423995f22d0b?w=160&auto=format&fit=crop&q=80"},{id:"satelite",nome:"Esri Satélite",descricao:"Imagens orbitais de alta resolução",thumbnailUrl:"https://images.unsplash.com/photo-1451187580459-43490279c0fa?w=160&auto=format&fit=crop&q=80"},{id:"osm",nome:"OpenStreetMap",descricao:"Mapa viário e urbano colaborativo",thumbnailUrl:"https://images.unsplash.com/photo-1569336415962-a4bd9f69cd83?w=160&auto=format&fit=crop&q=80"},{id:"topografia",nome:"Topografia",descricao:"Curvas de nível e relevo sombreado",thumbnailUrl:"https://images.unsplash.com/photo-1464822759023-fed622ff2c3b?w=160&auto=format&fit=crop&q=80"},{id:"dark",nome:"Dark Canvas",descricao:"Mapa escuro de alto contraste para CAD",thumbnailUrl:"https://images.unsplash.com/photo-1518709268805-4e9042af9f23?w=160&auto=format&fit=crop&q=80"}];function ue(a=Z,o="satelite"){return!a||a.length===0?"":`
|
|
78
78
|
<div class="ui-basemap-section">
|
|
79
79
|
<div class="ui-basemap-title">Mapa Base</div>
|
|
80
80
|
<div class="ui-basemap-grid">
|
|
81
|
-
${a.map(t=>{const r=
|
|
82
|
-
<div class="ui-basemap-card ${r?"active":""}" data-basemap-id="${
|
|
83
|
-
${
|
|
81
|
+
${a.map(t=>{const r=o===t.id,i=k(t.id),s=k(t.nome),n=k(t.descricao||t.nome);let c="";return t.thumbnailUrl?c=`<img class="ui-basemap-preview" src="${k(t.thumbnailUrl)}" alt="" loading="lazy" referrerpolicy="no-referrer" data-basemap-thumb />`:c=`<div class="ui-basemap-preview-none">${h.gradeCad}</div>`,`
|
|
82
|
+
<div class="ui-basemap-card ${r?"active":""}" data-basemap-id="${i}" role="button" tabindex="0" aria-pressed="${r}" title="${n}">
|
|
83
|
+
${c}
|
|
84
84
|
<span>${s}</span>
|
|
85
85
|
</div>
|
|
86
86
|
`}).join("")}
|
|
87
87
|
</div>
|
|
88
88
|
</div>
|
|
89
|
-
`}function
|
|
89
|
+
`}function pe(a,o,e){const t=o.filter(l=>e.has(l.id)),r=t.length>0,i=X(t),s=r?t.length:a.length,n=r?t.length>1?"selecionados":"selecionado":a.length>1?"camadas":"camada",c=a.map(l=>`<option value="${k(l.id)}">${k(l.name)}</option>`).join("");return`
|
|
90
90
|
<div class="ui-tree-footer">
|
|
91
91
|
<div class="ui-footer-left">
|
|
92
92
|
<span class="ui-footer-count" id="footer-count">${s}</span>
|
|
93
|
-
<span class="ui-footer-label" id="footer-label">${
|
|
94
|
-
<span class="ui-footer-metric" style="display: ${
|
|
93
|
+
<span class="ui-footer-label" id="footer-label">${n}</span>
|
|
94
|
+
<span class="ui-footer-metric" style="display: ${i?"inline-flex":"none"};">${i?`${h.reguaMetrica} ${i}`:""}</span>
|
|
95
95
|
</div>
|
|
96
96
|
<div class="ui-footer-right">
|
|
97
97
|
<button class="ui-footer-btn ${r?"":"disabled"}" id="btn-footer-vis" title="Alternar visibilidade coletiva" aria-label="Alternar visibilidade coletiva" ${r?"":"disabled"}>
|
|
98
|
-
${
|
|
98
|
+
${h.olhoAberto}
|
|
99
99
|
</button>
|
|
100
100
|
|
|
101
101
|
<button class="ui-footer-btn ${r?"":"disabled"}" id="btn-footer-lock" title="Alternar bloqueio coletivo" aria-label="Alternar bloqueio coletivo" ${r?"":"disabled"}>
|
|
102
|
-
${
|
|
102
|
+
${h.cadeadoTrancado}
|
|
103
103
|
</button>
|
|
104
104
|
|
|
105
105
|
<div class="ui-footer-color-wrapper ${r?"":"disabled"}" title="Alterar cor dos selecionados">
|
|
@@ -109,83 +109,83 @@
|
|
|
109
109
|
<div class="ui-footer-move-wrapper ${r?"":"disabled"}" title="Mover selecionados para outra camada">
|
|
110
110
|
<select id="select-footer-move" aria-label="Mover selecionados para outra camada" class="ui-footer-select" ${r?"":"disabled"}>
|
|
111
111
|
<option value="" disabled selected>📂</option>
|
|
112
|
-
${
|
|
112
|
+
${c}
|
|
113
113
|
</select>
|
|
114
114
|
</div>
|
|
115
115
|
|
|
116
116
|
<button class="ui-footer-btn" id="btn-footer-new-layer" title="Criar Nova Camada" aria-label="Criar Nova Camada">
|
|
117
|
-
${
|
|
117
|
+
${h.mais}
|
|
118
118
|
</button>
|
|
119
119
|
|
|
120
120
|
<button class="ui-footer-btn ${r?"":"disabled"}" id="btn-footer-del" title="Excluir selecionados" aria-label="Excluir selecionados" ${r?"":"disabled"}>
|
|
121
|
-
${
|
|
121
|
+
${h.lixeira}
|
|
122
122
|
</button>
|
|
123
123
|
|
|
124
|
-
${r?`<button class="ui-footer-btn" id="btn-footer-clear" title="Limpar seleção" aria-label="Limpar seleção">${
|
|
124
|
+
${r?`<button class="ui-footer-btn" id="btn-footer-clear" title="Limpar seleção" aria-label="Limpar seleção">${h.fechar}</button>`:""}
|
|
125
125
|
</div>
|
|
126
126
|
</div>
|
|
127
|
-
`}const
|
|
127
|
+
`}const ee=80;function H(a,o){const e=(o||"").trim().toLowerCase();return e?a.filter(t=>(t.name||"").toLowerCase().includes(e)||(t.category||"").toLowerCase().includes(e)||(t.type||"").toLowerCase().includes(e)):a}function fe(a,o,e,t="",r=ee){const i=(t||"").trim()!=="",s=[],n=new Map;for(let c=0;c<o.length;c++){const l=o[c],u=l.layerId||"";n.has(u)||n.set(u,[]),n.get(u).push(l)}for(let c=0;c<a.length;c++){const l=a[c];if(i||e.has(l.id)){const u=H(n.get(l.id)||[],t).slice(0,r);for(let p=0;p<u.length;p++)s.push(u[p].id)}}return s}function me(a,o,e,t,r,i){if(!a.includes(t))return null;const s=new Set(o);let n=e;if(i&&e&&a.includes(e)){const c=a.indexOf(e),l=a.indexOf(t),u=Math.min(c,l),p=Math.max(c,l);r||s.clear();for(let d=u;d<=p;d++)s.add(a[d])}else r?(s.has(t)?s.delete(t):s.add(t),n=t):(s.clear(),s.add(t),n=t);return{selecionados:s,ultimoClicadoId:n}}function he(a,o){if(a.size===0)return;const e=new Set(o.map(t=>t.id));for(const t of a)e.has(t)||a.delete(t)}function ge(a,o){const e=R(o,"#00E08A"),t=(a||"").toLowerCase();return 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="${e}" fill-opacity="0.45" stroke="${e}" 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="${e}" 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="${e}" 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="${e}" stroke="#ffffff" stroke-width="1.2"/></svg>`}function ve(a){const{camadas:o,feicoes:e,camadaAtivaId:t,expandedLayers:r,selectedFeatureIds:i,activeSettingsLayerId:s,editingLayerId:n,editingFeatureId:c,searchQuery:l,limiteFeicoesPorCamada:u=ee,mostrarBotaoColapsar:p=!1}=a,d=(l||"").trim().toLowerCase(),f=new Map;for(let g=0;g<e.length;g++){const b=e[g],w=b.layerId||"";f.has(w)||f.set(w,[]),f.get(w).push(b)}const m=o.every(g=>g.visible!==!1),v=o.length>0&&o.every(g=>r.has(g.id)),E=`
|
|
128
128
|
<div class="ui-tree-toolbar">
|
|
129
129
|
<div class="ui-tree-title-group">
|
|
130
130
|
<span class="ui-tree-section-title">CAMADAS</span>
|
|
131
|
-
<span class="ui-tree-count-badge">${
|
|
131
|
+
<span class="ui-tree-count-badge">${o.length}</span>
|
|
132
132
|
</div>
|
|
133
133
|
<div class="ui-tree-actions">
|
|
134
|
-
<button id="btn-toggle-all-vis" class="ui-tree-action-btn" title="${
|
|
135
|
-
${
|
|
134
|
+
<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"}">
|
|
135
|
+
${m?h.olhoAberto:h.olhoFechado}
|
|
136
136
|
</button>
|
|
137
|
-
<button id="btn-toggle-all-expand" class="ui-tree-action-btn" aria-label="${
|
|
138
|
-
<span class="ui-chevron-icon ${
|
|
137
|
+
<button id="btn-toggle-all-expand" class="ui-tree-action-btn" aria-label="${v?"Recolher Todos os Grupos":"Expandir Todos os Grupos"}" title="${v?"Recolher Todos os Grupos":"Expandir Todos os Grupos"}">
|
|
138
|
+
<span class="ui-chevron-icon ${v?"open":""}">${h.chevronDir}</span>
|
|
139
139
|
</button>
|
|
140
140
|
<button id="btn-add-layer" class="ui-tree-btn-new" title="Adicionar nova camada vetorial">
|
|
141
|
-
${
|
|
141
|
+
${h.mais} Camada
|
|
142
142
|
</button>
|
|
143
|
-
${p?`<button id="btn-colapsar" class="ui-camadas-btn-colapsar" title="Recolher painel" aria-label="Recolher painel">${
|
|
143
|
+
${p?`<button id="btn-colapsar" class="ui-camadas-btn-colapsar" title="Recolher painel" aria-label="Recolher painel">${h.recolherPainel}</button>`:""}
|
|
144
144
|
</div>
|
|
145
145
|
</div>
|
|
146
146
|
|
|
147
147
|
<div class="ui-tree-search-wrapper">
|
|
148
|
-
<span class="ui-tree-search-icon">${
|
|
148
|
+
<span class="ui-tree-search-icon">${h.busca}</span>
|
|
149
149
|
<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="${k(l)}" />
|
|
150
|
-
${l?`<button class="ui-tree-search-clear" id="btn-clear-layer-search" title="Limpar busca" aria-label="Limpar busca">${
|
|
150
|
+
${l?`<button class="ui-tree-search-clear" id="btn-clear-layer-search" title="Limpar busca" aria-label="Limpar busca">${h.fechar}</button>`:""}
|
|
151
151
|
</div>
|
|
152
|
-
`,y=
|
|
153
|
-
<div class="ui-feat-row ${
|
|
154
|
-
<div class="ui-col ui-col-eye" data-feat-eye="${C}" role="button" tabindex="0" aria-label="${
|
|
155
|
-
${
|
|
152
|
+
`,y=o.map(g=>{const b=k(g.id),w=k(g.name||"Camada"),L=R(g.color,"#00E08A"),q=g.visible!==!1,F=g.locked===!0,D=d?!0:r.has(g.id),U=s===g.id,ae=t===g.id,I=H(f.get(g.id)||[],d),te=I.length>0&&I.every(A=>i.has(A.id)),Ce=!te&&I.some(A=>i.has(A.id)),Se=I.slice(0,u),$e=I.length>u,Me=Se.map(A=>{const C=k(A.id),ie=k(A.name||"Feição"),oe=R(A.color,L),T=A.visible!==!1,V=F,_=A.locked===!0||V,se=V?"Bloqueada pela camada":_?"Desbloquear Feição":"Bloquear Feição",G=i.has(A.id),ne=A.status;let K="";return ne==="oficial"?K='<span class="ui-geom-tag oficial" title="Geometria Oficial">OFICIAL</span>':ne==="previa"&&(K='<span class="ui-geom-tag previa" title="Geometria Prévia">PRÉVIA</span>'),`
|
|
153
|
+
<div class="ui-feat-row ${G?"selected-row":""} ${T?"":"hidden-row"}" data-feat-row="${C}" data-feat-select="${C}" data-feat-layer="${b}" role="treeitem" aria-selected="${G}" tabindex="-1" draggable="true" title="Clique para selecionar | Arraste para reordenar">
|
|
154
|
+
<div class="ui-col ui-col-eye" data-feat-eye="${C}" role="button" tabindex="0" aria-label="${T?"Ocultar Feição":"Exibir Feição"}" title="${T?"Ocultar Feição":"Exibir Feição"}">
|
|
155
|
+
${T?h.olhoAberto:h.olhoFechado}
|
|
156
156
|
</div>
|
|
157
157
|
|
|
158
|
-
<div class="ui-col ui-col-lock ${_?"":"ui-lock-open"}" data-feat-lock="${C}" ${
|
|
159
|
-
${_?
|
|
158
|
+
<div class="ui-col ui-col-lock ${_?"":"ui-lock-open"}" data-feat-lock="${C}" ${V?'data-locked-by-layer="true"':""} role="button" tabindex="0" aria-label="${se}" title="${se}">
|
|
159
|
+
${_?h.cadeadoTrancado:h.cadeadoAberto}
|
|
160
160
|
</div>
|
|
161
161
|
|
|
162
|
-
<div class="ui-col ui-col-colorbar" style="background: ${
|
|
162
|
+
<div class="ui-col ui-col-colorbar" style="background: ${oe};"></div>
|
|
163
163
|
<div class="ui-col ui-col-branch"><span style="opacity: 0.35;">└─</span></div>
|
|
164
164
|
<div class="ui-col ui-col-thumb">
|
|
165
|
-
<div class="ui-thumb-box">${
|
|
165
|
+
<div class="ui-thumb-box">${ge(A.type||A.geometryType,oe)}</div>
|
|
166
166
|
</div>
|
|
167
167
|
|
|
168
168
|
<div class="ui-col ui-col-name" data-feat-name-trigger="${C}" title="Duplo clique para renomear">
|
|
169
|
-
${
|
|
169
|
+
${c===A.id?`<input type="text" class="ui-inline-rename-input" data-inline-feat-input="${C}" value="${ie}" />`:`<span class="ui-name-text">${ie}</span>${K}`}
|
|
170
170
|
</div>
|
|
171
171
|
|
|
172
172
|
<div class="ui-col ui-col-actions">
|
|
173
|
-
<button class="ui-micro-btn" data-feat-fit="${C}" title="Enquadrar no mapa" aria-label="Enquadrar feição no mapa">${
|
|
173
|
+
<button class="ui-micro-btn" data-feat-fit="${C}" title="Enquadrar no mapa" aria-label="Enquadrar feição no mapa">${h.alvoEnquadrar}</button>
|
|
174
174
|
</div>
|
|
175
175
|
|
|
176
176
|
<div class="ui-col ui-col-target" data-feat-target="${C}" role="button" tabindex="0" aria-label="Selecionar feição" title="Selecionar feição">
|
|
177
|
-
<div class="ui-target-circle ${
|
|
177
|
+
<div class="ui-target-circle ${G?"selected":""}"></div>
|
|
178
178
|
</div>
|
|
179
179
|
</div>
|
|
180
|
-
`}).join(""),
|
|
181
|
-
<div class="ui-layer-settings-drawer" id="settings-drawer-${
|
|
180
|
+
`}).join(""),ze=$e?`<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 ${u} de ${I.length} feições. Use a busca acima para filtrar.</div>`:"",re=g.opacity!==void 0?g.opacity:1,Fe=Math.round(re*100),Be=U?`
|
|
181
|
+
<div class="ui-layer-settings-drawer" id="settings-drawer-${b}" style="--drawer-cor-camada: ${L};">
|
|
182
182
|
<div class="ui-drawer-header">
|
|
183
183
|
<div class="ui-drawer-header-left">
|
|
184
|
-
<span class="ui-drawer-icon">${
|
|
184
|
+
<span class="ui-drawer-icon">${h.engrenagem}</span>
|
|
185
185
|
<span class="ui-drawer-title">Configurações da Camada</span>
|
|
186
186
|
</div>
|
|
187
|
-
<button type="button" class="ui-drawer-btn-fechar" data-layer-settings-close="${
|
|
188
|
-
${
|
|
187
|
+
<button type="button" class="ui-drawer-btn-fechar" data-layer-settings-close="${b}" title="Fechar configurações (Esc)" aria-label="Fechar configurações">
|
|
188
|
+
${h.fechar}
|
|
189
189
|
</button>
|
|
190
190
|
</div>
|
|
191
191
|
|
|
@@ -197,9 +197,9 @@
|
|
|
197
197
|
</div>
|
|
198
198
|
<div class="ui-drawer-color-group">
|
|
199
199
|
<label class="ui-drawer-color-pill" title="Clique para alterar a cor da camada">
|
|
200
|
-
<span class="ui-drawer-color-sample" id="sample-color-${
|
|
201
|
-
<span class="ui-drawer-color-hex" id="hex-color-${
|
|
202
|
-
<input type="color" aria-label="Cor da camada" data-layer-color-picker="${
|
|
200
|
+
<span class="ui-drawer-color-sample" id="sample-color-${b}" style="background-color: ${L};"></span>
|
|
201
|
+
<span class="ui-drawer-color-hex" id="hex-color-${b}">${L.toUpperCase()}</span>
|
|
202
|
+
<input type="color" aria-label="Cor da camada" data-layer-color-picker="${b}" value="${Re(L,"#00e08a")}" class="ui-drawer-color-native" />
|
|
203
203
|
</label>
|
|
204
204
|
</div>
|
|
205
205
|
</div>
|
|
@@ -208,10 +208,10 @@
|
|
|
208
208
|
<div class="ui-drawer-row">
|
|
209
209
|
<div class="ui-drawer-row-label">
|
|
210
210
|
<span>Opacidade</span>
|
|
211
|
-
<span class="ui-drawer-badge" id="badge-op-${
|
|
211
|
+
<span class="ui-drawer-badge" id="badge-op-${b}">${Fe}%</span>
|
|
212
212
|
</div>
|
|
213
213
|
<div class="ui-drawer-slider-container">
|
|
214
|
-
<input type="range" aria-label="Opacidade da camada" min="0.05" max="1" step="0.05" value="${Number(
|
|
214
|
+
<input type="range" aria-label="Opacidade da camada" min="0.05" max="1" step="0.05" value="${Number(re)||0}" data-layer-opacity-slider="${b}" class="ui-drawer-slider" />
|
|
215
215
|
</div>
|
|
216
216
|
</div>
|
|
217
217
|
</div>
|
|
@@ -221,54 +221,54 @@
|
|
|
221
221
|
<span>${I.length} ${I.length===1?"feição":"feições"} nesta camada</span>
|
|
222
222
|
</div>
|
|
223
223
|
<div class="ui-drawer-actions">
|
|
224
|
-
<button type="button" class="ui-drawer-btn-danger" data-delete-layer="${
|
|
225
|
-
${
|
|
224
|
+
<button type="button" class="ui-drawer-btn-danger" data-delete-layer="${b}" title="Excluir esta camada e todas as suas feições">
|
|
225
|
+
${h.lixeira}
|
|
226
226
|
<span class="ui-btn-label">Excluir Camada</span>
|
|
227
227
|
</button>
|
|
228
228
|
</div>
|
|
229
229
|
</div>
|
|
230
230
|
</div>
|
|
231
231
|
`:"";return`
|
|
232
|
-
<div class="ui-layer-group" data-layer-id="${
|
|
233
|
-
<div class="ui-layer-row ${
|
|
234
|
-
<div class="ui-col ui-col-drag" title="Arrastar para reordenar Z-Index">${
|
|
232
|
+
<div class="ui-layer-group" data-layer-id="${b}" role="treeitem" aria-expanded="${D}">
|
|
233
|
+
<div class="ui-layer-row ${q?"":"hidden-layer"} ${ae?"active-drawing-layer":""}" data-layer-row="${b}" data-layer-id="${b}" tabindex="-1" draggable="true" style="--layer-active-color: ${L};">
|
|
234
|
+
<div class="ui-col ui-col-drag" title="Arrastar para reordenar Z-Index">${h.dragHandle}</div>
|
|
235
235
|
|
|
236
|
-
<div class="ui-col ui-col-eye" data-layer-eye="${
|
|
237
|
-
${
|
|
236
|
+
<div class="ui-col ui-col-eye" data-layer-eye="${b}" role="button" tabindex="0" aria-label="${q?"Ocultar Camada":"Exibir Camada"}" title="${q?"Ocultar Camada":"Exibir Camada"}">
|
|
237
|
+
${q?h.olhoAberto:h.olhoFechado}
|
|
238
238
|
</div>
|
|
239
239
|
|
|
240
|
-
<div class="ui-col ui-col-lock ${
|
|
241
|
-
${
|
|
240
|
+
<div class="ui-col ui-col-lock ${F?"":"ui-lock-open"}" data-layer-lock="${b}" role="button" tabindex="0" aria-label="${F?"Desbloquear Camada":"Bloquear Camada"}" title="${F?"Desbloquear Camada":"Bloquear Camada"}">
|
|
241
|
+
${F?h.cadeadoTrancado:h.cadeadoAberto}
|
|
242
242
|
</div>
|
|
243
243
|
|
|
244
244
|
<div class="ui-col ui-col-colorbar" style="background: ${L};"></div>
|
|
245
245
|
|
|
246
|
-
<div class="ui-col ui-col-chevron" data-layer-expand="${
|
|
247
|
-
<span class="ui-chevron-icon ${
|
|
246
|
+
<div class="ui-col ui-col-chevron" data-layer-expand="${b}" role="button" tabindex="0" aria-label="${D?"Recolher grupo":"Expandir grupo"}">
|
|
247
|
+
<span class="ui-chevron-icon ${D?"open":""}">${h.chevronDir}</span>
|
|
248
248
|
</div>
|
|
249
249
|
|
|
250
|
-
<div class="ui-col ui-col-name" data-layer-name-trigger="${
|
|
251
|
-
${
|
|
252
|
-
${
|
|
250
|
+
<div class="ui-col ui-col-name" data-layer-name-trigger="${b}" title="Clique para ativar camada de desenho | Duplo clique para renomear">
|
|
251
|
+
${n===g.id?`<input type="text" class="ui-inline-rename-input" data-inline-layer-input="${b}" value="${w}" />`:`<span class="ui-name-text">${w}</span>
|
|
252
|
+
${ae?'<span class="ui-active-badge" title="Camada ativa para novos desenhos">✓ Ativa</span>':""}
|
|
253
253
|
<span class="ui-count-chip">${I.length}</span>`}
|
|
254
254
|
</div>
|
|
255
255
|
|
|
256
256
|
<div class="ui-col ui-col-actions">
|
|
257
|
-
<button class="ui-micro-btn" data-layer-fit="${
|
|
258
|
-
<button class="ui-micro-btn ${
|
|
257
|
+
<button class="ui-micro-btn" data-layer-fit="${b}" title="Enquadrar camada no mapa" aria-label="Enquadrar camada no mapa">${h.alvoEnquadrar}</button>
|
|
258
|
+
<button class="ui-micro-btn ${U?"active":""}" data-layer-settings="${b}" title="Ajustar cor, opacidade e excluir" aria-label="Configurações da camada" aria-expanded="${U}">${h.engrenagem}</button>
|
|
259
259
|
</div>
|
|
260
260
|
|
|
261
|
-
<div class="ui-col ui-col-target" data-layer-target="${
|
|
262
|
-
<div class="ui-target-circle ${
|
|
261
|
+
<div class="ui-col ui-col-target" data-layer-target="${b}" role="button" tabindex="0" aria-label="Selecionar todas as feições deste grupo" title="Selecionar todas as feições deste grupo">
|
|
262
|
+
<div class="ui-target-circle ${te?"selected":Ce?"partial":""}"></div>
|
|
263
263
|
</div>
|
|
264
264
|
</div>
|
|
265
265
|
|
|
266
|
-
${
|
|
266
|
+
${Be}
|
|
267
267
|
|
|
268
|
-
<div class="ui-children-container" role="group" style="display: ${
|
|
269
|
-
${$e}
|
|
268
|
+
<div class="ui-children-container" role="group" style="display: ${D?"block":"none"};">
|
|
270
269
|
${Me}
|
|
271
|
-
${
|
|
270
|
+
${ze}
|
|
271
|
+
${I.length===0?`<div class="ui-empty-row"><span>${d?"Nenhum item correspondente":"Nenhum elemento neste grupo"}</span></div>`:""}
|
|
272
272
|
</div>
|
|
273
273
|
</div>
|
|
274
274
|
`}).join("");return`
|
|
@@ -278,8 +278,8 @@
|
|
|
278
278
|
${y}
|
|
279
279
|
</div>
|
|
280
280
|
</div>
|
|
281
|
-
`}class ve{constructor(i,e){x(this,"host");x(this,"shadow");this.host=i,this.shadow=e}bindAll(){this.bindInlineRename(),this.bindDragAndDrop()}bindInlineRename(){this.shadow.querySelectorAll("[data-layer-name-trigger]").forEach(i=>{i.addEventListener("dblclick",e=>{e.stopPropagation();const t=i.getAttribute("data-layer-name-trigger");if(!t)return;this.host.editingLayerId=t,this.host.solicitarRenderizacao();const r=$(this.shadow,"data-inline-layer-input",t);if(r){r.focus(),r.select();let o=!1;const s=c=>{var n,l;if(!o){if(o=!0,this.host.editingLayerId=null,c){const d=r.value.trim(),p=this.host.camadas.find(u=>u.id===t);d&&p&&p.name!==d&&(p.name=d,(l=(n=this.host).salvarLembrancaEstado)==null||l.call(n),this.host.dispararEvento("ui-camada-renomeada",{camadaId:t,novoNome:d,camada:p}))}this.host.solicitarRenderizacao()}};r.addEventListener("keydown",c=>{c.key==="Enter"?(c.preventDefault(),s(!0)):c.key==="Escape"&&(c.preventDefault(),s(!1))}),r.addEventListener("blur",()=>s(!0))}})}),this.shadow.querySelectorAll("[data-feat-name-trigger]").forEach(i=>{i.addEventListener("dblclick",e=>{e.stopPropagation();const t=i.getAttribute("data-feat-name-trigger");if(!t)return;this.host.editingFeatureId=t,this.host.solicitarRenderizacao();const r=$(this.shadow,"data-inline-feat-input",t);if(r){r.focus(),r.select();let o=!1;const s=c=>{if(!o){if(o=!0,this.host.editingFeatureId=null,c){const n=r.value.trim(),l=this.host.feicoes.find(d=>d.id===t);n&&l&&l.name!==n&&(l.name=n,this.host.dispararEvento("ui-feicao-renomeada",{feicaoId:t,novoNome:n,feicao:l}))}this.host.solicitarRenderizacao()}};r.addEventListener("keydown",c=>{c.key==="Enter"?(c.preventDefault(),s(!0)):c.key==="Escape"&&(c.preventDefault(),s(!1))}),r.addEventListener("blur",()=>s(!0))}})})}bindDragAndDrop(){let i=null,e=null,t=null;const r=()=>{this.shadow.querySelectorAll(".ui-layer-row, .ui-feat-row, .ui-layer-group").forEach(o=>{o.classList.remove("dragging","drop-above","drop-below","drop-into")})};this.shadow.querySelectorAll('.ui-layer-row[draggable="true"]').forEach(o=>{const s=o.getAttribute("data-layer-id");s&&(o.addEventListener("dragstart",c=>{const n=c;if(n.target.closest("input, button, select")||this.host.editingLayerId||this.host.editingFeatureId){n.preventDefault();return}i="layer",e=s,n.dataTransfer&&(n.dataTransfer.setData("text/plain",JSON.stringify({type:"layer",id:s})),n.dataTransfer.effectAllowed="move"),o.classList.add("dragging")}),o.addEventListener("dragover",c=>{const n=c;if(n.preventDefault(),n.stopPropagation(),n.dataTransfer&&(n.dataTransfer.dropEffect="move"),i==="layer"){if(e===s)return;const l=o.getBoundingClientRect(),d=n.clientY-l.top<l.height/2;o.classList.toggle("drop-above",d),o.classList.toggle("drop-below",!d)}else i==="feature"&&o.classList.add("drop-into")}),o.addEventListener("dragleave",c=>{const n=c.relatedTarget;n&&o.contains(n)||o.classList.remove("drop-above","drop-below","drop-into")}),o.addEventListener("drop",c=>{var d,p;const n=c;n.preventDefault(),n.stopPropagation();const l=o.classList.contains("drop-above");if(r(),i==="layer"){if(!e||e===s)return;const u=this.host.camadas.findIndex(b=>b.id===e);if(u===-1)return;const[f]=this.host.camadas.splice(u,1),g=this.host.camadas.findIndex(b=>b.id===s);g===-1?this.host.camadas.push(f):this.host.camadas.splice(l?g:g+1,0,f),(p=(d=this.host).salvarLembrancaEstado)==null||p.call(d),this.host.dispararEvento("ui-camadas-reordenadas",{camadas:[...this.host.camadas]}),this.host.solicitarRenderizacao()}else if(i==="feature"){if(!t)return;const u=this.host.feicoes.find(g=>g.id===t),f=this.host.camadas.find(g=>g.id===s);if(u&&f&&u.layerId!==s){const g=u.layerId;u.layerId=s,this.host.dispararEvento("ui-feicao-movida",{feicaoId:u.id,camadaOrigemId:g,camadaDestinoId:s,feicao:u}),this.host.solicitarRenderizacao()}}}),o.addEventListener("dragend",()=>{i=null,e=null,t=null,r()}))}),this.shadow.querySelectorAll('.ui-feat-row[draggable="true"]').forEach(o=>{const s=o.getAttribute("data-feat-row"),c=o.getAttribute("data-feat-layer");s&&(o.addEventListener("dragstart",n=>{const l=n;if(l.target.closest("input, button, select")||this.host.editingLayerId||this.host.editingFeatureId){l.preventDefault();return}l.stopPropagation(),i="feature",t=s,e=c,l.dataTransfer&&(l.dataTransfer.setData("text/plain",JSON.stringify({type:"feature",id:s,layerId:c})),l.dataTransfer.effectAllowed="move"),o.classList.add("dragging")}),o.addEventListener("dragover",n=>{const l=n;if(i!=="feature"||t===s)return;l.preventDefault(),l.stopPropagation(),l.dataTransfer&&(l.dataTransfer.dropEffect="move");const d=o.getBoundingClientRect(),p=l.clientY-d.top<d.height/2;o.classList.toggle("drop-above",p),o.classList.toggle("drop-below",!p)}),o.addEventListener("dragleave",n=>{const l=n.relatedTarget;l&&o.contains(l)||o.classList.remove("drop-above","drop-below")}),o.addEventListener("drop",n=>{const l=n;if(i!=="feature"||!t||t===s)return;l.preventDefault(),l.stopPropagation();const d=o.classList.contains("drop-above");r();const p=this.host.feicoes.findIndex(h=>h.id===t);if(p===-1)return;const u=this.host.feicoes.find(h=>h.id===s);if(!u)return;const[f]=this.host.feicoes.splice(p,1),g=f.layerId,b=u.layerId,E=g!==b;E&&(f.layerId=b);const y=this.host.feicoes.findIndex(h=>h.id===s);y===-1?this.host.feicoes.push(f):this.host.feicoes.splice(d?y:y+1,0,f),E&&this.host.dispararEvento("ui-feicao-movida",{feicaoId:f.id,camadaOrigemId:g,camadaDestinoId:b,feicao:f}),this.host.dispararEvento("ui-feicoes-reordenadas",{feicoes:[...this.host.feicoes]}),this.host.solicitarRenderizacao()}),o.addEventListener("dragend",n=>{n.stopPropagation(),i=null,t=null,e=null,r()}))})}}const Re="ui_camadas_estado_";function be(a,i){const e=(a||i||"default").trim();return`${Re}${e}`}function T(a){if(typeof window>"u"||typeof localStorage>"u")return null;try{const i=localStorage.getItem(a);if(!i)return null;const e=JSON.parse(i);if(e&&typeof e=="object")return e}catch(i){console.warn(`[UI-Camadas] Não foi possível carregar o estado persistido (${a}):`,i)}return null}function xe(a,i){if(!(typeof window>"u"||typeof localStorage>"u"))try{localStorage.setItem(a,JSON.stringify(i))}catch(e){console.warn(`[UI-Camadas] Não foi possível salvar o estado persistido (${a}):`,e)}}function ye(a){if(!(typeof window>"u"||typeof localStorage>"u"))try{localStorage.removeItem(a)}catch{}}function O(a){return{name:a.name,visible:a.visible!==!1,locked:!!a.locked,opacity:typeof a.opacity=="number"?a.opacity:1,color:a.color||"#00E08A"}}function we(a,i,e,t){if(!Array.isArray(a))return;const r=(i==null?void 0:i.camadasOverrides)||{},o=new Set((i==null?void 0:i.expandedLayerIds)||[]),s=new Set((i==null?void 0:i.collapsedLayerIds)||[]),c=o.size>0||s.size>0;for(let n=0;n<a.length;n++){const l=a[n],d=r[l.id];if(t==null||t.set(l.id,O(l)),d){const p=d.origem,u=f=>{var b;const g=(b=t==null?void 0:t.get(l.id))==null?void 0:b[f];return p!==void 0&&p[f]!==g};typeof d.name=="string"&&d.name.trim()&&!u("name")&&(l.name=d.name),typeof d.visible=="boolean"&&!u("visible")&&(l.visible=d.visible),typeof d.locked=="boolean"&&!u("locked")&&(l.locked=d.locked),typeof d.opacity=="number"&&!u("opacity")&&(l.opacity=d.opacity),typeof d.color=="string"&&!u("color")&&(l.color=d.color)}c?o.has(l.id)?e.add(l.id):s.has(l.id)?e.delete(l.id):e.add(l.id):e.add(l.id)}if(Array.isArray(i==null?void 0:i.ordemCamadasIds)&&i.ordemCamadasIds.length>0){const n=new Map;i.ordemCamadasIds.forEach((l,d)=>n.set(l,d)),a.sort((l,d)=>{const p=n.has(l.id)?n.get(l.id):9999,u=n.has(d.id)?n.get(d.id):9999;return p-u})}}function Ee(a){const{estadoAnterior:i,camadas:e,expandedLayers:t}=a;let r=(i==null?void 0:i.expandedLayerIds)||[],o=(i==null?void 0:i.collapsedLayerIds)||[],s=(i==null?void 0:i.ordemCamadasIds)||[];const c={...(i==null?void 0:i.camadasOverrides)||{}};return e.length>0&&(r=[],o=[],s=e.map(n=>n.id),e.forEach(n=>{var l,d;t.has(n.id)?r.push(n.id):o.push(n.id),c[n.id]={name:n.name,visible:n.visible!==!1,locked:!!n.locked,opacity:typeof n.opacity=="number"?n.opacity:1,color:n.color||"#00E08A",origem:((l=a.origensCamadas)==null?void 0:l.get(n.id))??((d=c[n.id])==null?void 0:d.origem)}})),{versao:1,expandedLayerIds:r,collapsedLayerIds:o,camadaAtivaId:a.camadaAtivaId,painelColapsado:a.painelColapsado,ordemCamadasIds:s,mapaBaseAtivo:a.mapaBaseAtivo,densidade:a.densidade,altura:a.altura,camadasOverrides:c,ultimaAtualizacao:Date.now()}}const je=':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: 15px;--camada-transicao: .16s cubic-bezier(.16, 1, .3, 1)}:host([densidade="compacto"]){--camada-linha-altura: 22px;--camada-thumb-tamanho: 13px;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-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;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:18px;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:2.5px;background:var(--ui-cor-fundo, #0d0d10);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:28px;min-height:28px;background:var(--ui-cor-fundo-elevado, #111115);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));display:flex;align-items:center;justify-content:space-between;padding:0 6px;gap:4px}.ui-footer-left{display:flex;align-items:center;gap:4px;white-space:nowrap;min-width:0}.ui-footer-count{font-size:10.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-primaria, #00E08A)}.ui-footer-label{font-size:10px;font-weight:500;color:var(--ui-cor-texto-secundario, #888899)}.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}.ui-footer-right{display:flex;align-items:center;gap:2px;flex-shrink:0}.ui-footer-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:20px;height:20px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:3px;transition:all var(--camada-transicao)}.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-color-wrapper,.ui-footer-move-wrapper{display:flex;align-items:center}.ui-footer-color{width:15px;height:15px;border:none;background:transparent;cursor:pointer;padding:0}.ui-footer-select{background:var(--ui-cor-fundo, #18181d);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #e1e1e6);border-radius:3px;font-size:9.5px;height:20px;padding:0 2px;cursor:pointer}.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}';function Ne(a,i){i.querySelectorAll("[data-layer-row]").forEach(r=>{r.addEventListener("click",o=>{if(o.target.closest("[data-layer-eye], [data-layer-lock], [data-layer-expand], [data-layer-target], [data-layer-fit], [data-layer-settings], input, button"))return;const c=r.getAttribute("data-layer-row");c&&a.definirCamadaAtiva(c,!0)})}),i.querySelectorAll("[data-layer-expand]").forEach(r=>{r.addEventListener("click",o=>{o.stopPropagation();const s=r.getAttribute("data-layer-expand");if(!s)return;a.expandedLayers.has(s)?a.expandedLayers.delete(s):a.expandedLayers.add(s);const c=r.closest(".ui-layer-group"),n=r.querySelector(".ui-chevron-icon"),l=a.expandedLayers.has(s);if(n&&n.classList.toggle("open",l),c){const d=c.querySelector(".ui-children-container");d&&(d.style.display=l?"block":"none")}a.salvarLembrancaEstado()})}),i.querySelectorAll("[data-layer-eye]").forEach(r=>{r.addEventListener("click",o=>{o.stopPropagation();const s=r.getAttribute("data-layer-eye"),c=a.camadas.find(n=>n.id===s);if(c){c.visible=c.visible===!1;const n=c.visible!==!1;r.innerHTML=n?m.olhoAberto:m.olhoFechado,S(r,n?"Ocultar Camada":"Exibir Camada");const l=r.closest(".ui-layer-row");l&&l.classList.toggle("hidden-layer",!n),He(a,i),a.salvarLembrancaEstado(),a.dispararEvento("ui-camada-visibilidade",{camadaId:c.id,visivel:n})}})}),i.querySelectorAll("[data-layer-lock]").forEach(r=>{r.addEventListener("click",o=>{o.stopPropagation();const s=r.getAttribute("data-layer-lock"),c=a.camadas.find(n=>n.id===s);c&&(c.locked=!c.locked,r.innerHTML=c.locked?m.cadeadoTrancado:m.cadeadoAberto,r.classList.toggle("ui-lock-open",!c.locked),S(r,c.locked?"Desbloquear Camada":"Bloquear Camada"),Ue(a,i,c.id,c.locked===!0),a.salvarLembrancaEstado(),a.dispararEvento("ui-camada-bloqueio",{camadaId:c.id,bloqueado:c.locked}))})}),i.querySelectorAll("[data-layer-fit]").forEach(r=>{r.addEventListener("click",o=>{o.stopPropagation();const s=r.getAttribute("data-layer-fit");s&&a.dispararEvento("ui-camada-enquadrar",{camadaId:s})})}),i.querySelectorAll("[data-layer-settings]").forEach(r=>{r.addEventListener("click",o=>{o.stopPropagation();const s=r.getAttribute("data-layer-settings");a.activeSettingsLayerId=a.activeSettingsLayerId===s?null:s,a.solicitarRenderizacao()})}),i.querySelectorAll("[data-layer-settings-close]").forEach(r=>{r.addEventListener("click",o=>{o.stopPropagation(),a.activeSettingsLayerId=null,a.solicitarRenderizacao()})});const e=(r,o,s)=>{const c=a.camadas.find(f=>f.id===r);if(!c)return;const n=P(o,c.color||"#00E08A");c.color=n;const l=i.getElementById(`sample-color-${r}`);l&&(l.style.backgroundColor=n);const d=i.getElementById(`hex-color-${r}`);d&&(d.textContent=n.toUpperCase());const p=i.getElementById(`settings-drawer-${r}`);p&&p.style.setProperty("--drawer-cor-camada",n);const u=$(i,"data-layer-row",r);if(u){u.style.setProperty("--layer-active-color",n);const f=u.querySelector(".ui-col-colorbar");f&&(f.style.backgroundColor=n)}s?a.salvarLembrancaEstado():a.agendarSalvarLembranca(),a.dispararEvento("ui-camada-cor",{camadaId:c.id,cor:n})};i.querySelectorAll("[data-layer-color-picker]").forEach(r=>{const o=r,s=c=>n=>{const l=o.getAttribute("data-layer-color-picker");if(!l)return;const d=n.target.value;e(l,d,c)};o.addEventListener("input",s(!1)),o.addEventListener("change",s(!0))});const t=(r,o)=>{const s=a.camadas.find(l=>l.id===r);if(!s)return;s.opacity=o;const c=i.getElementById(`badge-op-${r}`);c&&(c.textContent=`${Math.round(o*100)}%`);const n=$(i,"data-layer-opacity-slider",r);n&&parseFloat(n.value)!==o&&(n.value=String(o)),a.agendarSalvarLembranca(),a.dispararEvento("ui-camada-opacidade",{camadaId:s.id,opacidade:o})};i.querySelectorAll("[data-layer-opacity-slider]").forEach(r=>{r.addEventListener("input",o=>{const s=r.getAttribute("data-layer-opacity-slider");if(!s)return;const c=parseFloat(o.target.value);t(s,c)})}),i.querySelectorAll("[data-delete-layer]").forEach(r=>{let o=null;r.addEventListener("click",s=>{s.stopPropagation();const c=r.getAttribute("data-delete-layer");if(!c)return;if(r.classList.contains("confirming")){o&&clearTimeout(o),a.dispararEvento("ui-camada-excluida",{camadaId:c});const l=a.selectedFeatureIds.size;a.removerCamada(c),a.selectedFeatureIds.size!==l&&a.notificarMudancaSelecao()}else{r.classList.add("confirming");const l=r.querySelector(".ui-btn-label");l&&(l.textContent="Confirmar Exclusão?"),o=setTimeout(()=>{r.classList.remove("confirming"),l&&(l.textContent="Excluir Camada")},3500)}})}),i.querySelectorAll("[data-layer-target]").forEach(r=>{r.addEventListener("click",o=>{o.stopPropagation();const s=o,c=r.getAttribute("data-layer-target"),n=j(a.feicoes.filter(d=>d.layerId===c),a.searchQuery);if(n.length===0)return;n.every(d=>a.selectedFeatureIds.has(d.id))?n.forEach(d=>a.selectedFeatureIds.delete(d.id)):(!s.ctrlKey&&!s.metaKey&&a.selectedFeatureIds.clear(),n.forEach(d=>a.selectedFeatureIds.add(d.id))),a.lastClickedFeatureId=n[n.length-1].id,a.sincronizarSelecaoDOM(),a.notificarMudancaSelecao()})})}function He(a,i){const e=i.getElementById("btn-toggle-all-vis");if(!e)return;const t=a.camadas.every(r=>r.visible!==!1);e.innerHTML=t?m.olhoAberto:m.olhoFechado,S(e,t?"Ocultar Todas as Camadas":"Exibir Todas as Camadas")}function Ue(a,i,e,t){a.feicoes.filter(r=>r.layerId===e).forEach(r=>{const o=$(i,"data-feat-lock",r.id);if(!o)return;const s=r.locked===!0||t;o.innerHTML=s?m.cadeadoTrancado:m.cadeadoAberto,o.classList.toggle("ui-lock-open",!s),t?o.setAttribute("data-locked-by-layer","true"):o.removeAttribute("data-locked-by-layer"),S(o,t?"Bloqueada pela camada":s?"Desbloquear Feição":"Bloquear Feição")})}function _e(a,i){const e=i.getElementById("btn-footer-vis");e&&e.addEventListener("click",()=>{const l=a.feicoes.filter(u=>a.selectedFeatureIds.has(u.id));if(l.length===0)return;const p=!l.some(u=>u.visible!==!1);l.forEach(u=>u.visible=p),a.dispararEvento("ui-acao-massa",{acao:"visibilidade",feicoesIds:l.map(u=>u.id),feicoes:l,valor:p}),a.solicitarRenderizacao()});const t=i.getElementById("btn-footer-lock");t&&t.addEventListener("click",()=>{const l=a.feicoes.filter(u=>a.selectedFeatureIds.has(u.id));if(l.length===0)return;const p=!l.some(u=>u.locked===!0);l.forEach(u=>u.locked=p),a.dispararEvento("ui-acao-massa",{acao:"bloqueio",feicoesIds:l.map(u=>u.id),feicoes:l,valor:p}),a.solicitarRenderizacao()});const r=i.getElementById("input-footer-color");r&&r.addEventListener("change",l=>{const d=l.target.value,p=a.feicoes.filter(u=>a.selectedFeatureIds.has(u.id));p.length!==0&&(p.forEach(u=>{u.color=d,u.style={...u.style||{},fillColor:d,strokeColor:d}}),a.dispararEvento("ui-acao-massa",{acao:"cor",feicoesIds:p.map(u=>u.id),feicoes:p,valor:d}),a.solicitarRenderizacao())});const o=i.getElementById("select-footer-move");o&&o.addEventListener("change",l=>{const d=l.target.value;if(!d)return;const p=a.feicoes.filter(f=>a.selectedFeatureIds.has(f.id));if(p.length===0)return;const u=new Map(p.map(f=>[f.id,f.layerId]));p.forEach(f=>f.layerId=d),p.forEach(f=>{u.get(f.id)!==d&&a.dispararEvento("ui-feicao-movida",{feicaoId:f.id,camadaOrigemId:u.get(f.id),camadaDestinoId:d,feicao:f})}),a.dispararEvento("ui-acao-massa",{acao:"mover",feicoesIds:p.map(f=>f.id),feicoes:p,valor:d}),a.solicitarRenderizacao()});const s=i.getElementById("btn-footer-new-layer");s&&s.addEventListener("click",()=>{a.dispararEvento("ui-camada-adicionar",{})});const c=i.getElementById("btn-footer-del");if(c){let l=null;const d="Excluir selecionados";c.addEventListener("click",()=>{const p=Array.from(a.selectedFeatureIds);if(p.length===0)return;if(!c.classList.contains("confirming")){c.classList.add("confirming"),S(c,`Clique novamente para excluir ${p.length} selecionado(s)`),l=setTimeout(()=>{c.classList.remove("confirming"),S(c,d)},3500);return}l&&clearTimeout(l);const u=a.feicoes.filter(f=>a.selectedFeatureIds.has(f.id));a.feicoes=a.feicoes.filter(f=>!a.selectedFeatureIds.has(f.id)),a.selectedFeatureIds.clear(),a.lastClickedFeatureId=null,a.dispararEvento("ui-acao-massa",{acao:"excluir",feicoesIds:p,feicoes:u}),a.notificarMudancaSelecao(),a.solicitarRenderizacao()})}const n=i.getElementById("btn-footer-clear");n&&n.addEventListener("click",()=>a.limparSelecao(!0))}function Ve(a,i){const e=i.getElementById("btn-toggle-all-vis");e&&e.addEventListener("click",()=>a.alternarVisibilidadeTodas(!0));const t=i.getElementById("btn-toggle-all-expand");t&&t.addEventListener("click",s=>{s.stopPropagation(),a.camadas.length>0&&a.camadas.every(n=>a.expandedLayers.has(n.id))?a.colapsarTodas():a.expandirTodas()});const r=i.getElementById("btn-add-layer");r&&r.addEventListener("click",()=>{a.dispararEvento("ui-camada-adicionar",{})});const o=i.getElementById("btn-colapsar");o&&o.addEventListener("click",()=>a.colapsar(!0)),Ge(a,i)}function Ge(a,i){const e=i.getElementById("input-layer-search"),t=i.getElementById("btn-clear-layer-search"),r=()=>{var o;a.searchQuery="",a.solicitarRenderizacao(),(o=i.getElementById("input-layer-search"))==null||o.focus()};if(e){const o=ce(()=>a.solicitarRenderizacao(),75);e.addEventListener("input",s=>{a.searchQuery=s.target.value,o()}),e.addEventListener("keydown",s=>{s.key==="Escape"&&a.searchQuery&&(s.preventDefault(),r())})}t&&t.addEventListener("click",r)}function Ke(a,i){i.querySelectorAll("[data-feat-select]").forEach(e=>{e.addEventListener("click",t=>{if(a.editingFeatureId)return;const r=t;if(r.target.closest("[data-feat-eye], [data-feat-lock], [data-feat-fit], [data-feat-target], input, button"))return;const s=e.getAttribute("data-feat-select");s&&a.selecionarFeicao(s,r.ctrlKey||r.metaKey,r.shiftKey,!0)})}),i.querySelectorAll("[data-feat-target]").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const r=t,o=e.getAttribute("data-feat-target");o&&a.selecionarFeicao(o,r.ctrlKey||r.metaKey,r.shiftKey,!0)})}),i.querySelectorAll("[data-feat-eye]").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const r=e.getAttribute("data-feat-eye"),o=a.feicoes.find(s=>s.id===r);if(o){o.visible=o.visible===!1;const s=o.visible!==!1;e.innerHTML=s?m.olhoAberto:m.olhoFechado,S(e,s?"Ocultar Feição":"Exibir Feição");const c=e.closest(".ui-feat-row");c&&c.classList.toggle("hidden-row",!s),a.dispararEvento("ui-feicao-visibilidade",{feicaoId:o.id,visivel:s})}})}),i.querySelectorAll("[data-feat-lock]").forEach(e=>{e.addEventListener("click",t=>{if(t.stopPropagation(),e.hasAttribute("data-locked-by-layer"))return;const r=e.getAttribute("data-feat-lock"),o=a.feicoes.find(s=>s.id===r);o&&(o.locked=!o.locked,e.innerHTML=o.locked?m.cadeadoTrancado:m.cadeadoAberto,e.classList.toggle("ui-lock-open",!o.locked),S(e,o.locked?"Desbloquear Feição":"Bloquear Feição"),a.dispararEvento("ui-feicao-bloqueio",{feicaoId:o.id,bloqueado:o.locked}))})}),i.querySelectorAll("[data-feat-fit]").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const r=e.getAttribute("data-feat-fit");r&&a.dispararEvento("ui-feicao-enquadrar",{feicaoId:r})})})}function Qe(a,i){i.querySelectorAll("[data-basemap-thumb]").forEach(e=>{e.addEventListener("error",()=>{const t=document.createElement("div");t.className="ui-basemap-preview-none",t.innerHTML=m.mapa,e.replaceWith(t)},{once:!0})}),i.querySelectorAll("[data-basemap-id]").forEach(e=>{e.addEventListener("click",()=>{const t=e.getAttribute("data-basemap-id");t&&a.selecionarMapaBase(t,!0)})})}function Ye(a,i){Ve(a,i),Ne(a,i),Ke(a,i),Qe(a,i),_e(a,i)}const Je='[role="button"][tabindex]',z="[data-layer-row], [data-feat-row]",We=["color","range","checkbox","radio","button"];function Ae(a){return a instanceof HTMLSelectElement||a instanceof HTMLTextAreaElement?!0:a instanceof HTMLInputElement&&!We.includes(a.type)}function Xe(a){return Array.from(a.querySelectorAll(z)).filter(i=>{const e=i.closest(".ui-children-container");return!(e&&e.style.display==="none")&&!i.classList.contains("ui-search-hidden")})}function D(a,i){i&&(a.querySelectorAll(z).forEach(e=>e.setAttribute("tabindex","-1")),i.setAttribute("tabindex","0"),i.focus())}function Ze(a,i){a.dispatchEvent(new MouseEvent("click",{bubbles:!0,ctrlKey:i.ctrlKey||i.metaKey,shiftKey:i.shiftKey}))}function ea(a,i,e){var t;if(!Ae(e.composedPath()[0])){if(a.activeSettingsLayerId){e.preventDefault();const r=a.activeSettingsLayerId;a.activeSettingsLayerId=null,a.solicitarRenderizacao(),(t=$(i,"data-layer-settings",r))==null||t.focus();return}a.selectedFeatureIds.size>0&&(e.preventDefault(),a.limparSelecao(!0))}}function aa(a,i,e){var s;const t=e.composedPath()[0];if(!(t instanceof HTMLElement)||Ae(t))return;if((e.key==="Enter"||e.key===" ")&&t.matches(Je)){e.preventDefault(),t.click();return}if(!t.matches(z))return;const r=Xe(a),o=r.indexOf(t);switch(e.key){case"ArrowDown":e.preventDefault(),D(a,r[Math.min(r.length-1,o+1)]);break;case"ArrowUp":e.preventDefault(),D(a,r[Math.max(0,o-1)]);break;case"Home":e.preventDefault(),D(a,r[0]);break;case"End":e.preventDefault(),D(a,r[r.length-1]);break;case"ArrowRight":case"ArrowLeft":{const c=t.getAttribute("data-layer-row");if(!c)return;const n=t.closest(".ui-layer-group"),l=(n==null?void 0:n.getAttribute("aria-expanded"))==="true";e.key==="ArrowRight"!==l&&(e.preventDefault(),(s=$(i,"data-layer-expand",c))==null||s.click());break}case"Enter":case" ":e.preventDefault(),Ze(t,e);break}}function ta(a,i,e,t,r){r.add(i,"keydown",o=>{o.key==="Escape"&&ea(a,e,o)}),r.add(t,"keydown",o=>aa(t,e,o)),r.add(t,"focusin",o=>{const s=o.composedPath()[0];s instanceof HTMLElement&&s.matches(z)&&(t.querySelectorAll(z).forEach(c=>c.setAttribute("tabindex","-1")),s.setAttribute("tabindex","0"))})}function ra(a,i){i.querySelectorAll("[data-layer-row]").forEach(t=>{const o=t.getAttribute("data-layer-row")===a.camadaAtivaId;t.classList.toggle("active-drawing-layer",o);const s=t.querySelector(".ui-col-name");if(s){let c=s.querySelector(".ui-active-badge");if(o&&!c){c=document.createElement("span"),c.className="ui-active-badge",c.textContent="✓ Ativa";const n=s.querySelector(".ui-count-chip");n?s.insertBefore(c,n):s.appendChild(c)}else!o&&c&&c.remove()}})}function ia(a,i){i.querySelectorAll(".ui-feat-row").forEach(g=>{const b=g.getAttribute("data-feat-row"),E=b?a.selectedFeatureIds.has(b):!1;g.classList.toggle("selected-row",E),g.setAttribute("aria-selected",String(E));const y=g.querySelector(".ui-target-circle");y&&y.classList.toggle("selected",E)}),i.querySelectorAll(".ui-layer-group").forEach(g=>{const b=g.getAttribute("data-layer-id"),E=a.feicoes.filter(h=>h.layerId===b),y=g.querySelector(".ui-layer-row .ui-target-circle");if(y&&E.length>0){const h=E.every(w=>a.selectedFeatureIds.has(w.id)),v=!h&&E.some(w=>a.selectedFeatureIds.has(w.id));y.classList.toggle("selected",h),y.classList.toggle("partial",v)}else y&&y.classList.remove("selected","partial")});const e=a.feicoes.filter(g=>a.selectedFeatureIds.has(g.id)),t=e.length>0,r=i.getElementById("footer-count"),o=i.getElementById("footer-label");r&&(r.textContent=String(t?e.length:a.camadas.length)),o&&(o.textContent=t?e.length>1?"selecionados":"selecionado":a.camadas.length>1?"camadas":"camada");const s=i.querySelector(".ui-footer-metric"),c=W(e);s&&(c?(s.innerHTML=`${m.reguaMetrica} ${c}`,s.style.display="inline-flex"):s.style.display="none"),["btn-footer-vis","btn-footer-lock","btn-footer-del"].forEach(g=>{const b=i.getElementById(g);b&&(b.disabled=!t,b.classList.toggle("disabled",!t))});const n=i.querySelector(".ui-footer-move-wrapper");n&&n.classList.toggle("disabled",!t);const l=i.getElementById("select-footer-move");l&&(l.disabled=!t);const d=i.querySelector(".ui-footer-color-wrapper");d&&d.classList.toggle("disabled",!t);const p=i.getElementById("input-footer-color");p&&(p.disabled=!t);let u=i.getElementById("btn-footer-clear");const f=i.querySelector(".ui-footer-right");t&&!u&&f?(u=document.createElement("button"),u.id="btn-footer-clear",u.className="ui-footer-btn",u.title="Limpar seleção",u.innerHTML=m.fechar,u.addEventListener("click",()=>a.limparSelecao(!0)),f.appendChild(u)):!t&&u&&u.remove()}function oa(a){function t(){return a.getMinAltura?a.getMinAltura():140}function r(){return a.getMaxAltura?a.getMaxAltura():1600}function o(l,d=!1){if(l==null||l===""){a.hostElement.style.removeProperty("height"),a.hostElement.style.removeProperty("--ui-camadas-altura"),d&&a.hostElement.dispatchEvent(new CustomEvent("ui-redimensionar-altura",{bubbles:!0,composed:!0,detail:{altura:null}}));return}const p=typeof l=="number"?l:parseFloat(String(l));if(isNaN(p))return;const u=Math.max(t(),Math.min(r(),Math.round(p)));a.hostElement.style.height=`${u}px`,a.hostElement.style.setProperty("--ui-camadas-altura",`${u}px`),d&&a.hostElement.dispatchEvent(new CustomEvent("ui-redimensionar-altura",{bubbles:!0,composed:!0,detail:{altura:u}}))}let s=null;function c(){if(!a.resizerElement)return;let l=!1,d=0,p=0;const u=g=>{if(g.button!==0)return;g.preventDefault(),g.stopPropagation(),l=!0,d=g.clientY,p=a.hostElement.getBoundingClientRect().height,a.resizerElement.classList.add("ui-camadas-resizer--ativo"),a.hostElement.classList.add("ui-camadas--redimensionando");try{a.resizerElement.setPointerCapture(g.pointerId)}catch{}const b=h=>{if(!l)return;h.preventDefault();const v=h.clientY-d,w=Math.max(t(),Math.min(r(),Math.round(p+v)));a.hostElement.style.height=`${w}px`,a.hostElement.style.setProperty("--ui-camadas-altura",`${w}px`),a.onRedimensionando&&a.onRedimensionando(w),a.hostElement.dispatchEvent(new CustomEvent("ui-redimensionando-altura",{bubbles:!0,composed:!0,detail:{altura:w}}))},E=()=>{var h;l=!1,s=null,window.removeEventListener("pointermove",b),window.removeEventListener("pointerup",y),window.removeEventListener("pointercancel",y),(h=a.resizerElement)==null||h.classList.remove("ui-camadas-resizer--ativo"),a.hostElement.classList.remove("ui-camadas--redimensionando")},y=h=>{if(!l)return;l=!1,a.resizerElement.classList.remove("ui-camadas-resizer--ativo"),a.hostElement.classList.remove("ui-camadas--redimensionando");try{a.resizerElement.hasPointerCapture(h.pointerId)&&a.resizerElement.releasePointerCapture(h.pointerId)}catch{}window.removeEventListener("pointermove",b),window.removeEventListener("pointerup",y),window.removeEventListener("pointercancel",y);const v=a.hostElement.getBoundingClientRect().height,w=Math.round(v);a.onAlturaAlterada&&a.onAlturaAlterada(w),a.hostElement.dispatchEvent(new CustomEvent("ui-redimensionar-altura",{bubbles:!0,composed:!0,detail:{altura:w}}))};s=E,window.addEventListener("pointermove",b),window.addEventListener("pointerup",y),window.addEventListener("pointercancel",y)},f=g=>{g.preventDefault(),g.stopPropagation(),o(null,!0),a.onAlturaAlterada&&a.onAlturaAlterada(null)};a.listeners.add(a.resizerElement,"pointerdown",u),a.listeners.add(a.resizerElement,"dblclick",f)}function n(){s==null||s(),a.listeners.cleanup()}return{init:c,definirAltura:o,destruir:n}}class N extends R.SafeHTMLElement{constructor(){super();x(this,"shadow");x(this,"listeners",new De.ListenerBag);x(this,"dragDropManager");x(this,"resizerController");x(this,"alturaCustomizada",null);x(this,"conectado",!1);x(this,"origensCamadas",new Map);x(this,"salvarLembrancaDebounced",ce(()=>this.salvarLembrancaEstado(),200));x(this,"camadas",[]);x(this,"feicoes",[]);x(this,"mapasBase",[...X]);x(this,"expandedLayers",new Set);x(this,"selectedFeatureIds",new Set);x(this,"lastClickedFeatureId",null);x(this,"activeSettingsLayerId",null);x(this,"editingLayerId",null);x(this,"editingFeatureId",null);x(this,"searchQuery","");x(this,"corpoElement");x(this,"btnExpandirFlutuante");this.shadow=this.attachShadow({mode:"open"}),this.shadow.innerHTML=`
|
|
282
|
-
<style>${
|
|
281
|
+
`}class be{constructor(o,e){x(this,"host");x(this,"shadow");this.host=o,this.shadow=e}bindAll(){this.bindInlineRename(),this.bindDragAndDrop()}bindInlineRename(){this.shadow.querySelectorAll("[data-layer-name-trigger]").forEach(o=>{o.addEventListener("dblclick",e=>{e.stopPropagation();const t=o.getAttribute("data-layer-name-trigger");if(!t)return;this.host.editingLayerId=t,this.host.solicitarRenderizacao();const r=S(this.shadow,"data-inline-layer-input",t);if(r){r.focus(),r.select();let i=!1;const s=n=>{var c,l;if(!i){if(i=!0,this.host.editingLayerId=null,n){const u=r.value.trim(),p=this.host.camadas.find(d=>d.id===t);u&&p&&p.name!==u&&(p.name=u,(l=(c=this.host).salvarLembrancaEstado)==null||l.call(c),this.host.dispararEvento("ui-camada-renomeada",{camadaId:t,novoNome:u,camada:p}))}this.host.solicitarRenderizacao()}};r.addEventListener("keydown",n=>{n.key==="Enter"?(n.preventDefault(),s(!0)):n.key==="Escape"&&(n.preventDefault(),s(!1))}),r.addEventListener("blur",()=>s(!0))}})}),this.shadow.querySelectorAll("[data-feat-name-trigger]").forEach(o=>{o.addEventListener("dblclick",e=>{e.stopPropagation();const t=o.getAttribute("data-feat-name-trigger");if(!t)return;this.host.editingFeatureId=t,this.host.solicitarRenderizacao();const r=S(this.shadow,"data-inline-feat-input",t);if(r){r.focus(),r.select();let i=!1;const s=n=>{if(!i){if(i=!0,this.host.editingFeatureId=null,n){const c=r.value.trim(),l=this.host.feicoes.find(u=>u.id===t);c&&l&&l.name!==c&&(l.name=c,this.host.dispararEvento("ui-feicao-renomeada",{feicaoId:t,novoNome:c,feicao:l}))}this.host.solicitarRenderizacao()}};r.addEventListener("keydown",n=>{n.key==="Enter"?(n.preventDefault(),s(!0)):n.key==="Escape"&&(n.preventDefault(),s(!1))}),r.addEventListener("blur",()=>s(!0))}})})}bindDragAndDrop(){let o=null,e=null,t=null;const r=()=>{this.shadow.querySelectorAll(".ui-layer-row, .ui-feat-row, .ui-layer-group").forEach(i=>{i.classList.remove("dragging","drop-above","drop-below","drop-into")})};this.shadow.querySelectorAll('.ui-layer-row[draggable="true"]').forEach(i=>{const s=i.getAttribute("data-layer-id");s&&(i.addEventListener("dragstart",n=>{const c=n;if(c.target.closest("input, button, select")||this.host.editingLayerId||this.host.editingFeatureId){c.preventDefault();return}o="layer",e=s,c.dataTransfer&&(c.dataTransfer.setData("text/plain",JSON.stringify({type:"layer",id:s})),c.dataTransfer.effectAllowed="move"),i.classList.add("dragging")}),i.addEventListener("dragover",n=>{const c=n;if(c.preventDefault(),c.stopPropagation(),c.dataTransfer&&(c.dataTransfer.dropEffect="move"),o==="layer"){if(e===s)return;const l=i.getBoundingClientRect(),u=c.clientY-l.top<l.height/2;i.classList.toggle("drop-above",u),i.classList.toggle("drop-below",!u)}else o==="feature"&&i.classList.add("drop-into")}),i.addEventListener("dragleave",n=>{const c=n.relatedTarget;c&&i.contains(c)||i.classList.remove("drop-above","drop-below","drop-into")}),i.addEventListener("drop",n=>{var u,p;const c=n;c.preventDefault(),c.stopPropagation();const l=i.classList.contains("drop-above");if(r(),o==="layer"){if(!e||e===s)return;const d=this.host.camadas.findIndex(v=>v.id===e);if(d===-1)return;const[f]=this.host.camadas.splice(d,1),m=this.host.camadas.findIndex(v=>v.id===s);m===-1?this.host.camadas.push(f):this.host.camadas.splice(l?m:m+1,0,f),(p=(u=this.host).salvarLembrancaEstado)==null||p.call(u),this.host.dispararEvento("ui-camadas-reordenadas",{camadas:[...this.host.camadas]}),this.host.solicitarRenderizacao()}else if(o==="feature"){if(!t)return;const d=this.host.feicoes.find(m=>m.id===t),f=this.host.camadas.find(m=>m.id===s);if(d&&f&&d.layerId!==s){const m=d.layerId;d.layerId=s,this.host.dispararEvento("ui-feicao-movida",{feicaoId:d.id,camadaOrigemId:m,camadaDestinoId:s,feicao:d}),this.host.solicitarRenderizacao()}}}),i.addEventListener("dragend",()=>{o=null,e=null,t=null,r()}))}),this.shadow.querySelectorAll('.ui-feat-row[draggable="true"]').forEach(i=>{const s=i.getAttribute("data-feat-row"),n=i.getAttribute("data-feat-layer");s&&(i.addEventListener("dragstart",c=>{const l=c;if(l.target.closest("input, button, select")||this.host.editingLayerId||this.host.editingFeatureId){l.preventDefault();return}l.stopPropagation(),o="feature",t=s,e=n,l.dataTransfer&&(l.dataTransfer.setData("text/plain",JSON.stringify({type:"feature",id:s,layerId:n})),l.dataTransfer.effectAllowed="move"),i.classList.add("dragging")}),i.addEventListener("dragover",c=>{const l=c;if(o!=="feature"||t===s)return;l.preventDefault(),l.stopPropagation(),l.dataTransfer&&(l.dataTransfer.dropEffect="move");const u=i.getBoundingClientRect(),p=l.clientY-u.top<u.height/2;i.classList.toggle("drop-above",p),i.classList.toggle("drop-below",!p)}),i.addEventListener("dragleave",c=>{const l=c.relatedTarget;l&&i.contains(l)||i.classList.remove("drop-above","drop-below")}),i.addEventListener("drop",c=>{const l=c;if(o!=="feature"||!t||t===s)return;l.preventDefault(),l.stopPropagation();const u=i.classList.contains("drop-above");r();const p=this.host.feicoes.findIndex(g=>g.id===t);if(p===-1)return;const d=this.host.feicoes.find(g=>g.id===s);if(!d)return;const[f]=this.host.feicoes.splice(p,1),m=f.layerId,v=d.layerId,E=m!==v;E&&(f.layerId=v);const y=this.host.feicoes.findIndex(g=>g.id===s);y===-1?this.host.feicoes.push(f):this.host.feicoes.splice(u?y:y+1,0,f),E&&this.host.dispararEvento("ui-feicao-movida",{feicaoId:f.id,camadaOrigemId:m,camadaDestinoId:v,feicao:f}),this.host.dispararEvento("ui-feicoes-reordenadas",{feicoes:[...this.host.feicoes]}),this.host.solicitarRenderizacao()}),i.addEventListener("dragend",c=>{c.stopPropagation(),o=null,t=null,e=null,r()}))})}}const je="ui_camadas_estado_";function xe(a,o){const e=(a||o||"default").trim();return`${je}${e}`}function O(a){if(typeof window>"u"||typeof localStorage>"u")return null;try{const o=localStorage.getItem(a);if(!o)return null;const e=JSON.parse(o);if(e&&typeof e=="object")return e}catch(o){console.warn(`[UI-Camadas] Não foi possível carregar o estado persistido (${a}):`,o)}return null}function ye(a,o){if(!(typeof window>"u"||typeof localStorage>"u"))try{localStorage.setItem(a,JSON.stringify(o))}catch(e){console.warn(`[UI-Camadas] Não foi possível salvar o estado persistido (${a}):`,e)}}function we(a){if(!(typeof window>"u"||typeof localStorage>"u"))try{localStorage.removeItem(a)}catch{}}function j(a){return{name:a.name,visible:a.visible!==!1,locked:!!a.locked,opacity:typeof a.opacity=="number"?a.opacity:1,color:a.color||"#00E08A"}}function Ee(a,o,e,t){if(!Array.isArray(a))return;const r=(o==null?void 0:o.camadasOverrides)||{},i=new Set((o==null?void 0:o.expandedLayerIds)||[]),s=new Set((o==null?void 0:o.collapsedLayerIds)||[]),n=i.size>0||s.size>0;for(let p=0;p<a.length;p++){const d=a[p],f=r[d.id];if(t==null||t.set(d.id,j(d)),f){const m=f.origem,v=E=>{var g;const y=(g=t==null?void 0:t.get(d.id))==null?void 0:g[E];return m!==void 0&&m[E]!==y};typeof f.name=="string"&&f.name.trim()&&!v("name")&&(d.name=f.name),typeof f.visible=="boolean"&&!v("visible")&&(d.visible=f.visible),typeof f.locked=="boolean"&&!v("locked")&&(d.locked=f.locked),typeof f.opacity=="number"&&!v("opacity")&&(d.opacity=f.opacity),typeof f.color=="string"&&!v("color")&&(d.color=f.color)}n?i.has(d.id)?e.add(d.id):s.has(d.id)?e.delete(d.id):e.add(d.id):e.add(d.id)}const c=new Set(a.map(p=>p.id)),l=o==null?void 0:o.ordemOrigemIds;if(!(Array.isArray(l)&&(()=>{const p=new Set(l),d=f=>f.filter(m=>c.has(m)&&p.has(m)).join("|");return d(l)!==d(a.map(f=>f.id))})())&&Array.isArray(o==null?void 0:o.ordemCamadasIds)&&o.ordemCamadasIds.length>0){const p=new Map;o.ordemCamadasIds.forEach((d,f)=>p.set(d,f)),a.sort((d,f)=>{const m=p.has(d.id)?p.get(d.id):9999,v=p.has(f.id)?p.get(f.id):9999;return m-v})}}function Ae(a){const{estadoAnterior:o,camadas:e,expandedLayers:t}=a;let r=(o==null?void 0:o.expandedLayerIds)||[],i=(o==null?void 0:o.collapsedLayerIds)||[],s=(o==null?void 0:o.ordemCamadasIds)||[],n=o==null?void 0:o.ordemOrigemIds;const c={...(o==null?void 0:o.camadasOverrides)||{}};e.length>0&&(r=[],i=[],s=e.map(l=>l.id),n=a.origensCamadas?[...a.origensCamadas.keys()]:s,e.forEach(l=>{var u,p;t.has(l.id)?r.push(l.id):i.push(l.id),c[l.id]={name:l.name,visible:l.visible!==!1,locked:!!l.locked,opacity:typeof l.opacity=="number"?l.opacity:1,color:l.color||"#00E08A",origem:((u=a.origensCamadas)==null?void 0:u.get(l.id))??((p=c[l.id])==null?void 0:p.origem)}}));for(const l of a.camadasRemovidas??[])delete c[l];return{versao:1,expandedLayerIds:r,collapsedLayerIds:i,camadaAtivaId:a.camadaAtivaId,painelColapsado:a.painelColapsado,ordemCamadasIds:s,ordemOrigemIds:n,mapaBaseAtivo:a.mapaBaseAtivo,densidade:a.densidade,altura:a.altura,camadasOverrides:c,ultimaAtualizacao:Date.now()}}const Ne=':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: 15px;--camada-transicao: .16s cubic-bezier(.16, 1, .3, 1)}:host([densidade="compacto"]){--camada-linha-altura: 22px;--camada-thumb-tamanho: 13px;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-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;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:18px;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:2.5px;background:var(--ui-cor-fundo, #0d0d10);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:28px;min-height:28px;background:var(--ui-cor-fundo-elevado, #111115);border-top:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .08));display:flex;align-items:center;justify-content:space-between;padding:0 6px;gap:4px}.ui-footer-left{display:flex;align-items:center;gap:4px;white-space:nowrap;min-width:0}.ui-footer-count{font-size:10.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-primaria, #00E08A)}.ui-footer-label{font-size:10px;font-weight:500;color:var(--ui-cor-texto-secundario, #888899)}.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}.ui-footer-right{display:flex;align-items:center;gap:2px;flex-shrink:0}.ui-footer-btn{background:transparent;border:none;color:var(--ui-cor-texto-secundario, #888899);width:20px;height:20px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:3px;transition:all var(--camada-transicao)}.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-color-wrapper,.ui-footer-move-wrapper{display:flex;align-items:center}.ui-footer-color{width:15px;height:15px;border:none;background:transparent;cursor:pointer;padding:0}.ui-footer-select{background:var(--ui-cor-fundo, #18181d);border:1px solid var(--ui-cor-borda, rgba(255, 255, 255, .12));color:var(--ui-cor-texto, #e1e1e6);border-radius:3px;font-size:9.5px;height:20px;padding:0 2px;cursor:pointer}.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}';function He(a,o){o.querySelectorAll("[data-layer-row]").forEach(r=>{r.addEventListener("click",i=>{if(i.target.closest("[data-layer-eye], [data-layer-lock], [data-layer-expand], [data-layer-target], [data-layer-fit], [data-layer-settings], input, button"))return;const n=r.getAttribute("data-layer-row");n&&a.definirCamadaAtiva(n,!0)})}),o.querySelectorAll("[data-layer-expand]").forEach(r=>{r.addEventListener("click",i=>{i.stopPropagation();const s=r.getAttribute("data-layer-expand");if(!s)return;a.expandedLayers.has(s)?a.expandedLayers.delete(s):a.expandedLayers.add(s);const n=r.closest(".ui-layer-group"),c=r.querySelector(".ui-chevron-icon"),l=a.expandedLayers.has(s);if(c&&c.classList.toggle("open",l),n){const u=n.querySelector(".ui-children-container");u&&(u.style.display=l?"block":"none")}a.salvarLembrancaEstado()})}),o.querySelectorAll("[data-layer-eye]").forEach(r=>{r.addEventListener("click",i=>{i.stopPropagation();const s=r.getAttribute("data-layer-eye"),n=a.camadas.find(c=>c.id===s);if(n){n.visible=n.visible===!1;const c=n.visible!==!1;r.innerHTML=c?h.olhoAberto:h.olhoFechado,$(r,c?"Ocultar Camada":"Exibir Camada");const l=r.closest(".ui-layer-row");l&&l.classList.toggle("hidden-layer",!c),Ue(a,o),a.salvarLembrancaEstado(),a.dispararEvento("ui-camada-visibilidade",{camadaId:n.id,visivel:c})}})}),o.querySelectorAll("[data-layer-lock]").forEach(r=>{r.addEventListener("click",i=>{i.stopPropagation();const s=r.getAttribute("data-layer-lock"),n=a.camadas.find(c=>c.id===s);n&&(n.locked=!n.locked,r.innerHTML=n.locked?h.cadeadoTrancado:h.cadeadoAberto,r.classList.toggle("ui-lock-open",!n.locked),$(r,n.locked?"Desbloquear Camada":"Bloquear Camada"),Ve(a,o,n.id,n.locked===!0),a.salvarLembrancaEstado(),a.dispararEvento("ui-camada-bloqueio",{camadaId:n.id,bloqueado:n.locked}))})}),o.querySelectorAll("[data-layer-fit]").forEach(r=>{r.addEventListener("click",i=>{i.stopPropagation();const s=r.getAttribute("data-layer-fit");s&&a.dispararEvento("ui-camada-enquadrar",{camadaId:s})})}),o.querySelectorAll("[data-layer-settings]").forEach(r=>{r.addEventListener("click",i=>{i.stopPropagation();const s=r.getAttribute("data-layer-settings");a.activeSettingsLayerId=a.activeSettingsLayerId===s?null:s,a.solicitarRenderizacao()})}),o.querySelectorAll("[data-layer-settings-close]").forEach(r=>{r.addEventListener("click",i=>{i.stopPropagation(),a.activeSettingsLayerId=null,a.solicitarRenderizacao()})});const e=(r,i,s)=>{const n=a.camadas.find(f=>f.id===r);if(!n)return;const c=R(i,n.color||"#00E08A");n.color=c;const l=o.getElementById(`sample-color-${r}`);l&&(l.style.backgroundColor=c);const u=o.getElementById(`hex-color-${r}`);u&&(u.textContent=c.toUpperCase());const p=o.getElementById(`settings-drawer-${r}`);p&&p.style.setProperty("--drawer-cor-camada",c);const d=S(o,"data-layer-row",r);if(d){d.style.setProperty("--layer-active-color",c);const f=d.querySelector(".ui-col-colorbar");f&&(f.style.backgroundColor=c)}s?a.salvarLembrancaEstado():a.agendarSalvarLembranca(),a.dispararEvento("ui-camada-cor",{camadaId:n.id,cor:c})};o.querySelectorAll("[data-layer-color-picker]").forEach(r=>{const i=r,s=n=>c=>{const l=i.getAttribute("data-layer-color-picker");if(!l)return;const u=c.target.value;e(l,u,n)};i.addEventListener("input",s(!1)),i.addEventListener("change",s(!0))});const t=(r,i)=>{const s=a.camadas.find(l=>l.id===r);if(!s)return;s.opacity=i;const n=o.getElementById(`badge-op-${r}`);n&&(n.textContent=`${Math.round(i*100)}%`);const c=S(o,"data-layer-opacity-slider",r);c&&parseFloat(c.value)!==i&&(c.value=String(i)),a.agendarSalvarLembranca(),a.dispararEvento("ui-camada-opacidade",{camadaId:s.id,opacidade:i})};o.querySelectorAll("[data-layer-opacity-slider]").forEach(r=>{r.addEventListener("input",i=>{const s=r.getAttribute("data-layer-opacity-slider");if(!s)return;const n=parseFloat(i.target.value);t(s,n)})}),o.querySelectorAll("[data-delete-layer]").forEach(r=>{let i=null;r.addEventListener("click",s=>{s.stopPropagation();const n=r.getAttribute("data-delete-layer");if(!n)return;if(r.classList.contains("confirming")){i&&clearTimeout(i),a.dispararEvento("ui-camada-excluida",{camadaId:n});const l=a.selectedFeatureIds.size;a.removerCamada(n),a.selectedFeatureIds.size!==l&&a.notificarMudancaSelecao()}else{r.classList.add("confirming");const l=r.querySelector(".ui-btn-label");l&&(l.textContent="Confirmar Exclusão?"),i=setTimeout(()=>{r.classList.remove("confirming"),l&&(l.textContent="Excluir Camada")},3500)}})}),o.querySelectorAll("[data-layer-target]").forEach(r=>{r.addEventListener("click",i=>{i.stopPropagation();const s=i,n=r.getAttribute("data-layer-target"),c=H(a.feicoes.filter(u=>u.layerId===n),a.searchQuery);if(c.length===0)return;c.every(u=>a.selectedFeatureIds.has(u.id))?c.forEach(u=>a.selectedFeatureIds.delete(u.id)):(!s.ctrlKey&&!s.metaKey&&a.selectedFeatureIds.clear(),c.forEach(u=>a.selectedFeatureIds.add(u.id))),a.lastClickedFeatureId=c[c.length-1].id,a.sincronizarSelecaoDOM(),a.notificarMudancaSelecao()})})}function Ue(a,o){const e=o.getElementById("btn-toggle-all-vis");if(!e)return;const t=a.camadas.every(r=>r.visible!==!1);e.innerHTML=t?h.olhoAberto:h.olhoFechado,$(e,t?"Ocultar Todas as Camadas":"Exibir Todas as Camadas")}function Ve(a,o,e,t){a.feicoes.filter(r=>r.layerId===e).forEach(r=>{const i=S(o,"data-feat-lock",r.id);if(!i)return;const s=r.locked===!0||t;i.innerHTML=s?h.cadeadoTrancado:h.cadeadoAberto,i.classList.toggle("ui-lock-open",!s),t?i.setAttribute("data-locked-by-layer","true"):i.removeAttribute("data-locked-by-layer"),$(i,t?"Bloqueada pela camada":s?"Desbloquear Feição":"Bloquear Feição")})}function _e(a,o){const e=o.getElementById("btn-footer-vis");e&&e.addEventListener("click",()=>{const l=a.feicoes.filter(d=>a.selectedFeatureIds.has(d.id));if(l.length===0)return;const p=!l.some(d=>d.visible!==!1);l.forEach(d=>d.visible=p),a.dispararEvento("ui-acao-massa",{acao:"visibilidade",feicoesIds:l.map(d=>d.id),feicoes:l,valor:p}),a.solicitarRenderizacao()});const t=o.getElementById("btn-footer-lock");t&&t.addEventListener("click",()=>{const l=a.feicoes.filter(d=>a.selectedFeatureIds.has(d.id));if(l.length===0)return;const p=!l.some(d=>d.locked===!0);l.forEach(d=>d.locked=p),a.dispararEvento("ui-acao-massa",{acao:"bloqueio",feicoesIds:l.map(d=>d.id),feicoes:l,valor:p}),a.solicitarRenderizacao()});const r=o.getElementById("input-footer-color");r&&r.addEventListener("change",l=>{const u=l.target.value,p=a.feicoes.filter(d=>a.selectedFeatureIds.has(d.id));p.length!==0&&(p.forEach(d=>{d.color=u,d.style={...d.style||{},fillColor:u,strokeColor:u}}),a.dispararEvento("ui-acao-massa",{acao:"cor",feicoesIds:p.map(d=>d.id),feicoes:p,valor:u}),a.solicitarRenderizacao())});const i=o.getElementById("select-footer-move");i&&i.addEventListener("change",l=>{const u=l.target.value;if(!u)return;const p=a.feicoes.filter(f=>a.selectedFeatureIds.has(f.id));if(p.length===0)return;const d=new Map(p.map(f=>[f.id,f.layerId]));p.forEach(f=>f.layerId=u),p.forEach(f=>{d.get(f.id)!==u&&a.dispararEvento("ui-feicao-movida",{feicaoId:f.id,camadaOrigemId:d.get(f.id),camadaDestinoId:u,feicao:f})}),a.dispararEvento("ui-acao-massa",{acao:"mover",feicoesIds:p.map(f=>f.id),feicoes:p,valor:u}),a.solicitarRenderizacao()});const s=o.getElementById("btn-footer-new-layer");s&&s.addEventListener("click",()=>{a.dispararEvento("ui-camada-adicionar",{})});const n=o.getElementById("btn-footer-del");if(n){let l=null;const u="Excluir selecionados";n.addEventListener("click",()=>{const p=Array.from(a.selectedFeatureIds);if(p.length===0)return;if(!n.classList.contains("confirming")){n.classList.add("confirming"),$(n,`Clique novamente para excluir ${p.length} selecionado(s)`),l=setTimeout(()=>{n.classList.remove("confirming"),$(n,u)},3500);return}l&&clearTimeout(l);const d=a.feicoes.filter(f=>a.selectedFeatureIds.has(f.id));a.feicoes=a.feicoes.filter(f=>!a.selectedFeatureIds.has(f.id)),a.selectedFeatureIds.clear(),a.lastClickedFeatureId=null,a.dispararEvento("ui-acao-massa",{acao:"excluir",feicoesIds:p,feicoes:d}),a.notificarMudancaSelecao(),a.solicitarRenderizacao()})}const c=o.getElementById("btn-footer-clear");c&&c.addEventListener("click",()=>a.limparSelecao(!0))}function Ge(a,o){const e=o.getElementById("btn-toggle-all-vis");e&&e.addEventListener("click",()=>a.alternarVisibilidadeTodas(!0));const t=o.getElementById("btn-toggle-all-expand");t&&t.addEventListener("click",s=>{s.stopPropagation(),a.camadas.length>0&&a.camadas.every(c=>a.expandedLayers.has(c.id))?a.colapsarTodas():a.expandirTodas()});const r=o.getElementById("btn-add-layer");r&&r.addEventListener("click",()=>{a.dispararEvento("ui-camada-adicionar",{})});const i=o.getElementById("btn-colapsar");i&&i.addEventListener("click",()=>a.colapsar(!0)),Ke(a,o)}function Ke(a,o){const e=o.getElementById("input-layer-search"),t=o.getElementById("btn-clear-layer-search"),r=()=>{var i;a.searchQuery="",a.solicitarRenderizacao(),(i=o.getElementById("input-layer-search"))==null||i.focus()};if(e){const i=de(()=>a.solicitarRenderizacao(),75);e.addEventListener("input",s=>{a.searchQuery=s.target.value,i()}),e.addEventListener("keydown",s=>{s.key==="Escape"&&a.searchQuery&&(s.preventDefault(),r())})}t&&t.addEventListener("click",r)}function Qe(a,o){o.querySelectorAll("[data-feat-select]").forEach(e=>{e.addEventListener("click",t=>{if(a.editingFeatureId)return;const r=t;if(r.target.closest("[data-feat-eye], [data-feat-lock], [data-feat-fit], [data-feat-target], input, button"))return;const s=e.getAttribute("data-feat-select");s&&a.selecionarFeicao(s,r.ctrlKey||r.metaKey,r.shiftKey,!0)})}),o.querySelectorAll("[data-feat-target]").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const r=t,i=e.getAttribute("data-feat-target");i&&a.selecionarFeicao(i,r.ctrlKey||r.metaKey,r.shiftKey,!0)})}),o.querySelectorAll("[data-feat-eye]").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const r=e.getAttribute("data-feat-eye"),i=a.feicoes.find(s=>s.id===r);if(i){i.visible=i.visible===!1;const s=i.visible!==!1;e.innerHTML=s?h.olhoAberto:h.olhoFechado,$(e,s?"Ocultar Feição":"Exibir Feição");const n=e.closest(".ui-feat-row");n&&n.classList.toggle("hidden-row",!s),a.dispararEvento("ui-feicao-visibilidade",{feicaoId:i.id,visivel:s})}})}),o.querySelectorAll("[data-feat-lock]").forEach(e=>{e.addEventListener("click",t=>{if(t.stopPropagation(),e.hasAttribute("data-locked-by-layer"))return;const r=e.getAttribute("data-feat-lock"),i=a.feicoes.find(s=>s.id===r);i&&(i.locked=!i.locked,e.innerHTML=i.locked?h.cadeadoTrancado:h.cadeadoAberto,e.classList.toggle("ui-lock-open",!i.locked),$(e,i.locked?"Desbloquear Feição":"Bloquear Feição"),a.dispararEvento("ui-feicao-bloqueio",{feicaoId:i.id,bloqueado:i.locked}))})}),o.querySelectorAll("[data-feat-fit]").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const r=e.getAttribute("data-feat-fit");r&&a.dispararEvento("ui-feicao-enquadrar",{feicaoId:r})})})}function Ye(a,o){o.querySelectorAll("[data-basemap-thumb]").forEach(e=>{e.addEventListener("error",()=>{const t=document.createElement("div");t.className="ui-basemap-preview-none",t.innerHTML=h.mapa,e.replaceWith(t)},{once:!0})}),o.querySelectorAll("[data-basemap-id]").forEach(e=>{e.addEventListener("click",()=>{const t=e.getAttribute("data-basemap-id");t&&a.selecionarMapaBase(t,!0)})})}function Je(a,o){Ge(a,o),He(a,o),Qe(a,o),Ye(a,o),_e(a,o)}const We='[role="button"][tabindex]',B="[data-layer-row], [data-feat-row]",Xe=["color","range","checkbox","radio","button"];function ke(a){return a instanceof HTMLSelectElement||a instanceof HTMLTextAreaElement?!0:a instanceof HTMLInputElement&&!Xe.includes(a.type)}function Ze(a){return Array.from(a.querySelectorAll(B)).filter(o=>{const e=o.closest(".ui-children-container");return!(e&&e.style.display==="none")&&!o.classList.contains("ui-search-hidden")})}function P(a,o){o&&(a.querySelectorAll(B).forEach(e=>e.setAttribute("tabindex","-1")),o.setAttribute("tabindex","0"),o.focus())}function ea(a,o){a.dispatchEvent(new MouseEvent("click",{bubbles:!0,ctrlKey:o.ctrlKey||o.metaKey,shiftKey:o.shiftKey}))}function aa(a,o,e){var t;if(!ke(e.composedPath()[0])){if(a.activeSettingsLayerId){e.preventDefault();const r=a.activeSettingsLayerId;a.activeSettingsLayerId=null,a.solicitarRenderizacao(),(t=S(o,"data-layer-settings",r))==null||t.focus();return}a.selectedFeatureIds.size>0&&(e.preventDefault(),a.limparSelecao(!0))}}function ta(a,o,e){var s;const t=e.composedPath()[0];if(!(t instanceof HTMLElement)||ke(t))return;if((e.key==="Enter"||e.key===" ")&&t.matches(We)){e.preventDefault(),t.click();return}if(!t.matches(B))return;const r=Ze(a),i=r.indexOf(t);switch(e.key){case"ArrowDown":e.preventDefault(),P(a,r[Math.min(r.length-1,i+1)]);break;case"ArrowUp":e.preventDefault(),P(a,r[Math.max(0,i-1)]);break;case"Home":e.preventDefault(),P(a,r[0]);break;case"End":e.preventDefault(),P(a,r[r.length-1]);break;case"ArrowRight":case"ArrowLeft":{const n=t.getAttribute("data-layer-row");if(!n)return;const c=t.closest(".ui-layer-group"),l=(c==null?void 0:c.getAttribute("aria-expanded"))==="true";e.key==="ArrowRight"!==l&&(e.preventDefault(),(s=S(o,"data-layer-expand",n))==null||s.click());break}case"Enter":case" ":e.preventDefault(),ea(t,e);break}}function ra(a,o,e,t,r){r.add(o,"keydown",i=>{i.key==="Escape"&&aa(a,e,i)}),r.add(t,"keydown",i=>ta(t,e,i)),r.add(t,"focusin",i=>{const s=i.composedPath()[0];s instanceof HTMLElement&&s.matches(B)&&(t.querySelectorAll(B).forEach(n=>n.setAttribute("tabindex","-1")),s.setAttribute("tabindex","0"))})}function ia(a,o){o.querySelectorAll("[data-layer-row]").forEach(t=>{const i=t.getAttribute("data-layer-row")===a.camadaAtivaId;t.classList.toggle("active-drawing-layer",i);const s=t.querySelector(".ui-col-name");if(s){let n=s.querySelector(".ui-active-badge");if(i&&!n){n=document.createElement("span"),n.className="ui-active-badge",n.textContent="✓ Ativa";const c=s.querySelector(".ui-count-chip");c?s.insertBefore(n,c):s.appendChild(n)}else!i&&n&&n.remove()}})}function oa(a,o){o.querySelectorAll(".ui-feat-row").forEach(m=>{const v=m.getAttribute("data-feat-row"),E=v?a.selectedFeatureIds.has(v):!1;m.classList.toggle("selected-row",E),m.setAttribute("aria-selected",String(E));const y=m.querySelector(".ui-target-circle");y&&y.classList.toggle("selected",E)}),o.querySelectorAll(".ui-layer-group").forEach(m=>{const v=m.getAttribute("data-layer-id"),E=a.feicoes.filter(g=>g.layerId===v),y=m.querySelector(".ui-layer-row .ui-target-circle");if(y&&E.length>0){const g=E.every(w=>a.selectedFeatureIds.has(w.id)),b=!g&&E.some(w=>a.selectedFeatureIds.has(w.id));y.classList.toggle("selected",g),y.classList.toggle("partial",b)}else y&&y.classList.remove("selected","partial")});const e=a.feicoes.filter(m=>a.selectedFeatureIds.has(m.id)),t=e.length>0,r=o.getElementById("footer-count"),i=o.getElementById("footer-label");r&&(r.textContent=String(t?e.length:a.camadas.length)),i&&(i.textContent=t?e.length>1?"selecionados":"selecionado":a.camadas.length>1?"camadas":"camada");const s=o.querySelector(".ui-footer-metric"),n=X(e);s&&(n?(s.innerHTML=`${h.reguaMetrica} ${n}`,s.style.display="inline-flex"):s.style.display="none"),["btn-footer-vis","btn-footer-lock","btn-footer-del"].forEach(m=>{const v=o.getElementById(m);v&&(v.disabled=!t,v.classList.toggle("disabled",!t))});const c=o.querySelector(".ui-footer-move-wrapper");c&&c.classList.toggle("disabled",!t);const l=o.getElementById("select-footer-move");l&&(l.disabled=!t);const u=o.querySelector(".ui-footer-color-wrapper");u&&u.classList.toggle("disabled",!t);const p=o.getElementById("input-footer-color");p&&(p.disabled=!t);let d=o.getElementById("btn-footer-clear");const f=o.querySelector(".ui-footer-right");t&&!d&&f?(d=document.createElement("button"),d.id="btn-footer-clear",d.className="ui-footer-btn",d.title="Limpar seleção",d.innerHTML=h.fechar,d.addEventListener("click",()=>a.limparSelecao(!0)),f.appendChild(d)):!t&&d&&d.remove()}function sa(a){function t(){return a.getMinAltura?a.getMinAltura():140}function r(){return a.getMaxAltura?a.getMaxAltura():1600}function i(l,u=!1){if(l==null||l===""){a.hostElement.style.removeProperty("height"),a.hostElement.style.removeProperty("--ui-camadas-altura"),u&&a.hostElement.dispatchEvent(new CustomEvent("ui-redimensionar-altura",{bubbles:!0,composed:!0,detail:{altura:null}}));return}const p=typeof l=="number"?l:parseFloat(String(l));if(isNaN(p))return;const d=Math.max(t(),Math.min(r(),Math.round(p)));a.hostElement.style.height=`${d}px`,a.hostElement.style.setProperty("--ui-camadas-altura",`${d}px`),u&&a.hostElement.dispatchEvent(new CustomEvent("ui-redimensionar-altura",{bubbles:!0,composed:!0,detail:{altura:d}}))}let s=null;function n(){if(!a.resizerElement)return;let l=!1,u=0,p=0;const d=m=>{if(m.button!==0)return;m.preventDefault(),m.stopPropagation(),l=!0,u=m.clientY,p=a.hostElement.getBoundingClientRect().height,a.resizerElement.classList.add("ui-camadas-resizer--ativo"),a.hostElement.classList.add("ui-camadas--redimensionando");try{a.resizerElement.setPointerCapture(m.pointerId)}catch{}const v=g=>{if(!l)return;g.preventDefault();const b=g.clientY-u,w=Math.max(t(),Math.min(r(),Math.round(p+b)));a.hostElement.style.height=`${w}px`,a.hostElement.style.setProperty("--ui-camadas-altura",`${w}px`),a.onRedimensionando&&a.onRedimensionando(w),a.hostElement.dispatchEvent(new CustomEvent("ui-redimensionando-altura",{bubbles:!0,composed:!0,detail:{altura:w}}))},E=()=>{var g;l=!1,s=null,window.removeEventListener("pointermove",v),window.removeEventListener("pointerup",y),window.removeEventListener("pointercancel",y),(g=a.resizerElement)==null||g.classList.remove("ui-camadas-resizer--ativo"),a.hostElement.classList.remove("ui-camadas--redimensionando")},y=g=>{if(!l)return;l=!1,a.resizerElement.classList.remove("ui-camadas-resizer--ativo"),a.hostElement.classList.remove("ui-camadas--redimensionando");try{a.resizerElement.hasPointerCapture(g.pointerId)&&a.resizerElement.releasePointerCapture(g.pointerId)}catch{}window.removeEventListener("pointermove",v),window.removeEventListener("pointerup",y),window.removeEventListener("pointercancel",y);const b=a.hostElement.getBoundingClientRect().height,w=Math.round(b);a.onAlturaAlterada&&a.onAlturaAlterada(w),a.hostElement.dispatchEvent(new CustomEvent("ui-redimensionar-altura",{bubbles:!0,composed:!0,detail:{altura:w}}))};s=E,window.addEventListener("pointermove",v),window.addEventListener("pointerup",y),window.addEventListener("pointercancel",y)},f=m=>{m.preventDefault(),m.stopPropagation(),i(null,!0),a.onAlturaAlterada&&a.onAlturaAlterada(null)};a.listeners.add(a.resizerElement,"pointerdown",d),a.listeners.add(a.resizerElement,"dblclick",f)}function c(){s==null||s(),a.listeners.cleanup()}return{init:n,definirAltura:i,destruir:c}}const M=class M extends N.SafeHTMLElement{constructor(){super();x(this,"shadow");x(this,"listeners",new Te.ListenerBag);x(this,"dragDropManager");x(this,"resizerController");x(this,"alturaCustomizada",null);x(this,"conectado",!1);x(this,"profundidadeLote",0);x(this,"renderPendente",!1);x(this,"camadasRemovidas",new Set);x(this,"origensCamadas",new Map);x(this,"salvarLembrancaDebounced",de(()=>this.salvarLembrancaEstado(),200));x(this,"camadas",[]);x(this,"feicoes",[]);x(this,"mapasBase",[...Z]);x(this,"expandedLayers",new Set);x(this,"selectedFeatureIds",new Set);x(this,"lastClickedFeatureId",null);x(this,"activeSettingsLayerId",null);x(this,"editingLayerId",null);x(this,"editingFeatureId",null);x(this,"searchQuery","");x(this,"corpoElement");x(this,"btnExpandirFlutuante");this.shadow=this.attachShadow({mode:"open"}),this.shadow.innerHTML=`
|
|
282
|
+
<style>${Ne}</style>
|
|
283
283
|
<div class="ui-camadas-container" id="panel-container" role="region" aria-label="Painel de Camadas">
|
|
284
284
|
<div class="ui-camadas-corpo" id="painel-corpo"></div>
|
|
285
285
|
<div class="ui-camadas-resizer-altura" id="resizer-altura" title="Arraste para redimensionar a altura (duplo-clique para resetar)" aria-label="Redimensionar altura">
|
|
@@ -287,10 +287,10 @@
|
|
|
287
287
|
</div>
|
|
288
288
|
</div>
|
|
289
289
|
<button class="ui-camadas-toggle-flutuante" id="btn-expandir-flutuante" title="Expandir Painel de Camadas" aria-label="Expandir Painel de Camadas">
|
|
290
|
-
${
|
|
290
|
+
${h.camadas}
|
|
291
291
|
</button>
|
|
292
|
-
`,this.corpoElement=this.shadow.getElementById("painel-corpo"),this.btnExpandirFlutuante=this.shadow.getElementById("btn-expandir-flutuante"),this.dragDropManager=new ve(this,this.shadow);const e=this.shadow.getElementById("resizer-altura");this.resizerController=oa({hostElement:this,resizerElement:e,listeners:this.listeners,getMinAltura:()=>{const t=this.getAttribute("min-altura");return t&&parseFloat(t)||140},getMaxAltura:()=>{const t=this.getAttribute("max-altura");return t&&parseFloat(t)||1600},onAlturaAlterada:t=>{this.alturaCustomizada=t,this.salvarLembrancaEstado()}})}static get observedAttributes(){return["titulo","mapa-base-ativo","camada-ativa","aba-ativa","colapsavel","colapsado","flutuante","mostrar-mapas-base","mostrar-rodape","mostrar-busca","densidade","persistir","storage-key","redimensionavel","redimensionavel-altura","altura","min-altura","max-altura"]}connectedCallback(){if(this.persistir){const e=T(this.obterChaveStorageAtual());e&&(e.painelColapsado===!0&&!this.hasAttribute("colapsado")&&(this.colapsado=!0),e.camadaAtivaId&&!this.getAttribute("camada-ativa")&&(this.camadaAtivaId=e.camadaAtivaId),e.mapaBaseAtivo&&!this.getAttribute("mapa-base-ativo")&&(this.mapaBaseAtivo=e.mapaBaseAtivo),e.densidade&&!this.getAttribute("densidade")&&(this.densidade=e.densidade),typeof e.altura=="number"&&!this.getAttribute("altura")&&!this.style.height&&(this.resizerController.definirAltura(e.altura,!1),this.alturaCustomizada=e.altura))}this.hasAttribute("altura")&&this.resizerController.definirAltura(this.getAttribute("altura"),!1),this.resizerController.init(),this.render(),this.conectarEventosGerais(),ta(this,this,this.shadow,this.corpoElement,this.listeners),this.conectado=!0,this.camadas.length>0&&this.salvarLembrancaEstado()}disconnectedCallback(){var e;this.conectado=!1,(e=this.resizerController)==null||e.destruir(),this.listeners.cleanup()}attributeChangedCallback(e,t,r){var o;t!==r&&(e==="colapsado"?this.salvarLembrancaEstado():e==="camada-ativa"?(this.sincronizarCamadaAtivaDOM(),this.salvarLembrancaEstado()):e==="mapa-base-ativo"?r&&this.marcarMapaBaseAtivoNoDOM(r):e==="mostrar-mapas-base"||e==="mostrar-rodape"||e==="mostrar-busca"||e==="colapsavel"||e==="flutuante"?this.solicitarRenderizacao():e==="altura"&&((o=this.resizerController)==null||o.definirAltura(r,!1)))}get titulo(){return this.getAttribute("titulo")||"Camadas"}set titulo(e){this.setAttribute("titulo",e)}get camadaAtivaId(){var e;return this.getAttribute("camada-ativa")||(((e=this.camadas[0])==null?void 0:e.id)??null)}set camadaAtivaId(e){e?this.setAttribute("camada-ativa",e):this.removeAttribute("camada-ativa")}get mapaBaseAtivo(){return this.getAttribute("mapa-base-ativo")||"satelite"}set mapaBaseAtivo(e){this.setAttribute("mapa-base-ativo",e)}selecionarMapaBase(e,t=!1){!e||this.mapaBaseAtivo===e||(this.mapaBaseAtivo=e,this.marcarMapaBaseAtivoNoDOM(e),this.salvarLembrancaEstado(),t&&this.dispararEvento("ui-mapa-base-alterado",{mapaBaseId:e}))}marcarMapaBaseAtivoNoDOM(e){this.shadow.querySelectorAll("[data-basemap-id]").forEach(t=>{const r=t.getAttribute("data-basemap-id")===e;t.classList.toggle("active",r),t.setAttribute("aria-pressed",String(r))})}get abaAtiva(){return this.getAttribute("aba-ativa")||"camadas"}set abaAtiva(e){this.setAttribute("aba-ativa",e)}get colapsado(){return this.hasAttribute("colapsado")}set colapsado(e){e?this.setAttribute("colapsado",""):this.removeAttribute("colapsado")}get colapsavel(){return this.getAttribute("colapsavel")!=="false"}set colapsavel(e){this.setAttribute("colapsavel",String(e))}get flutuante(){return this.hasAttribute("flutuante")}set flutuante(e){e?this.setAttribute("flutuante",""):this.removeAttribute("flutuante")}get densidade(){return this.getAttribute("densidade")||"normal"}set densidade(e){this.setAttribute("densidade",e)}get mostrarMapasBase(){return this.getAttribute("mostrar-mapas-base")!=="false"}set mostrarMapasBase(e){this.setAttribute("mostrar-mapas-base",String(e))}get mostrarRodape(){return this.getAttribute("mostrar-rodape")!=="false"}set mostrarRodape(e){this.setAttribute("mostrar-rodape",String(e))}get mostrarBusca(){return this.getAttribute("mostrar-busca")!=="false"}set mostrarBusca(e){this.setAttribute("mostrar-busca",String(e))}get persistir(){return this.getAttribute("persistir")!=="false"}set persistir(e){this.setAttribute("persistir",String(e))}get storageKey(){return this.getAttribute("storage-key")}set storageKey(e){e?this.setAttribute("storage-key",e):this.removeAttribute("storage-key")}get redimensionavel(){return this.hasAttribute("redimensionavel")||this.hasAttribute("redimensionavel-altura")}set redimensionavel(e){e?this.setAttribute("redimensionavel",""):(this.removeAttribute("redimensionavel"),this.removeAttribute("redimensionavel-altura"))}get altura(){return this.getAttribute("altura")||this.style.height||null}set altura(e){e!=null?(this.setAttribute("altura",String(e)),this.definirAltura(e)):(this.removeAttribute("altura"),this.definirAltura(null))}definirAltura(e,t=!0){var o;(o=this.resizerController)==null||o.definirAltura(e,!1);const r=e!==null?parseFloat(String(e)):null;this.alturaCustomizada=isNaN(r)?null:r,t&&this.salvarLembrancaEstado()}obterChaveStorageAtual(){return be(this.storageKey,this.id)}agendarSalvarLembranca(){this.salvarLembrancaDebounced()}salvarLembrancaEstado(){if(!this.persistir||!this.conectado)return;const e=this.obterChaveStorageAtual(),t=Ee({estadoAnterior:T(e),origensCamadas:this.origensCamadas,camadas:this.camadas,expandedLayers:this.expandedLayers,camadaAtivaId:this.camadaAtivaId,painelColapsado:this.colapsado,mapaBaseAtivo:this.mapaBaseAtivo,densidade:this.densidade,altura:this.alturaCustomizada});xe(e,t)}limparLembranca(){ye(this.obterChaveStorageAtual())}get layers(){return this.camadas}set layers(e){this.definirCamadas(e)}get features(){return this.feicoes}set features(e){this.definirFeicoes(e)}get basemaps(){return this.mapasBase}set basemaps(e){this.definirMapasBase(e)}definirCamadas(e,t){if(this.camadas=Array.isArray(e)?e.map(r=>({...r})):[],this.origensCamadas.clear(),this.persistir){const r=T(this.obterChaveStorageAtual());we(this.camadas,r,this.expandedLayers,this.origensCamadas),r!=null&&r.camadaAtivaId&&this.camadas.some(o=>o.id===r.camadaAtivaId)&&(this.camadaAtivaId=r.camadaAtivaId)}else this.camadas.forEach(r=>{this.origensCamadas.set(r.id,O(r)),this.expandedLayers.has(r.id)||this.expandedLayers.add(r.id)});if(Array.isArray(t)){this.feicoes=t.map(s=>({...s}));const r=new Set(this.camadas.map(s=>s.id)),o=this.feicoes.filter(s=>s.layerId&&!r.has(s.layerId));o.length>0&&console.warn(`[UI-Camadas] ${o.length} feição(ões) possuem 'layerId' não cadastrado nas camadas:`,o.map(s=>({id:s.id,nome:s.name,layerId:s.layerId}))),this.sincronizarSelecoesComFeicoesValidas()}!this.getAttribute("camada-ativa")&&this.camadas.length>0&&(this.camadaAtivaId=this.camadas[0].id),this.salvarLembrancaEstado(),this.solicitarRenderizacao()}definirFeicoes(e){this.feicoes=Array.isArray(e)?e.map(t=>({...t})):[],this.sincronizarSelecoesComFeicoesValidas(),this.solicitarRenderizacao()}definirMapasBase(e){this.mapasBase=Array.isArray(e)?[...e]:[],this.solicitarRenderizacao()}definirCamadaAtiva(e,t=!1){!e||this.camadaAtivaId===e||(this.camadaAtivaId=e,this.sincronizarCamadaAtivaDOM(),this.salvarLembrancaEstado(),t&&this.dispararEvento("ui-camada-selecionada",{camadaId:e,camada:this.camadas.find(r=>r.id===e)}))}obterCamada(e){return this.camadas.find(t=>t.id===e)}obterCamadaAtiva(){return this.camadas.find(e=>e.id===this.camadaAtivaId)}obterFeicao(e){return this.feicoes.find(t=>t.id===e)}obterFeicoesSelecionadas(){return this.feicoes.filter(e=>this.selectedFeatureIds.has(e.id))}adicionarCamada(e){if(!e||!e.id)return;if(this.camadas.some(r=>r.id===e.id)){console.warn(`[UI-Camadas] adicionarCamada ignorado: já existe uma camada com id '${e.id}'.`);return}const t={...e};this.camadas.push(t),this.origensCamadas.set(t.id,O(t)),this.expandedLayers.add(t.id),this.salvarLembrancaEstado(),this.solicitarRenderizacao()}removerCamada(e){var t;this.camadas=this.camadas.filter(r=>r.id!==e),this.feicoes=this.feicoes.filter(r=>r.layerId!==e),this.origensCamadas.delete(e),this.expandedLayers.delete(e),this.activeSettingsLayerId===e&&(this.activeSettingsLayerId=null),this.sincronizarSelecoesComFeicoesValidas(),this.selectedFeatureIds.size===0&&(this.lastClickedFeatureId=null),this.camadaAtivaId===e&&(this.camadaAtivaId=((t=this.camadas[0])==null?void 0:t.id)??null),this.salvarLembrancaEstado(),this.solicitarRenderizacao()}adicionarFeicao(e){if(!(!e||!e.id)){if(this.feicoes.some(t=>t.id===e.id)){console.warn(`[UI-Camadas] adicionarFeicao ignorado: já existe uma feição com id '${e.id}'.`);return}this.feicoes.push({...e}),this.solicitarRenderizacao()}}atualizarFeicao(e){const t=this.feicoes.findIndex(r=>r.id===e.id);t!==-1&&(this.feicoes[t]={...this.feicoes[t],...e},this.solicitarRenderizacao())}removerFeicao(e){this.feicoes=this.feicoes.filter(t=>t.id!==e),this.selectedFeatureIds.delete(e),this.solicitarRenderizacao()}selecionarFeicao(e,t=!1,r=!1,o=!1){const s=fe(pe(this.camadas,this.feicoes,this.expandedLayers,this.searchQuery),this.selectedFeatureIds,this.lastClickedFeatureId,e,t,r);s&&(this.selectedFeatureIds=s.selecionados,this.lastClickedFeatureId=s.ultimoClicadoId,this.sincronizarSelecaoDOM(),o&&this.notificarMudancaSelecao())}selecionarFeicoes(e,t=!1){const r=e||[];r.length===this.selectedFeatureIds.size&&r.every(c=>this.selectedFeatureIds.has(c))||(this.selectedFeatureIds.clear(),r.forEach(c=>this.selectedFeatureIds.add(c)),this.sincronizarSelecaoDOM(),t&&this.notificarMudancaSelecao())}limparSelecao(e=!1){this.selectedFeatureIds.size!==0&&(this.selectedFeatureIds.clear(),this.lastClickedFeatureId=null,this.sincronizarSelecaoDOM(),e&&this.notificarMudancaSelecao())}expandirTodas(){this.expandedLayers=new Set(this.camadas.map(e=>e.id)),this.salvarLembrancaEstado(),this.solicitarRenderizacao()}colapsarTodas(){this.expandedLayers.clear(),this.salvarLembrancaEstado(),this.solicitarRenderizacao()}alternarVisibilidadeTodas(e=!1){const r=!this.camadas.some(o=>o.visible!==!1);this.camadas.forEach(o=>{o.visible=r,e&&this.dispararEvento("ui-camada-visibilidade",{camadaId:o.id,visivel:r})}),this.salvarLembrancaEstado(),this.solicitarRenderizacao()}colapsar(e=!1){this.definirColapso(!0,e)}expandir(e=!1){this.definirColapso(!1,e)}alternarColapso(e=!1){this.definirColapso(!this.colapsado,e)}definirColapso(e,t){this.colapsado!==e&&(this.colapsado=e,t&&this.dispararEvento("ui-colapso-alterado",{colapsado:e}))}solicitarRenderizacao(){this.render()}dispararEvento(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}render(){var u;if(!this.corpoElement)return;const e=ge({camadas:this.camadas,feicoes:this.feicoes,camadaAtivaId:this.camadaAtivaId,expandedLayers:this.expandedLayers,selectedFeatureIds:this.selectedFeatureIds,activeSettingsLayerId:this.activeSettingsLayerId,editingLayerId:this.editingLayerId,editingFeatureId:this.editingFeatureId,searchQuery:this.searchQuery,mostrarBotaoColapsar:this.flutuante&&this.getAttribute("colapsavel")!=="false"}),t=this.mostrarMapasBase?de(this.mapasBase,this.mapaBaseAtivo):"",r=this.mostrarRodape?ue(this.camadas,this.feicoes,this.selectedFeatureIds):"",o=this.shadow.getElementById("ui-layer-tree-mount"),s=this.corpoElement.scrollTop,c=o?o.scrollTop:0,n=this.shadow.activeElement,l=n&&this.corpoElement.contains(n)?n.id:"",d=n&&"selectionStart"in n?n.selectionStart:null;this.corpoElement.innerHTML=`
|
|
292
|
+
`,this.corpoElement=this.shadow.getElementById("painel-corpo"),this.btnExpandirFlutuante=this.shadow.getElementById("btn-expandir-flutuante"),this.dragDropManager=new be(this,this.shadow);const e=this.shadow.getElementById("resizer-altura");this.resizerController=sa({hostElement:this,resizerElement:e,listeners:this.listeners,getMinAltura:()=>{const t=this.getAttribute("min-altura");return t&&parseFloat(t)||140},getMaxAltura:()=>{const t=this.getAttribute("max-altura");return t&&parseFloat(t)||1600},onAlturaAlterada:t=>{this.alturaCustomizada=t,this.salvarLembrancaEstado()}})}static get observedAttributes(){return["titulo","mapa-base-ativo","camada-ativa","aba-ativa","colapsavel","colapsado","flutuante","mostrar-mapas-base","mostrar-rodape","mostrar-busca","densidade","persistir","storage-key","redimensionavel","redimensionavel-altura","altura","min-altura","max-altura"]}connectedCallback(){if(this.persistir){const e=O(this.obterChaveStorageAtual());e&&(e.painelColapsado===!0&&!this.hasAttribute("colapsado")&&(this.colapsado=!0),e.camadaAtivaId&&!this.getAttribute("camada-ativa")&&(this.camadaAtivaId=e.camadaAtivaId),e.mapaBaseAtivo&&!this.getAttribute("mapa-base-ativo")&&(this.mapaBaseAtivo=e.mapaBaseAtivo),e.densidade&&!this.getAttribute("densidade")&&(this.densidade=e.densidade),typeof e.altura=="number"&&!this.getAttribute("altura")&&!this.style.height&&(this.resizerController.definirAltura(e.altura,!1),this.alturaCustomizada=e.altura))}this.hasAttribute("altura")&&this.resizerController.definirAltura(this.getAttribute("altura"),!1),this.persistir&&!this.storageKey&&!this.id&&(M.instanciasChavePadrao.size>0&&console.warn("[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."),M.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()}disconnectedCallback(){var e;this.conectado=!1,M.instanciasChavePadrao.delete(this),(e=this.resizerController)==null||e.destruir(),this.listeners.cleanup()}attributeChangedCallback(e,t,r){var i;t!==r&&(e==="colapsado"?this.salvarLembrancaEstado():e==="camada-ativa"?(this.sincronizarCamadaAtivaDOM(),this.salvarLembrancaEstado()):e==="mapa-base-ativo"?r&&this.marcarMapaBaseAtivoNoDOM(r):e==="mostrar-mapas-base"||e==="mostrar-rodape"||e==="mostrar-busca"||e==="colapsavel"||e==="flutuante"?this.solicitarRenderizacao():e==="altura"&&((i=this.resizerController)==null||i.definirAltura(r,!1)))}get titulo(){return this.getAttribute("titulo")||"Camadas"}set titulo(e){this.setAttribute("titulo",e)}get camadaAtivaId(){var e;return this.getAttribute("camada-ativa")||(((e=this.camadas[0])==null?void 0:e.id)??null)}set camadaAtivaId(e){e?this.setAttribute("camada-ativa",e):this.removeAttribute("camada-ativa")}get mapaBaseAtivo(){return this.getAttribute("mapa-base-ativo")||"satelite"}set mapaBaseAtivo(e){this.setAttribute("mapa-base-ativo",e)}selecionarMapaBase(e,t=!1){!e||this.mapaBaseAtivo===e||(this.mapaBaseAtivo=e,this.marcarMapaBaseAtivoNoDOM(e),this.salvarLembrancaEstado(),t&&this.dispararEvento("ui-mapa-base-alterado",{mapaBaseId:e}))}marcarMapaBaseAtivoNoDOM(e){this.shadow.querySelectorAll("[data-basemap-id]").forEach(t=>{const r=t.getAttribute("data-basemap-id")===e;t.classList.toggle("active",r),t.setAttribute("aria-pressed",String(r))})}get abaAtiva(){return this.getAttribute("aba-ativa")||"camadas"}set abaAtiva(e){this.setAttribute("aba-ativa",e)}get colapsado(){return this.hasAttribute("colapsado")}set colapsado(e){e?this.setAttribute("colapsado",""):this.removeAttribute("colapsado")}get colapsavel(){return this.getAttribute("colapsavel")!=="false"}set colapsavel(e){this.setAttribute("colapsavel",String(e))}get flutuante(){return this.hasAttribute("flutuante")}set flutuante(e){e?this.setAttribute("flutuante",""):this.removeAttribute("flutuante")}get densidade(){return this.getAttribute("densidade")||"normal"}set densidade(e){this.setAttribute("densidade",e)}get mostrarMapasBase(){return this.getAttribute("mostrar-mapas-base")!=="false"}set mostrarMapasBase(e){this.setAttribute("mostrar-mapas-base",String(e))}get mostrarRodape(){return this.getAttribute("mostrar-rodape")!=="false"}set mostrarRodape(e){this.setAttribute("mostrar-rodape",String(e))}get mostrarBusca(){return this.getAttribute("mostrar-busca")!=="false"}set mostrarBusca(e){this.setAttribute("mostrar-busca",String(e))}get persistir(){return this.getAttribute("persistir")!=="false"}set persistir(e){this.setAttribute("persistir",String(e))}get storageKey(){return this.getAttribute("storage-key")}set storageKey(e){e?this.setAttribute("storage-key",e):this.removeAttribute("storage-key")}get redimensionavel(){return this.hasAttribute("redimensionavel")||this.hasAttribute("redimensionavel-altura")}set redimensionavel(e){e?this.setAttribute("redimensionavel",""):(this.removeAttribute("redimensionavel"),this.removeAttribute("redimensionavel-altura"))}get altura(){return this.getAttribute("altura")||this.style.height||null}set altura(e){e!=null?(this.setAttribute("altura",String(e)),this.definirAltura(e)):(this.removeAttribute("altura"),this.definirAltura(null))}definirAltura(e,t=!0){var i;(i=this.resizerController)==null||i.definirAltura(e,!1);const r=e!==null?parseFloat(String(e)):null;this.alturaCustomizada=isNaN(r)?null:r,t&&this.salvarLembrancaEstado()}obterChaveStorageAtual(){return xe(this.storageKey,this.id)}agendarSalvarLembranca(){this.salvarLembrancaDebounced()}salvarLembrancaEstado(){if(!this.persistir||!this.conectado)return;const e=this.obterChaveStorageAtual(),t=Ae({estadoAnterior:O(e),origensCamadas:this.origensCamadas,camadas:this.camadas,expandedLayers:this.expandedLayers,camadaAtivaId:this.camadaAtivaId,painelColapsado:this.colapsado,mapaBaseAtivo:this.mapaBaseAtivo,densidade:this.densidade,altura:this.alturaCustomizada,camadasRemovidas:this.camadasRemovidas});this.camadasRemovidas.clear(),ye(e,t)}limparLembranca(){we(this.obterChaveStorageAtual())}get layers(){return this.camadas}set layers(e){this.definirCamadas(e)}get features(){return this.feicoes}set features(e){this.definirFeicoes(e)}get basemaps(){return this.mapasBase}set basemaps(e){this.definirMapasBase(e)}definirCamadas(e,t){if(this.camadas=Array.isArray(e)?e.map(i=>({...i})):[],this.origensCamadas.clear(),this.persistir){const i=O(this.obterChaveStorageAtual());Ee(this.camadas,i,this.expandedLayers,this.origensCamadas),i!=null&&i.camadaAtivaId&&this.camadas.some(s=>s.id===i.camadaAtivaId)&&(this.camadaAtivaId=i.camadaAtivaId)}else this.camadas.forEach(i=>{this.origensCamadas.set(i.id,j(i)),this.expandedLayers.has(i.id)||this.expandedLayers.add(i.id)});if(Array.isArray(t)){this.feicoes=t.map(n=>({...n}));const i=new Set(this.camadas.map(n=>n.id)),s=this.feicoes.filter(n=>n.layerId&&!i.has(n.layerId));s.length>0&&console.warn(`[UI-Camadas] ${s.length} feição(ões) possuem 'layerId' não cadastrado nas camadas:`,s.map(n=>({id:n.id,nome:n.name,layerId:n.layerId}))),this.sincronizarSelecoesComFeicoesValidas()}const r=this.getAttribute("camada-ativa");this.camadas.length>0&&(!r||!this.camadas.some(i=>i.id===r))&&(this.camadaAtivaId=this.camadas[0].id),this.salvarLembrancaEstado(),this.solicitarRenderizacao()}definirFeicoes(e){this.feicoes=Array.isArray(e)?e.map(t=>({...t})):[],this.sincronizarSelecoesComFeicoesValidas(),this.solicitarRenderizacao()}definirMapasBase(e){this.mapasBase=Array.isArray(e)?[...e]:[],this.solicitarRenderizacao()}definirCamadaAtiva(e,t=!1){!e||this.camadaAtivaId===e||(this.camadaAtivaId=e,this.sincronizarCamadaAtivaDOM(),this.salvarLembrancaEstado(),t&&this.dispararEvento("ui-camada-selecionada",{camadaId:e,camada:this.camadas.find(r=>r.id===e)}))}obterCamada(e){return this.camadas.find(t=>t.id===e)}obterCamadaAtiva(){return this.camadas.find(e=>e.id===this.camadaAtivaId)}obterFeicao(e){return this.feicoes.find(t=>t.id===e)}obterFeicoesSelecionadas(){return this.feicoes.filter(e=>this.selectedFeatureIds.has(e.id))}adicionarCamada(e){if(!e||!e.id)return;if(this.camadas.some(r=>r.id===e.id)){console.warn(`[UI-Camadas] adicionarCamada ignorado: já existe uma camada com id '${e.id}'.`);return}const t={...e};this.camadas.push(t),this.origensCamadas.set(t.id,j(t)),this.expandedLayers.add(t.id),this.salvarLembrancaEstado(),this.solicitarRenderizacao()}removerCamada(e){var t;this.camadas=this.camadas.filter(r=>r.id!==e),this.feicoes=this.feicoes.filter(r=>r.layerId!==e),this.origensCamadas.delete(e),this.camadasRemovidas.add(e),this.expandedLayers.delete(e),this.activeSettingsLayerId===e&&(this.activeSettingsLayerId=null),this.sincronizarSelecoesComFeicoesValidas(),this.selectedFeatureIds.size===0&&(this.lastClickedFeatureId=null),this.camadaAtivaId===e&&(this.camadaAtivaId=((t=this.camadas[0])==null?void 0:t.id)??null),this.salvarLembrancaEstado(),this.solicitarRenderizacao()}adicionarFeicao(e){if(!(!e||!e.id)){if(this.feicoes.some(t=>t.id===e.id)){console.warn(`[UI-Camadas] adicionarFeicao ignorado: já existe uma feição com id '${e.id}'.`);return}this.feicoes.push({...e}),this.solicitarRenderizacao()}}atualizarFeicao(e){const t=this.feicoes.findIndex(r=>r.id===e.id);t!==-1&&(this.feicoes[t]={...this.feicoes[t],...e},this.solicitarRenderizacao())}removerFeicao(e){this.feicoes=this.feicoes.filter(t=>t.id!==e),this.selectedFeatureIds.delete(e),this.solicitarRenderizacao()}selecionarFeicao(e,t=!1,r=!1,i=!1){const s=fe(this.camadas,this.feicoes,this.expandedLayers,this.searchQuery),n=!r&&!s.includes(e)&&this.feicoes.some(l=>l.id===e),c=me(n?[...s,e]:s,this.selectedFeatureIds,this.lastClickedFeatureId,e,t,r);c&&(this.selectedFeatureIds=c.selecionados,this.lastClickedFeatureId=c.ultimoClicadoId,this.sincronizarSelecaoDOM(),i&&this.notificarMudancaSelecao())}selecionarFeicoes(e,t=!1){const r=e||[];r.length===this.selectedFeatureIds.size&&r.every(n=>this.selectedFeatureIds.has(n))||(this.selectedFeatureIds.clear(),r.forEach(n=>this.selectedFeatureIds.add(n)),this.lastClickedFeatureId=r.length>0?r[r.length-1]:null,this.sincronizarSelecaoDOM(),t&&this.notificarMudancaSelecao())}limparSelecao(e=!1){this.selectedFeatureIds.size!==0&&(this.selectedFeatureIds.clear(),this.lastClickedFeatureId=null,this.sincronizarSelecaoDOM(),e&&this.notificarMudancaSelecao())}expandirTodas(){this.expandedLayers=new Set(this.camadas.map(e=>e.id)),this.salvarLembrancaEstado(),this.solicitarRenderizacao()}colapsarTodas(){this.expandedLayers.clear(),this.salvarLembrancaEstado(),this.solicitarRenderizacao()}alternarVisibilidadeTodas(e=!1){const r=!this.camadas.some(i=>i.visible!==!1);this.camadas.forEach(i=>{i.visible=r,e&&this.dispararEvento("ui-camada-visibilidade",{camadaId:i.id,visivel:r})}),this.salvarLembrancaEstado(),this.solicitarRenderizacao()}colapsar(e=!1){this.definirColapso(!0,e)}expandir(e=!1){this.definirColapso(!1,e)}alternarColapso(e=!1){this.definirColapso(!this.colapsado,e)}definirColapso(e,t){this.colapsado!==e&&(this.colapsado=e,t&&this.dispararEvento("ui-colapso-alterado",{colapsado:e}))}solicitarRenderizacao(){if(this.profundidadeLote>0){this.renderPendente=!0;return}this.render()}emLote(e){this.profundidadeLote++;try{e()}finally{this.profundidadeLote--,this.profundidadeLote===0&&this.renderPendente&&(this.renderPendente=!1,this.render())}}dispararEvento(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}render(){var f,m;if(!this.corpoElement)return;const e=ve({camadas:this.camadas,feicoes:this.feicoes,camadaAtivaId:this.camadaAtivaId,expandedLayers:this.expandedLayers,selectedFeatureIds:this.selectedFeatureIds,activeSettingsLayerId:this.activeSettingsLayerId,editingLayerId:this.editingLayerId,editingFeatureId:this.editingFeatureId,searchQuery:this.searchQuery,mostrarBotaoColapsar:this.flutuante&&this.getAttribute("colapsavel")!=="false"}),t=this.mostrarMapasBase?ue(this.mapasBase,this.mapaBaseAtivo):"",r=this.mostrarRodape?pe(this.camadas,this.feicoes,this.selectedFeatureIds):"",i=this.shadow.getElementById("ui-layer-tree-mount"),s=this.corpoElement.scrollTop,n=i?i.scrollTop:0,c=this.shadow.activeElement,l=c&&this.corpoElement.contains(c)?c.id:"",u=c&&!l&&this.corpoElement.contains(c)?Array.from(c.attributes).find(v=>v.name.startsWith("data-")&&v.value!==""):void 0,p=c&&"selectionStart"in c?c.selectionStart:null;this.corpoElement.innerHTML=`
|
|
293
293
|
${e}
|
|
294
294
|
${r}
|
|
295
295
|
${t}
|
|
296
|
-
`,this.corpoElement.scrollTop=s;const
|
|
296
|
+
`,this.corpoElement.scrollTop=s;const d=this.shadow.getElementById("ui-layer-tree-mount");if(d&&(d.scrollTop=n),l){const v=this.shadow.getElementById(l);if(v&&(v.focus({preventScroll:!0}),p!==null&&typeof v.setSelectionRange=="function"))try{v.setSelectionRange(p,p)}catch{}}!l&&u&&((f=S(this.corpoElement,u.name,u.value))==null||f.focus({preventScroll:!0})),(m=this.shadow.querySelector("[data-layer-row], [data-feat-row]"))==null||m.setAttribute("tabindex","0"),Je(this,this.shadow),this.dragDropManager.bindAll()}conectarEventosGerais(){this.listeners.add(this.btnExpandirFlutuante,"click",()=>this.expandir(!0))}sincronizarCamadaAtivaDOM(){ia(this,this.shadow)}sincronizarSelecaoDOM(){oa(this,this.shadow)}sincronizarSelecoesComFeicoesValidas(){he(this.selectedFeatureIds,this.feicoes)}notificarMudancaSelecao(){const e=this.feicoes.filter(t=>this.selectedFeatureIds.has(t.id));this.dispararEvento("ui-feicoes-selecionadas",{feicoesIds:Array.from(this.selectedFeatureIds),feicoes:e}),e.length===1?this.dispararEvento("ui-feicao-selecionada",{feicaoId:e[0].id,feicao:e[0]}):e.length===0&&this.dispararEvento("ui-feicao-selecionada",{feicaoId:null,feicao:null})}};x(M,"instanciasChavePadrao",new Set);let z=M;class Ie extends z{}class Le extends z{}N.definirCustomElement("ui-camadas",z);N.definirCustomElement("ui-painel-camadas",Ie);N.definirCustomElement("ui-layer-panel",Le);exports.UIMapaBase=le.UIMapaBase;exports.UISeletorMapaBase=le.UISeletorMapaBase;exports.CamadasDragDropManager=be;exports.ICONES=h;exports.LIMITE_FEICOES_POR_CAMADA=ee;exports.MAPAS_BASE_PADRAO=Z;exports.UICamadas=z;exports.UILayerPanel=Le;exports.UIPainelCamadas=Ie;exports.calcularAreaPoligono=W;exports.calcularComprimentoLinha=J;exports.calcularDistanciaPontos=ce;exports.calcularSelecaoFeicao=me;exports.carregarEstadoPersistido=O;exports.escapeHtml=k;exports.filtrarFeicoesPorBusca=H;exports.formatarMetricaFeicoes=X;exports.gerarChaveStorage=xe;exports.limparEstadoPersistido=we;exports.montarEstadoPersistido=Ae;exports.obterIdsVisiveisFeicoes=fe;exports.reidratarCamadasComOverrides=Ee;exports.removerSelecoesInvalidas=he;exports.renderizarArvoreCamadas=ve;exports.renderizarGridMapasBase=ue;exports.renderizarRodapeAcoes=pe;exports.renderizarThumbGeometria=ge;exports.salvarEstadoPersistido=ye;exports.snapshotCamada=j;
|