@opengis/gis 0.2.3 → 0.2.4
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/dist/index.css +1 -1
- package/dist/index.js +79 -79
- package/dist/index.umd.cjs +1 -1
- package/package.json +1 -1
- package/server/routes/map/index.mjs +9 -9
- package/server/routes/map/maps/get.map.js +54 -50
package/dist/index.umd.cjs
CHANGED
|
@@ -91,4 +91,4 @@
|
|
|
91
91
|
`+t.slice(l,i),l=i+1),a=d;return p+=`
|
|
92
92
|
`,t.length-l>n&&a>l?p+=t.slice(l,a)+`
|
|
93
93
|
`+t.slice(a+1):p+=t.slice(l),p.slice(1)}function Gi(t){for(var n="",o=0,r,l=0;l<t.length;o>=65536?l+=2:l++)o=Me(t,l),r=te[o],!r&&Le(o)?(n+=t[l],o>=65536&&(n+=t[l+1])):n+=r||Pi(o);return n}function Zi(t,n,o){var r="",l=t.tag,i,a,d;for(i=0,a=o.length;i<a;i+=1)d=o[i],t.replacer&&(d=t.replacer.call(o,String(i),d)),(ce(t,n,d,!1,!1)||typeof d>"u"&&ce(t,n,null,!1,!1))&&(r!==""&&(r+=","+(t.condenseFlow?"":" ")),r+=t.dump);t.tag=l,t.dump="["+r+"]"}function sn(t,n,o,r){var l="",i=t.tag,a,d,p;for(a=0,d=o.length;a<d;a+=1)p=o[a],t.replacer&&(p=t.replacer.call(o,String(a),p)),(ce(t,n+1,p,!0,!0,!1,!0)||typeof p>"u"&&ce(t,n+1,null,!0,!0,!1,!0))&&((!r||l!=="")&&(l+=nt(t,n)),t.dump&&Se===t.dump.charCodeAt(0)?l+="-":l+="- ",l+=t.dump);t.tag=i,t.dump=l||"[]"}function Xi(t,n,o){var r="",l=t.tag,i=Object.keys(o),a,d,p,u,g;for(a=0,d=i.length;a<d;a+=1)g="",r!==""&&(g+=", "),t.condenseFlow&&(g+='"'),p=i[a],u=o[p],t.replacer&&(u=t.replacer.call(o,p,u)),ce(t,n,p,!1,!1)&&(t.dump.length>1024&&(g+="? "),g+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),ce(t,n,u,!1,!1)&&(g+=t.dump,r+=g));t.tag=l,t.dump="{"+r+"}"}function Ji(t,n,o,r){var l="",i=t.tag,a=Object.keys(o),d,p,u,g,s,m;if(t.sortKeys===!0)a.sort();else if(typeof t.sortKeys=="function")a.sort(t.sortKeys);else if(t.sortKeys)throw new ne("sortKeys must be a boolean or a function");for(d=0,p=a.length;d<p;d+=1)m="",(!r||l!=="")&&(m+=nt(t,n)),u=a[d],g=o[u],t.replacer&&(g=t.replacer.call(o,u,g)),ce(t,n+1,u,!0,!0,!0)&&(s=t.tag!==null&&t.tag!=="?"||t.dump&&t.dump.length>1024,s&&(t.dump&&Se===t.dump.charCodeAt(0)?m+="?":m+="? "),m+=t.dump,s&&(m+=nt(t,n)),ce(t,n+1,g,!0,s)&&(t.dump&&Se===t.dump.charCodeAt(0)?m+=":":m+=": ",m+=t.dump,l+=m));t.tag=i,t.dump=l||"{}"}function cn(t,n,o){var r,l,i,a,d,p;for(l=o?t.explicitTypes:t.implicitTypes,i=0,a=l.length;i<a;i+=1)if(d=l[i],(d.instanceOf||d.predicate)&&(!d.instanceOf||typeof n=="object"&&n instanceof d.instanceOf)&&(!d.predicate||d.predicate(n))){if(o?d.multi&&d.representName?t.tag=d.representName(n):t.tag=d.tag:t.tag="?",d.represent){if(p=t.styleMap[d.tag]||d.defaultStyle,qt.call(d.represent)==="[object Function]")r=d.represent(n,p);else if(Yt.call(d.represent,p))r=d.represent[p](n,p);else throw new ne("!<"+d.tag+'> tag resolver accepts not "'+p+'" style');t.dump=r}return!0}return!1}function ce(t,n,o,r,l,i,a){t.tag=null,t.dump=o,cn(t,o,!1)||cn(t,o,!0);var d=qt.call(t.dump),p=r,u;r&&(r=t.flowLevel<0||t.flowLevel>n);var g=d==="[object Object]"||d==="[object Array]",s,m;if(g&&(s=t.duplicates.indexOf(o),m=s!==-1),(t.tag!==null&&t.tag!=="?"||m||t.indent!==2&&n>0)&&(l=!1),m&&t.usedDuplicates[s])t.dump="*ref_"+s;else{if(g&&m&&!t.usedDuplicates[s]&&(t.usedDuplicates[s]=!0),d==="[object Object]")r&&Object.keys(t.dump).length!==0?(Ji(t,n,t.dump,l),m&&(t.dump="&ref_"+s+t.dump)):(Xi(t,n,t.dump),m&&(t.dump="&ref_"+s+" "+t.dump));else if(d==="[object Array]")r&&t.dump.length!==0?(t.noArrayIndent&&!a&&n>0?sn(t,n-1,t.dump,l):sn(t,n,t.dump,l),m&&(t.dump="&ref_"+s+t.dump)):(Zi(t,n,t.dump),m&&(t.dump="&ref_"+s+" "+t.dump));else if(d==="[object String]")t.tag!=="?"&&Wi(t,t.dump,n,i,p);else{if(d==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new ne("unacceptable kind of an object to dump "+d)}t.tag!==null&&t.tag!=="?"&&(u=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?u="!"+u:u.slice(0,18)==="tag:yaml.org,2002:"?u="!!"+u.slice(18):u="!<"+u+">",t.dump=u+" "+t.dump)}return!0}function Qi(t,n){var o=[],r=[],l,i;for(rt(t,o,r),l=0,i=r.length;l<i;l+=1)n.duplicates.push(o[r[l]]);n.usedDuplicates=new Array(i)}function rt(t,n,o){var r,l,i;if(t!==null&&typeof t=="object")if(l=n.indexOf(t),l!==-1)o.indexOf(l)===-1&&o.push(l);else if(n.push(t),Array.isArray(t))for(l=0,i=t.length;l<i;l+=1)rt(t[l],n,o);else for(r=Object.keys(t),l=0,i=r.length;l<i;l+=1)rt(t[r[l]],n,o)}function es(t,n){n=n||{};var o=new Ri(n);o.noRefs||Qi(t,o);var r=t;return o.replacer&&(r=o.replacer.call({"":r},"",r)),ce(o,0,r,!0,!0)?o.dump+`
|
|
94
|
-
`:""}var ts=es,ns={dump:ts},os=ki.load,dn=ns.dump;const rs={class:"flex flex-col flex-1 overflow-hidden"},ls={class:"flex justify-end gap-2"},as={class:"w-20 gap-2 whitespace-nowrap rounded-md font-medium ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 px-4 py-2 h-9 text-xs bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm transition-all duration-300 hover:shadow-md hover:scale-[1.02] relative overflow-hidden"},is=["href"],ss={class:"flex flex-col flex-1 overflow-hidden"},cs={class:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden mt-3 flex flex-col flex-1"},ds={class:"relative bg-gradient-to-br from-slate-50 to-white flex-1"},us=e.defineComponent({__name:"vs-tab-style",props:{token:{},styleYaml:{}},emits:["update:styleYaml","update"],setup(t,{emit:n}){const o=t,r=n,l=e.ref("");e.watch(()=>o.styleYaml,p=>{try{const u=p?dn(p):"";!l.value&&u!==l.value&&(l.value=u)}catch{l.value=""}},{immediate:!0,deep:!0}),e.watch(l,async p=>{var u,g;try{const s=p?os(p):null;if((u=s==null?void 0:s.colorAttr)!=null&&u.length&&((g=o.styleYaml)==null?void 0:g.colorAttr)!==s.colorAttr){const m=await i(s.colorAttr);s.colors=m.reduce((c,f,x)=>({...c,[f.id.toString()]:a[x]}),{});const y=dn(s);y!==l.value&&(l.value=y)}JSON.stringify(s)!==JSON.stringify(o.styleYaml)&&r("update:styleYaml",s)}catch{}});async function i(p){return(await fetch(`/api/gis-service/${o.token}/${p}`).then(g=>g.json())).rows}const a=["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd"],d=async()=>{try{await fetch(`/api/gis-service/${o.token}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({style:l.value})}),r("update"),Q.notify({type:"success",title:"Успіх",message:"Стилі збережено"})}catch(p){Q.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти стилі"}),console.log(p)}};return(p,u)=>(e.openBlock(),e.createElementBlock("div",rs,[e.createElementVNode("div",ls,[e.createElementVNode("button",as,[e.createElementVNode("a",{target:"_blank",href:"/api/gis-service/"+o.token+"/col"},"Attr",8,is)]),e.createElementVNode("button",{onClick:d,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 px-4 py-2 h-9 text-xs bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm transition-all duration-300 hover:shadow-md hover:scale-[1.02] relative overflow-hidden"},[...u[1]||(u[1]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-save h-3 w-3 mr-1"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти стилі ",-1)])])]),e.createElementVNode("div",ss,[e.createElementVNode("div",cs,[u[2]||(u[2]=e.createElementVNode("div",{class:"bg-gradient-to-r from-gray-50 to-gray-100 px-4 py-2 border-b border-gray-200 flex items-center justify-between"},[e.createElementVNode("div",{class:"text-xs text-gray-400"},"YAML")],-1)),e.createElementVNode("div",ds,[e.createVNode(Et,{modelValue:l.value,"onUpdate:modelValue":u[0]||(u[0]=g=>l.value=g),language:"yaml",theme:"vs-light"},null,8,["modelValue"])])])])]))}}),un=Symbol("MapContext");function ps(t){const n=e.shallowRef(null),o=e.ref(!1);let r=!1;const l=[],i=()=>{r=!0,l.length&&l.forEach(s=>s())},a=()=>{const s=t.container;return typeof s=="string"?document.getElementById(s):(s==null?void 0:s.value)!==void 0?s.value:s},d=()=>r?Promise.resolve():new Promise(s=>l.push(s)),p=async()=>{var m,y,c,f;if(typeof window>"u"||n.value)return;const s=a();if(!s)throw new Error("Map container not found");n.value=new maplibregl.Map({...t.mapOptions||{},attributionControl:!1,center:[30,50],zoom:7,container:s}),(m=t.controls)!=null&&m.navigation&&n.value.addControl(new maplibregl.NavigationControl(typeof t.controls.navigation=="object"?t.controls.navigation:{}),"top-right"),(y=t.controls)!=null&&y.scale&&n.value.addControl(new maplibregl.ScaleControl(typeof t.controls.scale=="object"?t.controls.scale:{}),"bottom-left"),(c=t.controls)!=null&&c.fullscreen&&n.value.addControl(new maplibregl.FullscreenControl,"top-right"),(f=t.controls)!=null&&f.geolocate&&n.value.addControl(new maplibregl.GeolocateControl(typeof t.controls.geolocate=="object"?t.controls.geolocate:{}),"top-right"),n.value.once("load",()=>{o.value=!0,i()})},u=()=>{n.value&&(n.value.remove(),n.value=null,o.value=!1)};e.onMounted(p),e.onUnmounted(u);const g={map:n,ready:d,flyTo:s=>{var m;return(m=n.value)==null?void 0:m.flyTo(s)},fitBounds:(s,m)=>{var y;return(y=n.value)==null?void 0:y.fitBounds(s,m)},setCenter:s=>{var m;return(m=n.value)==null?void 0:m.setCenter(s)},setZoom:s=>{var m;return(m=n.value)==null?void 0:m.setZoom(s)},addControl:(s,m)=>{var y;return(y=n.value)==null?void 0:y.addControl(s,m)},removeControl:s=>{var m;return(m=n.value)==null?void 0:m.removeControl(s)},on:(s,m,y)=>{var c,f;return typeof m=="string"?((c=n.value)==null||c.on(s,m,y),()=>{var x;return(x=n.value)==null?void 0:x.off(s,m,y)}):((f=n.value)==null||f.on(s,m),()=>{var x;return(x=n.value)==null?void 0:x.off(s,m)})},off:(s,m,y)=>{var c,f;typeof m=="string"?(c=n.value)==null||c.off(s,m,y):(f=n.value)==null||f.off(s,m)},project:s=>{var m;return(m=n.value)==null?void 0:m.project(s)},unproject:s=>{var m;return(m=n.value)==null?void 0:m.unproject(s)}};return e.provide(un,g),g}function le(t){if(t)return{map:t,flyTo:t.value.flyTo,fitBounds:t.value.fitBounds};const n=e.inject(un);if(!n)throw new Error("useMap() called outside of a Map provider");return n}const lt=new Map;function at(t){return t.colorAttr&&t.colors?["match",["get",t.colorAttr],...Object.entries(t.colors).reduce((n,o)=>n.concat(o),[]),"#94a3b8"]:null}function ms(t){var r;if(!t.icon||!t.colors)return null;const n=[],o=(r=t.icon)==null?void 0:r.split("+")[0];return Object.values(t.colors||{}).forEach(l=>{n.push(`${o}+${l.replace("#","")}.png`)}),["match",["get",t.colorAttr],...Object.entries(t.colors).reduce((l,i,a)=>l.concat([i[0],n[a]]),[]),t.icon]}async function pn(t,n,o){const r=[n],l=n.split("+")[0];Object.values(o||{}).forEach(i=>{r.push(`${l}+${i.replace("#","")}.png`)});for(let i=0;i<r.length;i+=1){const a=r[i];if(t.getImage(a))continue;const d=await t.loadImage("/api/gis-icon/"+a);t.addImage(a,d.data)}}function mn(t,n){const o=at(t);if(!(t.icon&&!t.iconZoom))return{type:"circle",maxzoom:n||t.iconZoom||22,paint:{"circle-stroke-color":(t==null?void 0:t.stroke)||"#fff","circle-opacity":t.opacity||1,"circle-color":o||t.color,"circle-stroke-width":t.width||1,"circle-radius":t.radius||5}}}function fs(t){const n=at(t);return{type:"fill",minzoom:t.pointZoom||0,paint:{"fill-color":n||t.color,"fill-opacity":t.opacity||.3,"fill-outline-color":t.stroke}}}function gs(t){return{type:"line",paint:{"line-color":at(t)||t.color,"line-opacity":t.opacity||1,"line-width":t.width||1.5}}}function ys(t){const n=ms(t);return{type:"symbol",minzoom:t.iconZoom||0,layout:{"icon-image":n||t.icon,"icon-size":1,"icon-allow-overlap":!0,"icon-ignore-placement":!0}}}function hs(t){return{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:t}}]}}}function fn(t){const n=[];return t?(t.icon&&n.push(ys(t)),t.pointZoom&&n.push(mn(t,t.pointZoom)),t.type==="polygon"?n.push(fs(t)):t.type==="line"?n.push(gs(t)):n.push(mn(t)),n.filter(o=>o)):[]}const it={};function W(t,n,o){var M,$;if(!t)return it;if(!n)return it[t];const{map:r,ready:l=()=>Promise.resolve()}=le(o),i=t||n.layer.id,a=n.sourceId??t;n.point&&(n.source=hs(n.point)),!n.layer&&((M=n.source)==null?void 0:M.type)==="raster"&&(n.layer={id:a,type:"raster",source:a}),n.layer&&!(($=n.layer)!=null&&$.source)&&(n.layer.source=a);let d=!1,p=!1;const u=()=>{var k,V,I,T;if(!(p||!r.value)){if(n.source&&!r.value.getSource(a)&&r.value.addSource(a,n.source),!r.value.getLayer(i)){const A=n.beforeId===0?(V=(k=r.value.getStyle().layers)==null?void 0:k[0])==null?void 0:V.id:n.beforeId;(T=(I=n.layer)==null?void 0:I.style)!=null&&T.icon&&pn(r.value,n.layer.style.icon,n.layer.style.colors);const N=fn(n.style||n.layer.style);if(!N.length)return r.value.addLayer(n.layer,A);N.forEach((v,S)=>{var D;Object.assign(v,{id:i+(S||"")}),v.source=a,((D=n.source)==null?void 0:D.type)==="vector"&&(v["source-layer"]=a),r.value.addLayer(v,A)})}d=!0}};l().then(u);const g=(k,V)=>r.value?(r.value.on(k,i,V),()=>{var I;return(I=r.value)==null?void 0:I.off(k,i,V)}):()=>{};function s(k){r.value&&r.value.getStyle().layers.filter(V=>V.source==i).forEach(V=>{r.value.setLayoutProperty(V.id,"visibility",k?"visible":"none")})}async function m(k){if(!r.value)return;k.icon&&pn(r.value,k.icon,k.colors);const V=fn(k);E(!1),V.forEach((I,T)=>{I.id=i+T,["source","source-layer"].forEach(A=>{I[A]=n==null?void 0:n.layer[A]}),r.value.addLayer(I)})}function y(k){r.value&&Object.entries(k).forEach(([V,I])=>r.value.setPaintProperty(i,V,I))}function c(k){r.value&&Object.entries(k).forEach(([V,I])=>r.value.setLayoutProperty(i,V,I))}function f(k){r.value&&r.value.setFilter(i,k)}function x(k){if(!r.value)return;const V=r.value.getSource(a);if(V&&"setTiles"in V&&n.source.tiles[0]){const I=n.source.tiles[0];V.setTiles([I+"?filter="+k])}}function B(k){if(!r.value)return;const V=r.value.getSource(a);V&&"setTiles"in V&&V.setTiles(k)}function b(k){if(!r.value)return;const V=r.value.getSource(a);V&&"setData"in V&&V.setData(k)}function h(k,V){r.value&&r.value.setFeatureState({source:a,...k},V)}function w(k,V){r.value&&r.value.removeFeatureState({source:a,...k},V?{key:V}:void 0)}function E(k=!0){r.value&&(r.value.getStyle().layers.filter(V=>V.source==i).forEach(V=>{r.value.removeLayer(V.id)}),p=!0,n!=null&&n.source&&k&&r.value.getSource(a)&&r.value.removeSource(a))}const _={ids:{layerId:i,sourceId:a},isMounted:()=>{var k;return d&&!!((k=r.value)!=null&&k.getLayer(i))},setVisible:s,updatePaint:y,updateLayout:c,updateFilter:f,setData:b,setTiles:B,setStyle:m,setFilter:x,setFeatureState:h,removeFeatureState:w,remove:E,card:n.card,popup:n.popup,getSource:()=>{var k;return(k=r.value)==null?void 0:k.getSource(a)},getLayer:()=>{var k;return(k=r.value)==null?void 0:k.getLayer(i)},on:g};lt.set(i,_);const C=()=>{lt.get(i)===_&<.delete(i)},F=_.remove;return _.remove=()=>{C(),F()},e.onBeforeUnmount(_.remove),it[t]=_,_}const xs={class:"flex flex-col flex-1 min-h-0"},bs={class:"flex flex-col flex-1 min-h-0"},ks=e.defineComponent({__name:"vs-tab-popup",props:{token:{},fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,c=>l.value=c||[],{immediate:!0}),e.watch(l,c=>{const f=W(o.token);f&&(f.popup=c),r("update:columns",c)});const i=e.ref("list"),a=e.ref(!1),d=e.ref([]),p=[{key:"name",label:"Name",type:"main"},{key:"meta",label:"Meta"}],u={name:{type:"text",label:"Name",disabled:!0,validators:["required"]},label:{type:"text",label:"Label",validators:["required"]},meta:{type:"radio",label:"Meta",mode:"combo",options:[{text:"Title",id:"title"},{text:"Feature",id:"feature"},{text:"Badge",id:"badge"}]},data:{type:"text",label:"Data"}};function g(){d.value=l.value.map(c=>c.name||c.id),a.value=!0}function s(){var B;const c=[...l.value],f=((B=o.fields)==null?void 0:B.filter(b=>d.value.includes(b.name)))||[],x=we(c,f,{selectedKeys:d.value,resolveKey:b=>ue(b)});l.value=x,a.value=!1,d.value=[]}function m(){a.value=!1,d.value=[]}function y(){let c=[];i.value==="all"?c=o.fields||[]:i.value==="none"?c=[]:c=l.value,c.filter(f=>!f.label).forEach(f=>f.label=f.ua),r("save",c)}return(c,f)=>(e.openBlock(),e.createElementBlock("div",xs,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:g,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium bg-gradient-to-r from-gray-500 to-gray-400 text-white h-9 px-4 py-2 hover:from-gray-600 hover:to-gray-500"}," Імпорт "),e.createElementVNode("button",{onClick:y,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300"}," Зберегти popup ")]),e.createElementVNode("div",bs,[i.value==="list"?(e.openBlock(),e.createBlock(he,{key:0,modelValue:l.value,"onUpdate:modelValue":f[0]||(f[0]=x=>l.value=x),"columns-scheme":p,"form-scheme":u,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(ke,{visible:a.value,"onUpdate:visible":f[1]||(f[1]=x=>a.value=x),selection:d.value,"onUpdate:selection":f[2]||(f[2]=x=>d.value=x),fields:c.fields,title:"Імпорт полів","id-prefix":"import-popup",onConfirm:s,onCancel:m},null,8,["visible","selection","fields"])]))}}),_s={class:"flex flex-col flex-1 min-h-0"},ws={class:"flex justify-between mb-3 gap-2"},Es={class:"p-4 space-y-4 text-sm"},Ns={class:"space-y-1"},Bs={class:"space-y-1"},Cs={class:"flex items-center gap-3"},Vs={class:"flex justify-end gap-2 p-4 border-t"},vs=e.defineComponent({__name:"vs-tab-legend",props:{mapInfo:{},token:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,c=>{l.value=c||[]}),e.watch(l,c=>{r("update:columns",c)});const i=e.ref(!1),a=e.ref({name:"",color:"#2E86DE"}),d=e.defineAsyncComponent(()=>import("@opengis/core").then(c=>c.VsModal)),p=[{key:"name",label:"Назва"},{key:"color",label:"Колір",type:"color"}],u={name:{type:"text",label:"Назва",validators:["required"]},color:{type:"color",label:"Колір",validators:["required"]}};function g(c){c&&s(),i.value=c}function s(){a.value={name:"",color:"#2E86DE"}}function m(){var B,b;const c=(B=a.value.name)==null?void 0:B.trim();if(!c){Q.notify({type:"warning",title:"Перевірка",message:"Вкажіть назву елементу легенди"});return}const f=((b=a.value.color)==null?void 0:b.trim())||"#2E86DE";if(l.value.some(h=>ue(h)===ue({name:c}))){Q.notify({type:"warning",title:"Дубль",message:"Такий елемент легенди вже існує"});return}l.value=[...l.value,{name:c,color:f}],s(),i.value=!1}function y(){r("save",l.value)}return(c,f)=>(e.openBlock(),e.createElementBlock("div",_s,[e.createElementVNode("div",ws,[e.createElementVNode("button",{onClick:f[0]||(f[0]=x=>i.value=!0),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium bg-gradient-to-r from-gray-500 to-gray-400 text-white h-9 px-4 py-2 hover:from-gray-600 hover:to-gray-500"}," Додати "),e.createElementVNode("button",{onClick:y,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300"}," Зберегти легенду ")]),e.createVNode(he,{modelValue:l.value,"onUpdate:modelValue":f[1]||(f[1]=x=>l.value=x),"columns-scheme":p,"form-scheme":u,"main-col-width":"250px","add-button":!1},null,8,["modelValue"]),e.createVNode(e.unref(d),{visible:i.value,title:"Новий елемент легенди","onUpdate:visible":g},{footer:e.withCtx(()=>[e.createElementVNode("div",Vs,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:f[5]||(f[5]=x=>g(!1))}," Скасувати "),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:m}," Додати ")])]),default:e.withCtx(()=>[e.createElementVNode("div",Es,[e.createElementVNode("div",Ns,[f[6]||(f[6]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Назва ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":f[2]||(f[2]=x=>a.value.name=x),type:"text",class:"w-full rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"Наприклад, Житлова зона"},null,512),[[e.vModelText,a.value.name]])]),e.createElementVNode("div",Bs,[f[7]||(f[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Колір ",-1)),e.createElementVNode("div",Cs,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":f[3]||(f[3]=x=>a.value.color=x),type:"color",class:"h-10 w-16 rounded border border-gray-300"},null,512),[[e.vModelText,a.value.color]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":f[4]||(f[4]=x=>a.value.color=x),type:"text",class:"flex-1 rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"#FFFFFF"},null,512),[[e.vModelText,a.value.color]])])])])]),_:1},8,["visible"])]))}}),$s={class:"space-y-3 bg-gradient-to-br from-sky-50 to-blue-50 p-4 rounded-xl border border-sky-100 shadow-sm"},As=["onClick"],Ss=["aria-checked","value"],Fs={key:0},Ls=e.defineComponent({__name:"view-mode-toggle",props:{modelValue:{},options:{},showHtml:{type:Boolean}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,l=a=>r("update:modelValue",a),i=o.options||[{value:"all",label:"All"},{value:"list",label:"List"},{value:"none",label:"None"}];return(a,d)=>(e.openBlock(),e.createElementBlock("div",$s,[d[1]||(d[1]=e.createElementVNode("label",{class:"text-sm font-medium text-gray-600"},"Режим відображення",-1)),e.createElementVNode("div",{role:"radiogroup",class:e.normalizeClass(["grid gap-2",`grid-cols-${e.unref(i).length}`])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(i),p=>(e.openBlock(),e.createElementBlock("div",{key:p.value,onClick:u=>l(p.value),class:e.normalizeClass(["flex items-center justify-center space-x-2 rounded-lg p-2 border transition-all duration-300 cursor-pointer",[a.modelValue===p.value?"bg-gradient-to-r from-sky-200 to-blue-200 border-transparent shadow-sm":"bg-white border-gray-100 hover:border-sky-200 hover:shadow-sm"]])},[e.createElementVNode("button",{type:"button",role:"radio","aria-checked":a.modelValue===p.value,value:p.value,class:"aspect-square rounded-full border border-primary h-4 w-4 flex items-center justify-center text-sky-500"},[a.modelValue===p.value?(e.openBlock(),e.createElementBlock("span",Fs,[...d[0]||(d[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-circle h-2.5 w-2.5 fill-current text-current"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"})],-1)])])):e.createCommentVNode("",!0)],8,Ss),e.createElementVNode("label",{class:e.normalizeClass(["text-xs font-medium cursor-pointer",a.modelValue===p.value?"text-gray-700":"text-gray-600"])},e.toDisplayString(p.label),3)],10,As))),128))],2)]))}}),Ms={class:"flex flex-col flex-1 min-h-0"},Ts={class:"flex flex-col flex-1 min-h-0"},Is=e.defineComponent({__name:"vs-tab-card",props:{fields:{},columns:{},viewMode:{},html:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,x=>l.value=x||[],{immediate:!0}),e.watch(l,x=>r("update:columns",x));const i=e.ref(o.viewMode??"list");e.watch(()=>o.viewMode,x=>{x&&x!==i.value&&(i.value=x)});const a=e.ref(o.html??"");e.watch(()=>o.html,x=>{typeof x=="string"&&x!==a.value&&(a.value=x)},{immediate:!0});const d=e.ref(!1),p=e.ref([]),u=[{key:"name",label:"Name",type:"main"},{key:"format",label:"Format"}],g={name:{type:"text",label:"Name",validators:["required"],disabled:!0},label:{type:"text",label:"Label",validators:["required"]},format:{type:"radio",label:"Format",mode:"inline",validators:["required"],options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"}]},data:{type:"text",label:"Data"}};function s(){p.value=l.value.map(x=>x.name||x.id),d.value=!0}function m(){var h;const x=[...l.value],B=((h=o.fields)==null?void 0:h.filter(w=>p.value.includes(w.name)).map(w=>{const{type:E,format:_,...C}=w;return{...C,format:_??E??"text"}}))||[],b=we(x,B,{selectedKeys:p.value,resolveKey:w=>ue(w)});l.value=b,d.value=!1,p.value=[]}function y(){d.value=!1,p.value=[]}function c(){const x=i.value==="html"?"html":"list",B={card_mode:x,list:l.value};x==="html"&&(B.html=a.value),r("save","card",B)}const f=[{value:"all",label:"All"},{value:"list",label:"List"},{value:"none",label:"None"},{value:"html",label:"HTML"}];return(x,B)=>(e.openBlock(),e.createElementBlock("div",Ms,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:s,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium bg-gradient-to-r from-gray-500 to-gray-400 text-white h-9 px-4 py-2 hover:from-gray-600 hover:to-gray-500"}," Імпорт "),e.createElementVNode("button",{onClick:c,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300"}," Зберегти ")]),e.createVNode(Ls,{modelValue:i.value,"onUpdate:modelValue":B[0]||(B[0]=b=>i.value=b),options:f},null,8,["modelValue"]),e.createElementVNode("div",Ts,[i.value==="list"?(e.openBlock(),e.createBlock(he,{key:0,modelValue:l.value,"onUpdate:modelValue":B[1]||(B[1]=b=>l.value=b),"columns-scheme":u,"form-scheme":g,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):i.value==="html"?(e.openBlock(),e.createBlock(Et,{key:1,modelValue:a.value,"onUpdate:modelValue":B[2]||(B[2]=b=>a.value=b),language:"html",theme:"vs-light",class:"flex-1 min-h-0"},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(ke,{visible:d.value,"onUpdate:visible":B[3]||(B[3]=b=>d.value=b),selection:p.value,"onUpdate:selection":B[4]||(B[4]=b=>p.value=b),fields:x.fields,title:"Імпорт полів для картки","id-prefix":"import-card",onConfirm:m,onCancel:y},null,8,["visible","selection","fields"])]))}}),Ds={class:"flex flex-col flex-1 min-h-0"},js=e.defineComponent({__name:"vs-tab-filter",props:{fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n;console.log(o.columns);const l=e.ref(o.columns||[]);e.watch(()=>o.columns,c=>l.value=c||[],{immediate:!0}),e.watch(l,c=>r("update:columns",c),{deep:!0,immediate:!0});const i=e.ref("list"),a=e.ref(!1),d=e.ref([]),p=[{key:"id",label:"Name"},{key:"label",label:"UA"},{key:"type",label:"Тип"}],u={name:{type:"text",label:"Name",disabled:!0,validators:["required"]},label:{type:"text",label:"UA",validators:["required"]},type:{type:"radio",label:"Тип",position:"horizontal",validators:["required"],options:[{text:"Check",id:"check"},{text:"Range",id:"range"},{text:"Date",id:"date"},{text:"Text",id:"text"},{text:"Select",id:"select"}]},hidden:{label:"Приховати",type:"Switcher"},data:{type:"text",label:"Класифікатор",conditions:["type","in",["autocomplete","select","check"]],validators:["required"]}};function g(){d.value=l.value.map(c=>c.name||c.id),a.value=!0}function s(){var B;const c=[...l.value],f=((B=o.fields)==null?void 0:B.filter(b=>d.value.includes(b.name)))||[],x=we(c,f,{selectedKeys:d.value,resolveKey:b=>ue(b)});l.value=x,a.value=!1,d.value=[]}function m(){a.value=!1,d.value=[]}function y(){let c=[];i.value==="all"?c=o.fields||[]:i.value==="none"?c=[]:c=l.value,r("save",c)}return(c,f)=>(e.openBlock(),e.createElementBlock("div",Ds,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:g,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium bg-gradient-to-r from-gray-500 to-gray-400 text-white h-9 px-4 py-2 hover:from-gray-600 hover:to-gray-500"}," Імпорт "),e.createElementVNode("button",{onClick:y,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300"}," Зберегти фільтр ")]),i.value==="list"?(e.openBlock(),e.createBlock(he,{key:0,modelValue:l.value,"onUpdate:modelValue":f[0]||(f[0]=x=>l.value=x),"columns-scheme":p,"form-scheme":u,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0),e.createVNode(ke,{visible:a.value,"onUpdate:visible":f[1]||(f[1]=x=>a.value=x),selection:d.value,"onUpdate:selection":f[2]||(f[2]=x=>d.value=x),fields:c.fields,title:"Імпорт полів","id-prefix":"import-filter",onConfirm:s,onCancel:m},null,8,["visible","selection","fields"])]))}}),gn=e.defineComponent({__name:"MapView",setup(t,{expose:n}){const o=e.ref(null),r=ps({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},center:[30.5234,50.4501],zoom:9,minZoom:4,maxZoom:14,doubleClickZoom:!1},controls:{navigation:!0,scale:!0}});return n({ctx:r}),(l,i)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"el",ref:o,class:"w-full h-full rounded-xl overflow-hidden"},[e.renderSlot(l.$slots,"default")],512))}}),Os=e.defineComponent({__name:"MapDataLayer",props:{id:{},layer:{},styleYaml:{}},setup(t,{expose:n}){var m;const{map:o,flyTo:r,setZoom:l}=le(),i=t,a=i.id;String(i.id);const d=`${location.origin}/api/vtile/${i.id}/ua/{z}/{x}/{y}.vmt?all=1`,p=W(a,{source:{type:"vector",tiles:[d],minzoom:0,maxzoom:14},popup:i.layer.popup,layer:{style:(m=i.layer)==null?void 0:m.style}});n({layerHandle:p}),r({center:i.layer.center||[30,50],animate:!1}),l(11),W("point",{point:i.layer.center,style:{color:"orange"}});let u=null;function g(){u&&clearTimeout(u),u=setTimeout(()=>{u=null,s().catch(y=>console.error("Failed to update map layer",y))},300)}async function s(){o.value&&p.setStyle(i.styleYaml)}return e.watch(()=>i.styleYaml,g),e.onBeforeUnmount(()=>{p.remove()}),(y,c)=>null}}),Ps={class:"map-filter"},zs={class:"map-filter__header"},Rs={class:"map-filter__title"},Us={"aria-hidden":"true"},Ye=H(e.defineComponent({__name:"MapFilterPopover",props:{count:{},layer:{},catalogAnchor:{},disabled:{type:Boolean}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/filter")),o=t,r=e.reactive({open:!1,top:0,left:0}),l=e.ref(null),i=e.ref(null),a=e.ref({}),d=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0}),p=e.computed(()=>r.open),u=e.computed(()=>(o.layer.filters.length??0)>0),g=e.computed(()=>{var _;return((_=o.layer)==null?void 0:_.name)??""}),s=e.computed(()=>{var _;return((_=o.layer)==null?void 0:_.filters)??[]}),m=e.computed(()=>{var _;return((_=o.layer)==null?void 0:_.id)??""}),y=e.computed(()=>{var _;return r.open?{position:"absolute",top:`${r.top}px`,left:`${r.left}px`,transform:(_=o.catalogAnchor)!=null&&_.value?"none":"translateX(-50%)",zIndex:1e3,width:"240px"}:{display:"none"}});function c(){r.open=!1}function f(){var C;if(!l.value)return;const _=l.value.getBoundingClientRect();if((C=o.catalogAnchor)!=null&&C.value){const F=o.catalogAnchor.value.getBoundingClientRect();r.top=F.top+window.scrollY,r.left=F.right+window.scrollX+12}else r.top=_.bottom+window.scrollY+8,r.left=_.left+_.width/2+window.scrollX}function x(){r.open=!r.open,r.open&&e.nextTick(f)}function B(){o.disabled||x()}function b(){r.open&&f()}function h(_){const C=m.value;if(!C)return;const F=W(C);if(!(F!=null&&F.setFilter))return;a.value=_;const M=Object.entries(_).map(([$,k])=>`${$}=${k}`).join("|");F.setFilter(M)}function w(_){if(!o.disabled)return;const C=_.currentTarget;if(!C)return;const F=C.getBoundingClientRect();d.left=F.left+F.width/2+window.scrollX,d.top=F.bottom+8+window.scrollY,d.visible=!0}function E(){d.visible=!1}return e.onMounted(()=>{window.addEventListener("resize",b),window.addEventListener("scroll",b,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",b),window.removeEventListener("scroll",b,!0)}),(_,C)=>u.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mapLayer-filter",ref_key:"anchor",ref:l},[e.createElementVNode("a",{class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(B,["prevent","stop"]),onMouseenter:w,onMouseleave:E,onFocus:w,onBlur:E},[...C[2]||(C[2]=[e.createElementVNode("div",{class:"mapLayer-filter__icon"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M3 4h18l-7 8v6l-4 2v-8z"})])],-1)])],34),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[p.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-50 rounded-[16px] bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-filter__popover",style:e.normalizeStyle(y.value),ref_key:"panel",ref:i,onClick:C[1]||(C[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Ps,[e.createElementVNode("div",zs,[e.createElementVNode("h3",Rs,e.toDisplayString(g.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:c},[e.createElementVNode("span",Us,[e.createVNode(e.unref(In),{class:"h-4 w-4"})]),C[3]||(C[3]=e.createElementVNode("span",{class:"sr-only"},"Закрити",-1))])]),e.createVNode(e.unref(n),{view:"inline",schema:s.value,value:a.value,limit:5,onChange:C[0]||(C[0]=F=>h(F.data)),width:220},null,8,["schema","value"])])],4)):e.createCommentVNode("",!0),d.visible?(e.openBlock(),e.createElementBlock("div",{key:1,class:"filter-badge__hint",style:e.normalizeStyle({top:`${d.top}px`,left:`${d.left}px`})},e.toDisplayString(d.text),5)):e.createCommentVNode("",!0)]))],512)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-1950f91d"]]),qs={class:"map-filter"},Ys={class:"map-filter__header"},Hs={class:"map-filter__title"},st=H(e.defineComponent({__name:"MapFilterWidget",props:{filters:{},title:{},layerId:{}},setup(t){return e.defineAsyncComponent(()=>import("@opengis/filter")),e.ref({}),(n,o)=>(e.openBlock(),e.createElementBlock("div",qs,[e.createElementVNode("div",Ys,[e.createElementVNode("h3",Hs,e.toDisplayString(n.title||"Фільтр"),1),e.createVNode(Ye,{layer:{filters:n.filters,id:n.layerId},count:n.filters.length},null,8,["layer","count"])])]))}}),[["__scopeId","data-v-c9b8657f"]]),Ws={class:"flex flex-row gap-x-3 z-10 relative widget"},Ks=["onClick"],Gs=["src","alt"],ct=e.defineComponent({__name:"BaseMaps",setup(t){const n={gki:{url:"https://data.gki.com.ua/api-user/rtile/voyager/ua/{z}/{x}/{y}.png",preview:"https://data.gki.com.ua/api-user/rtile/voyager/ua/12/2422/1400.png",title:"Базова карта (voyager)"},arcgisonline:{url:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}.png",preview:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/7/47/69.png",title:"ESRI Online Imagery(2022-2023)"},none:{}},o=e.ref("gki"),r=W("base",{source:{type:"raster",tiles:[n[o.value].url]},beforeId:0});function l(i){if(o.value=i,!n[i].url)return r.setVisible(!1);r.setVisible(!0),r.setTiles([n[i].url])}return(i,a)=>(e.openBlock(),e.createElementBlock("div",Ws,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(n,(d,p)=>e.createElementVNode("div",{key:p,onClick:u=>l(p)},[e.createElementVNode("div",{class:e.normalizeClass(["w-14 h-14 flex items-center justify-center bg-gray-200 rounded-xl shadow-2xs cursor-pointer transition-all border-4",o.value===p?"border-blue-500":"border-gray-200"])},[d.preview?(e.openBlock(),e.createElementBlock("img",{key:0,src:d.preview,alt:d.title,class:"object-cover rounded-lg w-12 h-12"},null,8,Gs)):e.createCommentVNode("",!0)],2)],8,Ks)),64))]))}}),Zs={key:0,class:"legend-widget flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget",style:{width:"100%"}},Xs={class:"flex flex-col gap-1 p-5"},Js={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},dt=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:r}=le(),l=e.ref([]);let i=null;function a(g){return g?g.map((s,m)=>{var f;const y=(s==null?void 0:s.name)||(s==null?void 0:s.label)||(s==null?void 0:s.title)||(s==null?void 0:s.id)||`Layer ${m+1}`,c=(s==null?void 0:s.color)||(s==null?void 0:s.fill)||((f=s==null?void 0:s.paint)==null?void 0:f.color)||"#3388ff";return{id:`${y}-${m}`,label:y,color:c}}):[]}function d(g){return g!=null&&g.layers?g.layers.filter(s=>{const m=s.paint||{};return m["fill-color"]||m["line-color"]||m["circle-color"]}).map((s,m)=>{var f;const y=s.paint||{},c=y["fill-color"]||y["line-color"]||y["circle-color"]||"#3388ff";return{id:s.id||`layer-${m}`,label:((f=s.metadata)==null?void 0:f.title)||s.id||`Layer ${m+1}`,color:c}}):[]}async function p(){var m;await r();const g=o.value;if(!g)return;const s=(m=g.getStyle)==null?void 0:m.call(g);l.value=d(s)}function u(){const g=o.value;if(!g)return;i==null||i();const s=()=>p();g.on("styledata",s),i=()=>g.off("styledata",s)}return e.watch(()=>n.items,async g=>{g!=null?(l.value=a(g),i==null||i()):(await r(),u(),p())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await r(),u(),p())}),e.onBeforeUnmount(()=>{i==null||i(),i=null}),(g,s)=>l.value.length?(e.openBlock(),e.createElementBlock("div",Zs,[e.createElementVNode("div",Xs,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,m=>(e.openBlock(),e.createElementBlock("div",{key:m.id,class:"flex items-center"},[e.createElementVNode("span",{class:"shrink-0 size-2.5 inline-block me-2.5 h-[10px] w-[10px] rounded-full",style:e.normalizeStyle({background:m.color})},null,4),e.createElementVNode("span",Js,[e.createElementVNode("span",null,e.toDisplayString(m.label),1)])]))),128))])])):e.createCommentVNode("",!0)}});function Qs(){const{map:t,ready:n}=le(),o=e.ref(null),r=e.ref(null),l=e.ref(null),i=e.ref(null);let a=[];function d(){a.forEach(m=>m()),a=[]}const p=m=>{var f;o.value=[m.point.x,m.point.y];const y=t.value.queryRenderedFeatures(m.point);if(!(y!=null&&y.length)){u();return}const c=W(y[0].source)||W(y[0].layer.id);c!=null&&c.popup&&(r.value=((f=c.popup)==null?void 0:f.fields)||c.popup,i.value=y[0].properties)},u=()=>{r.value=null,i.value=null,o.value=null};async function g(){await n(),t.value&&(d(),t.value.on("mousemove",p),t.value.on("mouseleave",u))}function s(){d(),r.value=null,i.value=null,o.value=null}return n().then(g),{popupCoords:o,popupFields:r,popupValues:i,disable:s,title:l}}const ec={class:"popup-card relative w-full overflow-hidden rounded-2xl border border-blue-100 bg-white/95 shadow-2xl backdrop-blur-sm"},tc={key:0,class:"border-b border-gray-200 px-3 py-2 text-sm font-semibold text-gray-800"},nc={class:"px-3 py-2 text-xs text-gray-600"},oc={class:"w-full border-collapse"},rc={class:"w-1/2 break-words pb-1 pr-2 font-medium text-gray-700"},lc={class:"w-1/2 break-words pb-1 pl-2 text-right"},ac={key:0,class:"inline-block rounded px-2 py-0.5 text-xs font-semibold text-yellow-800",style:{"background-color":"rgba(250, 204, 21, 0.25)"}},ic={key:1},yn=H(e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,disable:o,popupFields:r,popupValues:l,title:i}=Qs(),a=e.ref(null),d=e.ref({left:"-9999px",top:"-9999px"}),p=e.computed(()=>{var s;return((s=r.value)==null?void 0:s.length)>0&&Object.keys(l.value||{}).length>0}),u=e.computed(()=>{const s=r.value.find(m=>m.meta==="title");return l.value[s.name]});function g(){if(!p.value||!n.value||!a.value){d.value={left:"-9999px",top:"-9999px"};return}const[s,m]=n.value;a.value;const y=s+18,c=m+18;d.value={left:`${y}px`,top:`${c}px`}}return e.watch([n],()=>{e.nextTick(()=>g())}),e.onBeforeUnmount(()=>{o()}),(s,m)=>p.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popupRef",ref:a,class:"absolute z-30 w-[280px] pointer-events-none text-gray-800",style:e.normalizeStyle(d.value)},[e.createElementVNode("div",ec,[u.value?(e.openBlock(),e.createElementBlock("div",tc,e.toDisplayString(u.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",nc,[e.createElementVNode("table",oc,[e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(r).filter(y=>y.meta!=="title"),y=>(e.openBlock(),e.createElementBlock("tr",{key:y.value,class:"align-top"},[e.createElementVNode("td",rc,e.toDisplayString(y.label||y.title),1),e.createElementVNode("td",lc,[y.meta==="badge"?(e.openBlock(),e.createElementBlock("span",ac,e.toDisplayString(e.unref(l)[y.name+"_text"]||e.unref(l)[y.name]),1)):(e.openBlock(),e.createElementBlock("span",ic,e.toDisplayString(e.unref(l)[y.name+"_text"]),1))])]))),128))])])])])],4)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-43abcc69"]]);function sc(){const{map:t,ready:n}=le(),o=ae.useRoute(),r=ae.useRouter(),l=e.ref(null),i=e.ref(null),a=e.ref(null),d=e.ref(!1),p=e.computed(()=>d.value||!!l.value||!!a.value);let u=null,g=!1;function s(){l.value=null,i.value=null,a.value=null,d.value=!1}function m(){if(u){try{u()}catch{}u=null}}async function y(){await n();const _=t.value;_&&(m(),s(),_.on("click",c),u=()=>_.off("click",c),E(b()))}function c(_){const C=t.value;if(!C)return;const M=C.queryRenderedFeatures(_.point)[0];if(!M){s(),w(null);return}const $=W(M.source);f(M,$==null?void 0:$.card)}async function f(_,C){var M,$;if(!((M=_==null?void 0:_.properties)!=null&&M.id))return;const F=new URLSearchParams;F.set("layer",_.source),F.set("id",String(($=_.properties)==null?void 0:$.id)),d.value=!0,a.value=null,l.value=null,i.value=_||null;try{const k=await fetch(`/api/map-format?${F.toString()}`);if(!k.ok)throw new Error(`Failed (${k.status})`);const V=await k.json();l.value={rows:V.rows||{},fields:C||[],html:V.html||null},g||w(i.value)}catch{a.value="Не вдалося завантажити дані",l.value=null,Q.notify({type:"error",title:"Помилка",message:"Не вдалося завантажити дані"})}finally{d.value=!1}}function x(){s(),w(null)}function B(){m(),s()}n().then(y),e.onBeforeUnmount(()=>B());function b(){const _=Array.isArray(o.query.info)?o.query.info[0]:o.query.info;return typeof _!="string"?null:_.trim()||null}function h(_){var $,k;const C=(_==null?void 0:_.source)??(($=_==null?void 0:_.layer)==null?void 0:$.id),F=(k=_==null?void 0:_.properties)==null?void 0:k.id;return!C||F===void 0||F===null?null:`${C},${F}`.trim()||null}function w(_){const C=h(_),F=b();if(C===F)return;const M={...o.query};C?M.info=C:delete M.info,r.push({query:M}).catch(()=>{})}async function E(_){if(!_){s();return}if(_===h(i.value))return;const[C,F]=_.split(","),M=C==null?void 0:C.trim(),$=F==null?void 0:F.trim();if(!M||!$){s(),w(null);return}g=!0;try{const k=W(M);await f({source:M,properties:{id:$}},k==null?void 0:k.card)}finally{g=!1}}return e.watch(()=>b(),_=>{_!==h(i.value)&&(g=!0,E(_).finally(()=>{g=!1}))}),{card:l,cardFeature:i,cardError:a,cardLoading:d,isOpen:p,close:x}}function cc(){const{map:t,ready:n}=le(),o=e.ref([]),r=e.ref(0),l=e.ref(0),i=e.ref(!1),a=e.ref(null),d=e.computed(()=>o.value[l.value]||null),p=e.computed(()=>o.value.length>0);let u=null;function g(){u==null||u.remove(),u=null}function s(h){return h?h.type==="FeatureCollection"?h:h.type==="Feature"?{type:"FeatureCollection",features:[h]}:h.type&&Array.isArray(h.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:h,properties:{}}]}:Array.isArray(h.features)?{type:"FeatureCollection",features:h.features}:h.geometry?s(h.geometry):null:null}function m(h){return{type:"line",color:"#0a57ff",width:4,opacity:.95}}async function y(h){if(await n(),!t.value)return;const w=s(h);w&&(g(),u=W("feature-highlight",{source:{type:"geojson",data:w},style:m()},t))}async function c(h,w,E){var C,F,M,$;const _=`/api/map-info-point?x=${h}&y=${w}${`&layers=${E}`}`;try{i.value=!0,a.value=null;const k=await fetch(_);if(!k.ok)throw new Error("Failed to fetch feature info");const V=await k.json();if(r.value=V.count??0,o.value=[],r.value>0)for(let I=0;I<r.value;I++){const A=await(await fetch(`${_}&index=${I}`)).json();o.value.push(A)}if(l.value=0,o.value.length>0){const I=((F=(C=o.value[0])==null?void 0:C.data)==null?void 0:F.geom_4326)??(($=(M=o.value[0])==null?void 0:M.data)==null?void 0:$.geom);await y(I)}}catch(k){a.value=k.message}finally{i.value=!1}}function f(){l.value<r.value-1&&l.value++}function x(){l.value>0&&l.value--}function B(){o.value=[],r.value=0,l.value=0,g()}e.watch(l,async()=>{var w,E;const h=d.value;if(h){const _=((w=h==null?void 0:h.data)==null?void 0:w.geom_4326)??((E=h==null?void 0:h.data)==null?void 0:E.geom);await y(_)}});let b;return e.onMounted(async()=>{await n(),t.value&&(b=async h=>{const{lng:w,lat:E}=h.lngLat;await c(w,E,"3717052511148836581")},t.value.on("dblclick",b))}),e.onBeforeUnmount(()=>{t.value&&b&&t.value.off("dblclick",b),g()}),{features:o,count:r,index:l,current:d,loading:i,error:a,active:p,next:f,prev:x,close:B}}const dc={key:0,class:"absolute top-4 right-11 z-30 w-[400px] max-h-[80%] overflow-hidden rounded-2xl border border-slate-200 bg-white/95 shadow-2xl backdrop-blur-md flex flex-col"},uc={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},pc={class:"min-w-0 flex-1"},mc={class:"text-base font-semibold text-slate-900 truncate"},fc={key:0,class:"flex gap-1 mt-1"},gc=["disabled"],yc=["disabled"],hc={class:"flex-1 overflow-y-auto px-4 py-3 space-y-3 text-sm text-slate-700"},xc={key:0,class:"text-center text-xs text-slate-500"},bc={key:1,class:"text-center text-xs text-red-500"},kc=["innerHTML"],_c={key:3,class:"space-y-2"},wc={class:"text-xs font-semibold text-slate-500 uppercase tracking-wide"},Ec={key:0,class:"inline-block rounded px-2 py-0.5 text-xs font-semibold text-yellow-800",style:{"background-color":"rgba(250,204,21,0.25)"}},Nc={key:1,class:"text-sm text-right text-slate-800 whitespace-pre-wrap"},Bc={key:4,class:"text-center text-xs text-slate-400"},hn=H(e.defineComponent({__name:"MapCardWidget",setup(t){const n=sc(),o=cc(),r=e.computed(()=>o.active.value),l=e.computed(()=>r.value||n.isOpen.value),i=e.computed(()=>r.value?o.loading.value:n.cardLoading.value),a=e.computed(()=>r.value?o.error.value:n.cardError.value),d=e.computed(()=>{var c,f;return r.value?((c=o.current.value)==null?void 0:c.html)||null:((f=n.card.value)==null?void 0:f.html)||null}),p=e.computed(()=>{if(r.value&&o.current.value){const B=o.current.value.data??{};return(o.current.value.fields??[]).map(h=>({key:h.name,label:h.label||h.title||h.name,value:B[h.name]??"—",format:h.format||"text"}))}const c=n.card.value;if(!c)return[];const f=c.rows??{};return(c.fields??[]).map(B=>({key:B.name,label:B.ua||B.label||B.title||B.name,value:f[B.name]??"—",format:B.format||"text"}))}),{next:u,prev:g,count:s,index:m}=o;function y(){n.close(),o.close()}return(c,f)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[l.value?(e.openBlock(),e.createElementBlock("div",dc,[e.createElementVNode("div",uc,[e.createElementVNode("div",pc,[e.createElementVNode("p",mc,[r.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString(e.unref(m)+1)+" / "+e.toDisplayString(e.unref(s)),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Інформація про об’єкт ")],64))])]),r.value&&e.unref(s)>1?(e.openBlock(),e.createElementBlock("div",fc,[e.createElementVNode("button",{onClick:f[0]||(f[0]=(...x)=>e.unref(g)&&e.unref(g)(...x)),disabled:e.unref(m)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref($n),{class:"h-4 w-4"})],8,gc),e.createElementVNode("button",{onClick:f[1]||(f[1]=(...x)=>e.unref(u)&&e.unref(u)(...x)),disabled:e.unref(m)===e.unref(s)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(An),{class:"h-4 w-4"})],8,yc)])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"inline-flex h-7 w-7 items-center justify-center rounded-full bg-slate-100 text-slate-500 hover:bg-slate-200 hover:text-slate-700 ml-1",onClick:y}," ✕ ")]),e.createElementVNode("div",hc,[i.value?(e.openBlock(),e.createElementBlock("div",xc," Завантаження даних… ")):a.value?(e.openBlock(),e.createElementBlock("div",bc,e.toDisplayString(a.value),1)):d.value?(e.openBlock(),e.createElementBlock("div",{key:2,class:"prose prose-sm max-w-none",innerHTML:d.value},null,8,kc)):p.value.length?(e.openBlock(),e.createElementBlock("div",_c,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,x=>(e.openBlock(),e.createElementBlock("div",{key:x.key,class:"flex items-start justify-between gap-3 border-b border-slate-100 pb-2"},[e.createElementVNode("span",wc,e.toDisplayString(x.label),1),x.format==="badge"?(e.openBlock(),e.createElementBlock("span",Ec,e.toDisplayString(x.value),1)):(e.openBlock(),e.createElementBlock("span",Nc,e.toDisplayString(x.value),1))]))),128))])):(e.openBlock(),e.createElementBlock("div",Bc," Даних не знайдено. "))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-2222671f"]]),xn=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var m,y;const n=t,o=((y=(m=e.getCurrentInstance())==null?void 0:m.appContext.config.globalProperties)==null?void 0:y.$settings)||null,{map:r,ready:l}=le();let i=null;function a(){i==null||i.remove(),i=null}function d(c){if(!c)return null;if(typeof c=="string")try{c=JSON.parse(c)}catch{return null}return c.type==="FeatureCollection"?c:c.type==="Feature"?{type:"FeatureCollection",features:[c]}:c.type&&Array.isArray(c.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:c,properties:{}}]}:Array.isArray(c.features)?{type:"FeatureCollection",features:c.features}:c.geometry?d(c.geometry):null}function p(c){var B,b,h;return{type:"line",color:"#8e4484",width:2,opacity:((((h=(b=(B=c==null?void 0:c.features)==null?void 0:B[0])==null?void 0:b.geometry)==null?void 0:h.type)||"").includes("Polygon"),.95)}}async function u(c){const f=await fetch(c);if(!f.ok)throw new Error(String(f.status));return f.json()}async function g(c,f){if(c){const x=/^https?:\/\//.test(c)?c:new URL(c,location.origin).toString(),B=await u(x).catch(()=>null),b=d(B);if(b)return b}if(f){const x=await u(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(f)}`).catch(()=>null),B=d(x);if(B)return B}return null}async function s(){var B,b,h,w;if(!n.layerId||!r.value){a();return}typeof l=="function"&&await l().catch(()=>{});const c=n.boundary??((B=n.settingsMap)==null?void 0:B.boundary)??((b=o==null?void 0:o.map)==null?void 0:b.boundary)??null,f=n.katottg??((h=n.settingsMap)==null?void 0:h.katottg)??((w=o==null?void 0:o.map)==null?void 0:w.katottg)??null;if(!c&&!f){a();return}const x=await g(c,f);if(!x){a();return}a(),i=W(`${n.layerId}-boundary`,{source:{type:"geojson",data:x},style:p(x)},r)}return e.watch(()=>{var c,f;return[n.layerId,n.boundary,n.katottg,(c=n.settingsMap)==null?void 0:c.boundary,(f=n.settingsMap)==null?void 0:f.katottg,r.value]},()=>{s()},{immediate:!0}),e.onBeforeUnmount(a),(c,f)=>null}}),Cc={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},Vc={class:"flex-1 relative overflow-hidden"},vc={class:"absolute top-0 left-0 w-full z-20"},$c={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},Ac={class:"flex items-center gap-3"},Sc={class:"font-semibold text-lg text-gray-800 line-clamp-1"},Fc={class:"text-xs text-gray-500 truncate"},Lc=["title"],Mc={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[64px]"},Tc={class:"relative w-full h-full"},Ic={style:{top:"10px",left:"230px",position:"absolute","z-index":"1"}},Dc={class:"absolute top-4 left-4 z-20"},jc={class:"absolute bottom-4 left-4 z-20"},Oc={class:"w-[650px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},Pc={class:"flex-1 flex flex-col h-full"},zc={class:"px-3 pt-3 pb-2 border-b border-gray-100"},Rc={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-6 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},Uc=["aria-selected","onClick"],qc={class:"leading-none"},Yc={class:"flex flex-col flex-1 overflow-y-hidden p-3"},Hc=e.defineComponent({__name:"service",setup(t){var F,M;const n=ae.useRoute(),o=ae.useRouter(),r=n.params.id,l=e.ref(null),i=e.ref({}),a=e.ref(null),d=((M=(F=e.getCurrentInstance())==null?void 0:F.appContext.config.globalProperties)==null?void 0:M.$settings)||null,p=e.ref(""),u=e.ref([]),g=e.ref([]),s=e.ref([]),m=e.ref("list"),y=e.ref(""),c=e.ref([]),f=e.computed(()=>{var $,k;return(($=a.value)==null?void 0:$.id)??((k=a.value)==null?void 0:k.service_id)??null}),x=e.computed(()=>{const $=(d==null?void 0:d.map)||null,k=($==null?void 0:$.boundary)??null,V=($==null?void 0:$.katottg)??null;return!k&&!V?null:{boundary:k,katottg:V}}),B=[{key:"style",label:"Style",icon:hl},{key:"popup",label:"Popup",icon:$l},{key:"filter",label:"Filter",icon:Ll},{key:"legend",label:"Legend",icon:_l},{key:"card",label:"Card",icon:Bl}],b=B.map($=>$.key),h=e.ref("style");e.onMounted(async()=>{const $=n.query.tab;$&&b.includes($)&&(h.value=$),await w()}),e.watch(h,$=>{n.query.tab!==$&&o.replace({query:{...n.query,tab:$}})}),e.watch(()=>n.query.tab,$=>{$&&b.includes($)&&h.value!==$&&(h.value=$)});const w=async()=>{try{const $=await fetch(`/api/gis-service/${r}`);if(!$.ok)throw new Error(`${$.status}`);const k=await $.json();i.value=k||{},l.value=r,a.value=k||null,p.value=k.style||"",g.value=(k==null?void 0:k.popup)||[];const V=(k==null?void 0:k.card)||[];m.value=k.card_mode==="html"?"html":"list",s.value=k.card,y.value=V.html,u.value=(k==null?void 0:k.legend)||[],c.value=(k==null?void 0:k.filters)||[]}catch($){console.error("Failed to fetch map info",$)}};e.watch(()=>{var $;return($=a.value)==null?void 0:$.style},$=>{$?typeof $=="string"?p.value=$:p.value=JSON.parse(JSON.stringify($)):p.value=""},{deep:!0});async function E($,k){await _({[$]:k},$)}async function _($,k){if(a.value={...a.value||{},...$},typeof $.html<"u"&&(i.value={...i.value||{},html:$.html}),!!f.value)try{if(!(await fetch(`/api/gis-service/${f.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify($)})).ok)throw new Error("Save failed");Q.notify({type:"success",title:"Успіх",message:`${k} saved`}),await w()}catch(V){Q.notify({type:"error",title:"Помилка",message:`Failed to save ${k}`}),console.error(V)}}async function C($,k){if($!=="card"){await E($,k);return}const V=(k==null?void 0:k.card_mode)==="html"?"html":"list",I=V==="html"&&typeof(k==null?void 0:k.html)=="string"?k.html:"",T=V==="html"?[]:Array.isArray(k==null?void 0:k.list)?k.list:[];s.value=T,m.value=V,y.value=I;const A={card:T,card_mode:V};V==="html"&&(A.html=I),await _(A,"card")}return($,k)=>{var V,I,T,A;return e.openBlock(),e.createElementBlock("div",Cc,[e.createElementVNode("div",Vc,[e.createElementVNode("div",vc,[e.createElementVNode("div",$c,[e.createElementVNode("div",Ac,[e.createElementVNode("button",{onClick:k[0]||(k[0]=N=>$.$router.back()),class:"inline-flex items-center px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition"},[...k[10]||(k[10]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4 mr-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1),e.createTextVNode(" Назад ",-1)])]),e.createElementVNode("div",null,[e.createElementVNode("div",Sc,e.toDisplayString((V=a.value)==null?void 0:V.name),1),e.createElementVNode("div",Fc," Сервіс: "+e.toDisplayString((I=a.value)==null?void 0:I.service_key),1)])]),e.createElementVNode("div",{class:"max-w-xl text-xs text-gray-600 truncate",title:(T=a.value)==null?void 0:T.description},e.toDisplayString((A=a.value)==null?void 0:A.description),9,Lc)])]),e.createElementVNode("div",Mc,[e.createElementVNode("div",Tc,[e.createVNode(gn,null,{default:e.withCtx(()=>{var N,v,S,D,U,z,q;return[(N=a.value)!=null&&N.service_id?(e.openBlock(),e.createBlock(Os,{key:0,id:(v=a.value)==null?void 0:v.service_id,layer:a.value,"style-yaml":p.value},null,8,["id","layer","style-yaml"])):e.createCommentVNode("",!0),f.value?(e.openBlock(),e.createBlock(xn,{key:1,"layer-id":f.value,boundary:((S=a.value)==null?void 0:S.boundary)||((D=x.value)==null?void 0:D.boundary)||null,katottg:((U=a.value)==null?void 0:U.katottg)||((z=x.value)==null?void 0:z.katottg)||null},null,8,["layer-id","boundary","katottg"])):e.createCommentVNode("",!0),e.createElementVNode("div",Ic,[f.value?(e.openBlock(),e.createBlock(st,{key:0,"layer-id":f.value,filters:c.value},null,8,["layer-id","filters"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Dc,[e.createVNode(ct)]),e.createElementVNode("div",jc,[e.createVNode(dt,{items:((q=a.value)==null?void 0:q.legend)||null},null,8,["items"])]),e.createVNode(yn),e.createVNode(hn,{html:i.value.html},null,8,["html"])]}),_:1})])])]),e.createElementVNode("div",Oc,[e.createElementVNode("div",Pc,[e.createElementVNode("div",zc,[e.createElementVNode("div",Rc,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(B,N=>e.createElementVNode("button",{key:N.key,type:"button",role:"tab","aria-selected":h.value===N.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",h.value===N.key?"bg-white shadow-sm text-gray-700":""]),onClick:v=>h.value=N.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(N.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",qc,e.toDisplayString(N.label),1)],10,Uc)),64))])]),e.createElementVNode("div",Yc,[h.value==="style"?(e.openBlock(),e.createBlock(us,{key:0,token:f.value,"style-yaml":p.value,"onUpdate:styleYaml":k[1]||(k[1]=N=>p.value=N),onSave:k[2]||(k[2]=N=>E("style",N))},null,8,["token","style-yaml"])):h.value==="legend"?(e.openBlock(),e.createBlock(vs,{key:1,token:f.value,columns:u.value,"onUpdate:columns":k[3]||(k[3]=N=>u.value=N),onSave:k[4]||(k[4]=N=>E("legend",N))},null,8,["token","columns"])):h.value==="popup"?(e.openBlock(),e.createBlock(ks,{key:2,token:f.value,columns:g.value,fields:i.value.fields,"onUpdate:columns":k[5]||(k[5]=N=>g.value=N),onSave:k[6]||(k[6]=N=>E("popup",N))},null,8,["token","columns","fields"])):h.value==="card"?(e.openBlock(),e.createBlock(Is,{key:3,token:f.value,columns:s.value,fields:i.value.fields,"view-mode":m.value,html:y.value,"onUpdate:columns":k[7]||(k[7]=N=>s.value=N),onSave:C},null,8,["token","columns","fields","view-mode","html"])):h.value==="filter"?(e.openBlock(),e.createBlock(js,{key:4,token:f.value,fields:i.value.fields,columns:c.value,"onUpdate:columns":k[8]||(k[8]=N=>c.value=N),onSave:k[9]||(k[9]=N=>E("filters",N))},null,8,["token","fields","columns"])):e.createCommentVNode("",!0)])])])])}}}),Wc={class:"mapLayer-info__inner"},Kc={class:"mapLayer-info__item-label"},ut=H(e.defineComponent({__name:"MapLayerInfoPopover",props:{items:{}},setup(t,{expose:n}){const o=e.reactive({open:!1,top:0,left:0}),r=e.ref(null),l=e.ref(null),i=e.computed(()=>o.open?{position:"absolute",width:"460px",top:`${o.top}px`,left:`${o.left}px`,transform:"translateX(-50%)",display:"block"}:{display:"none"});function a(s){if(o.open){g();return}const m=s.currentTarget,y=m==null?void 0:m.closest(".mapLayer-info");if(!y){g();return}r.value=y,o.open=!0,e.nextTick(d)}function d(){if(!o.open||!r.value)return;const s=r.value.getBoundingClientRect();o.top=s.bottom+window.scrollY+8,o.left=s.left+s.width/2+window.scrollX}function p(s){var y,c;if(!o.open)return;const m=s.target;(y=r.value)!=null&&y.contains(m)||(c=l.value)!=null&&c.contains(m)||g()}function u(s){s.key==="Escape"&&g()}function g(){o.open=!1,r.value=null,l.value=null}return e.onMounted(()=>{document.addEventListener("click",p,!0),document.addEventListener("keydown",u),window.addEventListener("scroll",d,!0),window.addEventListener("resize",d)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",p,!0),document.removeEventListener("keydown",u),window.removeEventListener("scroll",d,!0),window.removeEventListener("resize",d)}),n({close:g}),(s,m)=>(e.openBlock(),e.createElementBlock("div",{class:"mapLayer-info",ref_key:"anchorEl",ref:r},[e.createElementVNode("a",{class:"mapLayer-info__trigger",href:"#",onClick:e.withModifiers(a,["prevent","stop"])},[...m[1]||(m[1]=[e.createStaticVNode('<div class="mapLayer-info__icon" data-v-ce644dbc><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-v-ce644dbc><circle cx="12" cy="12" r="10" data-v-ce644dbc></circle><line x1="12" y1="16" x2="12" y2="12" data-v-ce644dbc></line><line x1="12" y1="8" x2="12.01" y2="8" data-v-ce644dbc></line></svg></div>',1)])]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-50 py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-info__popover",style:e.normalizeStyle(i.value),ref_key:"popoverEl",ref:l,onClick:m[0]||(m[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Wc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.items,y=>(e.openBlock(),e.createElementBlock("div",{key:y.label,class:"mapLayer-info__item"},[e.createElementVNode("div",Kc,e.toDisplayString(y.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":y.breakLine}])},e.toDisplayString(y.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-ce644dbc"]]),Gc={key:0,class:"map-info__header"},Zc={key:0,class:"map-info__title"},Xc={class:"map-info__actions"},Jc={key:0,class:"map-info__menu"},Qc=["onClick"],ed=["innerHTML"],bn=H(e.defineComponent({__name:"MapInfoWidget",props:{title:{},content:{},links:{},mapName:{},mapDescription:{}},setup(t){const n=t,o=e.ref(null),r=e.ref(!1),l=e.ref(null),i=e.ref({top:0,left:0}),a=ae.useRouter(),d=e.computed(()=>Array.isArray(n.links)?n.links.filter(c=>(c==null?void 0:c.name)&&(c==null?void 0:c.slug)):[]),p=e.computed(()=>({top:`${i.value.top}px`,left:`${i.value.left}px`})),u=e.computed(()=>{const c=[];return n.mapName&&c.push({label:"Назва карти",value:n.mapName}),n.mapDescription&&c.push({label:"Опис",value:n.mapDescription,breakLine:!0}),c});function g(c){c.stopPropagation(),r.value=!r.value}function s(){const c=l.value;if(!c)return;const{bottom:f,left:x}=c.getBoundingClientRect();i.value={top:f+window.scrollY+8,left:x+window.scrollX}}function m(c){if(!r.value)return;const f=o.value;if(!f){r.value=!1;return}f.contains(c.target)||(r.value=!1)}e.onMounted(()=>{document.addEventListener("click",m,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",m,!0),window.removeEventListener("scroll",s,!0),window.removeEventListener("resize",s)}),e.watch(r,c=>{c?e.nextTick(()=>{s(),window.addEventListener("scroll",s,!0),window.addEventListener("resize",s)}):(window.removeEventListener("scroll",s,!0),window.removeEventListener("resize",s))});function y(c){r.value=!1,a.push(`/maps/${c}`)}return(c,f)=>(e.openBlock(),e.createElementBlock("div",{class:"map-info legend-widget flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget",ref_key:"container",ref:o},[c.title||d.value.length||u.value.length?(e.openBlock(),e.createElementBlock("div",Gc,[c.title?(e.openBlock(),e.createElementBlock("h2",Zc,e.toDisplayString(c.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Xc,[d.value.length?(e.openBlock(),e.createElementBlock("div",Jc,[e.createElementVNode("button",{ref_key:"menuButton",ref:l,type:"button",class:"map-info__menu-button",onClick:g,"aria-label":"Показати посилання"},[...f[1]||(f[1]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e.createElementVNode("path",{d:"M4 12H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 6H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 18H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vsTailwind vs-popover__content right map-info__popover",style:e.normalizeStyle(p.value),onClick:f[0]||(f[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,x=>(e.openBlock(),e.createElementBlock("button",{key:x.slug||x.name,type:"button",class:"map-info__popover-link",onClick:B=>y(x.slug)},e.toDisplayString(x.name),9,Qc))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),u.value.length?(e.openBlock(),e.createBlock(ut,{key:1,items:u.value},null,8,["items"])):e.createCommentVNode("",!0)])])):e.createCommentVNode("",!0),c.content?(e.openBlock(),e.createElementBlock("div",{key:1,class:"map-info__content",innerHTML:c.content},null,8,ed)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-01db55b1"]]),td={class:"opacity-popover__content"},nd={class:"opacity-popover__value"},kn=H(e.defineComponent({__name:"LayerOpacityPopover",props:{layerId:{}},setup(t){const n=t,o=e.ref(!1),r=e.ref(100),l=e.ref(null),i=e.ref(null),a=e.reactive({top:0,left:0});function d(){var y;const s=(y=i.value)==null?void 0:y.querySelector("button");if(!s)return;const m=s.getBoundingClientRect();a.top=m.bottom+8+window.scrollY,a.left=m.left+window.scrollX}function p(){o.value=!o.value,o.value&&e.nextTick(d)}function u(){var c;const s=W(n.layerId),m=(r.value??100)/100,y=(c=s==null?void 0:s.getLayer)==null?void 0:c.call(s);if(y)switch(y.type){case"raster":s.updatePaint({"raster-opacity":m});break;case"fill":s.updatePaint({"fill-opacity":m});break;case"line":s.updatePaint({"line-opacity":m});break;case"circle":s.updatePaint({"circle-opacity":m});break;case"symbol":s.updatePaint({"icon-opacity":m});break}}function g(s){var y,c;if(!o.value)return;const m=s.target;(y=l.value)!=null&&y.contains(m)||(c=i.value)!=null&&c.contains(m)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",g),window.addEventListener("scroll",d,!0),window.addEventListener("resize",d)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",g),window.removeEventListener("scroll",d,!0),window.removeEventListener("resize",d)}),(s,m)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:i},[e.renderSlot(s.$slots,"trigger",{toggle:p,opacity:r.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(p,["stop"])},e.toDisplayString(r.value)+"% ",1)],!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popoverEl",ref:l,class:"opacity-popover",style:e.normalizeStyle({top:a.top+"px",left:a.left+"px"})},[e.createElementVNode("div",td,[m[1]||(m[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":m[0]||(m[0]=y=>r.value=y),class:"opacity-popover__range",onInput:u},null,544),[[e.vModelText,r.value]]),e.createElementVNode("span",nd,e.toDisplayString(r.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-b2bb0bb0"]]),od={class:"layers-panel"},rd={class:"justify-between items-start gap-[30px]"},ld={class:"layers-panel__title"},ad={key:0,class:"pb-2 text-[14px] text-[#34495e]"},id={class:"layers-panel__label"},sd=["checked","onChange"],cd={class:"layers-panel__name"},dd={class:"layers-panel__meta text-slate-500"},ud=["onClick"],pd={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},md={key:0,class:"layers-panel__actions"},fd=["innerHTML","onClick"],_n=H(e.defineComponent({__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,r=e.ref({}),l=n;function i(){for(let p=0;p<o.layers.length;p++){const u=o.layers[p],g=u.id,s=`${location.origin}/api/vtile/${u.id}/ua/{z}/{x}/{y}.vmt`,m={sourceId:g,source:{type:"vector",tiles:[s],minZoom:4,maxZoom:14},layer:{id:g,source:g,"source-layer":g,style:u.style},card:u.card,popup:u.popup};W(u.id,m),r.value[u.id]=!0}}e.onMounted(()=>{i()});function a(p,u){const g=W(p.id),s=u.target;g.setVisible(s.checked),r.value[p.id]=s.checked}function d(p){return[{label:"Назва",value:p.name??null},{label:"Назва групи",value:p.group_name||null},{label:"Кількість",value:p.count??null},{label:"Балансоутримувач",value:p.holder??null}]}return(p,u)=>{var g,s;return e.openBlock(),e.createElementBlock("div",od,[e.createElementVNode("div",rd,[e.createElementVNode("h2",ld,e.toDisplayString(((g=p.config)==null?void 0:g.title)||"Шари"),1),(s=p.config)!=null&&s.description?(e.openBlock(),e.createElementBlock("div",ad,[e.createElementVNode("p",null,e.toDisplayString(p.config.description),1)])):e.createCommentVNode("",!0)]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.layers,m=>{var y;return e.openBlock(),e.createElementBlock("div",{key:m.id,class:"layers-panel__item"},[e.createElementVNode("label",id,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:m.visible,onChange:c=>a(m,c)},null,40,sd),e.createElementVNode("span",cd,e.toDisplayString(m.name),1),e.createElementVNode("div",dd,[r.value[m.id]?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(kn,{"layer-id":m.id,class:"flex"},{trigger:e.withCtx(({toggle:c})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(c,["prevent","stop"])},[e.createElementVNode("div",pd,[e.createVNode(e.unref(Fn))])],8,ud)]),_:2},1032,["layer-id"]),e.createVNode(Ye,{count:Array.isArray(m.filters)?m.filters.length:0,layer:m},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(ut,{items:d(m)},null,8,["items"])])]),(y=m.actions)!=null&&y.length?(e.openBlock(),e.createElementBlock("div",md,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.actions,c=>(e.openBlock(),e.createElementBlock("button",{key:c.widget||c.id||c.icon,type:"button",class:"layers-panel__action",innerHTML:c.icon,onClick:f=>l("action",{layerId:c.widget})},null,8,fd))),128))])):e.createCommentVNode("",!0)])}),128))])}}}),[["__scopeId","data-v-60a1a59d"]]),gd={class:"catalog-tab__search relative mt-[10px]"},yd={width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:"absolute top-[40%] left-[8px] w-[16px] h-[16px]",style:{transform:"translate(0, -50%)"}},hd=["onClick"],xd={class:"flex items-center gap-x-3"},bd={class:"max-w-[260px] text-[14px] text-[#4b5563]"},kd={class:"text-xs opacity-60 text-[#4b5563]"},_d={class:"flex items-center cursor-pointer gap-2 flex-1"},wd=["checked","onChange"],Ed={class:"text-[13px] text-gray-600 truncate max-w-[260px]"},Nd={class:"flex items-center gap-2"},Bd=H(e.defineComponent({__name:"LayersCatalogTab",props:{catalog:{},selected:{},search:{}},emits:["toggle-layer","update:search","open-filter"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),i=e.ref(null),a=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0,layerId:null}),d=e.computed(()=>{const x=o.search.trim().toLowerCase();return o.catalog.groups.map(B=>{const b=x?B.layers.filter(h=>h.name.toLowerCase().includes(x)):B.layers;return{...B,layers:b}}).filter(B=>B.layers.length>0)}),p=e.computed({get:()=>o.search,set:x=>r("update:search",x)});function u(x){l[x]=!l[x]}function g(x){return!!l[x]}function s(x,B){if(o.selected.includes(B)){a.visible=!1,a.layerId=null;return}const b=x.currentTarget;if(!b)return;const h=b.getBoundingClientRect(),w=typeof window<"u"?window.scrollX:0,E=typeof window<"u"?window.scrollY:0;a.left=h.left+h.width/2+w,a.top=h.bottom+8+E,a.layerId=B,a.visible=!0}function m(){a.visible=!1,a.layerId=null}function y(x){return[{label:"Назва",value:c(x.name)},{label:"Сервіс",value:c(x.service)},{label:"Посилання",value:c(x.url),breakLine:!0},{label:"Джерело",value:c(x.source_path),breakLine:!0},{label:"Popup",value:f(x.popup,"полів")},{label:"Картка",value:f(x.card,"полів")},{label:"Фільтри",value:f(x.filters,"фільтрів")}]}function c(x){return x==null||x===""?null:String(x)}function f(x,B){return!Array.isArray(x)||x.length===0?null:`${x.length} ${B}`}return e.watch(()=>o.selected?o.selected.slice():[],x=>{!a.visible||!a.layerId||x.includes(a.layerId)&&(a.visible=!1,a.layerId=null)}),(x,B)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"catalogRef",ref:i,class:"catalog-tab"},[e.createElementVNode("div",gd,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":B[0]||(B[0]=b=>p.value=b),type:"text",placeholder:"Введіть назву шару...",class:"py-[7px] pl-8 pe-8 block w-full bg-gray-100 border-transparent rounded-lg text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500"},null,512),[[e.vModelText,p.value]]),(e.openBlock(),e.createElementBlock("svg",yd,[...B[1]||(B[1]=[e.createElementVNode("path",{d:"M11 19C15.4183 19 19 15.4183 19 11C19 6.5817 15.4183 3 11 3C6.5817 3 3 6.5817 3 11C3 15.4183 6.5817 19 11 19Z",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M21 21L16.7 16.7",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,b=>(e.openBlock(),e.createElementBlock("div",{key:b.id,class:"mt-2"},[e.createElementVNode("div",{class:"hover:bg-gray-100 cursor-pointer p-[8px] rounded-lg flex justify-between items-center",onClick:h=>u(b.id)},[e.createElementVNode("div",xd,[(e.openBlock(),e.createElementBlock("svg",{width:"6",height:"10",viewBox:"0 0 6 10",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass(["transition-transform",g(b.id)?"rotate-90":""])},[...B[2]||(B[2]=[e.createElementVNode("path",{d:"M1 9L5 5L1 1",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2)),e.createElementVNode("div",bd,e.toDisplayString(b.name),1)]),e.createElementVNode("div",kd,e.toDisplayString(b.layers.length),1)],8,hd),e.createVNode(e.Transition,{name:"out-in"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.layers,h=>(e.openBlock(),e.createElementBlock("div",{key:h.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",_d,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:x.selected.includes(h.id),onChange:w=>x.$emit("toggle-layer",h.id,w.target.checked,h)},null,40,wd),B[3]||(B[3]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"8",viewBox:"0 0 12 8",fill:"none"},[e.createElementVNode("path",{d:"M10.6663 1L4.24967 7.41667L1.33301 4.5",stroke:"#fff","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e.createElementVNode("span",Ed,e.toDisplayString(h.name),1)]),e.createElementVNode("div",Nd,[Array.isArray(h.filters)&&h.filters.length?(e.openBlock(),e.createBlock(Ye,{key:0,count:h.filters.length,layer:h,disabled:!x.selected.includes(h.id),onMouseenter:w=>s(w,h.id),onMouseleave:m,onFocus:w=>s(w,h.id),onBlur:m},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(ut,{items:y(h)},null,8,["items"])])]))),128))],512),[[e.vShow,g(b.id)]])]),_:2},1024)]))),128)),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[a.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${a.top}px`,left:`${a.left}px`})},e.toDisplayString(a.text),5)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-6c43468a"]]),Cd={class:"selected-tab"},Vd={class:"selected-tab__actions"},vd={key:0,class:"selected-tab__scroll"},$d=["onDragstart","onDragover","onDrop"],Ad={class:"selected-tab__item-header"},Sd={class:"selected-tab__item-info"},Fd=["checked","onChange"],Ld={class:"selected-tab__item-name"},Md={class:"selected-tab__item-controls"},Td=["onClick"],Id={class:"selected-tab__menu-inner"},Dd=H(e.defineComponent({__name:"LayersSelectedTab",props:{catalog:{},selected:{}},emits:["select-layer","reorder","remove","toggle-layer"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),i=e.ref(null),a=e.ref(null),d=new Map,p=e.reactive({top:0,left:0}),u=e.ref(null),g=e.reactive({top:0,left:0}),s=e.ref(null),m=new Map,y=e.reactive({});function c(T){var A;for(const N of((A=o.catalog)==null?void 0:A.groups)??[]){const v=N.layers.find(S=>S.id===T);if(v)return v}return null}e.watch(()=>o.selected,T=>{T.forEach(A=>{l[A]==null&&(l[A]=100)})},{immediate:!0});function f(){if(!i.value)return;const T=d.get(i.value);if(!T)return;const A=T.getBoundingClientRect();p.top=A.bottom+8+window.scrollY,p.left=A.left+window.scrollX}e.watch(()=>o.selected,T=>{T.forEach(A=>{y[A]==null&&(y[A]=!0)})},{immediate:!0});function x(T,A){y[T]=A;const N=W(T);N&&N.setVisible(A);const v=c(T);r("toggle-layer",T,A,v)}function B(T,A){A?m.set(T,A):m.delete(T)}function b(T){u.value=u.value===T?null:T,u.value&&e.nextTick(()=>h(T))}function h(T){const A=m.get(T);if(!A)return;const N=A.getBoundingClientRect();g.top=N.bottom+6+window.scrollY,g.left=N.left+window.scrollX}function w(T){const A=W(T);A&&A.remove(),r("remove",T),u.value=null}function E(T){const A=T.target,N=i.value,v=u.value;if(N){const S=a.value,D=d.get(N);if(S&&S.contains(A)||D&&D.contains(A))return;i.value=null}if(v){const S=s.value,D=m.get(v);if(S&&S.contains(A)||D&&D.contains(A))return;u.value=null}}function _(){i.value&&f(),u.value&&h(u.value)}e.onMounted(()=>{document.addEventListener("click",E),window.addEventListener("resize",_),window.addEventListener("scroll",_,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",E),window.removeEventListener("resize",_),window.removeEventListener("scroll",_,!0)});const{map:C}=le();function F(T){var S,D,U;if(!T)return;const A=W(T),N=c(T);if(!A&&!N)return;if(((S=N==null?void 0:N.extent)==null?void 0:S.length)===4&&((D=C.value)!=null&&D.fitBounds)){const z=N.extent.map(q=>Number(q));if(z.every(q=>Number.isFinite(q))){const[q,Y,ve,be]=z;C.value.fitBounds([[q,Y],[ve,be]],{padding:40}),u.value=null;return}}(U=A==null?void 0:A.getSource)!=null&&U.call(A)&&(u.value=null)}const M=e.ref(null),$=e.ref(null);function k(T){M.value=T}function V(T){$.value=T}function I(T){if(M.value===null||M.value===T){M.value=null,$.value=null;return}const A=[...o.selected],[N]=A.splice(M.value,1);A.splice(T,0,N),r("reorder",A),M.value=null,$.value=null}return(T,A)=>(e.openBlock(),e.createElementBlock("div",Cd,[e.createElementVNode("div",Vd,[e.createElementVNode("button",{class:"selected-tab__add",onClick:A[0]||(A[0]=N=>r("select-layer"))},[...A[3]||(A[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-plus"},[e.createElementVNode("path",{d:"M5 12h14"}),e.createElementVNode("path",{d:"M12 5v14"})],-1),e.createElementVNode("span",null,"Вибрати шар",-1)])])]),T.selected.length?(e.openBlock(),e.createElementBlock("div",vd,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.selected,(N,v)=>{var S;return e.openBlock(),e.createElementBlock("div",{key:N,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":M.value===v,"selected-tab__item--over":$.value===v}]),draggable:"true",onDragstart:D=>k(v),onDragover:e.withModifiers(D=>V(v),["prevent"]),onDrop:D=>I(v)},[e.createElementVNode("div",Ad,[e.createElementVNode("div",Sd,[A[4]||(A[4]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox",checked:y[N]??!0,onChange:D=>x(N,D.target.checked)},null,40,Fd),e.createElementVNode("span",Ld,e.toDisplayString(((S=c(N))==null?void 0:S.name)||"Шар"),1)]),e.createElementVNode("div",Md,[e.createVNode(kn,{"layer-id":N},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:D=>B(N,D),onClick:e.withModifiers(D=>b(N),["stop"])},[...A[5]||(A[5]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-more-vertical"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"1"}),e.createElementVNode("circle",{cx:"12",cy:"5",r:"1"}),e.createElementVNode("circle",{cx:"12",cy:"19",r:"1"})],-1)])],8,Td)])])],42,$d)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[u.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:s,class:"selected-tab__menu",style:e.normalizeStyle({top:g.top+"px",left:g.left+"px"})},[e.createElementVNode("div",Id,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:A[1]||(A[1]=N=>F(u.value))},[...A[6]||(A[6]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-zoom-in"},[e.createElementVNode("circle",{cx:"11",cy:"11",r:"8"}),e.createElementVNode("line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65"}),e.createElementVNode("line",{x1:"11",x2:"11",y1:"8",y2:"14"}),e.createElementVNode("line",{x1:"8",x2:"14",y1:"11",y2:"11"})],-1),e.createTextVNode(" Збільшити до шару ",-1)])]),A[8]||(A[8]=e.createElementVNode("button",{disabled:"",class:"selected-tab__menu-item selected-tab__menu-item--disabled"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-info"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"}),e.createElementVNode("path",{d:"M12 16v-4"}),e.createElementVNode("path",{d:"M12 8h.01"})]),e.createTextVNode(" Інформація про шар ")],-1)),A[9]||(A[9]=e.createElementVNode("button",{disabled:"",class:"selected-tab__menu-item selected-tab__menu-item--disabled"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-table"},[e.createElementVNode("path",{d:"M12 3v18"}),e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}),e.createElementVNode("path",{d:"M3 9h18"}),e.createElementVNode("path",{d:"M3 15h18"})]),e.createTextVNode(" Таблиця шару ")],-1)),A[10]||(A[10]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:A[2]||(A[2]=N=>w(u.value))},[...A[7]||(A[7]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-trash2"},[e.createElementVNode("path",{d:"M3 6h18"}),e.createElementVNode("path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}),e.createElementVNode("path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"}),e.createElementVNode("line",{x1:"10",x2:"10",y1:"11",y2:"17"}),e.createElementVNode("line",{x1:"14",x2:"14",y1:"11",y2:"17"})],-1),e.createTextVNode(" Видалити шар ",-1)])])])],4)):e.createCommentVNode("",!0)]))]))}}),[["__scopeId","data-v-e336e847"]]),jd={class:"filter-tab"},Od={key:0,class:"filter-tab__header"},Pd={class:"filter-tab__title"},zd={key:1,class:"filter-tab__content rounded-md"},Rd={class:"filter-tab__scroll"},Ud={key:2,class:"filter-tab__empty"},qd=H(e.defineComponent({__name:"LayersFilterTab",props:{layer:{},value:{}},emits:["change"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/filter")),r=t,l=n,i=e.computed(()=>{var p;return((p=r.layer)==null?void 0:p.filters)??[]}),a=e.computed(()=>i.value.length>0);function d(p){l("change",p.data)}return(p,u)=>(e.openBlock(),e.createElementBlock("div",jd,[p.layer&&a.value?(e.openBlock(),e.createElementBlock("div",Od,[e.createElementVNode("div",null,[e.createElementVNode("p",Pd,e.toDisplayString(p.layer.name),1)])])):e.createCommentVNode("",!0),p.layer&&a.value?(e.openBlock(),e.createElementBlock("div",zd,[e.createElementVNode("div",Rd,[e.createVNode(e.unref(o),{view:"vertical",schema:i.value,value:p.value,limit:5,class:"rounded-md pb-0",onChange:u[0]||(u[0]=g=>d(g))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",Ud,[...u[1]||(u[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),Yd={class:"map-catalog-widget w-full max-w-md mx-auto p-4 bg-white border border-gray-200 rounded-lg shadow-sm widget"},Hd={class:"flex items-center justify-between mb-4"},Wd={class:"flex items-center gap-2"},Kd={class:"text-lg font-semibold text-gray-800"},Gd={key:0},Zd={key:1,class:"block text-sm font-normal text-gray-500"},Xd={class:"flex mb-4 border-b border-gray-200"},Jd={class:"map-catalog-widget__body"},wn=H(e.defineComponent({__name:"MapCatalogWidget",setup(t){const n=e.ref("catalog"),o=e.ref({groups:[]}),r=e.ref([]),l=e.ref(""),{map:i}=le(),a=ae.useRoute(),d=ae.useRouter(),p=e.reactive({}),u=e.ref(null);function g(k){for(const V of o.value.groups){const I=V.layers.find(T=>T.id===k);if(I)return I}return null}const s=e.computed(()=>u.value?g(u.value):null),m=e.computed(()=>{const k=u.value;return k?p[k]??{}:{}}),y=e.computed(()=>o.value.groups.reduce((k,V)=>k+V.layers.length,0)),c=e.computed(()=>{switch(n.value){case"selected":return"Вибрані шари";case"filter":return"Фільтр шарів";default:return"Каталог"}}),f=e.computed(()=>{switch(n.value){case"selected":return r.value.length;case"catalog":return y.value;default:return null}}),x=e.computed(()=>{var k;return n.value!=="filter"?"":((k=s.value)==null?void 0:k.name)??""});async function B(){const V=await(await fetch("/api/gis-layer-list")).json(),I=new Map;V.forEach(N=>{const v=N.group_id??"other";I.has(v)||I.set(v,{id:v,name:N.group_name||"Інші шари",layers:[]}),I.get(v).layers.push(N)}),o.value={groups:Array.from(I.values())};const T=a.query.layers;if(!T)return;const A=Array.isArray(T)?T[0]:T;typeof A=="string"&&A.split(",").forEach(N=>{const v=N.trim();if(!v)return;const S=g(v);S&&h(v,!0,S)})}function b(k){const V=k.url,I=V?V.startsWith("http")?V:`${location.origin}${V}`:null;if(!I)return null;const T=(k.service||"").toString().toLowerCase();return T&&T!=="vtile"?{source:{type:"raster",tiles:[I],tileSize:256,minzoom:0,maxzoom:20}}:{source:{type:"vector",tiles:[I],minzoom:0,maxzoom:14},layer:{style:k.style},card:k.card,popup:k.popup}}function h(k,V,I){var v;const T=I??g(k);if(!T)return;const A=b(T);if(!A)return;const N=W(T.id,A,i);if(N)if(N.setVisible(V),V){if(!r.value.includes(k)&&(r.value.push(k),(v=i.value)!=null&&v.getLayer(k)))try{i.value.moveLayer(k)}catch(S){console.warn("Cannot move new layer",k,S)}}else r.value=r.value.filter(S=>S!==k),u.value===k&&($(),u.value=null)}function w(){r.value.forEach(k=>{const V=W(k);V&&V.setVisible(!1)}),r.value=[]}function E(k){r.value=k,e.nextTick(()=>{var V;for(let I=k.length-1;I>=0;I--){const T=k[I];if((V=i.value)!=null&&V.getLayer(T))try{i.value.moveLayer(T)}catch(A){console.warn("Cannot move layer",T,A)}}})}function _(k){!k||!Array.isArray(k.filters)||k.filters.length===0||r.value.includes(k.id)&&(u.value=k.id,p[k.id]||(p[k.id]={}),n.value="filter")}function C(){n.value="catalog"}function F(k,V){const I=W(k);if(p[k]={...V},!(I!=null&&I.setFilter))return;const T=Object.entries(V).filter(([,A])=>A!=null&&A!=="").map(([A,N])=>`${A}=${N}`);I.setFilter(T.join("|"))}function M(k){const V=u.value;V&&F(V,k)}function $(){const k=u.value;if(!k)return;delete p[k];const V=W(k);V!=null&&V.setFilter&&V.setFilter("")}return e.watch(u,k=>{!k&&n.value==="filter"&&(n.value="catalog")}),e.watch(s,(k,V)=>{!k&&u.value&&(u.value=null)}),e.watch(r,k=>{const V={...a.query};k.length?V.layers=k.join(","):delete V.layers,d.replace({query:V}).catch(()=>{})},{deep:!0}),e.onMounted(B),(k,V)=>(e.openBlock(),e.createElementBlock("div",Yd,[e.createElementVNode("div",Hd,[e.createElementVNode("div",Wd,[V[5]||(V[5]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-layers text-blue-600"},[e.createElementVNode("path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"}),e.createElementVNode("path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"}),e.createElementVNode("path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"})],-1)),e.createElementVNode("h2",Kd,[e.createTextVNode(e.toDisplayString(c.value)+" ",1),f.value!==null?(e.openBlock(),e.createElementBlock("span",Gd," ("+e.toDisplayString(f.value)+") ",1)):e.createCommentVNode("",!0),x.value?(e.openBlock(),e.createElementBlock("span",Zd,e.toDisplayString(x.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{onClick:w,class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers"},[...V[6]||(V[6]=[e.createStaticVNode('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw text-gray-600" data-v-0b452ba8><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-0b452ba8></path><path d="M21 3v5h-5" data-v-0b452ba8></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16" data-v-0b452ba8></path><path d="M8 16H3v5" data-v-0b452ba8></path></svg>',1)])])]),e.createElementVNode("div",Xd,[e.createElementVNode("button",{onClick:V[0]||(V[0]=I=>n.value="catalog"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",n.value==="catalog"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Каталог ",2),e.createElementVNode("button",{onClick:V[1]||(V[1]=I=>n.value="selected"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",n.value==="selected"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Вибрані шари ",2)]),e.createElementVNode("div",Jd,[n.value==="catalog"?(e.openBlock(),e.createBlock(Bd,{key:0,class:"map-catalog-widget__scroll",catalog:o.value,selected:r.value,onToggleLayer:h,search:l.value,"onUpdate:search":V[2]||(V[2]=I=>l.value=I),onOpenFilter:_},null,8,["catalog","selected","search"])):n.value==="selected"?(e.openBlock(),e.createBlock(Dd,{key:1,catalog:o.value,selected:r.value,onToggleLayer:h,onSelectLayer:V[3]||(V[3]=I=>n.value="catalog"),onReorder:E,onRemove:V[4]||(V[4]=I=>r.value=r.value.filter(T=>T!==I))},null,8,["catalog","selected"])):(e.openBlock(),e.createBlock(qd,{key:2,layer:s.value,value:m.value,onChange:M,onClose:C},null,8,["layer","value"]))])]))}}),[["__scopeId","data-v-0b452ba8"]]),Qd={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},eu={class:"flex items-start justify-between gap-3 p-5 pb-3"},tu={class:"inline-block text-xl font-semibold text-gray-800"},nu={key:0,class:"mt-1 text-sm text-gray-500"},ou={class:"flex items-center gap-[6px]"},ru={class:"px-5 pb-5 space-y-6"},lu={key:0,class:"space-y-2"},au={class:"flex flex-wrap gap-4"},iu=["value"],su={key:1,class:"text-sm text-gray-500"},cu={key:2,class:"text-sm text-gray-500"},du={class:"text-4xl font-medium text-gray-800"},uu={class:"space-y-[14px]"},pu={class:"flex items-center gap-[10px] text-gray-600"},mu={class:"font-medium text-gray-700"},fu={class:"flex items-center justify-end text-end gap-3"},gu={class:"font-medium text-gray-800"},yu={class:"min-w-[40px] font-medium text-[#3C3C4399]"},En=H(e.defineComponent({__name:"MapAttributeWidget",props:{config:{}},setup(t){const n=["#3a7a57","#d970d5","#8e997b","#b4c039","#a855f7","#71823a","#f79d92","#8b5cf6","#a6514e","#6b7280"],o=t,r=e.ref(!0),l=e.ref(!1),i=e.ref([]),a=e.ref(null),d=e.ref(null),p=e.ref(null),u=e.ref(null),g=e.ref(null),s=e.ref({}),m=e.ref(null);function y(N){return N&&JSON.parse(JSON.stringify(N))}const c=e.computed(()=>{const N=o.config.layer;if(typeof N!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const v=N.trim();if(!v)throw new Error("MapAttributeWidget: `layer` must be non-empty");return v}),f=e.computed(()=>{const{list:N,attribute:v}=o.config;if(Array.isArray(N)&&N.length)return N.map(S=>({id:(S==null?void 0:S.id)!=null?String(S.id).trim():"",text:(S==null?void 0:S.text)!=null&&String(S.text).trim()||null})).filter(S=>S.id.length);if(Array.isArray(v))return v.map(S=>S!=null?String(S).trim():"").filter(S=>S.length).map(S=>({id:S,text:null}));if(typeof v=="string"){const S=v.trim();if(!S)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:S,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),x=e.computed(()=>f.value.map(N=>({id:N.id,label:N.text||s.value[N.id]||N.id})));e.watch(f,N=>{if(!N.length){m.value=null,i.value=[];return}(!m.value||!N.some(v=>v.id===m.value))&&(m.value=N[0].id)},{immediate:!0});const B=e.computed(()=>{var N;return m.value||((N=f.value[0])==null?void 0:N.id)||null});e.watch(c,()=>{var N,v;(v=(N=d.value)==null?void 0:N.remove)==null||v.call(N),d.value=null,p.value=null,u.value=null,g.value=null,s.value={}});const b=e.computed(()=>{var N;return(N=u.value)!=null&&N.length?{id:c.value,name:p.value,filters:u.value}:null}),h=e.computed(()=>{var N,v;return((v=(N=b.value)==null?void 0:N.filters)==null?void 0:v.length)||0});async function w(N){var D;const v=await fetch(`/api/gis-service/${encodeURIComponent(N)}`);if(!v.ok){let U="Не вдалося завантажити налаштування шару";try{const z=await v.json();U=((D=z==null?void 0:z.message)==null?void 0:D.error)||(z==null?void 0:z.message)||U}catch{}throw new Error(U)}const S=await v.json();return p.value=(S==null?void 0:S.name)||null,u.value=Array.isArray(S==null?void 0:S.filters)?S.filters:null,g.value=y((S==null?void 0:S.style)||{}),s.value=((S==null?void 0:S.attributes)||[]).reduce((U,z)=>{const q=typeof(z==null?void 0:z.name)=="string"?z.name.trim():"",Y=typeof(z==null?void 0:z.ua)=="string"?z.ua.trim():"";return q&&(U[q]=Y||q),U},{}),S}function E(N,v){let S=W(N);if(!S){const D=`${location.origin}/api/vtile/${N}/ua/{z}/{x}/{y}.vmt`;S=W(N,{source:{type:"vector",tiles:[D],minzoom:0,maxzoom:14},layer:{id:N,source:N,"source-layer":N,style:(v==null?void 0:v.style)||{}},card:v==null?void 0:v.card,popup:v==null?void 0:v.popup})}return d.value=S,S}async function _(N,v){var U;const S=`/api/gis-service/${encodeURIComponent(N)}/${encodeURIComponent(v)}`,D=await fetch(S);if(!D.ok){let z="Не вдалося отримати статистику";try{const q=await D.json();z=((U=q==null?void 0:q.message)==null?void 0:U.error)||(q==null?void 0:q.message)||z}catch{}throw new Error(z)}return D.json()}function C(N){const v=new Map;return N&&(N.rules||[]).forEach(D=>{const U=(D==null?void 0:D.value)??(D==null?void 0:D.id);U!=null&&v.set(String(U),D)}),v}function F(N,v,S,D,U){if(typeof(v==null?void 0:v.color)=="string"&&v.color.trim())return v.color.trim();const z=o.config.colors||{};if(z[N])return z[N];const Y=C(S==null?void 0:S.style).get(N);return typeof(Y==null?void 0:Y.color)=="string"&&Y.color.trim()?Y.color.trim():n[U%n.length]}function M(N,v,S,D){var U;return(v==null?void 0:v.text)||(v==null?void 0:v.label)||(v==null?void 0:v.name)||(v==null?void 0:v[`${D}_text`])||((U=C(S==null?void 0:S.style).get(N))==null?void 0:U.label)||N}function $(N,v,S,D){if(!N)return;const U=y((v==null?void 0:v.style)||g.value)||{},z=D.trim();if(!z)return;const q={...U.colors||{},...o.config.colors||{}};z===D&&S.forEach(Y=>{Y.color.trim()&&(q[Y.id]=Y.color)}),N.setStyle({...U,type:U.type||"polygon",colorAttr:z,opacity:.8,colors:q})}async function k(){var z,q;i.value=[],a.value=null;const N=c.value,v=B.value;if(!v)return;l.value=!0;const S=await w(N);E(N,S);const D=await _(N,v),U=Array.isArray(D==null?void 0:D.rows)?D.rows.map((Y,ve)=>{const be=(Y==null?void 0:Y.id)??(Y==null?void 0:Y.value),L=be!=null?String(be):"";if(!L)return null;const P=M(L,Y,S,v),R=Number((Y==null?void 0:Y.count)??0)||0,K=F(L,Y,S,v,ve);return{id:L,label:P,count:R,color:K}}).filter(Boolean):[];i.value=U,a.value=((z=D==null?void 0:D.field)==null?void 0:z.label)||((q=D==null?void 0:D.field)==null?void 0:q.name)||null,$(d.value,S,U,v),l.value=!1}e.watch(()=>[c.value,B.value],()=>{k()},{immediate:!0});const V=e.computed(()=>"Набори даних"),I=e.computed(()=>i.value.reduce((N,v)=>N+v.count,0)),T=e.computed(()=>{var S;const N=B.value;return((S=x.value.find(D=>D.id===N))==null?void 0:S.label)||null||a.value||N||null});function A(N){return I.value?`${(N/I.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var N,v;(v=(N=d.value)==null?void 0:N.remove)==null||v.call(N)}),(N,v)=>r.value?(e.openBlock(),e.createElementBlock("div",Qd,[e.createElementVNode("div",eu,[e.createElementVNode("div",null,[e.createElementVNode("h2",tu,e.toDisplayString(V.value),1),T.value&&x.value.length===1?(e.openBlock(),e.createElementBlock("p",nu,e.toDisplayString(T.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",ou,[b.value?(e.openBlock(),e.createBlock(Ye,{key:0,class:"map-attribute__filter",count:h.value,layer:b.value},null,8,["count","layer"])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",onClick:v[1]||(v[1]=S=>r.value=!1)},[...v[3]||(v[3]=[e.createElementVNode("svg",{class:"w-4 h-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",viewBox:"0 0 24 24"},[e.createElementVNode("path",{d:"M18 6 6 18"}),e.createElementVNode("path",{d:"m6 6 12 12"})],-1)])])])]),e.createElementVNode("div",ru,[x.value.length>1?(e.openBlock(),e.createElementBlock("div",lu,[e.createElementVNode("div",au,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x.value,S=>(e.openBlock(),e.createElementBlock("label",{key:S.id,class:"inline-flex items-center gap-2 text-sm text-gray-700"},[e.withDirectives(e.createElementVNode("input",{type:"radio",class:"text-sky-600 focus:ring-sky-500",value:S.id,"onUpdate:modelValue":v[2]||(v[2]=D=>m.value=D)},null,8,iu),[[e.vModelRadio,m.value]]),e.createElementVNode("span",null,e.toDisplayString(S.label),1)]))),128))])])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",su,"Завантаження…")):i.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",du,e.toDisplayString(I.value),1),e.createElementVNode("ul",uu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,S=>(e.openBlock(),e.createElementBlock("li",{key:S.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",pu,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:S.color})},null,4),e.createElementVNode("span",mu,e.toDisplayString(S.label),1)]),e.createElementVNode("div",fu,[e.createElementVNode("span",gu,e.toDisplayString(S.count),1),e.createElementVNode("span",yu,e.toDisplayString(A(S.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",cu,"Дані відсутні"))])])):(e.openBlock(),e.createElementBlock("button",{key:0,class:"py-2 px-2.5 max-h-[38px] inline-flex items-center gap-x-1.5 text-sm font-medium rounded-lg border border-gray-200 bg-white text-gray-800 shadow-sm hover:bg-gray-50",onClick:v[0]||(v[0]=S=>r.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-55daf8d3"]]),hu={class:"map-search-widget flex flex-col gap-2 bg-white border border-stone-200 shadow-2xs rounded-xl widget p-3 min-w-[200px]"},xu={key:0,class:"vs-select__options absolute z-50 mt-1 w-full bg-white border border-gray-300 shadow-lg rounded-lg text-sm"},bu=["onClick"],ku={class:"relative flex-1 min-w-[140px]"},_u=["placeholder"],wu="https://data.softpro.ua/api-user/gis-url-proxy",Eu="https://geo.rv.ua/api-user/dzk.api",Nn=H(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n=t,o=le(),r=["xy","parcel"],l=e.computed(()=>{var w,E;const h=(E=(w=n.config)==null?void 0:w.tools)==null?void 0:E.filter(_=>r.includes(_));return h&&h.length?h:r}),i=e.computed(()=>{var h,w;return((w=(h=n.config)==null?void 0:h.placeholder)==null?void 0:w.trim())||"Пошук…"}),a=e.ref(l.value[0]);e.watch(l,h=>{h.includes(a.value)||(a.value=h[0])});const d=e.ref(""),p=e.ref(!1),u=e.ref(null);e.watch(a,()=>{d.value="",p.value=!1});function g(h){a.value=h}function s(h){if(!p.value)return;const w=u.value;w&&!w.contains(h.target)&&(p.value=!1)}e.onMounted(()=>{window.addEventListener("click",s,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",s,!0)});function m(h){return h==="xy"?"Координати":h==="parcel"?"Кадастр":"Адреси"}function y(h){const w=h.replace(/[,]+/g," ").trim();if(!w)return null;const E=w.split(/\s+/).filter(Boolean);if(E.length<2)return null;const _=E.slice(0,2).map(Number);if(!_.every(I=>Number.isFinite(I)))return null;let[C,F]=_,M=C,$=F;const k=I=>Math.abs(I)<=90,V=I=>Math.abs(I)<=180;if(!k(M)||!V($))if(k($)&&V(M))M=F,$=C;else return null;return{lat:M,lng:$}}function c(h){return((h==null?void 0:h.items)||[]).map((E,_)=>{var C,F,M;return{id:String((E==null?void 0:E.id)??_),title:(E==null?void 0:E.title)||((C=E==null?void 0:E.address)==null?void 0:C.label)||"Знайдений обʼєкт",lat:Number((F=E==null?void 0:E.position)==null?void 0:F.lat),lng:Number((M=E==null?void 0:E.position)==null?void 0:M.lng)}})}function f(h){const w=(h==null?void 0:h.result)||(h==null?void 0:h.data)||h;if(!w)return[];const E=w.geom_centroid;if(!E||!Array.isArray(E.coordinates))return[];const[_,C]=E.coordinates;return!Number.isFinite(C)||!Number.isFinite(_)?[]:[{id:"parcel",title:w.cadnum||w.cad_num||"Земельна ділянка",lat:C,lng:_}]}function x(h){const E=h.replace(/\s+/g,"").split(":");if(console.log(E),E.length!==4)return!1;const _=[10,2,3,4];return E.every((C,F)=>C.length===_[F]&&/^\d+$/.test(C))}function B(h){var E,_;const w=((E=n.config)==null?void 0:E.zoom)??17;(_=o.flyTo)==null||_.call(o,{center:[h.lng,h.lat],zoom:w})}async function b(){const h=d.value.trim();if(h){if(a.value==="xy"){const w=y(h);if(!w){Q.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}B({id:"xy",title:"Точка на мапі",...w}),d.value="";return}try{const w=new URL(a.value==="here"?wu:Eu);if(a.value==="here")w.searchParams.set("searchtext",h);else{if(!x(h)){Q.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}w.searchParams.set("cad_num",h)}const E=await fetch(w.toString());if(!E.ok)throw new Error(`HTTP ${E.status}`);const _=await E.json(),C=a.value==="here"?c(_):f(_);if(!C.length)Q.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const F=C[0];B(F),d.value=""}}catch(w){const E=(w==null?void 0:w.message)||"Помилка пошуку";Q.notify({type:"error",title:"Пошук",message:E})}}}return(h,w)=>(e.openBlock(),e.createElementBlock("div",hu,[e.createElementVNode("form",{class:"flex gap-2",onSubmit:e.withModifiers(b,["prevent"])},[l.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:u,class:"relative search-type w-[140px]"},[e.createElementVNode("button",{type:"button",class:"vstSelect-input transition-all text-left bg-white border border-gray-200 text-gray-900 rounded-lg focus:ring-blue-500 focus:border-blue-100 block w-full py-1.5 px-3 text-sm cursor-pointer flex items-center justify-between gap-2",onClick:w[0]||(w[0]=E=>p.value=!p.value)},[e.createElementVNode("span",null,e.toDisplayString(m(a.value)),1),(e.openBlock(),e.createElementBlock("svg",{class:e.normalizeClass(["w-4 h-4 text-gray-500 transition-transform",{"rotate-180":p.value}]),viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[...w[2]||(w[2]=[e.createElementVNode("path",{d:"M6 9l6 6 6-6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))]),p.value?(e.openBlock(),e.createElementBlock("div",xu,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,E=>(e.openBlock(),e.createElementBlock("li",{key:E,class:"px-3 py-2 cursor-pointer hover:bg-gray-100",onClick:_=>g(E)},e.toDisplayString(m(E)),9,bu))),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",ku,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":w[1]||(w[1]=E=>d.value=E),placeholder:i.value,type:"text",class:"vs-input transition-all border block w-full border-gray-200 rounded-md focus:border-blue-100 border-solid !pr-8 py-1.5 pl-3 text-sm"},null,8,_u),[[e.vModelText,d.value,void 0,{trim:!0}]]),w[3]||(w[3]=e.createElementVNode("button",{type:"submit",class:"absolute inset-y-0 right-2 flex items-center text-gray-400 hover:text-gray-600","aria-label":"Пошук"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m21 21-4.35-4.35m0 0A7.5 7.5 0 1 0 5 5a7.5 7.5 0 0 0 11.65 11.65Z"})])],-1))])],32)]))}}),[["__scopeId","data-v-85962cbc"]]),Nu="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",Bu="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",Cu=H(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:r,removeControl:l}=le(),i=e.ref(null),a=e.ref(null),d=e.ref(null),p=e.ref(null);let u=null;function g(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function s(_){if(Array.from(document.styleSheets).some(M=>{var $;return($=M==null?void 0:M.href)==null?void 0:$.includes(_)}))return;const F=document.createElement("link");F.rel="stylesheet",F.href=_,document.head.appendChild(F)}function m(_){return new Promise((C,F)=>{const M=Array.from(document.scripts).find(k=>k.src===_);if(M){if(M._loaded)return C();M.addEventListener("load",()=>C()),M.addEventListener("error",()=>F(new Error(`Failed ${_}`)));return}const $=document.createElement("script");$.src=_,$.async=!0,$.onload=()=>{$._loaded=!0,C()},$.onerror=()=>F(new Error(`Failed ${_}`)),document.head.appendChild($)})}function y(){var C,F,M;const _=window;return _.MapboxExportControl||((C=_.mapboxgl)==null?void 0:C.MapboxExportControl)||((F=_.mapboxglExport)==null?void 0:F.MapboxExportControl)||((M=_.mapboxglExport)==null?void 0:M.default)||null}function c(){const _=document.createElementNS("http://www.w3.org/2000/svg","svg");return _.setAttribute("xmlns","http://www.w3.org/2000/svg"),_.setAttribute("viewBox","0 0 24 24"),_.setAttribute("width","18"),_.setAttribute("height","18"),_.setAttribute("fill","none"),_.setAttribute("stroke","currentColor"),_.setAttribute("stroke-width","2"),_.setAttribute("stroke-linecap","round"),_.setAttribute("stroke-linejoin","round"),_.classList.add("map-control-button__icon"),[{d:"M0 0h24v24H0z",stroke:"none",fill:"none"},{d:"M17 17h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-14a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2"},{d:"M17 9v-4a2 2 0 0 0 -2 -2h-6a2 2 0 0 0 -2 2v4"},{d:"M7 13m0 2a2 2 0 0 1 2 -2h6a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2z"}].forEach((F,M)=>{const $=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries(F).forEach(([k,V])=>{$.setAttribute(k,V)}),_.appendChild($)}),_}function f(){const _=document.createElement("button");_.id="print-btn",_.type="button",_.className=["group relative flex items-center justify-center","w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200","bg-white text-gray-700 hover:bg-gray-50 hover:scale-105","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2"].join(" "),_.setAttribute("aria-label","Друк");const C=c(),F=document.createElement("span");return F.className=["absolute left-full ml-3 px-3 py-1.5","bg-gray-900 text-white text-sm font-medium rounded-md","opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100","pointer-events-none transition-opacity duration-200 whitespace-nowrap"].join(" "),F.textContent="Друк",F.setAttribute("aria-hidden","true"),_.appendChild(C),_.appendChild(F),_.addEventListener("click",M=>{M.stopPropagation(),x()}),p.value=_,_}function x(){if(!d.value)return;d.value.style.display==="block"?b():B()}function B(){var _,C,F;d.value&&(d.value.style.display="block",(_=p.value)==null||_.classList.add("scale-105","shadow-xl"),(C=a.value)==null||C.toggleCrosshair(!0),(F=a.value)==null||F.togglePrintableArea(!0),document.addEventListener("click",h))}function b(){var _,C,F;d.value&&(d.value.style.display="none",(_=p.value)==null||_.classList.remove("scale-105","shadow-xl"),(C=a.value)==null||C.toggleCrosshair(!1),(F=a.value)==null||F.togglePrintableArea(!1),document.removeEventListener("click",h))}function h(_){const C=i.value;C&&(_.target&&C.contains(_.target)||b())}function w(_){const C={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};_.querySelectorAll("label, option").forEach(M=>{var k;const $=(k=M.textContent)==null?void 0:k.trim();$&&C[$]&&(M.textContent=C[$])});const F=_.querySelector("button");F&&(F.textContent="Друкувати")}function E(_){const C=_.querySelector(".mapboxgl-export-list");if(!C||!i.value)return;d.value=C;const F=_.querySelector("button");if(F&&(F.style.display="none"),_.style.display="none",!p.value){const $=f();i.value.appendChild($)}C.style.display="none";const M="_printControlBound";if(!C[M]){const $=k=>k.stopPropagation();C.addEventListener("click",$),C.addEventListener("mousedown",$),C[M]=!0}i.value.appendChild(C),w(C)}return e.onMounted(async()=>{await(o==null?void 0:o());const _=n.value;if(!_)return;s(Nu),g();try{await m(Bu)}catch(M){console.warn("[MapPrintControl] load error",M);return}const C=y();if(!C)return;const F=new C({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(a.value=F,typeof F.onAdd=="function"){const M=F.onAdd.bind(F);F.onAdd=$=>{const k=M($);return setTimeout(()=>k&&E(k),50),k}}r?r(F,"top-right"):_.addControl(F,"top-right"),u=M=>{M.key==="Escape"&&b()},document.addEventListener("keyup",u)}),e.onBeforeUnmount(()=>{b(),u&&(document.removeEventListener("keyup",u),u=null);const _=n.value;if(a.value)try{l?l(a.value):_==null||_.removeControl(a.value)}catch{}a.value=null}),(_,C)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:i,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-89156246"]]),Vu={class:"map-center-control"},vu=H(e.defineComponent({__name:"MapCenterControl",props:{center:{},zoom:{}},setup(t){const n=t,{map:o,ready:r}=le(),l=e.ref(null),i=e.ref(null);function a(p){if(Array.isArray(p)&&p.length>=2){const[u,g]=p.slice(0,2).map(s=>Number(s));return Number.isNaN(u)||Number.isNaN(g)?null:[u,g]}if(p&&typeof p=="object"){const u=p,g=u.lng??u.lon??u.long??u.x,s=u.lat??u.y;if(g!=null&&s!=null){const m=Number(g),y=Number(s);if(!Number.isNaN(m)&&!Number.isNaN(y))return[m,y]}}if(typeof p=="string"){const u=p.split(",").map(g=>Number(g.trim()));if(u.length>=2&&u.every(g=>!Number.isNaN(g)))return[u[0],u[1]]}return null}e.watch(()=>n.center,p=>{const u=a(p);u&&(l.value=u)},{immediate:!0}),e.watch(()=>n.zoom,p=>{const u=Number(p);Number.isNaN(u)||(i.value=u)},{immediate:!0}),e.onMounted(async()=>{await(r==null?void 0:r());const p=o.value;if(p){if(!l.value){const u=p.getCenter();l.value=[u.lng,u.lat]}i.value==null&&(i.value=p.getZoom())}});function d(){const p=o.value;if(!p)return;const u=l.value||(()=>{const s=p.getCenter();return[s.lng,s.lat]})(),g=i.value??p.getZoom();p.flyTo({center:u,zoom:g})}return(p,u)=>(e.openBlock(),e.createElementBlock("div",Vu,[e.createElementVNode("button",{id:"center-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":"Повернути центр",onClick:e.withModifiers(d,["stop"])},[e.createVNode(e.unref(Ln),{class:"w-4 h-4"}),u[0]||(u[0]=e.createElementVNode("span",{class:"absolute left-full ml-3 px-3 py-1.5 bg-gray-900 text-white text-sm font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"}," Центрувати ",-1))])]))}}),[["__scopeId","data-v-d21bee3d"]]),$u={class:"cursor-coordinates"},Au={class:"cursor-coordinates__text"},Su=H(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",$u,[e.createElementVNode("span",Au,e.toDisplayString(n.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),Fu={class:"minimap__wrapper"},He="minimap-viewport",Lu="minimap-viewport-layer",Mu=H(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var B;const n=t,o=e.ref(null),r=e.shallowRef(null),l=(B=n.options)==null?void 0:B.active,i=e.ref(l===void 0?!1:!!l);function a(b,h){return typeof b=="number"&&Number.isFinite(b)?b:h}const d=e.computed(()=>{var _,C;const b=(_=n.options)==null?void 0:_.width,h=(C=n.options)==null?void 0:C.height,w=a(n.width??b,210),E=a(n.height??h,150);return{width:`${w}px`,height:`${E}px`}});function p(){var h,w;const b=(w=(h=n.mapContext)==null?void 0:h.map)==null?void 0:w.value;if(!b||typeof b.getStyle!="function")return null;try{const E=b.getStyle();return E?JSON.parse(JSON.stringify(E)):null}catch{return null}}let u=null;function g(){var _;if(typeof window>"u"||r.value||!o.value)return;const b=p(),h=[30,50],w={container:o.value,style:b??{version:8,sources:{voyager:{type:"raster",tiles:["https://tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"voyager",type:"raster",source:"voyager"}]},center:h,zoom:((_=n.options)==null?void 0:_.zoom)??3,interactive:!1,attributionControl:!1},E={...w,...n.options??{}};E.container=w.container,r.value=new maplibregl.Map(E),r.value.on("load",()=>{m(),c()})}function s(){if(!r.value)return;const b=p();b&&(r.value.once("styledata",()=>{m(),c()}),r.value.setStyle(b))}function m(){if(r.value){if(typeof r.value.isStyleLoaded=="function"&&!r.value.isStyleLoaded()){r.value.once("styledata",()=>{m(),c()});return}r.value.getSource(He)||(r.value.addSource(He,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),r.value.addLayer({id:Lu,type:"fill",source:He,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function y(){i.value=!i.value,i.value&&e.nextTick(()=>{var b;return(b=r.value)==null?void 0:b.resize()})}function c(){var F,M;const b=(M=(F=n.mapContext)==null?void 0:F.map)==null?void 0:M.value;if(!r.value||!b||!b.getBounds)return;if(typeof r.value.isStyleLoaded=="function"&&!r.value.isStyleLoaded()){r.value.once("styledata",()=>{c()});return}const h=b.getBounds();if(!h)return;const w=h.getNorthEast(),E=h.getSouthWest();if(!w||!E)return;const _=[[E.lng,w.lat],[w.lng,w.lat],[w.lng,E.lat],[E.lng,E.lat],[E.lng,w.lat]],C=r.value.getSource(He);if(!C){m();return}C.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[_]},properties:{}})}function f(){var w;const b=n.mapContext,h=(w=b==null?void 0:b.map)==null?void 0:w.value;!(b!=null&&b.on)||!h||(u==null||u(),u=b.on("move",c),c())}async function x(){const b=n.mapContext;if(b){if(typeof b.ready=="function")try{await b.ready()}catch{return}f()}}return e.onMounted(()=>{g(),x()}),e.watch(()=>n.mapContext,()=>{x(),c()}),e.watch(()=>{var b,h;return(h=(b=n.mapContext)==null?void 0:b.map)==null?void 0:h.value},()=>{r.value&&(s(),x())}),e.watch(d,()=>{r.value&&e.nextTick(()=>{var b;return(b=r.value)==null?void 0:b.resize()})}),e.watch(()=>n.options,()=>{var h;u==null||u(),u=null,r.value&&(r.value.remove(),r.value=null);const b=(h=n.options)==null?void 0:h.active;typeof b=="boolean"&&(i.value=b),e.nextTick(()=>{g(),x()})},{deep:!0}),e.onBeforeUnmount(()=>{u==null||u(),u=null,r.value&&(r.value.remove(),r.value=null)}),(b,h)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["minimap",{"minimap--open":i.value}])},[e.createElementVNode("button",{type:"button",class:"minimap__button",onClick:y},[e.createVNode(e.unref(Sn))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",Fu,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:o,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(d.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,i.value]])]),_:1})],2))}}),[["__scopeId","data-v-3ce09bde"]]),Tu={key:1,class:"absolute bottom-4 right-4 z-[80] flex items-end gap-2"},Iu={class:"absolute top-[103px] right-[6.5px] z-[80] flex flex-col items-end gap-1"},Du={class:"map-widget__overlay-grid"},ju={key:0,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},Ou={class:"map-widget__stack"},Pu={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom mb-5"},zu={class:"map-widget__stack map-widget__stack--bottom"},Ru={key:0,class:"map-widget__state"},Uu={key:1,class:"map-widget__state map-widget__state--error"},pt=H(e.defineComponent({__name:"MapWidget",props:{id:{},height:{}},setup(t){var ve,be;const n=t,o=ae.useRoute(),r=ae.useRouter(),l=e.ref(null),i=e.ref({}),a=e.ref(!1),d=e.ref(null),p=e.ref(!1),u=e.ref([]),g=e.computed(()=>n.id||"main"),s=e.computed(()=>{var L,P;return{height:((L=n.height)==null?void 0:L.trim())||((P=i.value)==null?void 0:P.height)||"calc(100vh - 65px)"}}),m=e.computed(()=>{var L;return((L=i.value)==null?void 0:L.name)??null}),y=e.computed(()=>{var L;return((L=i.value)==null?void 0:L.description)??null}),c=e.ref(null),f=e.computed(()=>{if(!c.value)return null;const{lng:L,lat:P}=c.value;return`${P.toFixed(6)}, ${L.toFixed(6)}`}),x=e.computed(()=>{var L;return((L=l.value)==null?void 0:L.ctx)??null}),B=e.computed(()=>{var L;return((L=i.value)==null?void 0:L.minimap)??null}),b=((be=(ve=e.getCurrentInstance())==null?void 0:ve.appContext.config.globalProperties)==null?void 0:be.$settings)||null,h=e.computed(()=>{const L=(b==null?void 0:b.map)||null,P=(L==null?void 0:L.boundary)??null,R=(L==null?void 0:L.katottg)??null;return!P&&!R?null:{boundary:P,katottg:R}});function w(L){return typeof L=="string"&&L.trim()?L.trim().toLowerCase():"top-left"}const E=e.computed(()=>i.value.widgets||[]),_=["left","right"],C=e.computed(()=>{const L={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},P={"top-left":{side:"left",align:"top"},"bottom-left":{side:"left",align:"bottom"},"top-right":{side:"right",align:"top"},"bottom-right":{side:"right",align:"bottom"}};return E.value.forEach(R=>{const K=w(R.position),G=P[K]??{side:"left",align:"top"};L[G.side][G.align].push(R)}),L});function F(L){return Array.isArray(L)?L[0]??null:typeof L=="string"?L:null}async function M(){var P;await e.nextTick();const L=(P=l.value)==null?void 0:P.ctx;return L?(L.ready&&await L.ready(),L):null}function $(){var L,P,R;return((R=(P=(L=l.value)==null?void 0:L.ctx)==null?void 0:P.map)==null?void 0:R.value)??null}function k(){const L=$();if(!L)return null;const P=L.getCenter(),R=L.getZoom();return{x:P.lng.toFixed(5),y:P.lat.toFixed(5),z:R.toFixed(2)}}function V(){const L=k();if(!L)return;const P=F(o.query.x),R=F(o.query.y),K=F(o.query.z);P===L.x&&R===L.y&&K===L.z||r.replace({query:{...o.query,...L}}).catch(()=>{})}function I(L,P,R=1e-6){return Math.abs(L-P)<=R}async function T(){var ge;const L=await M(),P=(ge=L==null?void 0:L.map)==null?void 0:ge.value;if(!L||!P)return;const R=parseFloat(F(o.query.x)??""),K=parseFloat(F(o.query.y)??""),G=parseFloat(F(o.query.z)??""),j=!Number.isNaN(R),re=!Number.isNaN(K),se=!Number.isNaN(G);let fe=!1;if(j&&re){const ye=P.getCenter();(!I(ye.lng,R)||!I(ye.lat,K))&&(P.setCenter([R,K]),fe=!0)}se&&P.setZoom(G),(!j||!re||!se||fe)&&V()}let A=null,N=null;function v(L){const P=L==null?void 0:L.lngLat;P&&(c.value={lng:P.lng,lat:P.lat})}async function S(){const L=await M();L!=null&&L.on&&(A==null||A(),A=L.on("moveend",V),N==null||N(),N=L.on("mousemove",v))}e.onUnmounted(()=>{A==null||A(),A=null,N==null||N(),N=null});async function D(){var L,P;p.value=!1,a.value=!0,d.value=null,c.value=null;try{const R=await fetch(`/api/gis-map/${encodeURIComponent(g.value)}`);if(!R.ok)throw new Error(`Помилка завантаження (${R.status})`);const K=await R.json();i.value=K,i.value.widgets=K.widgets,u.value=K.tools;const G=await M();G&&(K.center&&((L=G.setCenter)==null||L.call(G,K.center)),K.zoom&&((P=G.setZoom)==null||P.call(G,K.zoom))),await T(),await S(),p.value=!0}catch(R){d.value=(R==null?void 0:R.message)||"Не вдалося завантажити карту"}finally{a.value=!1}}const U=e.computed(()=>{var R,K,G;const L=((R=i.value)==null?void 0:R.layers)||[],P=((G=(K=i.value)==null?void 0:K.widgets)==null?void 0:G.filter(j=>j.type==="layers").flatMap(j=>{var re;return((re=j.config)==null?void 0:re.layers)||[]}))||[];return L.map(j=>{const re=P.find(se=>se.id===j.id);return re?{...j,actions:re.actions}:j})}),z=e.ref([]);function q(L){z.value.includes(L)?z.value=z.value.filter(P=>P!==L):z.value.push(L)}const Y=e.computed(()=>L=>z.value.includes(L.id));return e.watch(g,()=>{D()}),e.onMounted(()=>{D()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{T()}),(L,P)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(s.value)},[e.createVNode(gn,{ref_key:"mapViewRef",ref:l,class:"map-widget__view"},{default:e.withCtx(()=>{var R,K;return[h.value?(e.openBlock(),e.createBlock(xn,{key:0,"layer-id":"app-boundary",boundary:h.value.boundary,katottg:h.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),x.value?(e.openBlock(),e.createElementBlock("div",Tu,[f.value?(e.openBlock(),e.createBlock(Su,{key:0,coordinates:f.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(Mu,{"map-context":x.value,options:B.value},null,8,["map-context","options"])])):e.createCommentVNode("",!0),e.createElementVNode("div",Iu,[u.value.includes("home")?(e.openBlock(),e.createBlock(vu,{key:0,center:((R=i.value)==null?void 0:R.center)||null,zoom:((K=i.value)==null?void 0:K.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),u.value.includes("print")?(e.openBlock(),e.createBlock(Cu,{key:1})):e.createCommentVNode("",!0)]),p.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("div",Du,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(_,G=>e.createElementVNode("div",{key:G,class:e.normalizeClass(["map-widget__side",`map-widget__side--${G}`])},[C.value[G].top.length?(e.openBlock(),e.createElementBlock("div",ju,[e.createElementVNode("div",Ou,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value[G].top,j=>{var re,se,fe,ge,ye,Te,Ie,De;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:j.id||j.type,class:"map-overlay__item"},[j.type==="info"?(e.openBlock(),e.createBlock(bn,{key:0,title:((re=j.config)==null?void 0:re.title)||j.title||null,content:((se=j.config)==null?void 0:se.content)||"",links:i.value.maps||[],"map-name":m.value,"map-description":y.value},null,8,["title","content","links","map-name","map-description"])):j.type==="catalog"?(e.openBlock(),e.createBlock(wn,{key:1,api:((fe=j.config)==null?void 0:fe.api)||null},null,8,["api"])):j.type==="layers"?(e.openBlock(),e.createBlock(_n,{key:2,layers:U.value,onAction:P[0]||(P[0]=mt=>q(mt.layerId)),config:j.config},null,8,["layers","config"])):j.type==="basemaps"?(e.openBlock(),e.createBlock(ct,{key:3,layers:((ge=j.config)==null?void 0:ge.layers)||null,"default-layer":((ye=j.config)==null?void 0:ye.default)||null,title:j.title||((Te=j.config)==null?void 0:Te.title)||null},null,8,["layers","default-layer","title"])):j.type==="legend"?(e.openBlock(),e.createBlock(dt,{key:4,items:((Ie=j.config)==null?void 0:Ie.items)||[]},null,8,["items"])):j.type==="filters"&&Y.value(j)?(e.openBlock(),e.createBlock(st,{key:5,"layer-id":(De=j.config)==null?void 0:De.layer,onClose:q},null,8,["layer-id"])):j.type==="dataset"?(e.openBlock(),e.createBlock(En,{key:6,config:j.config},null,8,["config"])):j.type==="search"?(e.openBlock(),e.createBlock(Nn,{key:7,config:j.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,j.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),C.value[G].bottom.length?(e.openBlock(),e.createElementBlock("div",Pu,[e.createElementVNode("div",zu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value[G].bottom,j=>{var re,se,fe,ge,ye,Te,Ie,De;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:j.id||j.type,class:"map-overlay__item"},[j.type==="info"?(e.openBlock(),e.createBlock(bn,{key:0,title:((re=j.config)==null?void 0:re.title)||j.title||null,content:((se=j.config)==null?void 0:se.content)||"",links:i.value.maps||[],"map-name":m.value,"map-description":y.value},null,8,["title","content","links","map-name","map-description"])):j.type==="catalog"?(e.openBlock(),e.createBlock(wn,{key:1,api:((fe=j.config)==null?void 0:fe.api)||null},null,8,["api"])):j.type==="layers"?(e.openBlock(),e.createBlock(_n,{key:2,layers:U.value,onAction:P[1]||(P[1]=mt=>q(mt.layerId)),config:j.config},null,8,["layers","config"])):j.type==="basemaps"?(e.openBlock(),e.createBlock(ct,{key:3,layers:((ge=j.config)==null?void 0:ge.layers)||null,"default-layer":((ye=j.config)==null?void 0:ye.default)||null,title:j.title||((Te=j.config)==null?void 0:Te.title)||null},null,8,["layers","default-layer","title"])):j.type==="legend"?(e.openBlock(),e.createBlock(dt,{key:4,items:((Ie=j.config)==null?void 0:Ie.items)||[]},null,8,["items"])):j.type==="filters"&&Y.value(j)?(e.openBlock(),e.createBlock(st,{key:5,"layer-id":(De=j.config)==null?void 0:De.layer,onClose:q},null,8,["layer-id"])):j.type==="dataset"||j.type==="attribute"?(e.openBlock(),e.createBlock(En,{key:6,config:j.config},null,8,["config"])):j.type==="search"?(e.openBlock(),e.createBlock(Nn,{key:7,config:j.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,j.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(yn),e.createVNode(hn)],64)):e.createCommentVNode("",!0)]}),_:1},512),a.value?(e.openBlock(),e.createElementBlock("div",Ru,"Завантаження карти…")):d.value?(e.openBlock(),e.createElementBlock("div",Uu,e.toDisplayString(d.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-adee6f24"]]);function qu(t){t.component("MapCustom",pt)}J.MapWidget=pt,J.Register=ml,J.Service=Hc,J.default=pt,J.install=qu,J.template1=ht,J.template2=xt,J.template3=bt,J.template4=kt,J.template5=_t,Object.defineProperties(J,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
|
|
94
|
+
`:""}var ts=es,ns={dump:ts},os=ki.load,dn=ns.dump;const rs={class:"flex flex-col flex-1 overflow-hidden"},ls={class:"flex justify-end gap-2"},as={class:"w-20 gap-2 whitespace-nowrap rounded-md font-medium ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 px-4 py-2 h-9 text-xs bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm transition-all duration-300 hover:shadow-md hover:scale-[1.02] relative overflow-hidden"},is=["href"],ss={class:"flex flex-col flex-1 overflow-hidden"},cs={class:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden mt-3 flex flex-col flex-1"},ds={class:"relative bg-gradient-to-br from-slate-50 to-white flex-1"},us=e.defineComponent({__name:"vs-tab-style",props:{token:{},styleYaml:{}},emits:["update:styleYaml","update"],setup(t,{emit:n}){const o=t,r=n,l=e.ref("");e.watch(()=>o.styleYaml,p=>{try{const u=p?dn(p):"";!l.value&&u!==l.value&&(l.value=u)}catch{l.value=""}},{immediate:!0,deep:!0}),e.watch(l,async p=>{var u,g;try{const s=p?os(p):null;if((u=s==null?void 0:s.colorAttr)!=null&&u.length&&((g=o.styleYaml)==null?void 0:g.colorAttr)!==s.colorAttr){const m=await i(s.colorAttr);s.colors=m.reduce((c,f,x)=>({...c,[f.id.toString()]:a[x]}),{});const y=dn(s);y!==l.value&&(l.value=y)}JSON.stringify(s)!==JSON.stringify(o.styleYaml)&&r("update:styleYaml",s)}catch{}});async function i(p){return(await fetch(`/api/gis-service/${o.token}/${p}`).then(g=>g.json())).rows}const a=["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd"],d=async()=>{try{await fetch(`/api/gis-service/${o.token}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({style:l.value})}),r("update"),Q.notify({type:"success",title:"Успіх",message:"Стилі збережено"})}catch(p){Q.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти стилі"}),console.log(p)}};return(p,u)=>(e.openBlock(),e.createElementBlock("div",rs,[e.createElementVNode("div",ls,[e.createElementVNode("button",as,[e.createElementVNode("a",{target:"_blank",href:"/api/gis-service/"+o.token+"/col"},"Attr",8,is)]),e.createElementVNode("button",{onClick:d,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 px-4 py-2 h-9 text-xs bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm transition-all duration-300 hover:shadow-md hover:scale-[1.02] relative overflow-hidden"},[...u[1]||(u[1]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-save h-3 w-3 mr-1"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти стилі ",-1)])])]),e.createElementVNode("div",ss,[e.createElementVNode("div",cs,[u[2]||(u[2]=e.createElementVNode("div",{class:"bg-gradient-to-r from-gray-50 to-gray-100 px-4 py-2 border-b border-gray-200 flex items-center justify-between"},[e.createElementVNode("div",{class:"text-xs text-gray-400"},"YAML")],-1)),e.createElementVNode("div",ds,[e.createVNode(Et,{modelValue:l.value,"onUpdate:modelValue":u[0]||(u[0]=g=>l.value=g),language:"yaml",theme:"vs-light"},null,8,["modelValue"])])])])]))}}),un=Symbol("MapContext");function ps(t){const n=e.shallowRef(null),o=e.ref(!1);let r=!1;const l=[],i=()=>{r=!0,l.length&&l.forEach(s=>s())},a=()=>{const s=t.container;return typeof s=="string"?document.getElementById(s):(s==null?void 0:s.value)!==void 0?s.value:s},d=()=>r?Promise.resolve():new Promise(s=>l.push(s)),p=async()=>{var m,y,c,f;if(typeof window>"u"||n.value)return;const s=a();if(!s)throw new Error("Map container not found");n.value=new maplibregl.Map({...t.mapOptions||{},attributionControl:!1,center:[30,50],zoom:7,container:s}),(m=t.controls)!=null&&m.navigation&&n.value.addControl(new maplibregl.NavigationControl(typeof t.controls.navigation=="object"?t.controls.navigation:{}),"top-right"),(y=t.controls)!=null&&y.scale&&n.value.addControl(new maplibregl.ScaleControl(typeof t.controls.scale=="object"?t.controls.scale:{}),"bottom-left"),(c=t.controls)!=null&&c.fullscreen&&n.value.addControl(new maplibregl.FullscreenControl,"top-right"),(f=t.controls)!=null&&f.geolocate&&n.value.addControl(new maplibregl.GeolocateControl(typeof t.controls.geolocate=="object"?t.controls.geolocate:{}),"top-right"),n.value.once("load",()=>{o.value=!0,i()})},u=()=>{n.value&&(n.value.remove(),n.value=null,o.value=!1)};e.onMounted(p),e.onUnmounted(u);const g={map:n,ready:d,flyTo:s=>{var m;return(m=n.value)==null?void 0:m.flyTo(s)},fitBounds:(s,m)=>{var y;return(y=n.value)==null?void 0:y.fitBounds(s,m)},setCenter:s=>{var m;return(m=n.value)==null?void 0:m.setCenter(s)},setZoom:s=>{var m;return(m=n.value)==null?void 0:m.setZoom(s)},addControl:(s,m)=>{var y;return(y=n.value)==null?void 0:y.addControl(s,m)},removeControl:s=>{var m;return(m=n.value)==null?void 0:m.removeControl(s)},on:(s,m,y)=>{var c,f;return typeof m=="string"?((c=n.value)==null||c.on(s,m,y),()=>{var x;return(x=n.value)==null?void 0:x.off(s,m,y)}):((f=n.value)==null||f.on(s,m),()=>{var x;return(x=n.value)==null?void 0:x.off(s,m)})},off:(s,m,y)=>{var c,f;typeof m=="string"?(c=n.value)==null||c.off(s,m,y):(f=n.value)==null||f.off(s,m)},project:s=>{var m;return(m=n.value)==null?void 0:m.project(s)},unproject:s=>{var m;return(m=n.value)==null?void 0:m.unproject(s)}};return e.provide(un,g),g}function le(t){if(t)return{map:t,flyTo:t.value.flyTo,fitBounds:t.value.fitBounds};const n=e.inject(un);if(!n)throw new Error("useMap() called outside of a Map provider");return n}const lt=new Map;function at(t){return t.colorAttr&&t.colors?["match",["get",t.colorAttr],...Object.entries(t.colors).reduce((n,o)=>n.concat(o),[]),"#94a3b8"]:null}function ms(t){var r;if(!t.icon||!t.colors)return null;const n=[],o=(r=t.icon)==null?void 0:r.split("+")[0];return Object.values(t.colors||{}).forEach(l=>{n.push(`${o}+${l.replace("#","")}.png`)}),["match",["get",t.colorAttr],...Object.entries(t.colors).reduce((l,i,a)=>l.concat([i[0],n[a]]),[]),t.icon]}async function pn(t,n,o){const r=[n],l=n.split("+")[0];Object.values(o||{}).forEach(i=>{r.push(`${l}+${i.replace("#","")}.png`)});for(let i=0;i<r.length;i+=1){const a=r[i];if(t.getImage(a))continue;const d=await t.loadImage("/api/gis-icon/"+a);t.addImage(a,d.data)}}function mn(t,n){const o=at(t);if(!(t.icon&&!t.iconZoom))return{type:"circle",maxzoom:n||t.iconZoom||22,paint:{"circle-stroke-color":(t==null?void 0:t.stroke)||"#fff","circle-opacity":t.opacity||1,"circle-color":o||t.color,"circle-stroke-width":t.width||1,"circle-radius":t.radius||5}}}function fs(t){const n=at(t);return{type:"fill",minzoom:t.pointZoom||0,paint:{"fill-color":n||t.color,"fill-opacity":t.opacity||.3,"fill-outline-color":t.stroke}}}function gs(t){return{type:"line",paint:{"line-color":at(t)||t.color,"line-opacity":t.opacity||1,"line-width":t.width||1.5}}}function ys(t){const n=ms(t);return{type:"symbol",minzoom:t.iconZoom||0,layout:{"icon-image":n||t.icon,"icon-size":1,"icon-allow-overlap":!0,"icon-ignore-placement":!0}}}function hs(t){return{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:t}}]}}}function fn(t){const n=[];return t?(t.icon&&n.push(ys(t)),t.pointZoom&&n.push(mn(t,t.pointZoom)),t.type==="polygon"?n.push(fs(t)):t.type==="line"?n.push(gs(t)):n.push(mn(t)),n.filter(o=>o)):[]}const it={};function W(t,n,o){var M,$;if(!t)return it;if(!n)return it[t];const{map:r,ready:l=()=>Promise.resolve()}=le(o),i=t||n.layer.id,a=n.sourceId??t;n.point&&(n.source=hs(n.point)),!n.layer&&((M=n.source)==null?void 0:M.type)==="raster"&&(n.layer={id:a,type:"raster",source:a}),n.layer&&!(($=n.layer)!=null&&$.source)&&(n.layer.source=a);let d=!1,p=!1;const u=()=>{var k,V,I,T;if(!(p||!r.value)){if(n.source&&!r.value.getSource(a)&&r.value.addSource(a,n.source),!r.value.getLayer(i)){const A=n.beforeId===0?(V=(k=r.value.getStyle().layers)==null?void 0:k[0])==null?void 0:V.id:n.beforeId;(T=(I=n.layer)==null?void 0:I.style)!=null&&T.icon&&pn(r.value,n.layer.style.icon,n.layer.style.colors);const N=fn(n.style||n.layer.style);if(!N.length)return r.value.addLayer(n.layer,A);N.forEach((v,S)=>{var D;Object.assign(v,{id:i+(S||"")}),v.source=a,((D=n.source)==null?void 0:D.type)==="vector"&&(v["source-layer"]=a),r.value.addLayer(v,A)})}d=!0}};l().then(u);const g=(k,V)=>r.value?(r.value.on(k,i,V),()=>{var I;return(I=r.value)==null?void 0:I.off(k,i,V)}):()=>{};function s(k){r.value&&r.value.getStyle().layers.filter(V=>V.source==i).forEach(V=>{r.value.setLayoutProperty(V.id,"visibility",k?"visible":"none")})}async function m(k){if(!r.value)return;k.icon&&pn(r.value,k.icon,k.colors);const V=fn(k);E(!1),V.forEach((I,T)=>{I.id=i+T,["source","source-layer"].forEach(A=>{I[A]=n==null?void 0:n.layer[A]}),r.value.addLayer(I)})}function y(k){r.value&&Object.entries(k).forEach(([V,I])=>r.value.setPaintProperty(i,V,I))}function c(k){r.value&&Object.entries(k).forEach(([V,I])=>r.value.setLayoutProperty(i,V,I))}function f(k){r.value&&r.value.setFilter(i,k)}function x(k){if(!r.value)return;const V=r.value.getSource(a);if(V&&"setTiles"in V&&n.source.tiles[0]){const I=n.source.tiles[0];V.setTiles([I+"?filter="+k])}}function B(k){if(!r.value)return;const V=r.value.getSource(a);V&&"setTiles"in V&&V.setTiles(k)}function b(k){if(!r.value)return;const V=r.value.getSource(a);V&&"setData"in V&&V.setData(k)}function h(k,V){r.value&&r.value.setFeatureState({source:a,...k},V)}function w(k,V){r.value&&r.value.removeFeatureState({source:a,...k},V?{key:V}:void 0)}function E(k=!0){r.value&&(r.value.getStyle().layers.filter(V=>V.source==i).forEach(V=>{r.value.removeLayer(V.id)}),p=!0,n!=null&&n.source&&k&&r.value.getSource(a)&&r.value.removeSource(a))}const _={ids:{layerId:i,sourceId:a},isMounted:()=>{var k;return d&&!!((k=r.value)!=null&&k.getLayer(i))},setVisible:s,updatePaint:y,updateLayout:c,updateFilter:f,setData:b,setTiles:B,setStyle:m,setFilter:x,setFeatureState:h,removeFeatureState:w,remove:E,card:n.card,popup:n.popup,getSource:()=>{var k;return(k=r.value)==null?void 0:k.getSource(a)},getLayer:()=>{var k;return(k=r.value)==null?void 0:k.getLayer(i)},on:g};lt.set(i,_);const C=()=>{lt.get(i)===_&<.delete(i)},F=_.remove;return _.remove=()=>{C(),F()},e.onBeforeUnmount(_.remove),it[t]=_,_}const xs={class:"flex flex-col flex-1 min-h-0"},bs={class:"flex flex-col flex-1 min-h-0"},ks=e.defineComponent({__name:"vs-tab-popup",props:{token:{},fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,c=>l.value=c||[],{immediate:!0}),e.watch(l,c=>{const f=W(o.token);f&&(f.popup=c),r("update:columns",c)});const i=e.ref("list"),a=e.ref(!1),d=e.ref([]),p=[{key:"name",label:"Name",type:"main"},{key:"meta",label:"Meta"}],u={name:{type:"text",label:"Name",disabled:!0,validators:["required"]},label:{type:"text",label:"Label",validators:["required"]},meta:{type:"radio",label:"Meta",mode:"combo",options:[{text:"Title",id:"title"},{text:"Feature",id:"feature"},{text:"Badge",id:"badge"}]},data:{type:"text",label:"Data"}};function g(){d.value=l.value.map(c=>c.name||c.id),a.value=!0}function s(){var B;const c=[...l.value],f=((B=o.fields)==null?void 0:B.filter(b=>d.value.includes(b.name)))||[],x=we(c,f,{selectedKeys:d.value,resolveKey:b=>ue(b)});l.value=x,a.value=!1,d.value=[]}function m(){a.value=!1,d.value=[]}function y(){let c=[];i.value==="all"?c=o.fields||[]:i.value==="none"?c=[]:c=l.value,c.filter(f=>!f.label).forEach(f=>f.label=f.ua),r("save",c)}return(c,f)=>(e.openBlock(),e.createElementBlock("div",xs,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:g,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium bg-gradient-to-r from-gray-500 to-gray-400 text-white h-9 px-4 py-2 hover:from-gray-600 hover:to-gray-500"}," Імпорт "),e.createElementVNode("button",{onClick:y,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300"}," Зберегти popup ")]),e.createElementVNode("div",bs,[i.value==="list"?(e.openBlock(),e.createBlock(he,{key:0,modelValue:l.value,"onUpdate:modelValue":f[0]||(f[0]=x=>l.value=x),"columns-scheme":p,"form-scheme":u,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(ke,{visible:a.value,"onUpdate:visible":f[1]||(f[1]=x=>a.value=x),selection:d.value,"onUpdate:selection":f[2]||(f[2]=x=>d.value=x),fields:c.fields,title:"Імпорт полів","id-prefix":"import-popup",onConfirm:s,onCancel:m},null,8,["visible","selection","fields"])]))}}),_s={class:"flex flex-col flex-1 min-h-0"},ws={class:"flex justify-between mb-3 gap-2"},Es={class:"p-4 space-y-4 text-sm"},Ns={class:"space-y-1"},Bs={class:"space-y-1"},Cs={class:"flex items-center gap-3"},Vs={class:"flex justify-end gap-2 p-4 border-t"},vs=e.defineComponent({__name:"vs-tab-legend",props:{mapInfo:{},token:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,c=>{l.value=c||[]}),e.watch(l,c=>{r("update:columns",c)});const i=e.ref(!1),a=e.ref({name:"",color:"#2E86DE"}),d=e.defineAsyncComponent(()=>import("@opengis/core").then(c=>c.VsModal)),p=[{key:"name",label:"Назва"},{key:"color",label:"Колір",type:"color"}],u={name:{type:"text",label:"Назва",validators:["required"]},color:{type:"color",label:"Колір",validators:["required"]}};function g(c){c&&s(),i.value=c}function s(){a.value={name:"",color:"#2E86DE"}}function m(){var B,b;const c=(B=a.value.name)==null?void 0:B.trim();if(!c){Q.notify({type:"warning",title:"Перевірка",message:"Вкажіть назву елементу легенди"});return}const f=((b=a.value.color)==null?void 0:b.trim())||"#2E86DE";if(l.value.some(h=>ue(h)===ue({name:c}))){Q.notify({type:"warning",title:"Дубль",message:"Такий елемент легенди вже існує"});return}l.value=[...l.value,{name:c,color:f}],s(),i.value=!1}function y(){r("save",l.value)}return(c,f)=>(e.openBlock(),e.createElementBlock("div",_s,[e.createElementVNode("div",ws,[e.createElementVNode("button",{onClick:f[0]||(f[0]=x=>i.value=!0),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium bg-gradient-to-r from-gray-500 to-gray-400 text-white h-9 px-4 py-2 hover:from-gray-600 hover:to-gray-500"}," Додати "),e.createElementVNode("button",{onClick:y,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300"}," Зберегти легенду ")]),e.createVNode(he,{modelValue:l.value,"onUpdate:modelValue":f[1]||(f[1]=x=>l.value=x),"columns-scheme":p,"form-scheme":u,"main-col-width":"250px","add-button":!1},null,8,["modelValue"]),e.createVNode(e.unref(d),{visible:i.value,title:"Новий елемент легенди","onUpdate:visible":g},{footer:e.withCtx(()=>[e.createElementVNode("div",Vs,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:f[5]||(f[5]=x=>g(!1))}," Скасувати "),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:m}," Додати ")])]),default:e.withCtx(()=>[e.createElementVNode("div",Es,[e.createElementVNode("div",Ns,[f[6]||(f[6]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Назва ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":f[2]||(f[2]=x=>a.value.name=x),type:"text",class:"w-full rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"Наприклад, Житлова зона"},null,512),[[e.vModelText,a.value.name]])]),e.createElementVNode("div",Bs,[f[7]||(f[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Колір ",-1)),e.createElementVNode("div",Cs,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":f[3]||(f[3]=x=>a.value.color=x),type:"color",class:"h-10 w-16 rounded border border-gray-300"},null,512),[[e.vModelText,a.value.color]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":f[4]||(f[4]=x=>a.value.color=x),type:"text",class:"flex-1 rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"#FFFFFF"},null,512),[[e.vModelText,a.value.color]])])])])]),_:1},8,["visible"])]))}}),$s={class:"space-y-3 bg-gradient-to-br from-sky-50 to-blue-50 p-4 rounded-xl border border-sky-100 shadow-sm"},As=["onClick"],Ss=["aria-checked","value"],Fs={key:0},Ls=e.defineComponent({__name:"view-mode-toggle",props:{modelValue:{},options:{},showHtml:{type:Boolean}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,l=a=>r("update:modelValue",a),i=o.options||[{value:"all",label:"All"},{value:"list",label:"List"},{value:"none",label:"None"}];return(a,d)=>(e.openBlock(),e.createElementBlock("div",$s,[d[1]||(d[1]=e.createElementVNode("label",{class:"text-sm font-medium text-gray-600"},"Режим відображення",-1)),e.createElementVNode("div",{role:"radiogroup",class:e.normalizeClass(["grid gap-2",`grid-cols-${e.unref(i).length}`])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(i),p=>(e.openBlock(),e.createElementBlock("div",{key:p.value,onClick:u=>l(p.value),class:e.normalizeClass(["flex items-center justify-center space-x-2 rounded-lg p-2 border transition-all duration-300 cursor-pointer",[a.modelValue===p.value?"bg-gradient-to-r from-sky-200 to-blue-200 border-transparent shadow-sm":"bg-white border-gray-100 hover:border-sky-200 hover:shadow-sm"]])},[e.createElementVNode("button",{type:"button",role:"radio","aria-checked":a.modelValue===p.value,value:p.value,class:"aspect-square rounded-full border border-primary h-4 w-4 flex items-center justify-center text-sky-500"},[a.modelValue===p.value?(e.openBlock(),e.createElementBlock("span",Fs,[...d[0]||(d[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-circle h-2.5 w-2.5 fill-current text-current"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"})],-1)])])):e.createCommentVNode("",!0)],8,Ss),e.createElementVNode("label",{class:e.normalizeClass(["text-xs font-medium cursor-pointer",a.modelValue===p.value?"text-gray-700":"text-gray-600"])},e.toDisplayString(p.label),3)],10,As))),128))],2)]))}}),Ms={class:"flex flex-col flex-1 min-h-0"},Ts={class:"flex flex-col flex-1 min-h-0"},Is=e.defineComponent({__name:"vs-tab-card",props:{fields:{},columns:{},viewMode:{},html:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,x=>l.value=x||[],{immediate:!0}),e.watch(l,x=>r("update:columns",x));const i=e.ref(o.viewMode??"list");e.watch(()=>o.viewMode,x=>{x&&x!==i.value&&(i.value=x)});const a=e.ref(o.html??"");e.watch(()=>o.html,x=>{typeof x=="string"&&x!==a.value&&(a.value=x)},{immediate:!0});const d=e.ref(!1),p=e.ref([]),u=[{key:"name",label:"Name",type:"main"},{key:"format",label:"Format"}],g={name:{type:"text",label:"Name",validators:["required"],disabled:!0},label:{type:"text",label:"Label",validators:["required"]},format:{type:"radio",label:"Format",mode:"inline",validators:["required"],options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"}]},data:{type:"text",label:"Data"}};function s(){p.value=l.value.map(x=>x.name||x.id),d.value=!0}function m(){var h;const x=[...l.value],B=((h=o.fields)==null?void 0:h.filter(w=>p.value.includes(w.name)).map(w=>{const{type:E,format:_,...C}=w;return{...C,format:_??E??"text"}}))||[],b=we(x,B,{selectedKeys:p.value,resolveKey:w=>ue(w)});l.value=b,d.value=!1,p.value=[]}function y(){d.value=!1,p.value=[]}function c(){const x=i.value==="html"?"html":"list",B={card_mode:x,list:l.value};x==="html"&&(B.html=a.value),r("save","card",B)}const f=[{value:"all",label:"All"},{value:"list",label:"List"},{value:"none",label:"None"},{value:"html",label:"HTML"}];return(x,B)=>(e.openBlock(),e.createElementBlock("div",Ms,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:s,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium bg-gradient-to-r from-gray-500 to-gray-400 text-white h-9 px-4 py-2 hover:from-gray-600 hover:to-gray-500"}," Імпорт "),e.createElementVNode("button",{onClick:c,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300"}," Зберегти ")]),e.createVNode(Ls,{modelValue:i.value,"onUpdate:modelValue":B[0]||(B[0]=b=>i.value=b),options:f},null,8,["modelValue"]),e.createElementVNode("div",Ts,[i.value==="list"?(e.openBlock(),e.createBlock(he,{key:0,modelValue:l.value,"onUpdate:modelValue":B[1]||(B[1]=b=>l.value=b),"columns-scheme":u,"form-scheme":g,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):i.value==="html"?(e.openBlock(),e.createBlock(Et,{key:1,modelValue:a.value,"onUpdate:modelValue":B[2]||(B[2]=b=>a.value=b),language:"html",theme:"vs-light",class:"flex-1 min-h-0"},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(ke,{visible:d.value,"onUpdate:visible":B[3]||(B[3]=b=>d.value=b),selection:p.value,"onUpdate:selection":B[4]||(B[4]=b=>p.value=b),fields:x.fields,title:"Імпорт полів для картки","id-prefix":"import-card",onConfirm:m,onCancel:y},null,8,["visible","selection","fields"])]))}}),Ds={class:"flex flex-col flex-1 min-h-0"},js=e.defineComponent({__name:"vs-tab-filter",props:{fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n;console.log(o.columns);const l=e.ref(o.columns||[]);e.watch(()=>o.columns,c=>l.value=c||[],{immediate:!0}),e.watch(l,c=>r("update:columns",c),{deep:!0,immediate:!0});const i=e.ref("list"),a=e.ref(!1),d=e.ref([]),p=[{key:"id",label:"Name"},{key:"label",label:"UA"},{key:"type",label:"Тип"}],u={name:{type:"text",label:"Name",disabled:!0,validators:["required"]},label:{type:"text",label:"UA",validators:["required"]},type:{type:"radio",label:"Тип",position:"horizontal",validators:["required"],options:[{text:"Check",id:"check"},{text:"Range",id:"range"},{text:"Date",id:"date"},{text:"Text",id:"text"},{text:"Select",id:"select"}]},hidden:{label:"Приховати",type:"Switcher"},data:{type:"text",label:"Класифікатор",conditions:["type","in",["autocomplete","select","check"]],validators:["required"]}};function g(){d.value=l.value.map(c=>c.name||c.id),a.value=!0}function s(){var B;const c=[...l.value],f=((B=o.fields)==null?void 0:B.filter(b=>d.value.includes(b.name)))||[],x=we(c,f,{selectedKeys:d.value,resolveKey:b=>ue(b)});l.value=x,a.value=!1,d.value=[]}function m(){a.value=!1,d.value=[]}function y(){let c=[];i.value==="all"?c=o.fields||[]:i.value==="none"?c=[]:c=l.value,r("save",c)}return(c,f)=>(e.openBlock(),e.createElementBlock("div",Ds,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:g,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium bg-gradient-to-r from-gray-500 to-gray-400 text-white h-9 px-4 py-2 hover:from-gray-600 hover:to-gray-500"}," Імпорт "),e.createElementVNode("button",{onClick:y,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300"}," Зберегти фільтр ")]),i.value==="list"?(e.openBlock(),e.createBlock(he,{key:0,modelValue:l.value,"onUpdate:modelValue":f[0]||(f[0]=x=>l.value=x),"columns-scheme":p,"form-scheme":u,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0),e.createVNode(ke,{visible:a.value,"onUpdate:visible":f[1]||(f[1]=x=>a.value=x),selection:d.value,"onUpdate:selection":f[2]||(f[2]=x=>d.value=x),fields:c.fields,title:"Імпорт полів","id-prefix":"import-filter",onConfirm:s,onCancel:m},null,8,["visible","selection","fields"])]))}}),gn=e.defineComponent({__name:"MapView",setup(t,{expose:n}){const o=e.ref(null),r=ps({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},center:[30.5234,50.4501],zoom:9,minZoom:4,maxZoom:14,doubleClickZoom:!1},controls:{navigation:!0,scale:!0}});return n({ctx:r}),(l,i)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"el",ref:o,class:"w-full h-full rounded-xl overflow-hidden"},[e.renderSlot(l.$slots,"default")],512))}}),Os=e.defineComponent({__name:"MapDataLayer",props:{id:{},layer:{},styleYaml:{}},setup(t,{expose:n}){var m;const{map:o,flyTo:r,setZoom:l}=le(),i=t,a=i.id;String(i.id);const d=`${location.origin}/api/vtile/${i.id}/ua/{z}/{x}/{y}.vmt?all=1`,p=W(a,{source:{type:"vector",tiles:[d],minzoom:0,maxzoom:14},popup:i.layer.popup,layer:{style:(m=i.layer)==null?void 0:m.style}});n({layerHandle:p}),r({center:i.layer.center||[30,50],animate:!1}),l(11),W("point",{point:i.layer.center,style:{color:"orange"}});let u=null;function g(){u&&clearTimeout(u),u=setTimeout(()=>{u=null,s().catch(y=>console.error("Failed to update map layer",y))},300)}async function s(){o.value&&p.setStyle(i.styleYaml)}return e.watch(()=>i.styleYaml,g),e.onBeforeUnmount(()=>{p.remove()}),(y,c)=>null}}),Ps={class:"map-filter"},zs={class:"map-filter__header"},Rs={class:"map-filter__title"},Us={"aria-hidden":"true"},Ye=H(e.defineComponent({__name:"MapFilterPopover",props:{count:{},layer:{},catalogAnchor:{},disabled:{type:Boolean}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/filter")),o=t,r=e.reactive({open:!1,top:0,left:0}),l=e.ref(null),i=e.ref(null),a=e.ref({}),d=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0}),p=e.computed(()=>r.open),u=e.computed(()=>(o.layer.filters.length??0)>0),g=e.computed(()=>{var _;return((_=o.layer)==null?void 0:_.name)??""}),s=e.computed(()=>{var _;return((_=o.layer)==null?void 0:_.filters)??[]}),m=e.computed(()=>{var _;return((_=o.layer)==null?void 0:_.id)??""}),y=e.computed(()=>{var _;return r.open?{position:"absolute",top:`${r.top}px`,left:`${r.left}px`,transform:(_=o.catalogAnchor)!=null&&_.value?"none":"translateX(-50%)",zIndex:1e3,width:"240px"}:{display:"none"}});function c(){r.open=!1}function f(){var C;if(!l.value)return;const _=l.value.getBoundingClientRect();if((C=o.catalogAnchor)!=null&&C.value){const F=o.catalogAnchor.value.getBoundingClientRect();r.top=F.top+window.scrollY,r.left=F.right+window.scrollX+12}else r.top=_.bottom+window.scrollY+8,r.left=_.left+_.width/2+window.scrollX}function x(){r.open=!r.open,r.open&&e.nextTick(f)}function B(){o.disabled||x()}function b(){r.open&&f()}function h(_){const C=m.value;if(!C)return;const F=W(C);if(!(F!=null&&F.setFilter))return;a.value=_;const M=Object.entries(_).map(([$,k])=>`${$}=${k}`).join("|");F.setFilter(M)}function w(_){if(!o.disabled)return;const C=_.currentTarget;if(!C)return;const F=C.getBoundingClientRect();d.left=F.left+F.width/2+window.scrollX,d.top=F.bottom+8+window.scrollY,d.visible=!0}function E(){d.visible=!1}return e.onMounted(()=>{window.addEventListener("resize",b),window.addEventListener("scroll",b,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",b),window.removeEventListener("scroll",b,!0)}),(_,C)=>u.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mapLayer-filter",ref_key:"anchor",ref:l},[e.createElementVNode("a",{class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(B,["prevent","stop"]),onMouseenter:w,onMouseleave:E,onFocus:w,onBlur:E},[...C[2]||(C[2]=[e.createElementVNode("div",{class:"mapLayer-filter__icon"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M3 4h18l-7 8v6l-4 2v-8z"})])],-1)])],34),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[p.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-50 rounded-[16px] bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-filter__popover",style:e.normalizeStyle(y.value),ref_key:"panel",ref:i,onClick:C[1]||(C[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Ps,[e.createElementVNode("div",zs,[e.createElementVNode("h3",Rs,e.toDisplayString(g.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:c},[e.createElementVNode("span",Us,[e.createVNode(e.unref(In),{class:"h-4 w-4"})]),C[3]||(C[3]=e.createElementVNode("span",{class:"sr-only"},"Закрити",-1))])]),e.createVNode(e.unref(n),{view:"inline",schema:s.value,value:a.value,limit:5,onChange:C[0]||(C[0]=F=>h(F.data)),width:220},null,8,["schema","value"])])],4)):e.createCommentVNode("",!0),d.visible?(e.openBlock(),e.createElementBlock("div",{key:1,class:"filter-badge__hint",style:e.normalizeStyle({top:`${d.top}px`,left:`${d.left}px`})},e.toDisplayString(d.text),5)):e.createCommentVNode("",!0)]))],512)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-1950f91d"]]),qs={class:"map-filter"},Ys={class:"map-filter__header"},Hs={class:"map-filter__title"},st=H(e.defineComponent({__name:"MapFilterWidget",props:{filters:{},title:{},layerId:{}},setup(t){return e.defineAsyncComponent(()=>import("@opengis/filter")),e.ref({}),(n,o)=>(e.openBlock(),e.createElementBlock("div",qs,[e.createElementVNode("div",Ys,[e.createElementVNode("h3",Hs,e.toDisplayString(n.title||"Фільтр"),1),e.createVNode(Ye,{layer:{filters:n.filters,id:n.layerId},count:n.filters.length},null,8,["layer","count"])])]))}}),[["__scopeId","data-v-c9b8657f"]]),Ws={class:"flex flex-row gap-x-3 z-10 relative widget"},Ks=["onClick"],Gs=["src","alt"],ct=e.defineComponent({__name:"BaseMaps",setup(t){const n={gki:{url:"https://data.gki.com.ua/api-user/rtile/voyager/ua/{z}/{x}/{y}.png",preview:"https://data.gki.com.ua/api-user/rtile/voyager/ua/12/2422/1400.png",title:"Базова карта (voyager)"},arcgisonline:{url:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}.png",preview:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/7/47/69.png",title:"ESRI Online Imagery(2022-2023)"},none:{}},o=e.ref("gki"),r=W("base",{source:{type:"raster",tiles:[n[o.value].url]},beforeId:0});function l(i){if(o.value=i,!n[i].url)return r.setVisible(!1);r.setVisible(!0),r.setTiles([n[i].url])}return(i,a)=>(e.openBlock(),e.createElementBlock("div",Ws,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(n,(d,p)=>e.createElementVNode("div",{key:p,onClick:u=>l(p)},[e.createElementVNode("div",{class:e.normalizeClass(["w-14 h-14 flex items-center justify-center bg-gray-200 rounded-xl shadow-2xs cursor-pointer transition-all border-4",o.value===p?"border-blue-500":"border-gray-200"])},[d.preview?(e.openBlock(),e.createElementBlock("img",{key:0,src:d.preview,alt:d.title,class:"object-cover rounded-lg w-12 h-12"},null,8,Gs)):e.createCommentVNode("",!0)],2)],8,Ks)),64))]))}}),Zs={key:0,class:"legend-widget flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget",style:{width:"100%"}},Xs={class:"flex flex-col gap-1 p-5"},Js={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},dt=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:r}=le(),l=e.ref([]);let i=null;function a(g){return g?g.map((s,m)=>{var f;const y=(s==null?void 0:s.name)||(s==null?void 0:s.label)||(s==null?void 0:s.title)||(s==null?void 0:s.id)||`Layer ${m+1}`,c=(s==null?void 0:s.color)||(s==null?void 0:s.fill)||((f=s==null?void 0:s.paint)==null?void 0:f.color)||"#3388ff";return{id:`${y}-${m}`,label:y,color:c}}):[]}function d(g){return g!=null&&g.layers?g.layers.filter(s=>{const m=s.paint||{};return m["fill-color"]||m["line-color"]||m["circle-color"]}).map((s,m)=>{var f;const y=s.paint||{},c=y["fill-color"]||y["line-color"]||y["circle-color"]||"#3388ff";return{id:s.id||`layer-${m}`,label:((f=s.metadata)==null?void 0:f.title)||s.id||`Layer ${m+1}`,color:c}}):[]}async function p(){var m;await r();const g=o.value;if(!g)return;const s=(m=g.getStyle)==null?void 0:m.call(g);l.value=d(s)}function u(){const g=o.value;if(!g)return;i==null||i();const s=()=>p();g.on("styledata",s),i=()=>g.off("styledata",s)}return e.watch(()=>n.items,async g=>{g!=null?(l.value=a(g),i==null||i()):(await r(),u(),p())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await r(),u(),p())}),e.onBeforeUnmount(()=>{i==null||i(),i=null}),(g,s)=>l.value.length?(e.openBlock(),e.createElementBlock("div",Zs,[e.createElementVNode("div",Xs,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,m=>(e.openBlock(),e.createElementBlock("div",{key:m.id,class:"flex items-center"},[e.createElementVNode("span",{class:"shrink-0 size-2.5 inline-block me-2.5 h-[10px] w-[10px] rounded-full",style:e.normalizeStyle({background:m.color})},null,4),e.createElementVNode("span",Js,[e.createElementVNode("span",null,e.toDisplayString(m.label),1)])]))),128))])])):e.createCommentVNode("",!0)}});function Qs(){const{map:t,ready:n}=le(),o=e.ref(null),r=e.ref(null),l=e.ref(null),i=e.ref(null);let a=[];function d(){a.forEach(m=>m()),a=[]}const p=m=>{var f;o.value=[m.point.x,m.point.y];const y=t.value.queryRenderedFeatures(m.point);if(!(y!=null&&y.length)){u();return}const c=W(y[0].source)||W(y[0].layer.id);c!=null&&c.popup&&(r.value=((f=c.popup)==null?void 0:f.fields)||c.popup,i.value=y[0].properties)},u=()=>{r.value=null,i.value=null,o.value=null};async function g(){await n(),t.value&&(d(),t.value.on("mousemove",p),t.value.on("mouseleave",u))}function s(){d(),r.value=null,i.value=null,o.value=null}return n().then(g),{popupCoords:o,popupFields:r,popupValues:i,disable:s,title:l}}const ec={class:"popup-card relative w-full overflow-hidden rounded-2xl border border-blue-100 bg-white/95 shadow-2xl backdrop-blur-sm"},tc={key:0,class:"border-b border-gray-200 px-3 py-2 text-sm font-semibold text-gray-800"},nc={class:"px-3 py-2 text-xs text-gray-600"},oc={class:"w-full border-collapse"},rc={class:"w-1/2 break-words pb-1 pr-2 font-medium text-gray-700"},lc={class:"w-1/2 break-words pb-1 pl-2 text-right"},ac={key:0,class:"inline-block rounded px-2 py-0.5 text-xs font-semibold text-yellow-800",style:{"background-color":"rgba(250, 204, 21, 0.25)"}},ic={key:1},yn=H(e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,disable:o,popupFields:r,popupValues:l,title:i}=Qs(),a=e.ref(null),d=e.ref({left:"-9999px",top:"-9999px"}),p=e.computed(()=>{var s;return((s=r.value)==null?void 0:s.length)>0&&Object.keys(l.value||{}).length>0}),u=e.computed(()=>{const s=r.value.find(m=>m.meta==="title");return l.value[s.name]});function g(){if(!p.value||!n.value||!a.value){d.value={left:"-9999px",top:"-9999px"};return}const[s,m]=n.value;a.value;const y=s+18,c=m+18;d.value={left:`${y}px`,top:`${c}px`}}return e.watch([n],()=>{e.nextTick(()=>g())}),e.onBeforeUnmount(()=>{o()}),(s,m)=>p.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popupRef",ref:a,class:"absolute z-30 w-[280px] pointer-events-none text-gray-800",style:e.normalizeStyle(d.value)},[e.createElementVNode("div",ec,[u.value?(e.openBlock(),e.createElementBlock("div",tc,e.toDisplayString(u.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",nc,[e.createElementVNode("table",oc,[e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(r).filter(y=>y.meta!=="title"),y=>(e.openBlock(),e.createElementBlock("tr",{key:y.value,class:"align-top"},[e.createElementVNode("td",rc,e.toDisplayString(y.label||y.title),1),e.createElementVNode("td",lc,[y.meta==="badge"?(e.openBlock(),e.createElementBlock("span",ac,e.toDisplayString(e.unref(l)[y.name+"_text"]||e.unref(l)[y.name]),1)):(e.openBlock(),e.createElementBlock("span",ic,e.toDisplayString(e.unref(l)[y.name+"_text"]||e.unref(l)[y.name]),1))])]))),128))])])])])],4)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-7559fefc"]]);function sc(){const{map:t,ready:n}=le(),o=ae.useRoute(),r=ae.useRouter(),l=e.ref(null),i=e.ref(null),a=e.ref(null),d=e.ref(!1),p=e.computed(()=>d.value||!!l.value||!!a.value);let u=null,g=!1;function s(){l.value=null,i.value=null,a.value=null,d.value=!1}function m(){if(u){try{u()}catch{}u=null}}async function y(){await n();const _=t.value;_&&(m(),s(),_.on("click",c),u=()=>_.off("click",c),E(b()))}function c(_){const C=t.value;if(!C)return;const M=C.queryRenderedFeatures(_.point)[0];if(!M){s(),w(null);return}const $=W(M.source);f(M,$==null?void 0:$.card)}async function f(_,C){var M,$;if(!((M=_==null?void 0:_.properties)!=null&&M.id))return;const F=new URLSearchParams;F.set("layer",_.source),F.set("id",String(($=_.properties)==null?void 0:$.id)),d.value=!0,a.value=null,l.value=null,i.value=_||null;try{const k=await fetch(`/api/map-format?${F.toString()}`);if(!k.ok)throw new Error(`Failed (${k.status})`);const V=await k.json();l.value={rows:V.rows||{},fields:C||[],html:V.html||null},g||w(i.value)}catch{a.value="Не вдалося завантажити дані",l.value=null,Q.notify({type:"error",title:"Помилка",message:"Не вдалося завантажити дані"})}finally{d.value=!1}}function x(){s(),w(null)}function B(){m(),s()}n().then(y),e.onBeforeUnmount(()=>B());function b(){const _=Array.isArray(o.query.info)?o.query.info[0]:o.query.info;return typeof _!="string"?null:_.trim()||null}function h(_){var $,k;const C=(_==null?void 0:_.source)??(($=_==null?void 0:_.layer)==null?void 0:$.id),F=(k=_==null?void 0:_.properties)==null?void 0:k.id;return!C||F===void 0||F===null?null:`${C},${F}`.trim()||null}function w(_){const C=h(_),F=b();if(C===F)return;const M={...o.query};C?M.info=C:delete M.info,r.push({query:M}).catch(()=>{})}async function E(_){if(!_){s();return}if(_===h(i.value))return;const[C,F]=_.split(","),M=C==null?void 0:C.trim(),$=F==null?void 0:F.trim();if(!M||!$){s(),w(null);return}g=!0;try{const k=W(M);await f({source:M,properties:{id:$}},k==null?void 0:k.card)}finally{g=!1}}return e.watch(()=>b(),_=>{_!==h(i.value)&&(g=!0,E(_).finally(()=>{g=!1}))}),{card:l,cardFeature:i,cardError:a,cardLoading:d,isOpen:p,close:x}}function cc(){const{map:t,ready:n}=le(),o=e.ref([]),r=e.ref(0),l=e.ref(0),i=e.ref(!1),a=e.ref(null),d=e.computed(()=>o.value[l.value]||null),p=e.computed(()=>o.value.length>0);let u=null;function g(){u==null||u.remove(),u=null}function s(h){return h?h.type==="FeatureCollection"?h:h.type==="Feature"?{type:"FeatureCollection",features:[h]}:h.type&&Array.isArray(h.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:h,properties:{}}]}:Array.isArray(h.features)?{type:"FeatureCollection",features:h.features}:h.geometry?s(h.geometry):null:null}function m(h){return{type:"line",color:"#0a57ff",width:4,opacity:.95}}async function y(h){if(await n(),!t.value)return;const w=s(h);w&&(g(),u=W("feature-highlight",{source:{type:"geojson",data:w},style:m()},t))}async function c(h,w,E){var C,F,M,$;const _=`/api/map-info-point?x=${h}&y=${w}${`&layers=${E}`}`;try{i.value=!0,a.value=null;const k=await fetch(_);if(!k.ok)throw new Error("Failed to fetch feature info");const V=await k.json();if(r.value=V.count??0,o.value=[],r.value>0)for(let I=0;I<r.value;I++){const A=await(await fetch(`${_}&index=${I}`)).json();o.value.push(A)}if(l.value=0,o.value.length>0){const I=((F=(C=o.value[0])==null?void 0:C.data)==null?void 0:F.geom_4326)??(($=(M=o.value[0])==null?void 0:M.data)==null?void 0:$.geom);await y(I)}}catch(k){a.value=k.message}finally{i.value=!1}}function f(){l.value<r.value-1&&l.value++}function x(){l.value>0&&l.value--}function B(){o.value=[],r.value=0,l.value=0,g()}e.watch(l,async()=>{var w,E;const h=d.value;if(h){const _=((w=h==null?void 0:h.data)==null?void 0:w.geom_4326)??((E=h==null?void 0:h.data)==null?void 0:E.geom);await y(_)}});let b;return e.onMounted(async()=>{await n(),t.value&&(b=async h=>{const{lng:w,lat:E}=h.lngLat;await c(w,E,"3717052511148836581")},t.value.on("dblclick",b))}),e.onBeforeUnmount(()=>{t.value&&b&&t.value.off("dblclick",b),g()}),{features:o,count:r,index:l,current:d,loading:i,error:a,active:p,next:f,prev:x,close:B}}const dc={key:0,class:"absolute top-4 right-11 z-30 w-[400px] max-h-[80%] overflow-hidden rounded-2xl border border-slate-200 bg-white/95 shadow-2xl backdrop-blur-md flex flex-col"},uc={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},pc={class:"min-w-0 flex-1"},mc={class:"text-base font-semibold text-slate-900 truncate"},fc={key:0,class:"flex gap-1 mt-1"},gc=["disabled"],yc=["disabled"],hc={class:"flex-1 overflow-y-auto px-4 py-3 space-y-3 text-sm text-slate-700"},xc={key:0,class:"text-center text-xs text-slate-500"},bc={key:1,class:"text-center text-xs text-red-500"},kc=["innerHTML"],_c={key:3,class:"space-y-2"},wc={class:"text-xs font-semibold text-slate-500 uppercase tracking-wide"},Ec={key:0,class:"inline-block rounded px-2 py-0.5 text-xs font-semibold text-yellow-800",style:{"background-color":"rgba(250,204,21,0.25)"}},Nc={key:1,class:"text-sm text-right text-slate-800 whitespace-pre-wrap"},Bc={key:4,class:"text-center text-xs text-slate-400"},hn=H(e.defineComponent({__name:"MapCardWidget",setup(t){const n=sc(),o=cc(),r=e.computed(()=>o.active.value),l=e.computed(()=>r.value||n.isOpen.value),i=e.computed(()=>r.value?o.loading.value:n.cardLoading.value),a=e.computed(()=>r.value?o.error.value:n.cardError.value),d=e.computed(()=>{var c,f;return r.value?((c=o.current.value)==null?void 0:c.html)||null:((f=n.card.value)==null?void 0:f.html)||null}),p=e.computed(()=>{if(r.value&&o.current.value){const B=o.current.value.data??{};return(o.current.value.fields??[]).map(h=>({key:h.name,label:h.label||h.title||h.name,value:B[h.name]??"—",format:h.format||"text"}))}const c=n.card.value;if(!c)return[];const f=c.rows??{};return(c.fields??[]).map(B=>({key:B.name,label:B.ua||B.label||B.title||B.name,value:f[B.name]??"—",format:B.format||"text"}))}),{next:u,prev:g,count:s,index:m}=o;function y(){n.close(),o.close()}return(c,f)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[l.value?(e.openBlock(),e.createElementBlock("div",dc,[e.createElementVNode("div",uc,[e.createElementVNode("div",pc,[e.createElementVNode("p",mc,[r.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString(e.unref(m)+1)+" / "+e.toDisplayString(e.unref(s)),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Інформація про об’єкт ")],64))])]),r.value&&e.unref(s)>1?(e.openBlock(),e.createElementBlock("div",fc,[e.createElementVNode("button",{onClick:f[0]||(f[0]=(...x)=>e.unref(g)&&e.unref(g)(...x)),disabled:e.unref(m)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref($n),{class:"h-4 w-4"})],8,gc),e.createElementVNode("button",{onClick:f[1]||(f[1]=(...x)=>e.unref(u)&&e.unref(u)(...x)),disabled:e.unref(m)===e.unref(s)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(An),{class:"h-4 w-4"})],8,yc)])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"inline-flex h-7 w-7 items-center justify-center rounded-full bg-slate-100 text-slate-500 hover:bg-slate-200 hover:text-slate-700 ml-1",onClick:y}," ✕ ")]),e.createElementVNode("div",hc,[i.value?(e.openBlock(),e.createElementBlock("div",xc," Завантаження даних… ")):a.value?(e.openBlock(),e.createElementBlock("div",bc,e.toDisplayString(a.value),1)):d.value?(e.openBlock(),e.createElementBlock("div",{key:2,class:"prose prose-sm max-w-none",innerHTML:d.value},null,8,kc)):p.value.length?(e.openBlock(),e.createElementBlock("div",_c,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,x=>(e.openBlock(),e.createElementBlock("div",{key:x.key,class:"flex items-start justify-between gap-3 border-b border-slate-100 pb-2"},[e.createElementVNode("span",wc,e.toDisplayString(x.label),1),x.format==="badge"?(e.openBlock(),e.createElementBlock("span",Ec,e.toDisplayString(x.value),1)):(e.openBlock(),e.createElementBlock("span",Nc,e.toDisplayString(x.value),1))]))),128))])):(e.openBlock(),e.createElementBlock("div",Bc," Даних не знайдено. "))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-2222671f"]]),xn=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var m,y;const n=t,o=((y=(m=e.getCurrentInstance())==null?void 0:m.appContext.config.globalProperties)==null?void 0:y.$settings)||null,{map:r,ready:l}=le();let i=null;function a(){i==null||i.remove(),i=null}function d(c){if(!c)return null;if(typeof c=="string")try{c=JSON.parse(c)}catch{return null}return c.type==="FeatureCollection"?c:c.type==="Feature"?{type:"FeatureCollection",features:[c]}:c.type&&Array.isArray(c.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:c,properties:{}}]}:Array.isArray(c.features)?{type:"FeatureCollection",features:c.features}:c.geometry?d(c.geometry):null}function p(c){var B,b,h;return{type:"line",color:"#8e4484",width:2,opacity:((((h=(b=(B=c==null?void 0:c.features)==null?void 0:B[0])==null?void 0:b.geometry)==null?void 0:h.type)||"").includes("Polygon"),.95)}}async function u(c){const f=await fetch(c);if(!f.ok)throw new Error(String(f.status));return f.json()}async function g(c,f){if(c){const x=/^https?:\/\//.test(c)?c:new URL(c,location.origin).toString(),B=await u(x).catch(()=>null),b=d(B);if(b)return b}if(f){const x=await u(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(f)}`).catch(()=>null),B=d(x);if(B)return B}return null}async function s(){var B,b,h,w;if(!n.layerId||!r.value){a();return}typeof l=="function"&&await l().catch(()=>{});const c=n.boundary??((B=n.settingsMap)==null?void 0:B.boundary)??((b=o==null?void 0:o.map)==null?void 0:b.boundary)??null,f=n.katottg??((h=n.settingsMap)==null?void 0:h.katottg)??((w=o==null?void 0:o.map)==null?void 0:w.katottg)??null;if(!c&&!f){a();return}const x=await g(c,f);if(!x){a();return}a(),i=W(`${n.layerId}-boundary`,{source:{type:"geojson",data:x},style:p(x)},r)}return e.watch(()=>{var c,f;return[n.layerId,n.boundary,n.katottg,(c=n.settingsMap)==null?void 0:c.boundary,(f=n.settingsMap)==null?void 0:f.katottg,r.value]},()=>{s()},{immediate:!0}),e.onBeforeUnmount(a),(c,f)=>null}}),Cc={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},Vc={class:"flex-1 relative overflow-hidden"},vc={class:"absolute top-0 left-0 w-full z-20"},$c={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},Ac={class:"flex items-center gap-3"},Sc={class:"font-semibold text-lg text-gray-800 line-clamp-1"},Fc={class:"text-xs text-gray-500 truncate"},Lc=["title"],Mc={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[64px]"},Tc={class:"relative w-full h-full"},Ic={style:{top:"10px",left:"230px",position:"absolute","z-index":"1"}},Dc={class:"absolute top-4 left-4 z-20"},jc={class:"absolute bottom-4 left-4 z-20"},Oc={class:"w-[650px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},Pc={class:"flex-1 flex flex-col h-full"},zc={class:"px-3 pt-3 pb-2 border-b border-gray-100"},Rc={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-6 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},Uc=["aria-selected","onClick"],qc={class:"leading-none"},Yc={class:"flex flex-col flex-1 overflow-y-hidden p-3"},Hc=e.defineComponent({__name:"service",setup(t){var F,M;const n=ae.useRoute(),o=ae.useRouter(),r=n.params.id,l=e.ref(null),i=e.ref({}),a=e.ref(null),d=((M=(F=e.getCurrentInstance())==null?void 0:F.appContext.config.globalProperties)==null?void 0:M.$settings)||null,p=e.ref(""),u=e.ref([]),g=e.ref([]),s=e.ref([]),m=e.ref("list"),y=e.ref(""),c=e.ref([]),f=e.computed(()=>{var $,k;return(($=a.value)==null?void 0:$.id)??((k=a.value)==null?void 0:k.service_id)??null}),x=e.computed(()=>{const $=(d==null?void 0:d.map)||null,k=($==null?void 0:$.boundary)??null,V=($==null?void 0:$.katottg)??null;return!k&&!V?null:{boundary:k,katottg:V}}),B=[{key:"style",label:"Style",icon:hl},{key:"popup",label:"Popup",icon:$l},{key:"filter",label:"Filter",icon:Ll},{key:"legend",label:"Legend",icon:_l},{key:"card",label:"Card",icon:Bl}],b=B.map($=>$.key),h=e.ref("style");e.onMounted(async()=>{const $=n.query.tab;$&&b.includes($)&&(h.value=$),await w()}),e.watch(h,$=>{n.query.tab!==$&&o.replace({query:{...n.query,tab:$}})}),e.watch(()=>n.query.tab,$=>{$&&b.includes($)&&h.value!==$&&(h.value=$)});const w=async()=>{try{const $=await fetch(`/api/gis-service/${r}`);if(!$.ok)throw new Error(`${$.status}`);const k=await $.json();i.value=k||{},l.value=r,a.value=k||null,p.value=k.style||"",g.value=(k==null?void 0:k.popup)||[];const V=(k==null?void 0:k.card)||[];m.value=k.card_mode==="html"?"html":"list",s.value=k.card,y.value=V.html,u.value=(k==null?void 0:k.legend)||[],c.value=(k==null?void 0:k.filters)||[]}catch($){console.error("Failed to fetch map info",$)}};e.watch(()=>{var $;return($=a.value)==null?void 0:$.style},$=>{$?typeof $=="string"?p.value=$:p.value=JSON.parse(JSON.stringify($)):p.value=""},{deep:!0});async function E($,k){await _({[$]:k},$)}async function _($,k){if(a.value={...a.value||{},...$},typeof $.html<"u"&&(i.value={...i.value||{},html:$.html}),!!f.value)try{if(!(await fetch(`/api/gis-service/${f.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify($)})).ok)throw new Error("Save failed");Q.notify({type:"success",title:"Успіх",message:`${k} saved`}),await w()}catch(V){Q.notify({type:"error",title:"Помилка",message:`Failed to save ${k}`}),console.error(V)}}async function C($,k){if($!=="card"){await E($,k);return}const V=(k==null?void 0:k.card_mode)==="html"?"html":"list",I=V==="html"&&typeof(k==null?void 0:k.html)=="string"?k.html:"",T=V==="html"?[]:Array.isArray(k==null?void 0:k.list)?k.list:[];s.value=T,m.value=V,y.value=I;const A={card:T,card_mode:V};V==="html"&&(A.html=I),await _(A,"card")}return($,k)=>{var V,I,T,A;return e.openBlock(),e.createElementBlock("div",Cc,[e.createElementVNode("div",Vc,[e.createElementVNode("div",vc,[e.createElementVNode("div",$c,[e.createElementVNode("div",Ac,[e.createElementVNode("button",{onClick:k[0]||(k[0]=N=>$.$router.back()),class:"inline-flex items-center px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition"},[...k[10]||(k[10]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4 mr-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1),e.createTextVNode(" Назад ",-1)])]),e.createElementVNode("div",null,[e.createElementVNode("div",Sc,e.toDisplayString((V=a.value)==null?void 0:V.name),1),e.createElementVNode("div",Fc," Сервіс: "+e.toDisplayString((I=a.value)==null?void 0:I.service_key),1)])]),e.createElementVNode("div",{class:"max-w-xl text-xs text-gray-600 truncate",title:(T=a.value)==null?void 0:T.description},e.toDisplayString((A=a.value)==null?void 0:A.description),9,Lc)])]),e.createElementVNode("div",Mc,[e.createElementVNode("div",Tc,[e.createVNode(gn,null,{default:e.withCtx(()=>{var N,v,S,D,U,z,q;return[(N=a.value)!=null&&N.service_id?(e.openBlock(),e.createBlock(Os,{key:0,id:(v=a.value)==null?void 0:v.service_id,layer:a.value,"style-yaml":p.value},null,8,["id","layer","style-yaml"])):e.createCommentVNode("",!0),f.value?(e.openBlock(),e.createBlock(xn,{key:1,"layer-id":f.value,boundary:((S=a.value)==null?void 0:S.boundary)||((D=x.value)==null?void 0:D.boundary)||null,katottg:((U=a.value)==null?void 0:U.katottg)||((z=x.value)==null?void 0:z.katottg)||null},null,8,["layer-id","boundary","katottg"])):e.createCommentVNode("",!0),e.createElementVNode("div",Ic,[f.value?(e.openBlock(),e.createBlock(st,{key:0,"layer-id":f.value,filters:c.value},null,8,["layer-id","filters"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Dc,[e.createVNode(ct)]),e.createElementVNode("div",jc,[e.createVNode(dt,{items:((q=a.value)==null?void 0:q.legend)||null},null,8,["items"])]),e.createVNode(yn),e.createVNode(hn,{html:i.value.html},null,8,["html"])]}),_:1})])])]),e.createElementVNode("div",Oc,[e.createElementVNode("div",Pc,[e.createElementVNode("div",zc,[e.createElementVNode("div",Rc,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(B,N=>e.createElementVNode("button",{key:N.key,type:"button",role:"tab","aria-selected":h.value===N.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",h.value===N.key?"bg-white shadow-sm text-gray-700":""]),onClick:v=>h.value=N.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(N.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",qc,e.toDisplayString(N.label),1)],10,Uc)),64))])]),e.createElementVNode("div",Yc,[h.value==="style"?(e.openBlock(),e.createBlock(us,{key:0,token:f.value,"style-yaml":p.value,"onUpdate:styleYaml":k[1]||(k[1]=N=>p.value=N),onSave:k[2]||(k[2]=N=>E("style",N))},null,8,["token","style-yaml"])):h.value==="legend"?(e.openBlock(),e.createBlock(vs,{key:1,token:f.value,columns:u.value,"onUpdate:columns":k[3]||(k[3]=N=>u.value=N),onSave:k[4]||(k[4]=N=>E("legend",N))},null,8,["token","columns"])):h.value==="popup"?(e.openBlock(),e.createBlock(ks,{key:2,token:f.value,columns:g.value,fields:i.value.fields,"onUpdate:columns":k[5]||(k[5]=N=>g.value=N),onSave:k[6]||(k[6]=N=>E("popup",N))},null,8,["token","columns","fields"])):h.value==="card"?(e.openBlock(),e.createBlock(Is,{key:3,token:f.value,columns:s.value,fields:i.value.fields,"view-mode":m.value,html:y.value,"onUpdate:columns":k[7]||(k[7]=N=>s.value=N),onSave:C},null,8,["token","columns","fields","view-mode","html"])):h.value==="filter"?(e.openBlock(),e.createBlock(js,{key:4,token:f.value,fields:i.value.fields,columns:c.value,"onUpdate:columns":k[8]||(k[8]=N=>c.value=N),onSave:k[9]||(k[9]=N=>E("filters",N))},null,8,["token","fields","columns"])):e.createCommentVNode("",!0)])])])])}}}),Wc={class:"mapLayer-info__inner"},Kc={class:"mapLayer-info__item-label"},ut=H(e.defineComponent({__name:"MapLayerInfoPopover",props:{items:{}},setup(t,{expose:n}){const o=e.reactive({open:!1,top:0,left:0}),r=e.ref(null),l=e.ref(null),i=e.computed(()=>o.open?{position:"absolute",width:"460px",top:`${o.top}px`,left:`${o.left}px`,transform:"translateX(-50%)",display:"block"}:{display:"none"});function a(s){if(o.open){g();return}const m=s.currentTarget,y=m==null?void 0:m.closest(".mapLayer-info");if(!y){g();return}r.value=y,o.open=!0,e.nextTick(d)}function d(){if(!o.open||!r.value)return;const s=r.value.getBoundingClientRect();o.top=s.bottom+window.scrollY+8,o.left=s.left+s.width/2+window.scrollX}function p(s){var y,c;if(!o.open)return;const m=s.target;(y=r.value)!=null&&y.contains(m)||(c=l.value)!=null&&c.contains(m)||g()}function u(s){s.key==="Escape"&&g()}function g(){o.open=!1,r.value=null,l.value=null}return e.onMounted(()=>{document.addEventListener("click",p,!0),document.addEventListener("keydown",u),window.addEventListener("scroll",d,!0),window.addEventListener("resize",d)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",p,!0),document.removeEventListener("keydown",u),window.removeEventListener("scroll",d,!0),window.removeEventListener("resize",d)}),n({close:g}),(s,m)=>(e.openBlock(),e.createElementBlock("div",{class:"mapLayer-info",ref_key:"anchorEl",ref:r},[e.createElementVNode("a",{class:"mapLayer-info__trigger",href:"#",onClick:e.withModifiers(a,["prevent","stop"])},[...m[1]||(m[1]=[e.createStaticVNode('<div class="mapLayer-info__icon" data-v-ce644dbc><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-v-ce644dbc><circle cx="12" cy="12" r="10" data-v-ce644dbc></circle><line x1="12" y1="16" x2="12" y2="12" data-v-ce644dbc></line><line x1="12" y1="8" x2="12.01" y2="8" data-v-ce644dbc></line></svg></div>',1)])]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-50 py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-info__popover",style:e.normalizeStyle(i.value),ref_key:"popoverEl",ref:l,onClick:m[0]||(m[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Wc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.items,y=>(e.openBlock(),e.createElementBlock("div",{key:y.label,class:"mapLayer-info__item"},[e.createElementVNode("div",Kc,e.toDisplayString(y.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":y.breakLine}])},e.toDisplayString(y.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-ce644dbc"]]),Gc={key:0,class:"map-info__header"},Zc={key:0,class:"map-info__title"},Xc={class:"map-info__actions"},Jc={key:0,class:"map-info__menu"},Qc=["onClick"],ed=["innerHTML"],bn=H(e.defineComponent({__name:"MapInfoWidget",props:{title:{},content:{},links:{},mapName:{},mapDescription:{}},setup(t){const n=t,o=e.ref(null),r=e.ref(!1),l=e.ref(null),i=e.ref({top:0,left:0}),a=ae.useRouter(),d=e.computed(()=>Array.isArray(n.links)?n.links.filter(c=>(c==null?void 0:c.name)&&(c==null?void 0:c.slug)):[]),p=e.computed(()=>({top:`${i.value.top}px`,left:`${i.value.left}px`})),u=e.computed(()=>{const c=[];return n.mapName&&c.push({label:"Назва карти",value:n.mapName}),n.mapDescription&&c.push({label:"Опис",value:n.mapDescription,breakLine:!0}),c});function g(c){c.stopPropagation(),r.value=!r.value}function s(){const c=l.value;if(!c)return;const{bottom:f,left:x}=c.getBoundingClientRect();i.value={top:f+window.scrollY+8,left:x+window.scrollX}}function m(c){if(!r.value)return;const f=o.value;if(!f){r.value=!1;return}f.contains(c.target)||(r.value=!1)}e.onMounted(()=>{document.addEventListener("click",m,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",m,!0),window.removeEventListener("scroll",s,!0),window.removeEventListener("resize",s)}),e.watch(r,c=>{c?e.nextTick(()=>{s(),window.addEventListener("scroll",s,!0),window.addEventListener("resize",s)}):(window.removeEventListener("scroll",s,!0),window.removeEventListener("resize",s))});function y(c){r.value=!1,a.push(`/maps/${c}`)}return(c,f)=>(e.openBlock(),e.createElementBlock("div",{class:"map-info legend-widget flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget",ref_key:"container",ref:o},[c.title||d.value.length||u.value.length?(e.openBlock(),e.createElementBlock("div",Gc,[c.title?(e.openBlock(),e.createElementBlock("h2",Zc,e.toDisplayString(c.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Xc,[d.value.length?(e.openBlock(),e.createElementBlock("div",Jc,[e.createElementVNode("button",{ref_key:"menuButton",ref:l,type:"button",class:"map-info__menu-button",onClick:g,"aria-label":"Показати посилання"},[...f[1]||(f[1]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e.createElementVNode("path",{d:"M4 12H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 6H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 18H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vsTailwind vs-popover__content right map-info__popover",style:e.normalizeStyle(p.value),onClick:f[0]||(f[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,x=>(e.openBlock(),e.createElementBlock("button",{key:x.slug||x.name,type:"button",class:"map-info__popover-link",onClick:B=>y(x.slug)},e.toDisplayString(x.name),9,Qc))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),u.value.length?(e.openBlock(),e.createBlock(ut,{key:1,items:u.value},null,8,["items"])):e.createCommentVNode("",!0)])])):e.createCommentVNode("",!0),c.content?(e.openBlock(),e.createElementBlock("div",{key:1,class:"map-info__content",innerHTML:c.content},null,8,ed)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-01db55b1"]]),td={class:"opacity-popover__content"},nd={class:"opacity-popover__value"},kn=H(e.defineComponent({__name:"LayerOpacityPopover",props:{layerId:{}},setup(t){const n=t,o=e.ref(!1),r=e.ref(100),l=e.ref(null),i=e.ref(null),a=e.reactive({top:0,left:0});function d(){var y;const s=(y=i.value)==null?void 0:y.querySelector("button");if(!s)return;const m=s.getBoundingClientRect();a.top=m.bottom+8+window.scrollY,a.left=m.left+window.scrollX}function p(){o.value=!o.value,o.value&&e.nextTick(d)}function u(){var c;const s=W(n.layerId),m=(r.value??100)/100,y=(c=s==null?void 0:s.getLayer)==null?void 0:c.call(s);if(y)switch(y.type){case"raster":s.updatePaint({"raster-opacity":m});break;case"fill":s.updatePaint({"fill-opacity":m});break;case"line":s.updatePaint({"line-opacity":m});break;case"circle":s.updatePaint({"circle-opacity":m});break;case"symbol":s.updatePaint({"icon-opacity":m});break}}function g(s){var y,c;if(!o.value)return;const m=s.target;(y=l.value)!=null&&y.contains(m)||(c=i.value)!=null&&c.contains(m)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",g),window.addEventListener("scroll",d,!0),window.addEventListener("resize",d)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",g),window.removeEventListener("scroll",d,!0),window.removeEventListener("resize",d)}),(s,m)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:i},[e.renderSlot(s.$slots,"trigger",{toggle:p,opacity:r.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(p,["stop"])},e.toDisplayString(r.value)+"% ",1)],!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popoverEl",ref:l,class:"opacity-popover",style:e.normalizeStyle({top:a.top+"px",left:a.left+"px"})},[e.createElementVNode("div",td,[m[1]||(m[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":m[0]||(m[0]=y=>r.value=y),class:"opacity-popover__range",onInput:u},null,544),[[e.vModelText,r.value]]),e.createElementVNode("span",nd,e.toDisplayString(r.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-b2bb0bb0"]]),od={class:"layers-panel"},rd={class:"justify-between items-start gap-[30px]"},ld={class:"layers-panel__title"},ad={key:0,class:"pb-2 text-[14px] text-[#34495e]"},id={class:"layers-panel__label"},sd=["checked","onChange"],cd={class:"layers-panel__name"},dd={class:"layers-panel__meta text-slate-500"},ud=["onClick"],pd={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},md={key:0,class:"layers-panel__actions"},fd=["innerHTML","onClick"],_n=H(e.defineComponent({__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,r=e.ref({}),l=n;function i(){for(let p=0;p<o.layers.length;p++){const u=o.layers[p],g=u.id,s=`${location.origin}/api/vtile/${u.id}/ua/{z}/{x}/{y}.vmt`,m={sourceId:g,source:{type:"vector",tiles:[s],minZoom:4,maxZoom:14},layer:{id:g,source:g,"source-layer":g,style:u.style},card:u.card,popup:u.popup};W(u.id,m),r.value[u.id]=!0}}e.onMounted(()=>{i()});function a(p,u){const g=W(p.id),s=u.target;g.setVisible(s.checked),r.value[p.id]=s.checked}function d(p){return[{label:"Назва",value:p.name??null},{label:"Назва групи",value:p.group_name||null},{label:"Кількість",value:p.count??null},{label:"Балансоутримувач",value:p.holder??null}]}return(p,u)=>{var g,s;return e.openBlock(),e.createElementBlock("div",od,[e.createElementVNode("div",rd,[e.createElementVNode("h2",ld,e.toDisplayString(((g=p.config)==null?void 0:g.title)||"Шари"),1),(s=p.config)!=null&&s.description?(e.openBlock(),e.createElementBlock("div",ad,[e.createElementVNode("p",null,e.toDisplayString(p.config.description),1)])):e.createCommentVNode("",!0)]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.layers,m=>{var y;return e.openBlock(),e.createElementBlock("div",{key:m.id,class:"layers-panel__item"},[e.createElementVNode("label",id,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:m.visible,onChange:c=>a(m,c)},null,40,sd),e.createElementVNode("span",cd,e.toDisplayString(m.name),1),e.createElementVNode("div",dd,[r.value[m.id]?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(kn,{"layer-id":m.id,class:"flex"},{trigger:e.withCtx(({toggle:c})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(c,["prevent","stop"])},[e.createElementVNode("div",pd,[e.createVNode(e.unref(Fn))])],8,ud)]),_:2},1032,["layer-id"]),e.createVNode(Ye,{count:Array.isArray(m.filters)?m.filters.length:0,layer:m},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(ut,{items:d(m)},null,8,["items"])])]),(y=m.actions)!=null&&y.length?(e.openBlock(),e.createElementBlock("div",md,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.actions,c=>(e.openBlock(),e.createElementBlock("button",{key:c.widget||c.id||c.icon,type:"button",class:"layers-panel__action",innerHTML:c.icon,onClick:f=>l("action",{layerId:c.widget})},null,8,fd))),128))])):e.createCommentVNode("",!0)])}),128))])}}}),[["__scopeId","data-v-60a1a59d"]]),gd={class:"catalog-tab__search relative mt-[10px]"},yd={width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:"absolute top-[40%] left-[8px] w-[16px] h-[16px]",style:{transform:"translate(0, -50%)"}},hd=["onClick"],xd={class:"flex items-center gap-x-3"},bd={class:"max-w-[260px] text-[14px] text-[#4b5563]"},kd={class:"text-xs opacity-60 text-[#4b5563]"},_d={class:"flex items-center cursor-pointer gap-2 flex-1"},wd=["checked","onChange"],Ed={class:"text-[13px] text-gray-600 truncate max-w-[260px]"},Nd={class:"flex items-center gap-2"},Bd=H(e.defineComponent({__name:"LayersCatalogTab",props:{catalog:{},selected:{},search:{}},emits:["toggle-layer","update:search","open-filter"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),i=e.ref(null),a=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0,layerId:null}),d=e.computed(()=>{const x=o.search.trim().toLowerCase();return o.catalog.groups.map(B=>{const b=x?B.layers.filter(h=>h.name.toLowerCase().includes(x)):B.layers;return{...B,layers:b}}).filter(B=>B.layers.length>0)}),p=e.computed({get:()=>o.search,set:x=>r("update:search",x)});function u(x){l[x]=!l[x]}function g(x){return!!l[x]}function s(x,B){if(o.selected.includes(B)){a.visible=!1,a.layerId=null;return}const b=x.currentTarget;if(!b)return;const h=b.getBoundingClientRect(),w=typeof window<"u"?window.scrollX:0,E=typeof window<"u"?window.scrollY:0;a.left=h.left+h.width/2+w,a.top=h.bottom+8+E,a.layerId=B,a.visible=!0}function m(){a.visible=!1,a.layerId=null}function y(x){return[{label:"Назва",value:c(x.name)},{label:"Сервіс",value:c(x.service)},{label:"Посилання",value:c(x.url),breakLine:!0},{label:"Джерело",value:c(x.source_path),breakLine:!0},{label:"Popup",value:f(x.popup,"полів")},{label:"Картка",value:f(x.card,"полів")},{label:"Фільтри",value:f(x.filters,"фільтрів")}]}function c(x){return x==null||x===""?null:String(x)}function f(x,B){return!Array.isArray(x)||x.length===0?null:`${x.length} ${B}`}return e.watch(()=>o.selected?o.selected.slice():[],x=>{!a.visible||!a.layerId||x.includes(a.layerId)&&(a.visible=!1,a.layerId=null)}),(x,B)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"catalogRef",ref:i,class:"catalog-tab"},[e.createElementVNode("div",gd,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":B[0]||(B[0]=b=>p.value=b),type:"text",placeholder:"Введіть назву шару...",class:"py-[7px] pl-8 pe-8 block w-full bg-gray-100 border-transparent rounded-lg text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500"},null,512),[[e.vModelText,p.value]]),(e.openBlock(),e.createElementBlock("svg",yd,[...B[1]||(B[1]=[e.createElementVNode("path",{d:"M11 19C15.4183 19 19 15.4183 19 11C19 6.5817 15.4183 3 11 3C6.5817 3 3 6.5817 3 11C3 15.4183 6.5817 19 11 19Z",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M21 21L16.7 16.7",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,b=>(e.openBlock(),e.createElementBlock("div",{key:b.id,class:"mt-2"},[e.createElementVNode("div",{class:"hover:bg-gray-100 cursor-pointer p-[8px] rounded-lg flex justify-between items-center",onClick:h=>u(b.id)},[e.createElementVNode("div",xd,[(e.openBlock(),e.createElementBlock("svg",{width:"6",height:"10",viewBox:"0 0 6 10",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass(["transition-transform",g(b.id)?"rotate-90":""])},[...B[2]||(B[2]=[e.createElementVNode("path",{d:"M1 9L5 5L1 1",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2)),e.createElementVNode("div",bd,e.toDisplayString(b.name),1)]),e.createElementVNode("div",kd,e.toDisplayString(b.layers.length),1)],8,hd),e.createVNode(e.Transition,{name:"out-in"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.layers,h=>(e.openBlock(),e.createElementBlock("div",{key:h.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",_d,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:x.selected.includes(h.id),onChange:w=>x.$emit("toggle-layer",h.id,w.target.checked,h)},null,40,wd),B[3]||(B[3]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"8",viewBox:"0 0 12 8",fill:"none"},[e.createElementVNode("path",{d:"M10.6663 1L4.24967 7.41667L1.33301 4.5",stroke:"#fff","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e.createElementVNode("span",Ed,e.toDisplayString(h.name),1)]),e.createElementVNode("div",Nd,[Array.isArray(h.filters)&&h.filters.length?(e.openBlock(),e.createBlock(Ye,{key:0,count:h.filters.length,layer:h,disabled:!x.selected.includes(h.id),onMouseenter:w=>s(w,h.id),onMouseleave:m,onFocus:w=>s(w,h.id),onBlur:m},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(ut,{items:y(h)},null,8,["items"])])]))),128))],512),[[e.vShow,g(b.id)]])]),_:2},1024)]))),128)),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[a.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${a.top}px`,left:`${a.left}px`})},e.toDisplayString(a.text),5)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-6c43468a"]]),Cd={class:"selected-tab"},Vd={class:"selected-tab__actions"},vd={key:0,class:"selected-tab__scroll"},$d=["onDragstart","onDragover","onDrop"],Ad={class:"selected-tab__item-header"},Sd={class:"selected-tab__item-info"},Fd=["checked","onChange"],Ld={class:"selected-tab__item-name"},Md={class:"selected-tab__item-controls"},Td=["onClick"],Id={class:"selected-tab__menu-inner"},Dd=H(e.defineComponent({__name:"LayersSelectedTab",props:{catalog:{},selected:{}},emits:["select-layer","reorder","remove","toggle-layer"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),i=e.ref(null),a=e.ref(null),d=new Map,p=e.reactive({top:0,left:0}),u=e.ref(null),g=e.reactive({top:0,left:0}),s=e.ref(null),m=new Map,y=e.reactive({});function c(T){var A;for(const N of((A=o.catalog)==null?void 0:A.groups)??[]){const v=N.layers.find(S=>S.id===T);if(v)return v}return null}e.watch(()=>o.selected,T=>{T.forEach(A=>{l[A]==null&&(l[A]=100)})},{immediate:!0});function f(){if(!i.value)return;const T=d.get(i.value);if(!T)return;const A=T.getBoundingClientRect();p.top=A.bottom+8+window.scrollY,p.left=A.left+window.scrollX}e.watch(()=>o.selected,T=>{T.forEach(A=>{y[A]==null&&(y[A]=!0)})},{immediate:!0});function x(T,A){y[T]=A;const N=W(T);N&&N.setVisible(A);const v=c(T);r("toggle-layer",T,A,v)}function B(T,A){A?m.set(T,A):m.delete(T)}function b(T){u.value=u.value===T?null:T,u.value&&e.nextTick(()=>h(T))}function h(T){const A=m.get(T);if(!A)return;const N=A.getBoundingClientRect();g.top=N.bottom+6+window.scrollY,g.left=N.left+window.scrollX}function w(T){const A=W(T);A&&A.remove(),r("remove",T),u.value=null}function E(T){const A=T.target,N=i.value,v=u.value;if(N){const S=a.value,D=d.get(N);if(S&&S.contains(A)||D&&D.contains(A))return;i.value=null}if(v){const S=s.value,D=m.get(v);if(S&&S.contains(A)||D&&D.contains(A))return;u.value=null}}function _(){i.value&&f(),u.value&&h(u.value)}e.onMounted(()=>{document.addEventListener("click",E),window.addEventListener("resize",_),window.addEventListener("scroll",_,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",E),window.removeEventListener("resize",_),window.removeEventListener("scroll",_,!0)});const{map:C}=le();function F(T){var S,D,U;if(!T)return;const A=W(T),N=c(T);if(!A&&!N)return;if(((S=N==null?void 0:N.extent)==null?void 0:S.length)===4&&((D=C.value)!=null&&D.fitBounds)){const z=N.extent.map(q=>Number(q));if(z.every(q=>Number.isFinite(q))){const[q,Y,ve,be]=z;C.value.fitBounds([[q,Y],[ve,be]],{padding:40}),u.value=null;return}}(U=A==null?void 0:A.getSource)!=null&&U.call(A)&&(u.value=null)}const M=e.ref(null),$=e.ref(null);function k(T){M.value=T}function V(T){$.value=T}function I(T){if(M.value===null||M.value===T){M.value=null,$.value=null;return}const A=[...o.selected],[N]=A.splice(M.value,1);A.splice(T,0,N),r("reorder",A),M.value=null,$.value=null}return(T,A)=>(e.openBlock(),e.createElementBlock("div",Cd,[e.createElementVNode("div",Vd,[e.createElementVNode("button",{class:"selected-tab__add",onClick:A[0]||(A[0]=N=>r("select-layer"))},[...A[3]||(A[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-plus"},[e.createElementVNode("path",{d:"M5 12h14"}),e.createElementVNode("path",{d:"M12 5v14"})],-1),e.createElementVNode("span",null,"Вибрати шар",-1)])])]),T.selected.length?(e.openBlock(),e.createElementBlock("div",vd,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.selected,(N,v)=>{var S;return e.openBlock(),e.createElementBlock("div",{key:N,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":M.value===v,"selected-tab__item--over":$.value===v}]),draggable:"true",onDragstart:D=>k(v),onDragover:e.withModifiers(D=>V(v),["prevent"]),onDrop:D=>I(v)},[e.createElementVNode("div",Ad,[e.createElementVNode("div",Sd,[A[4]||(A[4]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox",checked:y[N]??!0,onChange:D=>x(N,D.target.checked)},null,40,Fd),e.createElementVNode("span",Ld,e.toDisplayString(((S=c(N))==null?void 0:S.name)||"Шар"),1)]),e.createElementVNode("div",Md,[e.createVNode(kn,{"layer-id":N},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:D=>B(N,D),onClick:e.withModifiers(D=>b(N),["stop"])},[...A[5]||(A[5]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-more-vertical"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"1"}),e.createElementVNode("circle",{cx:"12",cy:"5",r:"1"}),e.createElementVNode("circle",{cx:"12",cy:"19",r:"1"})],-1)])],8,Td)])])],42,$d)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[u.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:s,class:"selected-tab__menu",style:e.normalizeStyle({top:g.top+"px",left:g.left+"px"})},[e.createElementVNode("div",Id,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:A[1]||(A[1]=N=>F(u.value))},[...A[6]||(A[6]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-zoom-in"},[e.createElementVNode("circle",{cx:"11",cy:"11",r:"8"}),e.createElementVNode("line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65"}),e.createElementVNode("line",{x1:"11",x2:"11",y1:"8",y2:"14"}),e.createElementVNode("line",{x1:"8",x2:"14",y1:"11",y2:"11"})],-1),e.createTextVNode(" Збільшити до шару ",-1)])]),A[8]||(A[8]=e.createElementVNode("button",{disabled:"",class:"selected-tab__menu-item selected-tab__menu-item--disabled"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-info"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"}),e.createElementVNode("path",{d:"M12 16v-4"}),e.createElementVNode("path",{d:"M12 8h.01"})]),e.createTextVNode(" Інформація про шар ")],-1)),A[9]||(A[9]=e.createElementVNode("button",{disabled:"",class:"selected-tab__menu-item selected-tab__menu-item--disabled"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-table"},[e.createElementVNode("path",{d:"M12 3v18"}),e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}),e.createElementVNode("path",{d:"M3 9h18"}),e.createElementVNode("path",{d:"M3 15h18"})]),e.createTextVNode(" Таблиця шару ")],-1)),A[10]||(A[10]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:A[2]||(A[2]=N=>w(u.value))},[...A[7]||(A[7]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-trash2"},[e.createElementVNode("path",{d:"M3 6h18"}),e.createElementVNode("path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}),e.createElementVNode("path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"}),e.createElementVNode("line",{x1:"10",x2:"10",y1:"11",y2:"17"}),e.createElementVNode("line",{x1:"14",x2:"14",y1:"11",y2:"17"})],-1),e.createTextVNode(" Видалити шар ",-1)])])])],4)):e.createCommentVNode("",!0)]))]))}}),[["__scopeId","data-v-e336e847"]]),jd={class:"filter-tab"},Od={key:0,class:"filter-tab__header"},Pd={class:"filter-tab__title"},zd={key:1,class:"filter-tab__content rounded-md"},Rd={class:"filter-tab__scroll"},Ud={key:2,class:"filter-tab__empty"},qd=H(e.defineComponent({__name:"LayersFilterTab",props:{layer:{},value:{}},emits:["change"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/filter")),r=t,l=n,i=e.computed(()=>{var p;return((p=r.layer)==null?void 0:p.filters)??[]}),a=e.computed(()=>i.value.length>0);function d(p){l("change",p.data)}return(p,u)=>(e.openBlock(),e.createElementBlock("div",jd,[p.layer&&a.value?(e.openBlock(),e.createElementBlock("div",Od,[e.createElementVNode("div",null,[e.createElementVNode("p",Pd,e.toDisplayString(p.layer.name),1)])])):e.createCommentVNode("",!0),p.layer&&a.value?(e.openBlock(),e.createElementBlock("div",zd,[e.createElementVNode("div",Rd,[e.createVNode(e.unref(o),{view:"vertical",schema:i.value,value:p.value,limit:5,class:"rounded-md pb-0",onChange:u[0]||(u[0]=g=>d(g))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",Ud,[...u[1]||(u[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),Yd={class:"map-catalog-widget w-full max-w-md mx-auto p-4 bg-white border border-gray-200 rounded-lg shadow-sm widget"},Hd={class:"flex items-center justify-between mb-4"},Wd={class:"flex items-center gap-2"},Kd={class:"text-lg font-semibold text-gray-800"},Gd={key:0},Zd={key:1,class:"block text-sm font-normal text-gray-500"},Xd={class:"flex mb-4 border-b border-gray-200"},Jd={class:"map-catalog-widget__body"},wn=H(e.defineComponent({__name:"MapCatalogWidget",setup(t){const n=e.ref("catalog"),o=e.ref({groups:[]}),r=e.ref([]),l=e.ref(""),{map:i}=le(),a=ae.useRoute(),d=ae.useRouter(),p=e.reactive({}),u=e.ref(null);function g(k){for(const V of o.value.groups){const I=V.layers.find(T=>T.id===k);if(I)return I}return null}const s=e.computed(()=>u.value?g(u.value):null),m=e.computed(()=>{const k=u.value;return k?p[k]??{}:{}}),y=e.computed(()=>o.value.groups.reduce((k,V)=>k+V.layers.length,0)),c=e.computed(()=>{switch(n.value){case"selected":return"Вибрані шари";case"filter":return"Фільтр шарів";default:return"Каталог"}}),f=e.computed(()=>{switch(n.value){case"selected":return r.value.length;case"catalog":return y.value;default:return null}}),x=e.computed(()=>{var k;return n.value!=="filter"?"":((k=s.value)==null?void 0:k.name)??""});async function B(){const V=await(await fetch("/api/gis-layer-list")).json(),I=new Map;V.forEach(N=>{const v=N.group_id??"other";I.has(v)||I.set(v,{id:v,name:N.group_name||"Інші шари",layers:[]}),I.get(v).layers.push(N)}),o.value={groups:Array.from(I.values())};const T=a.query.layers;if(!T)return;const A=Array.isArray(T)?T[0]:T;typeof A=="string"&&A.split(",").forEach(N=>{const v=N.trim();if(!v)return;const S=g(v);S&&h(v,!0,S)})}function b(k){const V=k.url,I=V?V.startsWith("http")?V:`${location.origin}${V}`:null;if(!I)return null;const T=(k.service||"").toString().toLowerCase();return T&&T!=="vtile"?{source:{type:"raster",tiles:[I],tileSize:256,minzoom:0,maxzoom:20}}:{source:{type:"vector",tiles:[I],minzoom:0,maxzoom:14},layer:{style:k.style},card:k.card,popup:k.popup}}function h(k,V,I){var v;const T=I??g(k);if(!T)return;const A=b(T);if(!A)return;const N=W(T.id,A,i);if(N)if(N.setVisible(V),V){if(!r.value.includes(k)&&(r.value.push(k),(v=i.value)!=null&&v.getLayer(k)))try{i.value.moveLayer(k)}catch(S){console.warn("Cannot move new layer",k,S)}}else r.value=r.value.filter(S=>S!==k),u.value===k&&($(),u.value=null)}function w(){r.value.forEach(k=>{const V=W(k);V&&V.setVisible(!1)}),r.value=[]}function E(k){r.value=k,e.nextTick(()=>{var V;for(let I=k.length-1;I>=0;I--){const T=k[I];if((V=i.value)!=null&&V.getLayer(T))try{i.value.moveLayer(T)}catch(A){console.warn("Cannot move layer",T,A)}}})}function _(k){!k||!Array.isArray(k.filters)||k.filters.length===0||r.value.includes(k.id)&&(u.value=k.id,p[k.id]||(p[k.id]={}),n.value="filter")}function C(){n.value="catalog"}function F(k,V){const I=W(k);if(p[k]={...V},!(I!=null&&I.setFilter))return;const T=Object.entries(V).filter(([,A])=>A!=null&&A!=="").map(([A,N])=>`${A}=${N}`);I.setFilter(T.join("|"))}function M(k){const V=u.value;V&&F(V,k)}function $(){const k=u.value;if(!k)return;delete p[k];const V=W(k);V!=null&&V.setFilter&&V.setFilter("")}return e.watch(u,k=>{!k&&n.value==="filter"&&(n.value="catalog")}),e.watch(s,(k,V)=>{!k&&u.value&&(u.value=null)}),e.watch(r,k=>{const V={...a.query};k.length?V.layers=k.join(","):delete V.layers,d.replace({query:V}).catch(()=>{})},{deep:!0}),e.onMounted(B),(k,V)=>(e.openBlock(),e.createElementBlock("div",Yd,[e.createElementVNode("div",Hd,[e.createElementVNode("div",Wd,[V[5]||(V[5]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-layers text-blue-600"},[e.createElementVNode("path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"}),e.createElementVNode("path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"}),e.createElementVNode("path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"})],-1)),e.createElementVNode("h2",Kd,[e.createTextVNode(e.toDisplayString(c.value)+" ",1),f.value!==null?(e.openBlock(),e.createElementBlock("span",Gd," ("+e.toDisplayString(f.value)+") ",1)):e.createCommentVNode("",!0),x.value?(e.openBlock(),e.createElementBlock("span",Zd,e.toDisplayString(x.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{onClick:w,class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers"},[...V[6]||(V[6]=[e.createStaticVNode('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw text-gray-600" data-v-0b452ba8><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-0b452ba8></path><path d="M21 3v5h-5" data-v-0b452ba8></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16" data-v-0b452ba8></path><path d="M8 16H3v5" data-v-0b452ba8></path></svg>',1)])])]),e.createElementVNode("div",Xd,[e.createElementVNode("button",{onClick:V[0]||(V[0]=I=>n.value="catalog"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",n.value==="catalog"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Каталог ",2),e.createElementVNode("button",{onClick:V[1]||(V[1]=I=>n.value="selected"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",n.value==="selected"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Вибрані шари ",2)]),e.createElementVNode("div",Jd,[n.value==="catalog"?(e.openBlock(),e.createBlock(Bd,{key:0,class:"map-catalog-widget__scroll",catalog:o.value,selected:r.value,onToggleLayer:h,search:l.value,"onUpdate:search":V[2]||(V[2]=I=>l.value=I),onOpenFilter:_},null,8,["catalog","selected","search"])):n.value==="selected"?(e.openBlock(),e.createBlock(Dd,{key:1,catalog:o.value,selected:r.value,onToggleLayer:h,onSelectLayer:V[3]||(V[3]=I=>n.value="catalog"),onReorder:E,onRemove:V[4]||(V[4]=I=>r.value=r.value.filter(T=>T!==I))},null,8,["catalog","selected"])):(e.openBlock(),e.createBlock(qd,{key:2,layer:s.value,value:m.value,onChange:M,onClose:C},null,8,["layer","value"]))])]))}}),[["__scopeId","data-v-0b452ba8"]]),Qd={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},eu={class:"flex items-start justify-between gap-3 p-5 pb-3"},tu={class:"inline-block text-xl font-semibold text-gray-800"},nu={key:0,class:"mt-1 text-sm text-gray-500"},ou={class:"flex items-center gap-[6px]"},ru={class:"px-5 pb-5 space-y-6"},lu={key:0,class:"space-y-2"},au={class:"flex flex-wrap gap-4"},iu=["value"],su={key:1,class:"text-sm text-gray-500"},cu={key:2,class:"text-sm text-gray-500"},du={class:"text-4xl font-medium text-gray-800"},uu={class:"space-y-[14px]"},pu={class:"flex items-center gap-[10px] text-gray-600"},mu={class:"font-medium text-gray-700"},fu={class:"flex items-center justify-end text-end gap-3"},gu={class:"font-medium text-gray-800"},yu={class:"min-w-[40px] font-medium text-[#3C3C4399]"},En=H(e.defineComponent({__name:"MapAttributeWidget",props:{config:{}},setup(t){const n=["#3a7a57","#d970d5","#8e997b","#b4c039","#a855f7","#71823a","#f79d92","#8b5cf6","#a6514e","#6b7280"],o=t,r=e.ref(!0),l=e.ref(!1),i=e.ref([]),a=e.ref(null),d=e.ref(null),p=e.ref(null),u=e.ref(null),g=e.ref(null),s=e.ref({}),m=e.ref(null);function y(N){return N&&JSON.parse(JSON.stringify(N))}const c=e.computed(()=>{const N=o.config.layer;if(typeof N!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const v=N.trim();if(!v)throw new Error("MapAttributeWidget: `layer` must be non-empty");return v}),f=e.computed(()=>{const{list:N,attribute:v}=o.config;if(Array.isArray(N)&&N.length)return N.map(S=>({id:(S==null?void 0:S.id)!=null?String(S.id).trim():"",text:(S==null?void 0:S.text)!=null&&String(S.text).trim()||null})).filter(S=>S.id.length);if(Array.isArray(v))return v.map(S=>S!=null?String(S).trim():"").filter(S=>S.length).map(S=>({id:S,text:null}));if(typeof v=="string"){const S=v.trim();if(!S)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:S,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),x=e.computed(()=>f.value.map(N=>({id:N.id,label:N.text||s.value[N.id]||N.id})));e.watch(f,N=>{if(!N.length){m.value=null,i.value=[];return}(!m.value||!N.some(v=>v.id===m.value))&&(m.value=N[0].id)},{immediate:!0});const B=e.computed(()=>{var N;return m.value||((N=f.value[0])==null?void 0:N.id)||null});e.watch(c,()=>{var N,v;(v=(N=d.value)==null?void 0:N.remove)==null||v.call(N),d.value=null,p.value=null,u.value=null,g.value=null,s.value={}});const b=e.computed(()=>{var N;return(N=u.value)!=null&&N.length?{id:c.value,name:p.value,filters:u.value}:null}),h=e.computed(()=>{var N,v;return((v=(N=b.value)==null?void 0:N.filters)==null?void 0:v.length)||0});async function w(N){var D;const v=await fetch(`/api/gis-service/${encodeURIComponent(N)}`);if(!v.ok){let U="Не вдалося завантажити налаштування шару";try{const z=await v.json();U=((D=z==null?void 0:z.message)==null?void 0:D.error)||(z==null?void 0:z.message)||U}catch{}throw new Error(U)}const S=await v.json();return p.value=(S==null?void 0:S.name)||null,u.value=Array.isArray(S==null?void 0:S.filters)?S.filters:null,g.value=y((S==null?void 0:S.style)||{}),s.value=((S==null?void 0:S.attributes)||[]).reduce((U,z)=>{const q=typeof(z==null?void 0:z.name)=="string"?z.name.trim():"",Y=typeof(z==null?void 0:z.ua)=="string"?z.ua.trim():"";return q&&(U[q]=Y||q),U},{}),S}function E(N,v){let S=W(N);if(!S){const D=`${location.origin}/api/vtile/${N}/ua/{z}/{x}/{y}.vmt`;S=W(N,{source:{type:"vector",tiles:[D],minzoom:0,maxzoom:14},layer:{id:N,source:N,"source-layer":N,style:(v==null?void 0:v.style)||{}},card:v==null?void 0:v.card,popup:v==null?void 0:v.popup})}return d.value=S,S}async function _(N,v){var U;const S=`/api/gis-service/${encodeURIComponent(N)}/${encodeURIComponent(v)}`,D=await fetch(S);if(!D.ok){let z="Не вдалося отримати статистику";try{const q=await D.json();z=((U=q==null?void 0:q.message)==null?void 0:U.error)||(q==null?void 0:q.message)||z}catch{}throw new Error(z)}return D.json()}function C(N){const v=new Map;return N&&(N.rules||[]).forEach(D=>{const U=(D==null?void 0:D.value)??(D==null?void 0:D.id);U!=null&&v.set(String(U),D)}),v}function F(N,v,S,D,U){if(typeof(v==null?void 0:v.color)=="string"&&v.color.trim())return v.color.trim();const z=o.config.colors||{};if(z[N])return z[N];const Y=C(S==null?void 0:S.style).get(N);return typeof(Y==null?void 0:Y.color)=="string"&&Y.color.trim()?Y.color.trim():n[U%n.length]}function M(N,v,S,D){var U;return(v==null?void 0:v.text)||(v==null?void 0:v.label)||(v==null?void 0:v.name)||(v==null?void 0:v[`${D}_text`])||((U=C(S==null?void 0:S.style).get(N))==null?void 0:U.label)||N}function $(N,v,S,D){if(!N)return;const U=y((v==null?void 0:v.style)||g.value)||{},z=D.trim();if(!z)return;const q={...U.colors||{},...o.config.colors||{}};z===D&&S.forEach(Y=>{Y.color.trim()&&(q[Y.id]=Y.color)}),N.setStyle({...U,type:U.type||"polygon",colorAttr:z,opacity:.8,colors:q})}async function k(){var z,q;i.value=[],a.value=null;const N=c.value,v=B.value;if(!v)return;l.value=!0;const S=await w(N);E(N,S);const D=await _(N,v),U=Array.isArray(D==null?void 0:D.rows)?D.rows.map((Y,ve)=>{const be=(Y==null?void 0:Y.id)??(Y==null?void 0:Y.value),L=be!=null?String(be):"";if(!L)return null;const P=M(L,Y,S,v),R=Number((Y==null?void 0:Y.count)??0)||0,K=F(L,Y,S,v,ve);return{id:L,label:P,count:R,color:K}}).filter(Boolean):[];i.value=U,a.value=((z=D==null?void 0:D.field)==null?void 0:z.label)||((q=D==null?void 0:D.field)==null?void 0:q.name)||null,$(d.value,S,U,v),l.value=!1}e.watch(()=>[c.value,B.value],()=>{k()},{immediate:!0});const V=e.computed(()=>"Набори даних"),I=e.computed(()=>i.value.reduce((N,v)=>N+v.count,0)),T=e.computed(()=>{var S;const N=B.value;return((S=x.value.find(D=>D.id===N))==null?void 0:S.label)||null||a.value||N||null});function A(N){return I.value?`${(N/I.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var N,v;(v=(N=d.value)==null?void 0:N.remove)==null||v.call(N)}),(N,v)=>r.value?(e.openBlock(),e.createElementBlock("div",Qd,[e.createElementVNode("div",eu,[e.createElementVNode("div",null,[e.createElementVNode("h2",tu,e.toDisplayString(V.value),1),T.value&&x.value.length===1?(e.openBlock(),e.createElementBlock("p",nu,e.toDisplayString(T.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",ou,[b.value?(e.openBlock(),e.createBlock(Ye,{key:0,class:"map-attribute__filter",count:h.value,layer:b.value},null,8,["count","layer"])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",onClick:v[1]||(v[1]=S=>r.value=!1)},[...v[3]||(v[3]=[e.createElementVNode("svg",{class:"w-4 h-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",viewBox:"0 0 24 24"},[e.createElementVNode("path",{d:"M18 6 6 18"}),e.createElementVNode("path",{d:"m6 6 12 12"})],-1)])])])]),e.createElementVNode("div",ru,[x.value.length>1?(e.openBlock(),e.createElementBlock("div",lu,[e.createElementVNode("div",au,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x.value,S=>(e.openBlock(),e.createElementBlock("label",{key:S.id,class:"inline-flex items-center gap-2 text-sm text-gray-700"},[e.withDirectives(e.createElementVNode("input",{type:"radio",class:"text-sky-600 focus:ring-sky-500",value:S.id,"onUpdate:modelValue":v[2]||(v[2]=D=>m.value=D)},null,8,iu),[[e.vModelRadio,m.value]]),e.createElementVNode("span",null,e.toDisplayString(S.label),1)]))),128))])])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",su,"Завантаження…")):i.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",du,e.toDisplayString(I.value),1),e.createElementVNode("ul",uu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,S=>(e.openBlock(),e.createElementBlock("li",{key:S.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",pu,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:S.color})},null,4),e.createElementVNode("span",mu,e.toDisplayString(S.label),1)]),e.createElementVNode("div",fu,[e.createElementVNode("span",gu,e.toDisplayString(S.count),1),e.createElementVNode("span",yu,e.toDisplayString(A(S.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",cu,"Дані відсутні"))])])):(e.openBlock(),e.createElementBlock("button",{key:0,class:"py-2 px-2.5 max-h-[38px] inline-flex items-center gap-x-1.5 text-sm font-medium rounded-lg border border-gray-200 bg-white text-gray-800 shadow-sm hover:bg-gray-50",onClick:v[0]||(v[0]=S=>r.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-55daf8d3"]]),hu={class:"map-search-widget flex flex-col gap-2 bg-white border border-stone-200 shadow-2xs rounded-xl widget p-3 min-w-[200px]"},xu={key:0,class:"vs-select__options absolute z-50 mt-1 w-full bg-white border border-gray-300 shadow-lg rounded-lg text-sm"},bu=["onClick"],ku={class:"relative flex-1 min-w-[140px]"},_u=["placeholder"],wu="https://data.softpro.ua/api-user/gis-url-proxy",Eu="https://geo.rv.ua/api-user/dzk.api",Nn=H(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n=t,o=le(),r=["xy","parcel"],l=e.computed(()=>{var w,E;const h=(E=(w=n.config)==null?void 0:w.tools)==null?void 0:E.filter(_=>r.includes(_));return h&&h.length?h:r}),i=e.computed(()=>{var h,w;return((w=(h=n.config)==null?void 0:h.placeholder)==null?void 0:w.trim())||"Пошук…"}),a=e.ref(l.value[0]);e.watch(l,h=>{h.includes(a.value)||(a.value=h[0])});const d=e.ref(""),p=e.ref(!1),u=e.ref(null);e.watch(a,()=>{d.value="",p.value=!1});function g(h){a.value=h}function s(h){if(!p.value)return;const w=u.value;w&&!w.contains(h.target)&&(p.value=!1)}e.onMounted(()=>{window.addEventListener("click",s,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",s,!0)});function m(h){return h==="xy"?"Координати":h==="parcel"?"Кадастр":"Адреси"}function y(h){const w=h.replace(/[,]+/g," ").trim();if(!w)return null;const E=w.split(/\s+/).filter(Boolean);if(E.length<2)return null;const _=E.slice(0,2).map(Number);if(!_.every(I=>Number.isFinite(I)))return null;let[C,F]=_,M=C,$=F;const k=I=>Math.abs(I)<=90,V=I=>Math.abs(I)<=180;if(!k(M)||!V($))if(k($)&&V(M))M=F,$=C;else return null;return{lat:M,lng:$}}function c(h){return((h==null?void 0:h.items)||[]).map((E,_)=>{var C,F,M;return{id:String((E==null?void 0:E.id)??_),title:(E==null?void 0:E.title)||((C=E==null?void 0:E.address)==null?void 0:C.label)||"Знайдений обʼєкт",lat:Number((F=E==null?void 0:E.position)==null?void 0:F.lat),lng:Number((M=E==null?void 0:E.position)==null?void 0:M.lng)}})}function f(h){const w=(h==null?void 0:h.result)||(h==null?void 0:h.data)||h;if(!w)return[];const E=w.geom_centroid;if(!E||!Array.isArray(E.coordinates))return[];const[_,C]=E.coordinates;return!Number.isFinite(C)||!Number.isFinite(_)?[]:[{id:"parcel",title:w.cadnum||w.cad_num||"Земельна ділянка",lat:C,lng:_}]}function x(h){const E=h.replace(/\s+/g,"").split(":");if(console.log(E),E.length!==4)return!1;const _=[10,2,3,4];return E.every((C,F)=>C.length===_[F]&&/^\d+$/.test(C))}function B(h){var E,_;const w=((E=n.config)==null?void 0:E.zoom)??17;(_=o.flyTo)==null||_.call(o,{center:[h.lng,h.lat],zoom:w})}async function b(){const h=d.value.trim();if(h){if(a.value==="xy"){const w=y(h);if(!w){Q.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}B({id:"xy",title:"Точка на мапі",...w}),d.value="";return}try{const w=new URL(a.value==="here"?wu:Eu);if(a.value==="here")w.searchParams.set("searchtext",h);else{if(!x(h)){Q.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}w.searchParams.set("cad_num",h)}const E=await fetch(w.toString());if(!E.ok)throw new Error(`HTTP ${E.status}`);const _=await E.json(),C=a.value==="here"?c(_):f(_);if(!C.length)Q.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const F=C[0];B(F),d.value=""}}catch(w){const E=(w==null?void 0:w.message)||"Помилка пошуку";Q.notify({type:"error",title:"Пошук",message:E})}}}return(h,w)=>(e.openBlock(),e.createElementBlock("div",hu,[e.createElementVNode("form",{class:"flex gap-2",onSubmit:e.withModifiers(b,["prevent"])},[l.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:u,class:"relative search-type w-[140px]"},[e.createElementVNode("button",{type:"button",class:"vstSelect-input transition-all text-left bg-white border border-gray-200 text-gray-900 rounded-lg focus:ring-blue-500 focus:border-blue-100 block w-full py-1.5 px-3 text-sm cursor-pointer flex items-center justify-between gap-2",onClick:w[0]||(w[0]=E=>p.value=!p.value)},[e.createElementVNode("span",null,e.toDisplayString(m(a.value)),1),(e.openBlock(),e.createElementBlock("svg",{class:e.normalizeClass(["w-4 h-4 text-gray-500 transition-transform",{"rotate-180":p.value}]),viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[...w[2]||(w[2]=[e.createElementVNode("path",{d:"M6 9l6 6 6-6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))]),p.value?(e.openBlock(),e.createElementBlock("div",xu,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,E=>(e.openBlock(),e.createElementBlock("li",{key:E,class:"px-3 py-2 cursor-pointer hover:bg-gray-100",onClick:_=>g(E)},e.toDisplayString(m(E)),9,bu))),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",ku,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":w[1]||(w[1]=E=>d.value=E),placeholder:i.value,type:"text",class:"vs-input transition-all border block w-full border-gray-200 rounded-md focus:border-blue-100 border-solid !pr-8 py-1.5 pl-3 text-sm"},null,8,_u),[[e.vModelText,d.value,void 0,{trim:!0}]]),w[3]||(w[3]=e.createElementVNode("button",{type:"submit",class:"absolute inset-y-0 right-2 flex items-center text-gray-400 hover:text-gray-600","aria-label":"Пошук"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m21 21-4.35-4.35m0 0A7.5 7.5 0 1 0 5 5a7.5 7.5 0 0 0 11.65 11.65Z"})])],-1))])],32)]))}}),[["__scopeId","data-v-85962cbc"]]),Nu="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",Bu="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",Cu=H(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:r,removeControl:l}=le(),i=e.ref(null),a=e.ref(null),d=e.ref(null),p=e.ref(null);let u=null;function g(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function s(_){if(Array.from(document.styleSheets).some(M=>{var $;return($=M==null?void 0:M.href)==null?void 0:$.includes(_)}))return;const F=document.createElement("link");F.rel="stylesheet",F.href=_,document.head.appendChild(F)}function m(_){return new Promise((C,F)=>{const M=Array.from(document.scripts).find(k=>k.src===_);if(M){if(M._loaded)return C();M.addEventListener("load",()=>C()),M.addEventListener("error",()=>F(new Error(`Failed ${_}`)));return}const $=document.createElement("script");$.src=_,$.async=!0,$.onload=()=>{$._loaded=!0,C()},$.onerror=()=>F(new Error(`Failed ${_}`)),document.head.appendChild($)})}function y(){var C,F,M;const _=window;return _.MapboxExportControl||((C=_.mapboxgl)==null?void 0:C.MapboxExportControl)||((F=_.mapboxglExport)==null?void 0:F.MapboxExportControl)||((M=_.mapboxglExport)==null?void 0:M.default)||null}function c(){const _=document.createElementNS("http://www.w3.org/2000/svg","svg");return _.setAttribute("xmlns","http://www.w3.org/2000/svg"),_.setAttribute("viewBox","0 0 24 24"),_.setAttribute("width","18"),_.setAttribute("height","18"),_.setAttribute("fill","none"),_.setAttribute("stroke","currentColor"),_.setAttribute("stroke-width","2"),_.setAttribute("stroke-linecap","round"),_.setAttribute("stroke-linejoin","round"),_.classList.add("map-control-button__icon"),[{d:"M0 0h24v24H0z",stroke:"none",fill:"none"},{d:"M17 17h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-14a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2"},{d:"M17 9v-4a2 2 0 0 0 -2 -2h-6a2 2 0 0 0 -2 2v4"},{d:"M7 13m0 2a2 2 0 0 1 2 -2h6a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2z"}].forEach((F,M)=>{const $=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries(F).forEach(([k,V])=>{$.setAttribute(k,V)}),_.appendChild($)}),_}function f(){const _=document.createElement("button");_.id="print-btn",_.type="button",_.className=["group relative flex items-center justify-center","w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200","bg-white text-gray-700 hover:bg-gray-50 hover:scale-105","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2"].join(" "),_.setAttribute("aria-label","Друк");const C=c(),F=document.createElement("span");return F.className=["absolute left-full ml-3 px-3 py-1.5","bg-gray-900 text-white text-sm font-medium rounded-md","opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100","pointer-events-none transition-opacity duration-200 whitespace-nowrap"].join(" "),F.textContent="Друк",F.setAttribute("aria-hidden","true"),_.appendChild(C),_.appendChild(F),_.addEventListener("click",M=>{M.stopPropagation(),x()}),p.value=_,_}function x(){if(!d.value)return;d.value.style.display==="block"?b():B()}function B(){var _,C,F;d.value&&(d.value.style.display="block",(_=p.value)==null||_.classList.add("scale-105","shadow-xl"),(C=a.value)==null||C.toggleCrosshair(!0),(F=a.value)==null||F.togglePrintableArea(!0),document.addEventListener("click",h))}function b(){var _,C,F;d.value&&(d.value.style.display="none",(_=p.value)==null||_.classList.remove("scale-105","shadow-xl"),(C=a.value)==null||C.toggleCrosshair(!1),(F=a.value)==null||F.togglePrintableArea(!1),document.removeEventListener("click",h))}function h(_){const C=i.value;C&&(_.target&&C.contains(_.target)||b())}function w(_){const C={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};_.querySelectorAll("label, option").forEach(M=>{var k;const $=(k=M.textContent)==null?void 0:k.trim();$&&C[$]&&(M.textContent=C[$])});const F=_.querySelector("button");F&&(F.textContent="Друкувати")}function E(_){const C=_.querySelector(".mapboxgl-export-list");if(!C||!i.value)return;d.value=C;const F=_.querySelector("button");if(F&&(F.style.display="none"),_.style.display="none",!p.value){const $=f();i.value.appendChild($)}C.style.display="none";const M="_printControlBound";if(!C[M]){const $=k=>k.stopPropagation();C.addEventListener("click",$),C.addEventListener("mousedown",$),C[M]=!0}i.value.appendChild(C),w(C)}return e.onMounted(async()=>{await(o==null?void 0:o());const _=n.value;if(!_)return;s(Nu),g();try{await m(Bu)}catch(M){console.warn("[MapPrintControl] load error",M);return}const C=y();if(!C)return;const F=new C({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(a.value=F,typeof F.onAdd=="function"){const M=F.onAdd.bind(F);F.onAdd=$=>{const k=M($);return setTimeout(()=>k&&E(k),50),k}}r?r(F,"top-right"):_.addControl(F,"top-right"),u=M=>{M.key==="Escape"&&b()},document.addEventListener("keyup",u)}),e.onBeforeUnmount(()=>{b(),u&&(document.removeEventListener("keyup",u),u=null);const _=n.value;if(a.value)try{l?l(a.value):_==null||_.removeControl(a.value)}catch{}a.value=null}),(_,C)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:i,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-89156246"]]),Vu={class:"map-center-control"},vu=H(e.defineComponent({__name:"MapCenterControl",props:{center:{},zoom:{}},setup(t){const n=t,{map:o,ready:r}=le(),l=e.ref(null),i=e.ref(null);function a(p){if(Array.isArray(p)&&p.length>=2){const[u,g]=p.slice(0,2).map(s=>Number(s));return Number.isNaN(u)||Number.isNaN(g)?null:[u,g]}if(p&&typeof p=="object"){const u=p,g=u.lng??u.lon??u.long??u.x,s=u.lat??u.y;if(g!=null&&s!=null){const m=Number(g),y=Number(s);if(!Number.isNaN(m)&&!Number.isNaN(y))return[m,y]}}if(typeof p=="string"){const u=p.split(",").map(g=>Number(g.trim()));if(u.length>=2&&u.every(g=>!Number.isNaN(g)))return[u[0],u[1]]}return null}e.watch(()=>n.center,p=>{const u=a(p);u&&(l.value=u)},{immediate:!0}),e.watch(()=>n.zoom,p=>{const u=Number(p);Number.isNaN(u)||(i.value=u)},{immediate:!0}),e.onMounted(async()=>{await(r==null?void 0:r());const p=o.value;if(p){if(!l.value){const u=p.getCenter();l.value=[u.lng,u.lat]}i.value==null&&(i.value=p.getZoom())}});function d(){const p=o.value;if(!p)return;const u=l.value||(()=>{const s=p.getCenter();return[s.lng,s.lat]})(),g=i.value??p.getZoom();p.flyTo({center:u,zoom:g})}return(p,u)=>(e.openBlock(),e.createElementBlock("div",Vu,[e.createElementVNode("button",{id:"center-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":"Повернути центр",onClick:e.withModifiers(d,["stop"])},[e.createVNode(e.unref(Ln),{class:"w-4 h-4"}),u[0]||(u[0]=e.createElementVNode("span",{class:"absolute left-full ml-3 px-3 py-1.5 bg-gray-900 text-white text-sm font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"}," Центрувати ",-1))])]))}}),[["__scopeId","data-v-d21bee3d"]]),$u={class:"cursor-coordinates"},Au={class:"cursor-coordinates__text"},Su=H(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",$u,[e.createElementVNode("span",Au,e.toDisplayString(n.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),Fu={class:"minimap__wrapper"},He="minimap-viewport",Lu="minimap-viewport-layer",Mu=H(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var B;const n=t,o=e.ref(null),r=e.shallowRef(null),l=(B=n.options)==null?void 0:B.active,i=e.ref(l===void 0?!1:!!l);function a(b,h){return typeof b=="number"&&Number.isFinite(b)?b:h}const d=e.computed(()=>{var _,C;const b=(_=n.options)==null?void 0:_.width,h=(C=n.options)==null?void 0:C.height,w=a(n.width??b,210),E=a(n.height??h,150);return{width:`${w}px`,height:`${E}px`}});function p(){var h,w;const b=(w=(h=n.mapContext)==null?void 0:h.map)==null?void 0:w.value;if(!b||typeof b.getStyle!="function")return null;try{const E=b.getStyle();return E?JSON.parse(JSON.stringify(E)):null}catch{return null}}let u=null;function g(){var _;if(typeof window>"u"||r.value||!o.value)return;const b=p(),h=[30,50],w={container:o.value,style:b??{version:8,sources:{voyager:{type:"raster",tiles:["https://tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"voyager",type:"raster",source:"voyager"}]},center:h,zoom:((_=n.options)==null?void 0:_.zoom)??3,interactive:!1,attributionControl:!1},E={...w,...n.options??{}};E.container=w.container,r.value=new maplibregl.Map(E),r.value.on("load",()=>{m(),c()})}function s(){if(!r.value)return;const b=p();b&&(r.value.once("styledata",()=>{m(),c()}),r.value.setStyle(b))}function m(){if(r.value){if(typeof r.value.isStyleLoaded=="function"&&!r.value.isStyleLoaded()){r.value.once("styledata",()=>{m(),c()});return}r.value.getSource(He)||(r.value.addSource(He,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),r.value.addLayer({id:Lu,type:"fill",source:He,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function y(){i.value=!i.value,i.value&&e.nextTick(()=>{var b;return(b=r.value)==null?void 0:b.resize()})}function c(){var F,M;const b=(M=(F=n.mapContext)==null?void 0:F.map)==null?void 0:M.value;if(!r.value||!b||!b.getBounds)return;if(typeof r.value.isStyleLoaded=="function"&&!r.value.isStyleLoaded()){r.value.once("styledata",()=>{c()});return}const h=b.getBounds();if(!h)return;const w=h.getNorthEast(),E=h.getSouthWest();if(!w||!E)return;const _=[[E.lng,w.lat],[w.lng,w.lat],[w.lng,E.lat],[E.lng,E.lat],[E.lng,w.lat]],C=r.value.getSource(He);if(!C){m();return}C.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[_]},properties:{}})}function f(){var w;const b=n.mapContext,h=(w=b==null?void 0:b.map)==null?void 0:w.value;!(b!=null&&b.on)||!h||(u==null||u(),u=b.on("move",c),c())}async function x(){const b=n.mapContext;if(b){if(typeof b.ready=="function")try{await b.ready()}catch{return}f()}}return e.onMounted(()=>{g(),x()}),e.watch(()=>n.mapContext,()=>{x(),c()}),e.watch(()=>{var b,h;return(h=(b=n.mapContext)==null?void 0:b.map)==null?void 0:h.value},()=>{r.value&&(s(),x())}),e.watch(d,()=>{r.value&&e.nextTick(()=>{var b;return(b=r.value)==null?void 0:b.resize()})}),e.watch(()=>n.options,()=>{var h;u==null||u(),u=null,r.value&&(r.value.remove(),r.value=null);const b=(h=n.options)==null?void 0:h.active;typeof b=="boolean"&&(i.value=b),e.nextTick(()=>{g(),x()})},{deep:!0}),e.onBeforeUnmount(()=>{u==null||u(),u=null,r.value&&(r.value.remove(),r.value=null)}),(b,h)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["minimap",{"minimap--open":i.value}])},[e.createElementVNode("button",{type:"button",class:"minimap__button",onClick:y},[e.createVNode(e.unref(Sn))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",Fu,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:o,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(d.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,i.value]])]),_:1})],2))}}),[["__scopeId","data-v-3ce09bde"]]),Tu={key:1,class:"absolute bottom-4 right-4 z-[80] flex items-end gap-2"},Iu={class:"absolute top-[103px] right-[6.5px] z-[80] flex flex-col items-end gap-1"},Du={class:"map-widget__overlay-grid"},ju={key:0,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},Ou={class:"map-widget__stack"},Pu={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom mb-5"},zu={class:"map-widget__stack map-widget__stack--bottom"},Ru={key:0,class:"map-widget__state"},Uu={key:1,class:"map-widget__state map-widget__state--error"},pt=H(e.defineComponent({__name:"MapWidget",props:{id:{},height:{}},setup(t){var ve,be;const n=t,o=ae.useRoute(),r=ae.useRouter(),l=e.ref(null),i=e.ref({}),a=e.ref(!1),d=e.ref(null),p=e.ref(!1),u=e.ref([]),g=e.computed(()=>n.id||"main"),s=e.computed(()=>{var L,P;return{height:((L=n.height)==null?void 0:L.trim())||((P=i.value)==null?void 0:P.height)||"calc(100vh - 65px)"}}),m=e.computed(()=>{var L;return((L=i.value)==null?void 0:L.name)??null}),y=e.computed(()=>{var L;return((L=i.value)==null?void 0:L.description)??null}),c=e.ref(null),f=e.computed(()=>{if(!c.value)return null;const{lng:L,lat:P}=c.value;return`${P.toFixed(6)}, ${L.toFixed(6)}`}),x=e.computed(()=>{var L;return((L=l.value)==null?void 0:L.ctx)??null}),B=e.computed(()=>{var L;return((L=i.value)==null?void 0:L.minimap)??null}),b=((be=(ve=e.getCurrentInstance())==null?void 0:ve.appContext.config.globalProperties)==null?void 0:be.$settings)||null,h=e.computed(()=>{const L=(b==null?void 0:b.map)||null,P=(L==null?void 0:L.boundary)??null,R=(L==null?void 0:L.katottg)??null;return!P&&!R?null:{boundary:P,katottg:R}});function w(L){return typeof L=="string"&&L.trim()?L.trim().toLowerCase():"top-left"}const E=e.computed(()=>i.value.widgets||[]),_=["left","right"],C=e.computed(()=>{const L={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},P={"top-left":{side:"left",align:"top"},"bottom-left":{side:"left",align:"bottom"},"top-right":{side:"right",align:"top"},"bottom-right":{side:"right",align:"bottom"}};return E.value.forEach(R=>{const K=w(R.position),G=P[K]??{side:"left",align:"top"};L[G.side][G.align].push(R)}),L});function F(L){return Array.isArray(L)?L[0]??null:typeof L=="string"?L:null}async function M(){var P;await e.nextTick();const L=(P=l.value)==null?void 0:P.ctx;return L?(L.ready&&await L.ready(),L):null}function $(){var L,P,R;return((R=(P=(L=l.value)==null?void 0:L.ctx)==null?void 0:P.map)==null?void 0:R.value)??null}function k(){const L=$();if(!L)return null;const P=L.getCenter(),R=L.getZoom();return{x:P.lng.toFixed(5),y:P.lat.toFixed(5),z:R.toFixed(2)}}function V(){const L=k();if(!L)return;const P=F(o.query.x),R=F(o.query.y),K=F(o.query.z);P===L.x&&R===L.y&&K===L.z||r.replace({query:{...o.query,...L}}).catch(()=>{})}function I(L,P,R=1e-6){return Math.abs(L-P)<=R}async function T(){var ge;const L=await M(),P=(ge=L==null?void 0:L.map)==null?void 0:ge.value;if(!L||!P)return;const R=parseFloat(F(o.query.x)??""),K=parseFloat(F(o.query.y)??""),G=parseFloat(F(o.query.z)??""),j=!Number.isNaN(R),re=!Number.isNaN(K),se=!Number.isNaN(G);let fe=!1;if(j&&re){const ye=P.getCenter();(!I(ye.lng,R)||!I(ye.lat,K))&&(P.setCenter([R,K]),fe=!0)}se&&P.setZoom(G),(!j||!re||!se||fe)&&V()}let A=null,N=null;function v(L){const P=L==null?void 0:L.lngLat;P&&(c.value={lng:P.lng,lat:P.lat})}async function S(){const L=await M();L!=null&&L.on&&(A==null||A(),A=L.on("moveend",V),N==null||N(),N=L.on("mousemove",v))}e.onUnmounted(()=>{A==null||A(),A=null,N==null||N(),N=null});async function D(){var L,P;p.value=!1,a.value=!0,d.value=null,c.value=null;try{const R=await fetch(`/api/gis-map/${encodeURIComponent(g.value)}`);if(!R.ok)throw new Error(`Помилка завантаження (${R.status})`);const K=await R.json();i.value=K,i.value.widgets=K.widgets,u.value=K.tools||["home","print"];const G=await M();G&&(K.center&&((L=G.setCenter)==null||L.call(G,K.center)),K.zoom&&((P=G.setZoom)==null||P.call(G,K.zoom))),await T(),await S(),p.value=!0}catch(R){d.value=(R==null?void 0:R.message)||"Не вдалося завантажити карту"}finally{a.value=!1}}const U=e.computed(()=>{var R,K,G;const L=((R=i.value)==null?void 0:R.layers)||[],P=((G=(K=i.value)==null?void 0:K.widgets)==null?void 0:G.filter(j=>j.type==="layers").flatMap(j=>{var re;return((re=j.config)==null?void 0:re.layers)||[]}))||[];return L.map(j=>{const re=P.find(se=>se.id===j.id);return re?{...j,actions:re.actions}:j})}),z=e.ref([]);function q(L){z.value.includes(L)?z.value=z.value.filter(P=>P!==L):z.value.push(L)}const Y=e.computed(()=>L=>z.value.includes(L.id));return e.watch(g,()=>{D()}),e.onMounted(()=>{D()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{T()}),(L,P)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(s.value)},[e.createVNode(gn,{ref_key:"mapViewRef",ref:l,class:"map-widget__view"},{default:e.withCtx(()=>{var R,K;return[h.value?(e.openBlock(),e.createBlock(xn,{key:0,"layer-id":"app-boundary",boundary:h.value.boundary,katottg:h.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),x.value?(e.openBlock(),e.createElementBlock("div",Tu,[f.value?(e.openBlock(),e.createBlock(Su,{key:0,coordinates:f.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(Mu,{"map-context":x.value,options:B.value},null,8,["map-context","options"])])):e.createCommentVNode("",!0),e.createElementVNode("div",Iu,[u.value.includes("home")?(e.openBlock(),e.createBlock(vu,{key:0,center:((R=i.value)==null?void 0:R.center)||null,zoom:((K=i.value)==null?void 0:K.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),u.value.includes("print")?(e.openBlock(),e.createBlock(Cu,{key:1})):e.createCommentVNode("",!0)]),p.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("div",Du,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(_,G=>e.createElementVNode("div",{key:G,class:e.normalizeClass(["map-widget__side",`map-widget__side--${G}`])},[C.value[G].top.length?(e.openBlock(),e.createElementBlock("div",ju,[e.createElementVNode("div",Ou,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value[G].top,j=>{var re,se,fe,ge,ye,Te,Ie,De;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:j.id||j.type,class:"map-overlay__item"},[j.type==="info"?(e.openBlock(),e.createBlock(bn,{key:0,title:((re=j.config)==null?void 0:re.title)||j.title||null,content:((se=j.config)==null?void 0:se.content)||"",links:i.value.maps||[],"map-name":m.value,"map-description":y.value},null,8,["title","content","links","map-name","map-description"])):j.type==="catalog"?(e.openBlock(),e.createBlock(wn,{key:1,api:((fe=j.config)==null?void 0:fe.api)||null},null,8,["api"])):j.type==="layers"?(e.openBlock(),e.createBlock(_n,{key:2,layers:U.value,onAction:P[0]||(P[0]=mt=>q(mt.layerId)),config:j.config},null,8,["layers","config"])):j.type==="basemaps"?(e.openBlock(),e.createBlock(ct,{key:3,layers:((ge=j.config)==null?void 0:ge.layers)||null,"default-layer":((ye=j.config)==null?void 0:ye.default)||null,title:j.title||((Te=j.config)==null?void 0:Te.title)||null},null,8,["layers","default-layer","title"])):j.type==="legend"?(e.openBlock(),e.createBlock(dt,{key:4,items:((Ie=j.config)==null?void 0:Ie.items)||[]},null,8,["items"])):j.type==="filters"&&Y.value(j)?(e.openBlock(),e.createBlock(st,{key:5,"layer-id":(De=j.config)==null?void 0:De.layer,onClose:q},null,8,["layer-id"])):j.type==="dataset"?(e.openBlock(),e.createBlock(En,{key:6,config:j.config},null,8,["config"])):j.type==="search"?(e.openBlock(),e.createBlock(Nn,{key:7,config:j.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,j.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),C.value[G].bottom.length?(e.openBlock(),e.createElementBlock("div",Pu,[e.createElementVNode("div",zu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value[G].bottom,j=>{var re,se,fe,ge,ye,Te,Ie,De;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:j.id||j.type,class:"map-overlay__item"},[j.type==="info"?(e.openBlock(),e.createBlock(bn,{key:0,title:((re=j.config)==null?void 0:re.title)||j.title||null,content:((se=j.config)==null?void 0:se.content)||"",links:i.value.maps||[],"map-name":m.value,"map-description":y.value},null,8,["title","content","links","map-name","map-description"])):j.type==="catalog"?(e.openBlock(),e.createBlock(wn,{key:1,api:((fe=j.config)==null?void 0:fe.api)||null},null,8,["api"])):j.type==="layers"?(e.openBlock(),e.createBlock(_n,{key:2,layers:U.value,onAction:P[1]||(P[1]=mt=>q(mt.layerId)),config:j.config},null,8,["layers","config"])):j.type==="basemaps"?(e.openBlock(),e.createBlock(ct,{key:3,layers:((ge=j.config)==null?void 0:ge.layers)||null,"default-layer":((ye=j.config)==null?void 0:ye.default)||null,title:j.title||((Te=j.config)==null?void 0:Te.title)||null},null,8,["layers","default-layer","title"])):j.type==="legend"?(e.openBlock(),e.createBlock(dt,{key:4,items:((Ie=j.config)==null?void 0:Ie.items)||[]},null,8,["items"])):j.type==="filters"&&Y.value(j)?(e.openBlock(),e.createBlock(st,{key:5,"layer-id":(De=j.config)==null?void 0:De.layer,onClose:q},null,8,["layer-id"])):j.type==="dataset"||j.type==="attribute"?(e.openBlock(),e.createBlock(En,{key:6,config:j.config},null,8,["config"])):j.type==="search"?(e.openBlock(),e.createBlock(Nn,{key:7,config:j.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,j.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(yn),e.createVNode(hn)],64)):e.createCommentVNode("",!0)]}),_:1},512),a.value?(e.openBlock(),e.createElementBlock("div",Ru,"Завантаження карти…")):d.value?(e.openBlock(),e.createElementBlock("div",Uu,e.toDisplayString(d.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-b8259d5c"]]);function qu(t){t.component("MapCustom",pt)}J.MapWidget=pt,J.Register=ml,J.Service=Hc,J.default=pt,J.install=qu,J.template1=ht,J.template2=xt,J.template3=bt,J.template4=kt,J.template5=_t,Object.defineProperties(J,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
|