@opengis/gis 0.2.53 → 0.2.55

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.
@@ -149,5 +149,5 @@
149
149
  `:""}var Ld=Ad,Fd={dump:Ld};function nn(t,n){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+n+" instead, which is now safe by default.")}}var Td=Ne,Md=On,Dd=qn,Id=Kn,jd=Gn,zd=Yt,Oo=ko.load,Od=ko.loadAll,Po=Fd.dump,Pd=$e,Rd={binary:to,float:Zn,map:Un,null:Hn,pairs:oo,set:lo,timestamp:Qn,bool:Wn,int:Yn,merge:eo,omap:no,seq:Rn,str:Pn},Ud=nn("safeLoad","load"),qd=nn("safeLoadAll","loadAll"),Hd=nn("safeDump","dump"),Ro={Type:Td,Schema:Md,FAILSAFE_SCHEMA:Dd,JSON_SCHEMA:Id,CORE_SCHEMA:jd,DEFAULT_SCHEMA:zd,load:Oo,loadAll:Od,dump:Po,YAMLException:Pd,types:Rd,safeLoad:Ud,safeLoadAll:qd,safeDump:Hd};const ct="#9ca3af";function on(t){return!t||typeof t!="object"||Array.isArray(t)?null:{...t}}const Wd={},Yd={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-settings"};function Zd(t,n){return e.openBlock(),e.createElementBlock("svg",Yd,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"},null,-1),e.createElementVNode("circle",{cx:"12",cy:"12",r:"3"},null,-1)])])}const Uo=Q(Wd,[["render",Zd]]),Kd={},Gd={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-layers"};function Xd(t,n){return e.openBlock(),e.createElementBlock("svg",Gd,[...n[0]||(n[0]=[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"},null,-1),e.createElementVNode("path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"},null,-1),e.createElementVNode("path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"},null,-1)])])}const Jd=Q(Kd,[["render",Xd]]),Qd={},eu={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-eye"};function tu(t,n){return e.openBlock(),e.createElementBlock("svg",eu,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"},null,-1),e.createElementVNode("circle",{cx:"12",cy:"12",r:"3"},null,-1)])])}const nu=Q(Qd,[["render",tu]]),ou={},lu={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-map"};function ru(t,n){return e.openBlock(),e.createElementBlock("svg",lu,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z"},null,-1),e.createElementVNode("path",{d:"M15 5.764v15"},null,-1),e.createElementVNode("path",{d:"M9 3.236v15"},null,-1)])])}const au=Q(ou,[["render",ru]]),iu={},su={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-filter"};function cu(t,n){return e.openBlock(),e.createElementBlock("svg",su,[...n[0]||(n[0]=[e.createElementVNode("polygon",{points:"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"},null,-1)])])}const du=Q(iu,[["render",cu]]),Ft=e.defineComponent({__name:"MonacoEditor",props:{modelValue:{},language:{},theme:{}},emits:["update:modelValue","load"],setup(t,{emit:n}){const o=t,l=n,r=e.ref(null);let a=null,i=null,s=!1;function f(){return new Promise((b,c)=>{if(i)return b(i);if(window.monaco)return i=window.monaco,b(i);const p=m=>{if([...document.styleSheets].some(h=>{var d;return(d=h==null?void 0:h.href)==null?void 0:d.includes(m)}))return;const g=document.createElement("link");g.rel="stylesheet",g.href=m,document.head.appendChild(g)},u=m=>new Promise((g,h)=>{const d=document.createElement("script");d.src=m,d.onload=()=>g(!0),d.onerror=h,document.body.appendChild(d)});p("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/editor/editor.main.min.css"),u("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/loader.min.js").then(()=>{window.require.config({paths:{vs:"https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs"}}),window.require(["vs/editor/editor.main"],()=>{i=window.monaco,b(i)})}).catch(c)})}function y(){var b,c;!r.value||!i||(a&&a.dispose(),a=i.editor.create(r.value,{value:o.modelValue||"",language:o.language||"yaml",theme:o.theme||"vs-light",automaticLayout:!0,minimap:{enabled:!1}}),(c=(b=i.languages)==null?void 0:b.css)!=null&&c.cssDefaults&&i.languages.css.cssDefaults.setDiagnosticsOptions({validate:!1,lint:{}}),a.onDidChangeModelContent(()=>{s||l("update:modelValue",a.getValue())}))}return e.watch(()=>o.modelValue,b=>{if(!a)return;const c=a.getValue();b!==c&&(s=!0,a.setValue(b||""),s=!1)}),e.watch(()=>o.language,b=>{a&&i&&i.editor.setModelLanguage(a.getModel(),b||"yaml")}),e.watch(()=>o.theme,b=>{a&&i&&i.editor.setTheme(b||"vs-light")}),e.onMounted(async()=>{await f(),y()}),e.onBeforeUnmount(()=>{a&&a.dispose()}),(b,c)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"editorContainer",ref:r,class:"w-full h-full"},null,512))}}),uu={class:"flex flex-col flex-1 overflow-hidden"},pu={class:"flex justify-end gap-2"},mu=["href"],fu={class:"flex flex-col flex-1 overflow-hidden"},gu={class:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden mt-3 flex flex-col flex-1"},yu={class:"relative bg-gradient-to-br from-slate-50 to-white flex-1"},hu=e.defineComponent({__name:"vs-tab-style",props:{token:{},styleYaml:{},styleText:{}},emits:["update:style-yaml","update:style-text","update"],setup(t,{emit:n}){const o=t,l=n,r=e.ref("");e.watch(()=>o.styleText,f=>{const y=f??"";r.value!==y&&(r.value=y)},{immediate:!0}),e.watch(r,async f=>{var b,c;const y=f??"";o.styleText!==y&&l("update:style-text",y);try{const p=f?Oo(f):null;if((b=p==null?void 0:p.colorAttr)!=null&&b.length&&((c=o.styleYaml)==null?void 0:c.colorAttr)!==p.colorAttr){const u=await a(p.colorAttr);p.colors=u.reduce((g,h,d)=>({...g,[h.id.toString()]:i[d]}),{});const m=Po(p);m!==r.value&&(r.value=m)}JSON.stringify(p)!==JSON.stringify(o.styleYaml)&&l("update:style-yaml",p&&typeof p=="object"?p:null)}catch{o.styleYaml!==null&&l("update:style-yaml",null)}});async function a(f){return(await fetch(`/api/gis-service/${o.token}/${f}`).then(b=>b.json())).rows}const i=["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd"],s=async()=>{const f=o.styleYaml?JSON.stringify(o.styleYaml):o.styleText?o.styleText:"null";try{await fetch(`/api/gis-service/${o.token}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({style:f})}),l("update"),le.notify({type:"success",title:"Успіх",message:"Стилі збережено"})}catch(y){le.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти стилі"}),console.log(y)}};return(f,y)=>(e.openBlock(),e.createElementBlock("div",uu,[e.createElementVNode("div",pu,[e.createElementVNode("a",{target:"_blank",href:"/api/gis-service/"+o.token+"/col",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Атрибути ",8,mu),e.createElementVNode("button",{onClick:s,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"},[...y[1]||(y[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",fu,[e.createElementVNode("div",gu,[y[2]||(y[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",yu,[e.createVNode(Ft,{modelValue:r.value,"onUpdate:modelValue":y[0]||(y[0]=b=>r.value=b),language:"yaml",theme:"vs-light"},null,8,["modelValue"])])])])]))}});function dt(t){if(t==null)return null;const n=Number(typeof t=="string"?t.trim():t);return Number.isFinite(n)?n:null}function ut(t){if(!t)return null;if(Array.isArray(t)&&t.length>=2){const n=dt(t[0]),o=dt(t[1]);return n!=null&&o!=null?[n,o]:null}if(typeof t=="object"){const n=t;if(Array.isArray(n.coordinates))return ut(n.coordinates);const o=n.lng??n.lon??n.long??n.longitude??n.x,l=n.lat??n.latitude??n.y;if(o!=null&&l!=null){const r=dt(o),a=dt(l);if(r!=null&&a!=null)return[r,a]}}if(typeof t=="string"&&t.includes(",")){const[n,o]=t.split(","),l=dt(n),r=dt(o);return l!=null&&r!=null?[l,r]:null}return null}const qo=Symbol("MapContext");function xu(t){const n=e.shallowRef(null),o=e.ref(!1);let l=!1;const r=[],a=()=>{l=!0,r.length&&r.forEach(p=>p())},i=()=>{const p=t.container;return typeof p=="string"?document.getElementById(p):(p==null?void 0:p.value)!==void 0?p.value:p},s=()=>l?Promise.resolve():new Promise(p=>r.push(p)),f=(p,u)=>{if(p==null)return u;const m=Number(typeof p=="string"?p.trim():p);return Number.isFinite(m)?m:u},y=async()=>{var B,M,j,E,V,$,A;if(typeof window>"u"||n.value)return;const p=i();if(!p)throw new Error("Map container not found");const u=t.settings||null,m=ut((B=u==null?void 0:u.map)==null?void 0:B.center)||[30,50],g=f((M=u==null?void 0:u.map)==null?void 0:M.zoom,7),h=f((j=u==null?void 0:u.map)==null?void 0:j.maxZoom,20),x={...{attributionControl:!1,center:m,zoom:g,maxZoom:h,minZoom:4},...t.mapOptions||{},container:p};x.maxZoom==null&&(x.maxZoom=h),n.value=new maplibregl.Map(x),(E=t.controls)!=null&&E.navigation&&n.value.addControl(new maplibregl.NavigationControl(typeof t.controls.navigation=="object"?t.controls.navigation:{}),"top-right"),(V=t.controls)!=null&&V.scale&&n.value.addControl(new maplibregl.ScaleControl(typeof t.controls.scale=="object"?t.controls.scale:{}),"bottom-left"),($=t.controls)!=null&&$.fullscreen&&n.value.addControl(new maplibregl.FullscreenControl,"top-right"),(A=t.controls)!=null&&A.geolocate&&n.value.addControl(new maplibregl.GeolocateControl(typeof t.controls.geolocate=="object"?t.controls.geolocate:{}),"top-right"),n.value.once("load",()=>{o.value=!0,a()})},b=()=>{n.value&&(n.value.remove(),n.value=null,o.value=!1)};e.onMounted(y),e.onUnmounted(b);const c={map:n,ready:s,flyTo:p=>{var u;return(u=n.value)==null?void 0:u.flyTo(p)},fitBounds:(p,u)=>{var m;return(m=n.value)==null?void 0:m.fitBounds(p,u)},setCenter:p=>{var u;return(u=n.value)==null?void 0:u.setCenter(p)},setZoom:p=>{var u;return(u=n.value)==null?void 0:u.setZoom(p)},addControl:(p,u)=>{var m;return(m=n.value)==null?void 0:m.addControl(p,u)},removeControl:p=>{var u;return(u=n.value)==null?void 0:u.removeControl(p)},on:(p,u,m)=>{var g,h;return typeof u=="string"?((g=n.value)==null||g.on(p,u,m),()=>{var d;return(d=n.value)==null?void 0:d.off(p,u,m)}):((h=n.value)==null||h.on(p,u),()=>{var d;return(d=n.value)==null?void 0:d.off(p,u)})},off:(p,u,m)=>{var g,h;typeof u=="string"?(g=n.value)==null||g.off(p,u,m):(h=n.value)==null||h.off(p,u)},project:p=>{var u;return(u=n.value)==null?void 0:u.project(p)},unproject:p=>{var u;return(u=n.value)==null?void 0:u.unproject(p)}};return e.provide(qo,c),c}function ve(t){if(t)return{map:t,flyTo:t.value.flyTo,fitBounds:t.value.fitBounds};const n=e.inject(qo);if(!n)throw new Error("useMap() called outside of a Map provider");return n}const bu=["Noto Sans Regular"],ku=12,wu="#0f172a",_u="#fff",Eu=14;function xe(t,n){if(!t)return;for(const l of n)if(Object.prototype.hasOwnProperty.call(t,l)&&t[l]!==void 0)return t[l];const o=t.text;if(o&&typeof o=="object"){for(const l of n)if(Object.prototype.hasOwnProperty.call(o,l)&&o[l]!==void 0)return o[l]}}function Nu(t){return t?Array.isArray(t)?t:[t]:bu}function ln(t,n){if(typeof t=="number")return Number.isFinite(t)?t:n;if(t==null||t==="")return n;const o=Number(t);return Number.isFinite(o)?o:n}function Vu(t){if(t==null)return null;if(Array.isArray(t))return t;const n=String(t).trim(),o=n.match(/^\{([^{}]+)\}$/);return o?["get",o[1]]:n}function Bu(t,n){const o=[];if(t!=null&&o.push(t),n&&o.push(["!",["has","point_count"]]),!!o.length)return o.length===1?o[0]:["all",...o]}function Cu(t,n={}){if(!t)return[];const o=xe(t,["text-field","textField","textFieldValue","labelText","label"]);if(!o)return[];const l=Vu(o);if(!l)return[];const r=l,a=(n.geometry||t.type||"point").toString().toLowerCase(),i=xe(t,["text-font","textFont"]),s=ln(xe(t,["text-size","textSize"]),ku),f=xe(t,["text-allow-overlap","textAllowOverlap"]),y=xe(t,["text-minzoom","textMinZoom","textZoom","text-zoom"]),b=xe(t,["text-maxzoom","textMaxZoom","maxzoom"]),c=xe(t,["text-color","textColor"])||wu,p=xe(t,["text-halo-color","textHaloColor"])||_u,u=xe(t,["text-halo-width","textHaloWidth"]),m=xe(t,["text-halo-blur","textHaloBlur"]),g=xe(t,["text-offset","textOffset"]),h=xe(t,["text-anchor","textAnchor"]),d=xe(t,["text-justify","textJustify"]),x=xe(t,["text-letter-spacing","textLetterSpacing"]),B=xe(t,["text-transform","textTransform"]),M=xe(t,["symbol-placement","symbolPlacement"]),j=xe(t,["symbol-spacing","symbolSpacing"]),E=xe(t,["text-rotation-alignment","textRotationAlignment"]),V=xe(t,["text-pitch-alignment","textPitchAlignment"]),$=xe(t,["text-opacity","textOpacity"]),A={"text-field":r,"text-font":Nu(i),"text-size":s,"text-allow-overlap":f??!1};g&&(A["text-offset"]=g),a!=="line"&&(A["text-anchor"]=h??"center"),d&&(A["text-justify"]=d),x!==void 0&&(A["text-letter-spacing"]=x),B&&(A["text-transform"]=B),j!==void 0&&(A["symbol-spacing"]=j),a==="line"?(A["symbol-placement"]=M||"line",A["text-rotation-alignment"]=E||"map",A["text-pitch-alignment"]=V||"map"):(E&&(A["text-rotation-alignment"]=E),V&&(A["text-pitch-alignment"]=V),M&&(A["symbol-placement"]=M)),h&&a==="line"&&(A["text-anchor"]=h);const I={"text-color":c,"text-opacity":$??1};I["text-halo-color"]=p,u!==void 0&&(I["text-halo-width"]=u),m!==void 0&&(I["text-halo-blur"]=m);const q={type:"symbol",layout:A,paint:I},U=ln(y,Eu);if(q.minzoom=U,b!==void 0){const S=ln(b,void 0);S!==void 0&&(q.maxzoom=S)}const D=Bu(n.filter,n.excludeClusters);return D&&(q.filter=D),[q]}const rn=new Map,an={};function sn(t){if(t.colorAttr&&t.colors){const n=Object.entries(t.colors).flat();return["match",["get",t.colorAttr],...n,ct]}return null}function $u(t){if(!t.icon||!t.colors)return null;const n=[],o=t.icon.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,[r,a],i)=>l.concat([r,n[i]]),[]),t.icon]}function pt(t,n){n&&(Array.isArray(n)?t.push(...n):t.push(n))}function vu(t,n){const o=(t==null?void 0:t.clusterZoom)??(t==null?void 0:t.pointZoom)??(t==null?void 0:t.iconZoom)??12,l=Number(o);if(!Number.isFinite(l))return null;const r=["get","point_count"],a=["has","point_count"],i=["!",a],y={type:"circle",maxzoom:l,filter:a,paint:{"circle-color":["step",r,"#3b82f6",10,"#fde047",100,"#fbbf24",1e3,"#fda4af",1e4,"#fb7185",1e6,"#a21caf"],"circle-radius":["step",r,16,10,22,100,28,1e3,34,1e4,40,1e6,48],"circle-stroke-color":"#fff","circle-stroke-width":1}},b={type:"symbol",maxzoom:l,filter:a,layout:{"text-field":["to-string",["coalesce",["get","point_count_abbreviated"],r]],"text-font":["Noto Sans Regular"],"text-size":12,"text-allow-overlap":!0},paint:{"text-color":"#fff","text-halo-color":"#172554","text-halo-width":1.25}},c={...n,filter:["all",i,n.filter||!0]};return[y,b,c]}function Ho(t,n){const o=sn(t);if(t.icon&&!t.iconZoom&&!t.clusterZoom)return;const l={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||ct,"circle-stroke-width":t.width||1,"circle-radius":t.radius||5}},r=vu(t,l);return r||l}function Su(t){const n=sn(t);return{type:"fill",minzoom:t.pointZoom||0,paint:{"fill-color":n||t.color||ct,"fill-opacity":t.opacity||.3,"fill-outline-color":t.stroke||ct}}}function Au(t){return{type:"line",paint:{"line-color":sn(t)||t.color||ct,"line-opacity":t.opacity||1,"line-width":t.width||1.5}}}function Lu(t){const n=$u(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 Wo(t,n={}){if(!t)return[];if(!Fu(t))return[];const o=[];t.icon&&pt(o,Lu(t)),t.pointZoom&&pt(o,Ho(t,t.pointZoom)),t.type==="polygon"?pt(o,Su(t)):t.type==="line"?pt(o,Au(t)):pt(o,Ho(t));const r=n.sourceType!=="raster"?Cu(t,{geometry:t.type||"point",filter:t.filter,excludeClusters:!!t.clusterZoom}):[];return pt(o,r),o.filter(Boolean)}function Fu(t){return t?!!(new Set(["point","line","polygon"]).has(t.type)||t.icon||t.attrType||t.color||t.stroke||t.radius||t.width):!1}function Yo(t,{sourceType:n,filter:o,allowFallback:l=!1}={}){let r=on(t);if(r&&o&&(r.filter=o),r)return Wo(r,{sourceType:n});if(l&&["vector","geojson"].includes(n||"")){const a={type:"point",color:ct};return o&&(a.filter=o),Wo(a,{sourceType:n})}return[]}function Tu(t){return{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:t}}]}}}async function Zo(t,n,o){const l=[n],r=n.split("+")[0];Object.values(o||{}).forEach(a=>{l.push(`${r}+${a.replace("#","")}.png`)});for(const a of l){if(t.getImage(a))continue;const i=await t.loadImage(`/api/gis-icon/${a}`);t.addImage(a,i.data)}}function se(t,n,o){var U,D;if(!t)return an;if(!n)return an[t];const{map:l,ready:r=()=>Promise.resolve()}=ve(o),a=t||((U=n.layer)==null?void 0:U.id),i=n.sourceId??t,s={...n};s.point&&(s.source=Tu(s.point)),!s.layer&&((D=s.source)==null?void 0:D.type)==="raster"&&(s.layer={id:i,type:"raster",source:i}),s.layer&&!s.layer.source&&Object.assign(s.layer,{source:i});let f=!1,y=!1;const b=()=>{var S,k,v,T,C,N,w,F,P,R;if(!(y||!l.value)){if(s.source&&!l.value.getSource(i)&&l.value.addSource(i,s.source),!l.value.getLayer(a)){const G=s.beforeId===0?(k=(S=l.value.getStyle().layers)==null?void 0:S[0])==null?void 0:k.id:s.beforeId;(T=(v=s.layer)==null?void 0:v.style)!=null&&T.icon&&Zo(l.value,s.layer.style.icon,s.layer.style.colors);const W=((C=s.source)==null?void 0:C.type)||((N=s.layer)==null?void 0:N.type),Y=s.layer&&(s.layer.type||s.layer.ref)?s.layer:null,re=(w=s.layer)==null?void 0:w.style,ae=((F=s.layer)==null?void 0:F["source-layer"])||((P=s.source)==null?void 0:P["source-layer"])||s.sourceLayer||i,ne=s.style||re,ie=Yo(ne,{sourceType:W,filter:(R=s.layer)==null?void 0:R.filter,allowFallback:!Y});if(!ie.length){if(Y){const ce={...Y,id:Y.id||a,source:Y.source||i};W==="vector"&&ae&&(ce["source-layer"]=ce["source-layer"]||ae),l.value.addLayer(ce,G)}return}ie.forEach((ce,Ae)=>{const Le={...ce,id:`${a}${Ae||""}`,source:i};W==="vector"&&ae&&(Le["source-layer"]=ae),l.value.addLayer(Le,G)})}f=!0}};r().then(b);const c=(S,k)=>l.value?(l.value.on(S,a,k),()=>{var v;return(v=l.value)==null?void 0:v.off(S,a,k)}):()=>{},p=S=>{const k=l.value;if(!k)return;const v=k.getStyle(),T=v==null?void 0:v.layers;T!=null&&T.length&&T.filter(C=>C.source===a).forEach(C=>{k.setLayoutProperty(C.id,"visibility",S?"visible":"none")})},u=(S=!0)=>{l.value&&(l.value.getStyle().layers.filter(k=>k.source===a).forEach(k=>{l.value.removeLayer(k.id)}),y=!0,s.source&&S&&l.value.getSource(i)&&l.value.removeSource(i))},m=async S=>{var C,N,w,F,P;if(!l.value)return;S!=null&&S.icon&&Zo(l.value,S.icon,S.colors);const k=((C=s.source)==null?void 0:C.type)||((N=s.layer)==null?void 0:N.type),v=((w=s.layer)==null?void 0:w["source-layer"])||((F=s.source)==null?void 0:F["source-layer"])||s.sourceLayer||i,T=Yo(S,{sourceType:k,filter:(P=s.layer)==null?void 0:P.filter,allowFallback:!0});u(!1),T.forEach((R,G)=>{var Y;const W={...R,id:`${a}${G}`,source:((Y=s.layer)==null?void 0:Y.source)||i};k==="vector"&&v&&(W["source-layer"]=W["source-layer"]||v),l.value.addLayer(W)})},g=S=>{l.value&&Object.entries(S).forEach(([k,v])=>{l.value.setPaintProperty(a,k,v)})},h=(S,k,v)=>{const T=l.value;if(T)switch(k){case"raster":T.setPaintProperty(S,"raster-opacity",v);break;case"fill":T.setPaintProperty(S,"fill-opacity",v);break;case"line":T.setPaintProperty(S,"line-opacity",v);break;case"circle":T.setPaintProperty(S,"circle-opacity",v);break;case"symbol":T.setPaintProperty(S,"icon-opacity",v),T.setPaintProperty(S,"text-opacity",v);break}},A={ids:{layerId:a,sourceId:i},isMounted:()=>{var S;return f&&!!((S=l.value)!=null&&S.getLayer(a))},setVisible:p,updatePaint:g,updateLayout:S=>{l.value&&Object.entries(S).forEach(([k,v])=>{l.value.setLayoutProperty(a,k,v)})},updateFilter:S=>{l.value&&l.value.setFilter(a,S)},setOpacity:S=>{var T;if(!l.value)return;const v=(((T=l.value.getStyle())==null?void 0:T.layers)||[]).filter(C=>C.source===i);if(!v.length){const C=l.value.getLayer(a);C&&h(a,C.type,S);return}v.forEach(C=>h(C.id,C.type,S))},setData:S=>{if(!l.value)return;const k=l.value.getSource(i);k&&"setData"in k&&k.setData(S)},setTiles:S=>{if(!l.value)return;const k=l.value.getSource(i);k&&"setTiles"in k&&k.setTiles(S)},setStyle:m,setFilter:S=>{var v,T;if(!l.value)return;const k=l.value.getSource(i);if(k&&"setTiles"in k&&((T=(v=s.source)==null?void 0:v.tiles)!=null&&T[0])){const C=s.source.tiles[0];k.setTiles([`${C}${C.includes("?")?"&":"?"}filter=${S}`])}},setFeatureState:(S,k)=>{l.value&&l.value.setFeatureState({source:i,...S},k)},removeFeatureState:(S,k)=>{l.value&&l.value.removeFeatureState({source:i,...S},k?{key:k}:void 0)},remove:u,card:s.card,popup:s.popup,opts:s,getSource:()=>{var S;return(S=l.value)==null?void 0:S.getSource(i)},getLayer:()=>{var S;return(S=l.value)==null?void 0:S.getLayer(a)},on:c};rn.set(a,A);const I=()=>{rn.get(a)===A&&rn.delete(a)},q=A.remove;return A.remove=()=>{I(),q()},e.onBeforeUnmount(A.remove),an[t]=A,A}const Mu={class:"flex flex-col flex-1 min-h-0"},Du={class:"flex flex-col flex-1 min-h-0"},Iu=e.defineComponent({__name:"vs-tab-popup",props:{token:{},fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,l=n,r=e.ref(o.columns||[]);e.watch(()=>o.columns,m=>r.value=m||[],{immediate:!0}),e.watch(r,m=>{const g=se(o.token);g&&(g.popup=m),l("update:columns",m)});const a=e.ref("list"),i=e.ref(!1),s=e.ref([]),f=[{key:"name",label:"Name",type:"main"}],y={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 b(){s.value=r.value.map(m=>m.name||m.id),i.value=!0}function c(){var d;const m=[...r.value],g=((d=o.fields)==null?void 0:d.filter(x=>s.value.includes(x.name)))||[],h=ot(m,g,{selectedKeys:s.value,resolveKey:x=>He(x)});r.value=h,i.value=!1,s.value=[]}function p(){i.value=!1,s.value=[]}function u(){let m=[];a.value==="all"?m=o.fields||[]:a.value==="none"?m=[]:m=r.value,m.filter(g=>!g.label).forEach(g=>g.label=g.ua),l("save",m)}return(m,g)=>(e.openBlock(),e.createElementBlock("div",Mu,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:b,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:u,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти попап ")]),e.createElementVNode("div",Du,[a.value==="list"?(e.openBlock(),e.createBlock(qe,{key:0,modelValue:r.value,"onUpdate:modelValue":g[0]||(g[0]=h=>r.value=h),"columns-scheme":f,"form-scheme":y,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(tt,{visible:i.value,"onUpdate:visible":g[1]||(g[1]=h=>i.value=h),selection:s.value,"onUpdate:selection":g[2]||(g[2]=h=>s.value=h),fields:t.fields,title:"Імпорт полів","id-prefix":"import-popup",onConfirm:c,onCancel:p},null,8,["visible","selection","fields"])]))}}),ju={class:"flex flex-col flex-1 min-h-0"},zu={class:"flex justify-between mb-3 gap-2"},Ou={class:"p-4 space-y-4 text-sm"},Pu={class:"space-y-1"},Ru={class:"space-y-1"},Uu={class:"flex items-center gap-3"},qu={class:"flex justify-end gap-2 p-4 border-t"},Hu=e.defineComponent({__name:"vs-tab-legend",props:{mapInfo:{},token:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,l=n,r=e.ref(o.columns||[]);e.watch(()=>o.columns,m=>{r.value=m||[]}),e.watch(r,m=>{l("update:columns",m)});const a=e.ref(!1),i=e.ref({name:"",color:"#2E86DE"}),s=e.defineAsyncComponent(()=>import("@opengis/core").then(m=>m.VsModal)),f=[{key:"name",label:"Назва"},{key:"color",label:"Колір",type:"color"}],y={name:{type:"text",label:"Назва",validators:["required"]},color:{type:"color",label:"Колір",validators:["required"]}};function b(m){m&&c(),a.value=m}function c(){i.value={name:"",color:"#2E86DE"}}function p(){var d,x;const m=(d=i.value.name)==null?void 0:d.trim();if(!m){le.notify({type:"warning",title:"Перевірка",message:"Вкажіть назву елементу легенди"});return}const g=((x=i.value.color)==null?void 0:x.trim())||"#2E86DE";if(r.value.some(B=>He(B)===He({name:m}))){le.notify({type:"warning",title:"Дубль",message:"Такий елемент легенди вже існує"});return}r.value=[...r.value,{name:m,color:g}],c(),a.value=!1}function u(){l("save",r.value)}return(m,g)=>(e.openBlock(),e.createElementBlock("div",ju,[e.createElementVNode("div",zu,[e.createElementVNode("button",{onClick:g[0]||(g[0]=h=>a.value=!0),class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Додати "),e.createElementVNode("button",{onClick:u,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти легенду ")]),e.createVNode(qe,{modelValue:r.value,"onUpdate:modelValue":g[1]||(g[1]=h=>r.value=h),"columns-scheme":f,"form-scheme":y,"main-col-width":"250px","add-button":!1},null,8,["modelValue"]),e.createVNode(e.unref(s),{teleport:"#modal",visible:a.value,title:"Новий елемент легенди","onUpdate:visible":b},{footer:e.withCtx(()=>[e.createElementVNode("div",qu,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed",onClick:g[5]||(g[5]=h=>b(!1))}," Скасувати "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed",onClick:p}," Додати ")])]),default:e.withCtx(()=>[e.createElementVNode("div",Ou,[e.createElementVNode("div",Pu,[g[6]||(g[6]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Назва ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":g[2]||(g[2]=h=>i.value.name=h),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,i.value.name]])]),e.createElementVNode("div",Ru,[g[7]||(g[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Колір ",-1)),e.createElementVNode("div",Uu,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":g[3]||(g[3]=h=>i.value.color=h),type:"color",class:"h-10 w-16 rounded border border-gray-300"},null,512),[[e.vModelText,i.value.color]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":g[4]||(g[4]=h=>i.value.color=h),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,i.value.color]])])])])]),_:1},8,["visible"])]))}}),Wu={class:"space-y-3 bg-gradient-to-br from-sky-50 to-blue-50 p-4 rounded-xl border border-sky-100 shadow-sm"},Yu=["onClick"],Zu=["aria-checked","value"],Ku={key:0},Gu=e.defineComponent({__name:"view-mode-toggle",props:{modelValue:{},options:{},showHtml:{type:Boolean}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,l=n,r=i=>l("update:modelValue",i),a=o.options||[{value:"all",label:"All"},{value:"list",label:"List"},{value:"none",label:"None"}];return(i,s)=>(e.openBlock(),e.createElementBlock("div",Wu,[s[1]||(s[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(a).length}`])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(a),f=>(e.openBlock(),e.createElementBlock("div",{key:f.value,onClick:y=>r(f.value),class:e.normalizeClass(["flex items-center justify-center space-x-2 rounded-lg p-2 border transition-all duration-300 cursor-pointer",[t.modelValue===f.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":t.modelValue===f.value,value:f.value,class:"aspect-square rounded-full border border-primary h-4 w-4 flex items-center justify-center text-sky-500"},[t.modelValue===f.value?(e.openBlock(),e.createElementBlock("span",Ku,[...s[0]||(s[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,Zu),e.createElementVNode("label",{class:e.normalizeClass(["text-xs font-medium cursor-pointer",t.modelValue===f.value?"text-gray-700":"text-gray-600"])},e.toDisplayString(f.label),3)],10,Yu))),128))],2)]))}}),Xu={class:"flex flex-col flex-1 min-h-0"},Ju={class:"flex flex-col flex-1 min-h-0"},Qu=e.defineComponent({__name:"vs-tab-card",props:{fields:{},columns:{},viewMode:{},html:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,l=n,r=e.ref(o.columns||[]);e.watch(()=>o.columns,h=>r.value=h||[],{immediate:!0}),e.watch(r,h=>l("update:columns",h));const a=e.ref(o.viewMode??"list");e.watch(()=>o.viewMode,h=>{h&&h!==a.value&&(a.value=h)});const i=e.ref(o.html??"");e.watch(()=>o.html,h=>{typeof h=="string"&&h!==i.value&&(i.value=h)},{immediate:!0});const s=e.ref(!1),f=e.ref([]),y=[{key:"name",label:"Name",type:"main"}],b={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"}]},is_admin:{type:"Switcher",label:"Тільки для адміністративної частини"},data:{type:"text",label:"Data"}};function c(){f.value=a.value==="html"?[]:r.value.map(h=>h.name||h.id),s.value=!0}function p(){var B;const h=[...r.value],d=((B=o.fields)==null?void 0:B.filter(M=>f.value.includes(M.name)).map(M=>{const{type:j,format:E,...V}=M;return{...V,format:E??j??"text"}}))||[],x=ot(h,d,{selectedKeys:f.value,resolveKey:M=>He(M)});if(r.value=x,a.value==="html"&&d.length){const M=d.map(V=>{const $=V.label??"",A=V.name??V.id??"";return`<dd>${$}</dd>
150
150
  <dt>{{ ${A} }}</dt>`}).join(`
151
151
  `),E=(i.value??"").trimEnd();i.value=E?`${E}
152
- ${M}`:M}s.value=!1,f.value=[]}function u(){s.value=!1,f.value=[]}function m(){const h=a.value==="html"?"html":"list",d={card_mode:h};h==="html"?d.html=i.value:h==="list"&&(d.list=r.value),l("save","card",d)}const g=[{value:"all",label:"Всі"},{value:"list",label:"Список"},{value:"none",label:"Жодне"},{value:"html",label:"HTML"}];return(h,d)=>(e.openBlock(),e.createElementBlock("div",Xu,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:c,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:m,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти ")]),e.createVNode(Gu,{modelValue:a.value,"onUpdate:modelValue":d[0]||(d[0]=x=>a.value=x),options:g},null,8,["modelValue"]),e.createElementVNode("div",Ju,[a.value==="list"?(e.openBlock(),e.createBlock(qe,{key:0,modelValue:r.value,"onUpdate:modelValue":d[1]||(d[1]=x=>r.value=x),"columns-scheme":y,"form-scheme":b,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):a.value==="html"?(e.openBlock(),e.createBlock(Ft,{key:1,modelValue:i.value,"onUpdate:modelValue":d[2]||(d[2]=x=>i.value=x),language:"html",theme:"vs-light",class:"flex-1 min-h-0"},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(tt,{visible:s.value,"onUpdate:visible":d[3]||(d[3]=x=>s.value=x),selection:f.value,"onUpdate:selection":d[4]||(d[4]=x=>f.value=x),fields:t.fields,title:"Імпорт полів для картки","id-prefix":"import-card",onConfirm:p,onCancel:u},null,8,["visible","selection","fields"])]))}}),ep={class:"flex flex-col flex-1 min-h-0"},tp=e.defineComponent({__name:"vs-tab-filter",props:{fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,l=n;console.log(o.columns);const r=e.ref(o.columns||[]);e.watch(()=>o.columns,m=>r.value=m||[],{immediate:!0}),e.watch(r,m=>l("update:columns",m),{deep:!0,immediate:!0});const a=e.ref("list"),i=e.ref(!1),s=e.ref([]),f=[{key:"id",label:"Name"},{key:"label",label:"UA"}],y={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 b(){s.value=r.value.map(m=>m.name||m.id),i.value=!0}function c(){var d;const m=[...r.value],g=((d=o.fields)==null?void 0:d.filter(x=>s.value.includes(x.name)))||[],h=ot(m,g,{selectedKeys:s.value,resolveKey:x=>He(x)});r.value=h,i.value=!1,s.value=[]}function p(){i.value=!1,s.value=[]}function u(){let m=[];a.value==="all"?m=o.fields||[]:a.value==="none"?m=[]:m=r.value,l("save",m)}return(m,g)=>(e.openBlock(),e.createElementBlock("div",ep,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:b,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:u,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти фільтр ")]),a.value==="list"?(e.openBlock(),e.createBlock(qe,{key:0,modelValue:r.value,"onUpdate:modelValue":g[0]||(g[0]=h=>r.value=h),"columns-scheme":f,"form-scheme":y,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0),e.createVNode(tt,{visible:i.value,"onUpdate:visible":g[1]||(g[1]=h=>i.value=h),selection:s.value,"onUpdate:selection":g[2]||(g[2]=h=>s.value=h),fields:t.fields,title:"Імпорт полів","id-prefix":"import-filter",onConfirm:c,onCancel:p},null,8,["visible","selection","fields"])]))}}),Tt=e.defineComponent({__name:"MapView",setup(t,{expose:n}){var y,b;const o=e.ref(null),l=e.ref(null),r=((b=(y=e.getCurrentInstance())==null?void 0:y.appContext.config.globalProperties)==null?void 0:b.$settings)||null,a=xu({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},doubleClickZoom:!1},controls:{navigation:!0,scale:!0},settings:r});async function i(){var p;await e.nextTick();const c=(p=a.map)==null?void 0:p.value;c!=null&&c.resize&&c.resize()}function s(){typeof ResizeObserver>"u"||l.value||!o.value||(l.value=new ResizeObserver(()=>{i()}),l.value.observe(o.value))}function f(){var c;(c=l.value)==null||c.disconnect(),l.value=null}return e.onMounted(()=>{i(),s(),window.addEventListener("resize",i)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",i),f()}),n({ctx:a}),(c,p)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"el",ref:o,class:"w-full h-full rounded-xl overflow-hidden"},[e.renderSlot(c.$slots,"default")],512))}}),np=e.defineComponent({__name:"MapDataLayer",props:{id:{},layer:{},styleSpec:{}},setup(t,{expose:n}){var m,g,h,d;const{map:o,flyTo:l,setZoom:r}=ve(),a=((g=(m=e.getCurrentInstance())==null?void 0:m.appContext.config.globalProperties)==null?void 0:g.$settings)||null,i=t,s=i.id;String(i.id);const f=`${location.origin}/api/vtile/${i.id}/ua/{z}/{x}/{y}.vmt?all=1`,y=se(s,{source:{type:"vector",tiles:[f],minzoom:0,maxzoom:14},popup:i.layer.popup,layer:{style:(h=i.layer)==null?void 0:h.style}});n({layerHandle:y}),l({center:i.layer.center||((d=a==null?void 0:a.map)==null?void 0:d.center)||[30,50],animate:!1});let b=null;function c(){if(!(y!=null&&y.setTiles))return;const x=f.includes("?")?"&":"?",B=`${f}${x}_=${Date.now()}`;y.setTiles([B])}function p(){b&&clearTimeout(b),b=setTimeout(()=>{b=null,u().catch(x=>console.error("Failed to update map layer",x))},300)}async function u(){o.value&&(c(),y.setStyle(i.styleSpec??null))}return e.watch(()=>i.styleSpec,p,{deep:!0}),e.onBeforeUnmount(()=>{y.remove()}),(x,B)=>null}}),wt=e.ref(null);function op(){wt.value=null}function lp(t){const n=e.ref(!1),o=()=>typeof t=="string"?t:t.value;e.watch(wt,i=>{i!==o()&&n.value&&(n.value=!1)});function l(){wt.value=o(),n.value=!0}function r(){wt.value===o()&&(wt.value=null),n.value=!1}function a(){n.value?r():l()}return{isOpen:n,open:l,close:r,toggle:a}}const rp={class:"map-filter"},ap={class:"map-filter__header"},ip={class:"map-filter__title"},sp={"aria-hidden":"true"},cn="#map-filter-popover-host",Mt=Q(e.defineComponent({__name:"MapFilterPopover",props:{count:{},layer:{},catalogAnchor:{},disabled:{type:Boolean}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/filter")),o=t,l=e.computed(()=>{var w;return((w=o.layer)==null?void 0:w.id)??""}),r=e.computed(()=>`filter-popover-${l.value}`),{isOpen:a,close:i,toggle:s}=lp(r),f=e.reactive({top:0,left:0,transform:"translateX(-50%)"}),y=e.ref(null),b=e.ref(null);let c=null;const p=e.ref({}),u=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0}),m=e.computed(()=>a.value),g=e.computed(()=>{var w;return Array.isArray((w=o.layer)==null?void 0:w.filters)?o.layer.filters:[]}),h=e.computed(()=>g.value.length>0),d=e.computed(()=>{var w;return((w=o.layer)==null?void 0:w.name)??""}),x=e.computed(()=>g.value),B=e.ref(null),M=e.computed(()=>g.value.length),j=e.computed(()=>M.value<=2),E=e.computed(()=>j.value?"body":typeof window>"u"||B.value?cn:"body"),V=e.computed(()=>{if(!m.value||!j.value)return{};const w=typeof window<"u"?window.innerWidth:280,P=Math.max(280,w-16*2);return{position:"absolute",top:`${f.top}px`,left:`${f.left}px`,transform:f.transform,zIndex:1e3,width:"280px",maxWidth:`${P}px`}});function $(){i()}function A(w,F,P=8){const R=window.scrollY+P,G=window.scrollY+window.innerHeight-P;let W=w;return W+F>G&&(W=G-F),W<R&&(W=R),W}function I(){var re,ae,ne;if(!y.value||!j.value)return;const w=y.value.getBoundingClientRect(),F=window.scrollX+8,P=window.scrollX+window.innerWidth-8,R=((re=b.value)==null?void 0:re.offsetWidth)||280,G=((ae=b.value)==null?void 0:ae.offsetHeight)||0;let W=0,Y=0;if((ne=o.catalogAnchor)!=null&&ne.value){const ie=o.catalogAnchor.value.getBoundingClientRect(),ce=ie.top+window.scrollY;W=A(ce,G,8);const Ae=ie.right+window.scrollX+12,Le=P-R,je=F;Y=Math.min(Math.max(Ae,je),Math.max(je,Le))}else{const ie=w.bottom+window.scrollY+8;W=A(ie,G,8);let ce=w.left+window.scrollX;ce<F&&(ce=F),ce+R>P&&(ce=Math.max(F,P-R)),Y=ce}f.left=Y,f.top=W,f.transform="none"}function q(){j.value||N(),s(),a.value&&j.value&&e.nextTick(()=>{I(),T(),requestAnimationFrame(()=>I())})}function U(){o.disabled||q()}e.watch(m,w=>{w&&j.value?e.nextTick(()=>{I(),T(),requestAnimationFrame(()=>I())}):(C(),j.value||N())}),e.watch(x,()=>{!m.value||!j.value||e.nextTick(()=>I())},{deep:!0}),e.watch(j,w=>{m.value&&(w?e.nextTick(()=>{I(),T()}):(C(),N()))}),e.watch(()=>o.disabled,w=>{w&&(i(),p.value={})});function D(){!m.value||!j.value||I()}function S(w){const F=l.value;if(!F)return;const P=se(F);if(!(P!=null&&P.setFilter))return;p.value=w;const R=Object.entries(w).map(([G,W])=>`${G}=${W}`).join("|");P.setFilter(R)}function k(w){if(!o.disabled)return;const F=w.currentTarget;if(!F)return;const P=F.getBoundingClientRect();u.left=P.left+P.width/2+window.scrollX,u.top=P.bottom+8+window.scrollY,u.visible=!0}function v(){u.visible=!1}e.onMounted(()=>{N(),window.addEventListener("resize",D),window.addEventListener("scroll",D,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",D),window.removeEventListener("scroll",D,!0),C()});function T(){C(),!(!b.value||!j.value)&&(c=new ResizeObserver(()=>{!m.value||!j.value||I()}),c.observe(b.value))}function C(){c&&(c.disconnect(),c=null)}function N(){typeof window>"u"||typeof document>"u"||(B.value=document.querySelector(cn))}return(w,F)=>h.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mapLayer-filter",ref_key:"anchor",ref:y},[e.createElementVNode("a",{class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(U,["prevent","stop"]),onMouseenter:k,onMouseleave:v,onFocus:k,onBlur:v},[...F[2]||(F[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),m.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:E.value},[e.createElementVNode("div",{class:e.normalizeClass(["vst-popover__content inline-block z-50 rounded-[16px] bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-filter__popover",{"mapLayer-filter__popover--static":!j.value}]),style:e.normalizeStyle(V.value),ref_key:"panel",ref:b,onClick:F[1]||(F[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",rp,[e.createElementVNode("div",ap,[e.createElementVNode("h3",ip,e.toDisplayString(d.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:$},[e.createElementVNode("span",sp,[e.createVNode(e.unref(ft),{class:"h-4 w-4"})]),F[3]||(F[3]=e.createElementVNode("span",{class:"sr-only"},"Закрити",-1))])]),e.createVNode(e.unref(n),{view:"inline",schema:x.value,value:p.value,limit:10,onChange:F[0]||(F[0]=P=>S(P.data)),width:250},null,8,["schema","value"])])],6)],8,["to"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[u.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${u.top}px`,left:`${u.left}px`})},e.toDisplayString(u.text),5)):e.createCommentVNode("",!0)]))],512)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-0d4c9370"]]),cp={key:0,class:"flex justify-center items-center h-[40px] w-[40px] bg-white text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full"},dn=Q(e.defineComponent({__name:"MapFilterWidget",props:{filters:{},title:{},layerId:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",null,[t.filters.length>0?(e.openBlock(),e.createElementBlock("div",cp,[e.createVNode(Mt,{layer:{filters:t.filters,id:t.layerId},count:t.filters.length},null,8,["layer","count"])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-98772410"]]),dp={class:"flex flex-row gap-x-3 z-10 relative widget"},up=["onClick"],pp=["src","alt"],_t=e.defineComponent({__name:"BaseMaps",setup(t){var u,m,g;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={z:13,x:4790,y:2762};function l(h){if(h)return h.replace(/{z}/gi,String(o.z)).replace(/{x}/gi,String(o.x)).replace(/{y}/gi,String(o.y))}function r(h,d){let x=h||`layers-${Object.keys(d).length}`,B=1;for(;d[x];)x=`${h}-${B}`,B+=1;return x}const a=e.getCurrentInstance(),i=(u=a==null?void 0:a.appContext.config.globalProperties)==null?void 0:u.$settings,s=i==null?void 0:i.map,f=e.computed(()=>{const h=Array.isArray(s==null?void 0:s.basemaps)?s==null?void 0:s.basemaps:[];if(!h.length)return{};const d={};return h.forEach((x,B)=>{const M=x.name??x.title??`basemap-${B}`,j=(x.id??M??`basemap-${B}`).toString().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),E=r(j||`basemap-${B}`,d),V=x.preview||(x.url?l(x.url):void 0);d[E]={url:x.url,preview:V,title:M}}),d}),y=e.computed(()=>{const h=f.value;return Object.keys(h).length?h:n}),b=e.ref(Object.keys(y.value)[0]??"gki"),c=se("base",{source:{type:"raster",tiles:(m=y.value[b.value])!=null&&m.url?[(g=y.value[b.value])==null?void 0:g.url]:[]},beforeId:0});function p(h){if(!y.value[h])return;b.value=h;const d=y.value[h];if(!(d!=null&&d.url)){c.setVisible(!1);return}c.setVisible(!0),c.setTiles([d.url])}return e.watch(()=>y.value,h=>{h[b.value]||(b.value=Object.keys(h)[0]??b.value);const d=h[b.value];d!=null&&d.url?(c.setVisible(!0),c.setTiles([d.url])):c.setVisible(!1)},{immediate:!0}),(h,d)=>(e.openBlock(),e.createElementBlock("div",dp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,(x,B)=>(e.openBlock(),e.createElementBlock("div",{key:B,onClick:M=>p(B)},[B!=="none"&&x.url?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["lg:w-14 lg:h-14 w-10 h-10 flex items-center justify-center bg-gray-200 rounded-xl shadow-2xs cursor-pointer transition-all border-4",b.value===B?"border-blue-500":"border-gray-200"])},[x.preview?(e.openBlock(),e.createElementBlock("img",{key:0,src:x.preview,alt:x.title,class:"object-cover rounded-lg lg:w-12 lg:h-12 w-8 h-8"},null,8,pp)):e.createCommentVNode("",!0)],2)):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["lg:w-14 lg:h-14 w-10 h-10 flex items-center justify-center bg-gray-200/80 rounded-xl shadow-2xs cursor-pointer transition-all border-4",b.value===B?"border-blue-500":"border-gray-200"])},[e.createVNode(e.unref($l),{class:"w-4 h-4 text-gray-500"})],2))],8,up))),128))]))}}),mp={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%"}},fp={class:"flex flex-col gap-1 p-5"},gp={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},Et=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:l}=ve(),r=e.ref([]);let a=null;function i(b){return b?b.map((c,p)=>{var g;const u=(c==null?void 0:c.name)||(c==null?void 0:c.label)||(c==null?void 0:c.title)||(c==null?void 0:c.id)||`Layer ${p+1}`,m=(c==null?void 0:c.color)||(c==null?void 0:c.fill)||((g=c==null?void 0:c.paint)==null?void 0:g.color)||"#3388ff";return{id:`${u}-${p}`,label:u,color:m}}):[]}function s(b){return b!=null&&b.layers?b.layers.filter(c=>{const p=c.paint||{};return p["fill-color"]||p["line-color"]||p["circle-color"]}).map((c,p)=>{var g;const u=c.paint||{},m=u["fill-color"]||u["line-color"]||u["circle-color"]||"#3388ff";return{id:c.id||`layer-${p}`,label:((g=c.metadata)==null?void 0:g.title)||c.id||`Layer ${p+1}`,color:m}}):[]}async function f(){var p;await l();const b=o.value;if(!b)return;const c=(p=b.getStyle)==null?void 0:p.call(b);r.value=s(c)}function y(){o.value&&(a==null||a())}return e.watch(()=>n.items,async b=>{b!=null?(r.value=i(b),a==null||a()):(await l(),y(),f())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await l(),y(),f())}),e.onBeforeUnmount(()=>{a==null||a(),a=null}),(b,c)=>r.value.length?(e.openBlock(),e.createElementBlock("div",mp,[e.createElementVNode("div",fp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,p=>(e.openBlock(),e.createElementBlock("div",{key:p.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:p.color})},null,4),e.createElementVNode("span",gp,[e.createElementVNode("span",null,e.toDisplayString(p.label),1)])]))),128))])])):e.createCommentVNode("",!0)}});function yp(){const{map:t,ready:n}=ve(),o=e.ref(null),l=e.ref(null),r=e.ref(null),a=e.ref(null);let i=[];function s(){i.forEach(u=>u()),i=[]}const f=u=>{const m=(u==null?void 0:u.properties)||{};return!!(m.cluster||m.point_count||m.point_count_abbreviated)},y=u=>{var d,x;o.value=[u.point.x,u.point.y];const m=t.value.queryRenderedFeatures(u.point);if(!(m!=null&&m.length)){b();return}const g=m.find(B=>!f(B));if(!g){b();return}const h=se(g.source)||se((d=g.layer)==null?void 0:d.id);h!=null&&h.popup&&(l.value=((x=h.popup)==null?void 0:x.fields)||h.popup,a.value=g.properties)},b=()=>{l.value=null,a.value=null,o.value=null};async function c(){await n(),t.value&&(s(),t.value.on("mousemove",y),t.value.on("mouseleave",b))}function p(){s(),l.value=null,a.value=null,o.value=null}return n().then(c),{popupCoords:o,popupFields:l,popupValues:a,disable:p,title:r}}const hp={class:"min-w-[200px] max-w-[280px] rounded-lg border border-slate-200 bg-white/90 p-3 text-xs shadow-lg backdrop-blur"},xp={class:"space-y-1.5"},bp={class:"font-bold text-slate-700"},kp={class:"text-slate-700"},Ko=e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,popupFields:o,popupValues:l,disable:r}=yp(),{map:a}=ve(),i=e.ref(null),s=e.ref({left:"-9999px",top:"-9999px"}),f=new Intl.NumberFormat("uk-UA",{maximumFractionDigits:2});function y(g,h){if(h==null||h==="")return h;if((g==null?void 0:g.type)==="number"){const d=typeof h=="number"?h:Number(h);if(Number.isFinite(d))return f.format(d)}return h}function b(g,h,d){const x=g.name||g.label||g.title||`field-${d}`,B=g.label||g.title||g.name||x,M=g.name?h[g.name]:void 0,E=(g.name?h[`${g.name}_text`]:void 0)??M??g.value??null;return{key:x,label:B,value:y(g,E)}}const c=e.computed(()=>{const g=o.value||[],h=l.value||{};return g.filter(d=>(d==null?void 0:d.meta)!=="title").map((d,x)=>b(d,h,x)).filter(d=>d.label)}),p=e.computed(()=>{const g=o.value||[],h=l.value||{},d=g.find(x=>(x==null?void 0:x.meta)==="title");return d?b(d,h,0):null}),u=e.computed(()=>{var h;const g=c.value;return(h=p.value)!=null&&h.value?[{...p.value,key:`${p.value.key}-title`,label:"Назва"},...g]:g});function m(){var C,N;if(!u.value.length||!n.value||!i.value){s.value={left:"-9999px",top:"-9999px"};return}const g=i.value,h=g.offsetParent||null,d=(h==null?void 0:h.getBoundingClientRect())??{left:0,top:0,width:window.innerWidth,height:window.innerHeight},x=((N=(C=a.value)==null?void 0:C.getContainer)==null?void 0:N.call(C))||void 0,B=(x==null?void 0:x.getBoundingClientRect())??d,M=B.left-d.left,j=B.top-d.top,E=g.offsetWidth||0,V=g.offsetHeight||0,$=12,A=8,[I,q]=n.value;let U=M+I+$,D=j+q+$;U+E+A>d.width&&(U=M+I-E-$),D+V+A>d.height&&(D=j+q-V-$);const S=A,k=A,v=Math.max(A,d.width-E-A),T=Math.max(A,d.height-V-A);U=Math.min(Math.max(U,S),v),D=Math.min(Math.max(D,k),T),s.value={left:`${U}px`,top:`${D}px`}}return e.watch([n,u],()=>{e.nextTick(()=>m())}),e.onMounted(()=>{window.addEventListener("resize",m)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",m),r()}),(g,h)=>u.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popupRef",ref:i,class:"absolute pointer-events-none z-20",style:e.normalizeStyle(s.value)},[e.createElementVNode("div",hp,[e.createElementVNode("div",xp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,d=>(e.openBlock(),e.createElementBlock("div",{key:d.key,class:"flex flex-col"},[e.createElementVNode("span",bp,e.toDisplayString(d.label),1),e.createElementVNode("span",kp,e.toDisplayString(d.value??"—"),1)]))),128))])])],4)):e.createCommentVNode("",!0)}});function wp(){const{map:t,ready:n}=ve(),o=pe.useRoute(),l=pe.useRouter(),r=e.ref(null),a=e.ref(null),i=e.ref(null),s=e.ref(!1),f=e.ref([]),y=e.ref(0),b=e.computed(()=>f.value.length),c=e.computed(()=>s.value||!!r.value||!!i.value);let p=null,u=!1;function m(){r.value=null,a.value=null,i.value=null,s.value=!1,f.value=[],y.value=0}function g(){if(p){try{p()}catch{}p=null}}async function h(){await n();const U=t.value;U&&(g(),m(),U.on("click",d),p=()=>U.off("click",d),q($()))}function d(U){const D=t.value;if(!D)return;const S=(D.queryRenderedFeatures(U.point)||[]).filter(k=>{var v;return(v=k==null?void 0:k.properties)==null?void 0:v.id});if(!S.length){m(),I(null);return}f.value=S,y.value=0,x(y.value)}function x(U){const D=f.value[U];if(!D)return;y.value=U;const S=se(D.source);j(D,S==null?void 0:S.card)}function B(){y.value>=f.value.length-1||x(y.value+1)}function M(){y.value<=0||x(y.value-1)}async function j(U,D){var v,T,C,N;if(!((v=U==null?void 0:U.properties)!=null&&v.id))return;const S=new URLSearchParams;S.set("layer",U.source),S.set("id",String((T=U.properties)==null?void 0:T.id));const k=Array.isArray(D)&&D.length>0;s.value=k,i.value=null,r.value=null,a.value=U||null;try{const w=await fetch(`/api/map-format?${S.toString()}`);if(!w.ok)throw new Error(`Failed (${w.status})`);const F=await w.json(),P=Array.isArray(F.columns)?F.columns:[],R=Array.isArray(D)?D:[];if(!P.length&&!R.length){console.error("Configure layer in admin"),E();return}r.value={rows:F.rows||{},fields:R,columns:P,html:F.html||null},u||I(a.value);const G=(C=F.rows)==null?void 0:C.geom;if(G){const W=typeof G=="string"?JSON.parse(G):G;W&&(a.value={...a.value,geometry:W,properties:{...((N=a.value)==null?void 0:N.properties)||{},geom:W,geom_4326:W}})}}catch(w){console.error("Failed to load feature card:",w),E()}finally{s.value=!1}}function E(){m(),I(null)}function V(){g(),m()}n().then(h),e.onBeforeUnmount(()=>V());function $(){const U=Array.isArray(o.query.info)?o.query.info[0]:o.query.info;return typeof U!="string"?null:U.trim()||null}function A(U){var v,T;const D=(U==null?void 0:U.source)??((v=U==null?void 0:U.layer)==null?void 0:v.id),S=(T=U==null?void 0:U.properties)==null?void 0:T.id;return!D||S===void 0||S===null?null:`${D},${S}`.trim()||null}function I(U){const D=A(U),S=$();if(D===S)return;const k={...o.query};D?k.info=D:delete k.info,l.push({query:k}).catch(()=>{})}async function q(U){if(!U){m();return}if(U===A(a.value))return;const[D,S]=U.split(","),k=D==null?void 0:D.trim(),v=S==null?void 0:S.trim();if(!k||!v){m(),I(null);return}u=!0;try{const T={source:k,properties:{id:v}};f.value=[T],y.value=0;const C=se(k);await j(T,C==null?void 0:C.card)}finally{u=!1}}return e.watch(()=>$(),U=>{U!==A(a.value)&&(u=!0,q(U).finally(()=>{u=!1}))}),{card:r,cardFeature:a,cardError:i,cardLoading:s,isOpen:c,close:E,next:B,prev:M,count:b,index:y}}function _p(){const{map:t,ready:n}=ve(),o=e.ref([]),l=e.ref(0),r=e.ref(0),a=e.ref(!1),i=e.ref(null),s=e.ref({}),f=e.ref(null),y=e.ref([]),b=e.computed(()=>o.value[r.value]||null),c=e.computed(()=>o.value.length>0);let p=null;const u=()=>{p==null||p.remove(),p=null},m=$=>$?$.type==="FeatureCollection"?$:$.type==="Feature"?{type:"FeatureCollection",features:[$]}:$.type&&Array.isArray($.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:$,properties:{}}]}:Array.isArray($.features)?{type:"FeatureCollection",features:$.features}:$.geometry?m($.geometry):null:null,g=()=>({type:"line",color:"#0a57ff",width:4,opacity:.95}),h=$=>Number($.toFixed(5)),d=async $=>{if(await n(),!t.value)return;const A=m($);A&&(u(),p=se("feature-highlight",{source:{type:"geojson",data:A},style:g()},t))},x=async($,A,I)=>{var D,S;const[q,U]=[h($),h(A)];f.value={x:q,y:U},y.value=I,a.value=!0,i.value=null,o.value=[],s.value={},r.value=0;try{const k=I.map(async w=>{const F=`/api/map-info-point?x=${q}&y=${U}&layers=${w}`,P=await fetch(F);if(!P.ok)return null;const R=await P.json();if(!R.count)return null;const W=await(await fetch(`${F}&index=0`)).json();return{layerId:w,data:W,count:R.count}}),T=(await Promise.all(k)).filter(Boolean);if(T.length===0){l.value=0;return}o.value=T.map(w=>w.data);const[C]=o.value;l.value=T.reduce((w,F)=>w+(F.count||0),0),s.value[0]=C;const N=((D=C==null?void 0:C.data)==null?void 0:D.geom_4326)??((S=C==null?void 0:C.data)==null?void 0:S.geom);await d(N)}catch(k){i.value=k.message}finally{a.value=!1}},B=async $=>{if(!f.value||!y.value.length)return;if(s.value[$]){o.value[$]=s.value[$];return}const{x:A,y:I}=f.value,q=y.value.join(","),U=`/api/map-info-point?x=${A}&y=${I}&index=${$}&layers=${q}`;try{a.value=!0;const D=await fetch(U);if(!D.ok)throw new Error("Failed to fetch feature by index");const S=await D.json();o.value[$]=S,s.value[$]=S}catch(D){i.value=D.message}finally{a.value=!1}},M=async()=>{r.value<l.value-1&&(r.value+=1,s.value[r.value]||await B(r.value))},j=async()=>{r.value>0&&(r.value-=1,s.value[r.value]||await B(r.value))},E=()=>{o.value=[],l.value=0,r.value=0,s.value={},f.value=null,y.value=[],u()};e.watch(r,async()=>{var A,I;const $=b.value;if($){const q=((A=$==null?void 0:$.data)==null?void 0:A.geom_4326)??((I=$==null?void 0:$.data)==null?void 0:I.geom);await d(q)}});let V=null;return e.onMounted(async()=>{await n(),t.value&&(V=async $=>{const{lng:A,lat:I}=$.lngLat,q=se(),D=Object.entries(q).map(([S,k])=>{var v,T,C,N;return{id:S,service:((v=k==null?void 0:k.opts)==null?void 0:v.service)??((C=(T=k==null?void 0:k.opts)==null?void 0:T.source)==null?void 0:C.service)??null,count:((N=k==null?void 0:k.opts)==null?void 0:N.count)??null,visible:(()=>{var w;try{return((w=t.value)==null?void 0:w.getLayer(S))?t.value.getLayoutProperty(S,"visibility")!=="none":!0}catch{return!0}})()}}).filter(S=>S.service==="ogc"&&S.visible).map(S=>S.id);D.length>0&&await x(A,I,D)},t.value.on("dblclick",V))}),e.onBeforeUnmount(()=>{t.value&&V&&t.value.off("dblclick",V),u()}),{features:o,count:l,index:r,current:b,loading:a,error:i,active:c,next:M,prev:j,close:E}}const Go=e.defineComponent({__name:"LayerSwitcher",props:{title:{},url:{},id:{},buttonText:{}},emits:["activate"],setup(t,{emit:n}){const o=t,l=n;function r(y){const b=y.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(b)return b;const c=Array.from(y).map(p=>p.charCodeAt(0).toString(16)).join("").slice(0,8);return c?`layer-${c}`:"layer-temp"}const a=e.computed(()=>{var y;return((y=o.id)==null?void 0:y.trim())||r(o.title)}),i=e.computed(()=>o.buttonText||"Показати шар");function s(){return{id:a.value,title:o.title,url:o.url}}function f(){l("activate",s())}return(y,b)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:"flex items-center justify-center bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded w-full",onClick:f},[e.renderSlot(y.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(i.value),1)])]))}}),Te=e.ref([]);function Ep(t,n){return typeof t!="string"?"":t.includes("{{")?t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*}}/g,(o,l)=>{const r=String(l||"").trim();if(!r)return"";const a=n[r];return a!=null?String(a):""}):t}function un(t){return t==null?"":String(t).trim()}function pn(t){var n,o;(o=(n=t==null?void 0:t.handle)==null?void 0:n.remove)==null||o.call(n)}function Np(t){return t?typeof(t==null?void 0:t.value)<"u"?t.value:t:null}function Vp(t){var o;if(!(t!=null&&t.getStyle))return;const n=((o=t.getStyle())==null?void 0:o.layers)||[];for(let l=0;l<n.length;l+=1){const r=n[l];if(!(!r||typeof r.id!="string")&&r.type&&r.type!=="background"&&r.type!=="raster")return r.id}}function Xo(t){function n(a,i={},s,f){var x,B;const y=un(a==null?void 0:a.id),b=((x=a==null?void 0:a.title)==null?void 0:x.trim())||y,c=((B=a==null?void 0:a.url)==null?void 0:B.trim())||"";if(!y||!c)return;const p=Ep(c,i);if(!p)return;const u=f??t;if(!u)return;const m=Np(u);if(!m)return;const g=Te.value.findIndex(M=>M.id===y);g!==-1&&(pn(Te.value[g]),Te.value.splice(g,1));let h=null;const d=a.beforeId??Vp(m);try{h=se(y,{source:{type:"raster",tiles:[p],tileSize:a.tileSize??256,minzoom:a.minzoom??0,maxzoom:a.maxzoom??19},layer:{id:y,type:"raster",source:y,paint:{"raster-opacity":a.opacity??.85}},beforeId:d},u)}catch(M){const j=(M==null?void 0:M.message)??"";if(!(typeof j=="string"&&j.includes("Map provider")))throw M;return}Te.value=[...Te.value,{id:y,title:b,originalUrl:c,resolvedUrl:p,owner:s??null,handle:h??null}]}function o(a,i){const s=un(a);if(!s)return;const f=Te.value.findIndex(b=>b.id===s&&(!i||b.owner===i));if(f===-1)return;const[y]=Te.value.splice(f,1);pn(y)}function l(a){if(!Te.value.length)return;const i=[];Te.value.forEach(s=>{(a?s.owner===a:!0)?pn(s):i.push(s)}),Te.value=i}function r(a,i){const s=un(a);return s?Te.value.some(f=>f.id===s&&(!i||f.owner===i)):!1}return{temporaryLayers:Te,activateTemporaryLayer:n,deactivateTemporaryLayer:o,clearTemporaryLayers:l,isTemporaryLayerActive:r}}const Bp={key:0,class:"card absolute top-4 lg:left-auto right-11 md:left-4 z-[82] w-[calc(100%-36px)] md:w-[400px] max-h-[80%] overflow-hidden rounded-2xl border border-slate-200 bg-white/95 shadow-2xl backdrop-blur-md flex flex-col"},Cp={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},$p={class:"min-w-0 flex-1"},vp={class:"text-base font-semibold text-slate-900 truncate"},Sp={key:0,class:"flex gap-1 mt-1"},Ap=["disabled"],Lp=["disabled"],Fp={key:1,class:"flex gap-1 mt-1"},Tp=["disabled"],Mp=["disabled"],Dp={class:"flex-1 overflow-y-auto px-4 py-3 space-y-4 text-sm text-slate-700"},Ip={key:0,class:"text-center text-xs text-slate-500"},jp={key:1,class:"text-center text-xs text-red-500"},zp={key:0,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},Op={class:"divide-y divide-gray-100 py-[5px]"},Pp={class:"text-gray-900 font-normal"},Rp={key:1,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},Up=["innerHTML"],qp=["innerHTML"],Hp={key:2,class:"space-y-3 border-t border-slate-200 pt-3"},Wp={key:3,class:"border-t border-slate-100 px-4 py-2 text-right text-xs text-slate-500"},Yp={class:"text-xs tracking-[0.02em] leading-none"},Zp={key:4,class:"space-y-3 border-t border-slate-200 pt-3"},Kp={class:"space-y-1"},Gp={class:"flex items-center cursor-pointer gap-2 flex-1"},Xp=["checked","onChange"],Jp={class:"text-[13px] text-gray-600"},Qp={key:0,class:"text-right text-xs text-gray-400 truncate max-w-[40%]"},em={key:5,class:"text-center text-xs text-slate-400"},tm="map:temporary-layer-request",nm=14,Jo=Q(e.defineComponent({__name:"MapCardWidget",props:{mapId:{}},setup(t){var Pt,fl;const n=t,o=wp(),l=_p(),r=e.computed(()=>l.active.value),a=e.computed(()=>r.value||o.isOpen.value),i=e.computed(()=>r.value?l.loading.value:o.cardLoading.value),s=e.computed(()=>r.value?l.error.value:o.cardError.value),f=e.computed(()=>{var _,L;return r.value?((_=l.current.value)==null?void 0:_.html)||null:((L=o.card.value)==null?void 0:L.html)||null}),y=ve(),b=pe.useRoute(),{activateTemporaryLayer:c,deactivateTemporaryLayer:p,clearTemporaryLayers:u,isTemporaryLayerActive:m}=Xo(y.map);function g(_){window.dispatchEvent(new CustomEvent(tm,{detail:_}))}const h=e.computed(()=>{var _;return((_=o.cardFeature.value)==null?void 0:_.source)??null}),d=e.computed(()=>h.value?`map-card:${h.value}`:"map-card"),x=e.computed(()=>{var K,ee;const _=o.cardFeature.value,L=(_==null?void 0:_.source)||((K=_==null?void 0:_.layer)==null?void 0:K.id),O=((ee=_==null?void 0:_.properties)==null?void 0:ee.id)??(_==null?void 0:_.id);return L&&O!=null?`${L}:${O}`:null}),B=e.ref(null),M=e.ref(null),j=e.ref(0),E=new Map;function V(){if(typeof window>"u")return null;const L=(window.location.pathname||"").match(/\/maps?\/([^/]+)/i);return L&&L[1]?L[1]:null}const $=e.computed(()=>{const _=typeof n.mapId=="string"?n.mapId.trim():"";if(_.length)return _;const L=typeof b.params.slug=="string"?b.params.slug.trim():"";if(L.length)return L;const O=typeof b.query.slug=="string"?b.query.slug.trim():"";return O.length?O:V()}),A=e.ref(null),I=e.ref(null),q=new Map;function U(_){const L=_.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(L)return L;const O=Array.from(_).map(K=>K.charCodeAt(0).toString(16)).join("").slice(0,8);return O?`layer-${O}`:`layer-${Math.random().toString(36).slice(2,8)}`}function D(_){if(typeof _!="string")return"";const L=_.trim();if(!L)return"";if(/^https?:\/\//i.test(L))return L;if(L.startsWith("//"))return typeof window>"u"?`https:${L}`:`${window.location.protocol}${L}`;const O=typeof window<"u"?window.location.origin:"";return L.startsWith("/")?O?`${O}${L}`:L:O?`${O}/${L}`:L}function S(_){const L={},O=/([:@\w-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;let K;for(;(K=O.exec(_))!==null;){const ee=K[1],oe=K[2]??K[3]??K[4]??"";ee&&(L[ee]=oe)}return L}function k(_,L){for(const O of L)if(_[O]!=null&&String(_[O]).trim().length)return String(_[O]).trim();return""}function v(_){if(!(_!=null&&_.length))return;const L=Number(_);return Number.isFinite(L)?L:void 0}function T(_){if(typeof _!="string"||!_.length)return[];const L=[],O=/<LayerSwitcher\b([^>]*)>([\s\S]*?)<\/LayerSwitcher>/gi;let K=0,ee;const oe=new Set,me=fe=>{let be=fe,Ce=2;for(;oe.has(be);)be=`${fe}-${Ce}`,Ce+=1;return oe.add(be),be};for(;(ee=O.exec(_))!==null;){const[fe,be="",Ce=""]=ee,ye=ee.index;if(ye>K){const hl=_.slice(K,ye);hl.trim().length&&L.push({type:"html",content:hl})}const De=S(be),Fe=k(De,["title"])||"Тимчасовий шар",Ge=D(k(De,["url"]));if(!Ge){L.push({type:"html",content:fe}),K=ye+fe.length;continue}const Vt=k(De,["id"]),hn=k(De,["button-text","buttonText","show","show-label","showLabel"]),Y1=v(k(De,["tile-size","tileSize"])),Z1=v(k(De,["minzoom","minZoom"])),K1=v(k(De,["maxzoom","maxZoom"])),G1=v(k(De,["opacity"])),X1=Vt||U(`${Fe}-${Ge}`)||U(Fe),gl=me(X1||`layer-${L.length+1}`),xn=Ce.trim(),yl=/<[^>]+>/.test(xn),J1=yl?xn:null,bn=yl?null:xn,Q1=hn&&hn.trim().length?hn.trim():bn&&bn.trim().length?bn.trim():void 0;L.push({type:"layer",spec:{id:gl,title:Fe,url:Ge,tileSize:Y1,minzoom:Z1,maxzoom:K1,opacity:G1},componentProps:{title:Fe,url:Ge,id:gl,buttonText:Q1},slotText:J1}),K=ye+fe.length}if(K<_.length){const fe=_.slice(K);fe.trim().length&&L.push({type:"html",content:fe})}return!L.length&&_.trim().length&&L.push({type:"html",content:_}),L}function C(_){if(!_)return null;const L=typeof _.id=="string"?_.id.trim():"",O=typeof _.title=="string"?_.title.trim():"",K=D(typeof _.url=="string"?_.url:"");return!L||!K?null:{id:L,title:O||L,url:K,tileSize:_.tileSize,minzoom:_.minzoom,maxzoom:_.maxzoom,opacity:_.opacity}}const N=e.computed(()=>{if(r.value&&l.current.value)return l.current.value.data??{};const _=o.card.value;return(_==null?void 0:_.rows)??{}}),w=e.computed(()=>{if(r.value&&l.current.value)return l.current.value.fields??[];const _=o.card.value;if(!_)return[];const L=Array.isArray(_.columns)?_.columns:[];return L.length?L:Array.isArray(_.fields)?_.fields:[]}),F=e.computed(()=>{const _=w.value;if(!_.length)return[];const L=N.value;return _.map(O=>({key:O.name,label:O.ua||O.label||O.title||O.name,value:L[O.name]??"—",format:O.format||"text"}))}),P=new Set(["—","-","–","−"]);function R(_){if(_==null)return!0;if(typeof _=="string"){const L=_.trim();return L.length?P.has(L):!0}return!1}const G=e.ref(!1),W=e.ref(!0);if(typeof window<"u"){const _=(fl=(Pt=window.localStorage)==null?void 0:Pt.getItem)==null?void 0:fl.call(Pt,"cardHideEmpty"),L=typeof _=="string"&&_.toLowerCase()==="true";G.value=L,W.value=!L}const Y=e.computed(()=>F.value.filter(_=>R(_.value)).length),re=e.computed(()=>G.value&&!W.value?F.value.filter(_=>!R(_.value)):F.value);function ae(_){const L=typeof _=="string"?_:"";if(!L.length)return{sanitized:"",hiddenCount:0};if(typeof DOMParser>"u")return{sanitized:L,hiddenCount:0};const K=new DOMParser().parseFromString(L,"text/html");let ee=0;return K.querySelectorAll("dd").forEach(oe=>{var be;const me=((be=oe.textContent)==null?void 0:be.trim())??"",fe=oe.closest("div");if(R(me)){ee+=1,fe?fe.remove():oe.remove();return}}),{sanitized:K.body.innerHTML,hiddenCount:ee}}const ne=e.computed(()=>ae(f.value)),ie=e.computed(()=>f.value?ne.value.hiddenCount:0),ce=e.computed(()=>Y.value+ie.value),Ae=e.computed(()=>{var _;return G.value&&!W.value&&!!((_=f.value)!=null&&_.trim())}),Le=e.computed(()=>G.value&&ce.value>0),je=e.computed(()=>W.value?"Приховати пусті значення":"Показати пусті значення"),jt=e.computed(()=>W.value?Vl:Nl);function zt(){W.value=!W.value}const Je=e.computed(()=>{const _=Ae.value?ne.value.sanitized:f.value??"";return T(_)}),mt=e.computed(()=>Je.value.filter(_=>_.type==="layer"));function z(_){return Array.isArray(_)?_.map((L,O)=>{const K=D(typeof(L==null?void 0:L.url)=="string"?L.url:""),ee=typeof(L==null?void 0:L.geohub)=="string"&&L.geohub.trim().length?`/api-hub/tms/${L.geohub.trim()}/ua/{z}/{x}/{y}.png`:"",oe=((L==null?void 0:L.name)||(L==null?void 0:L.title)||(L==null?void 0:L.label)||`Шар ${O+1}`).toString(),me=(L==null?void 0:L.id)!=null?String(L.id):U(`${oe}-${O+1}`),fe=(L==null?void 0:L.buttonText)||(L==null?void 0:L.button_text)||null,be=(L==null?void 0:L.description)||(L==null?void 0:L.subtitle)||null,Ce=K||D(ee)||"";if(!Ce)return null;const ye={id:me,title:oe,url:Ce,subtitle:be,buttonText:fe||void 0};return typeof(L==null?void 0:L.tileSize)=="number"&&(ye.tileSize=L.tileSize),typeof(L==null?void 0:L.tile_size)=="number"&&(ye.tileSize=L.tile_size),typeof(L==null?void 0:L.minzoom)=="number"&&(ye.minzoom=L.minzoom),typeof(L==null?void 0:L.maxzoom)=="number"&&(ye.maxzoom=L.maxzoom),typeof(L==null?void 0:L.opacity)=="number"&&(ye.opacity=L.opacity),ye}).filter(Boolean):[]}const H=e.computed(()=>{var K,ee;const _=o.card.value,L=l.current.value,O=[(K=_==null?void 0:_.rows)==null?void 0:K.layers,_==null?void 0:_.layers,(ee=L==null?void 0:L.data)==null?void 0:ee.layers,L==null?void 0:L.layers];for(const oe of O){const me=z(oe);if(me.length)return me}return[]}),te=e.computed(()=>Je.value.length>0||F.value.length>0||H.value.length>0),ge=e.computed(()=>!o.cardLoading.value&&!!o.card.value);function J(){const _={},L=A.value;if(L&&typeof L=="object"&&Object.entries(L).forEach(([O,K])=>{typeof K=="string"&&(_[O]=K)}),h.value&&(_.layer=h.value),!_.geohub){const O=typeof(L==null?void 0:L.geohub)=="string"?L.geohub:null,K=typeof(L==null?void 0:L.geohub_key)=="string"?L.geohub_key:null,ee=typeof(L==null?void 0:L.geohubId)=="string"?L.geohubId:null;_.geohub=O||K||ee||_.layer||""}return _}async function de(){const _=h.value;if(!_)return A.value=null,I.value=null,null;if(I.value===_&&A.value)return A.value;if(q.has(_)){const L=q.get(_);return A.value=L,I.value=_,L}try{const L=await fetch(`/api/gis-service/${encodeURIComponent(_)}`);if(!L.ok)return null;const O=await L.json();return q.set(_,O),A.value=O,I.value=_,O}catch{return null}}async function _e(_){if(!(_!=null&&_.id))return;await de();const L=J(),O=mt.value.find(me=>me.spec.id===_.id),K=H.value.find(me=>me.id===_.id),ee=(O==null?void 0:O.spec)||C(K)||C(_);if(!ee||m(ee.id,d.value))return;const oe=d.value||void 0;B.value=oe??null,c(ee,L,oe),g({action:"activate",owner:oe,spec:ee,context:L})}function Z(_){if(!_)return;const L=Me()||void 0;p(_,L),g({action:"deactivate",owner:L,spec:{id:_}})}function Ee(_){return m(_,Me())}function Be(_,L){const O=L.target;!!(O!=null&&O.checked)?_e(_):Z(_.id)}function Me(){return B.value||d.value||null}e.watch(h,(_,L)=>{_!==L&&(A.value=null,I.value=null)});const{next:Ze,prev:Ke,count:Pe,index:ze}=l,Re=e.computed(()=>o.count.value),Qe=e.computed(()=>o.index.value),il=e.computed(()=>Re.value>1),sl=e.computed(()=>r.value?Pe.value:Re.value),cl=e.computed(()=>r.value?ze.value:Qe.value),dl=o.next,ul=o.prev;function et(){const _=Me();_&&(u(_),g({action:"clear",owner:_}),B.value=null)}function j1(){o.close(),l.close(),et()}e.watch(a,(_,L)=>{!_&&L&&(et(),Ue())});function pl(){!o.isOpen.value&&!l.active.value&&et()}e.watch(()=>o.isOpen.value,()=>{pl()}),e.watch(()=>l.active.value,()=>{pl()}),e.watch(h,(_,L)=>{_&&L&&_!==L&&et()}),e.watch(ze,(_,L)=>{_!==L&&et()}),e.watch(x,(_,L)=>{_&&L&&_!==L&&et()});function z1(_){if(!_)return null;if(_.geometry)return _.geometry;const L=(_==null?void 0:_.data)??(_==null?void 0:_.properties);return L!=null&&L.geom_4326?L.geom_4326:L!=null&&L.geom?L.geom:null}function Ue(){var _,L;(L=(_=M.value)==null?void 0:_.remove)==null||L.call(_),M.value=null}function O1(_){var O,K,ee;const L=(_==null?void 0:_.type)||((ee=(K=(O=_==null?void 0:_.features)==null?void 0:O[0])==null?void 0:K.geometry)==null?void 0:ee.type)||"";return L.includes("Polygon")?{type:"fill",paint:{"fill-color":"#0a57ff","fill-opacity":.2,"fill-outline-color":"#0a57ff"}}:L.includes("LineString")?{type:"line",paint:{"line-color":"#0a57ff","line-width":3,"line-opacity":.9}}:{type:"circle",paint:{"circle-color":"#0a57ff","circle-opacity":.9,"circle-radius":8,"circle-stroke-color":"#ffffff","circle-stroke-width":2}}}let yn=null;function ml(){const _=Array.isArray(b.query.info)?b.query.info[0]:b.query.info;return typeof _!="string"?null:_.trim()||null}function P1(_){var ee,oe;if(!_)return null;const L=(_==null?void 0:_.source)??((ee=_==null?void 0:_.layer)==null?void 0:ee.id),O=((oe=_==null?void 0:_.properties)==null?void 0:oe.id)??(_==null?void 0:_.id);return!L||O===void 0||O===null?null:`${L},${O}`.trim()||null}function Ot(_,L){if(_){if(Array.isArray(_)){if(_.length>=2&&typeof _[0]=="number"&&typeof _[1]=="number"){L.push([_[0],_[1]]);return}_.forEach(O=>Ot(O,L));return}typeof _=="object"&&(Array.isArray(_.coordinates)&&Ot(_.coordinates,L),Array.isArray(_.features)&&_.features.forEach(O=>Ot(O==null?void 0:O.geometry,L)))}}function R1(_){var fe,be;if(!_)return null;const L=_.type==="FeatureCollection"?(be=(fe=_.features)==null?void 0:fe[0])==null?void 0:be.geometry:_.type==="Feature"?_.geometry:_,O=[];if(Ot(L,O),!O.length)return null;let K=O[0][0],ee=O[0][0],oe=O[0][1],me=O[0][1];return O.forEach(([Ce,ye])=>{Ce<K&&(K=Ce),Ce>ee&&(ee=Ce),ye<oe&&(oe=ye),ye>me&&(me=ye)}),[(K+ee)/2,(oe+me)/2]}async function U1(_,L){var oe;const O=ml();if(!O)return;const K=P1(_);if(!K||K!==O||yn===O)return;const ee=R1(L);ee&&(await((oe=y.ready)==null?void 0:oe.call(y)),y.flyTo({center:ee,zoom:nm}),yn=O)}function q1(_){var ee;if(!_){Ue();return}const L=(ee=y.map)==null?void 0:ee.value,O={type:"FeatureCollection",features:[{type:"Feature",geometry:_,properties:{}}]};Ue();const K=O1(_);if(M.value=se("feature-card-highlight",{source:{type:"geojson",data:O},layer:{id:"feature-card-highlight",type:K.type,source:"feature-card-highlight",paint:K.paint}},y.map),L!=null&&L.moveLayer){const oe=()=>{try{L.moveLayer("feature-card-highlight")}catch{}},me=()=>{typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame(()=>{window.requestAnimationFrame(oe)}):setTimeout(oe,0)};me();const fe=()=>me();L.once("styledata",fe);const be=()=>{me(),L.off("styledata",fe),L.off("idle",be)};L.on("idle",be)}}function H1(_){var K,ee;const L=(_==null?void 0:_.source)||((K=_==null?void 0:_.layer)==null?void 0:K.id)||"unknown",O=((ee=_==null?void 0:_.properties)==null?void 0:ee.id)??(_==null?void 0:_.id)??"unknown";return`${L}:${O}`}async function W1(_){var oe,me,fe,be,Ce;if(!_)return null;const L=z1(_);if(L)return L;const O=((oe=_==null?void 0:_.properties)==null?void 0:oe.id)??(_==null?void 0:_.id);if(!O)return null;const K=H1(_);if(E.has(K))return E.get(K);const ee=[$.value,_==null?void 0:_.source,(me=_==null?void 0:_.layer)==null?void 0:me.id].map(ye=>typeof ye=="string"?ye.trim():"").filter(Boolean);for(const ye of ee)try{const De=await fetch(`/api/map-features/${encodeURIComponent(ye)}/${encodeURIComponent(String(O))}`);if(!De.ok)continue;const Fe=await De.json(),Ge=((fe=Fe==null?void 0:Fe.data)==null?void 0:fe.geom)||((be=Fe==null?void 0:Fe.data)==null?void 0:be.geometry)||((Ce=Fe==null?void 0:Fe.data)==null?void 0:Ce.geom_4326)||null,Vt=typeof Ge=="string"?JSON.parse(Ge):Ge;if(Vt)return E.set(K,Vt),Vt}catch{continue}return null}async function Nt(_){j.value+=1;const L=j.value;if(!_||r.value){Ue();return}if(!ge.value){Ue();return}const O=await W1(_);if(L===j.value){if(!O){Ue();return}q1(O),U1(_,O)}}return e.watch(()=>o.cardFeature.value,_=>{Nt(_)},{immediate:!0}),e.watch(()=>o.index.value,()=>{r.value||Nt(o.cardFeature.value)}),e.watch(r,_=>{_?Ue():Nt(o.cardFeature.value)}),e.watch($,()=>{!r.value&&o.cardFeature.value&&Nt(o.cardFeature.value)}),e.watch(ge,_=>{_?Nt(o.cardFeature.value):Ue()}),e.watch(()=>ml(),()=>{yn=null}),e.onBeforeUnmount(()=>{et(),Ue()}),(_,L)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[a.value?(e.openBlock(),e.createElementBlock("div",Bp,[e.createElementVNode("div",Cp,[e.createElementVNode("div",$p,[e.createElementVNode("p",vp,[r.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString(cl.value+1)+" / "+e.toDisplayString(sl.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[il.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Об’єкт "+e.toDisplayString(cl.value+1)+" / "+e.toDisplayString(sl.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Інформація про об’єкт ")],64))],64))])]),r.value&&e.unref(Pe)>1?(e.openBlock(),e.createElementBlock("div",Sp,[e.createElementVNode("button",{onClick:L[0]||(L[0]=(...O)=>e.unref(Ke)&&e.unref(Ke)(...O)),disabled:e.unref(ze)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(_n),{class:"h-4 w-4"})],8,Ap),e.createElementVNode("button",{onClick:L[1]||(L[1]=(...O)=>e.unref(Ze)&&e.unref(Ze)(...O)),disabled:e.unref(ze)===e.unref(Pe)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(En),{class:"h-4 w-4"})],8,Lp)])):!r.value&&il.value?(e.openBlock(),e.createElementBlock("div",Fp,[e.createElementVNode("button",{onClick:L[2]||(L[2]=(...O)=>e.unref(ul)&&e.unref(ul)(...O)),disabled:Qe.value===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(_n),{class:"h-4 w-4"})],8,Tp),e.createElementVNode("button",{onClick:L[3]||(L[3]=(...O)=>e.unref(dl)&&e.unref(dl)(...O)),disabled:Qe.value===Re.value-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(En),{class:"h-4 w-4"})],8,Mp)])):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:j1}," ✕ ")]),e.createElementVNode("div",Dp,[i.value?(e.openBlock(),e.createElementBlock("div",Ip," Завантаження даних… ")):s.value?(e.openBlock(),e.createElementBlock("div",jp,e.toDisplayString(s.value),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[F.value.length?(e.openBlock(),e.createElementBlock("div",zp,[e.createElementVNode("dl",Op,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(re.value,O=>(e.openBlock(),e.createElementBlock("div",{key:O.key,class:"grid grid-cols-1 gap-1 py-3 sm:grid-cols-3 sm:gap-4 even:bg-gray-50 text-[12px]"},[e.createElementVNode("dt",Pp,e.toDisplayString(O.label),1),e.createElementVNode("dd",{class:e.normalizeClass(["text-gray-700 sm:col-span-2 font-normal whitespace-pre-wrap",O.format==="badge"?"font-semibold text-yellow-800":""])},e.toDisplayString(O.value),3)]))),128))])])):Je.value.length?(e.openBlock(),e.createElementBlock("div",Rp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Je.value,(O,K)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:K},[O.type==="html"?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:O.content},null,8,Up)):(e.openBlock(),e.createBlock(Go,{key:1,title:O.componentProps.title,url:O.componentProps.url,id:O.componentProps.id,"button-text":O.componentProps.buttonText,onActivate:_e},e.createSlots({_:2},[O.slotText?{name:"default",fn:e.withCtx(()=>[e.createElementVNode("span",{innerHTML:O.slotText},null,8,qp)]),key:"0"}:void 0]),1032,["title","url","id","button-text"]))],64))),128))])):e.createCommentVNode("",!0),mt.value.length?(e.openBlock(),e.createElementBlock("div",Hp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(mt.value,O=>(e.openBlock(),e.createBlock(Go,{key:O.spec.id,title:O.componentProps.title,url:O.componentProps.url,id:O.spec.id,"button-text":O.componentProps.buttonText,onActivate:_e},null,8,["title","url","id","button-text"]))),128))])):e.createCommentVNode("",!0),Le.value?(e.openBlock(),e.createElementBlock("div",Wp,[e.createElementVNode("button",{type:"button",class:"flex items-center gap-1 justify-end w-full font-medium text-blue-600 hover:text-blue-800 transition-colors disabled:opacity-60 cursor-pointer",onClick:zt},[e.createElementVNode("span",Yp,e.toDisplayString(je.value),1),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(jt.value),{class:"h-3 w-3 stroke-[1.5px]"}))])])):e.createCommentVNode("",!0),H.value.length?(e.openBlock(),e.createElementBlock("div",Zp,[L[5]||(L[5]=e.createElementVNode("p",{class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},"Шари",-1)),e.createElementVNode("div",Kp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(H.value,O=>(e.openBlock(),e.createElementBlock("div",{key:O.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",Gp,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:Ee(O.id),onChange:K=>Be(O,K)},null,40,Xp),L[4]||(L[4]=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-width":"1.4","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e.createElementVNode("span",Jp,e.toDisplayString(O.title),1)]),O.subtitle?(e.openBlock(),e.createElementBlock("div",Qp,e.toDisplayString(O.subtitle),1)):e.createCommentVNode("",!0)]))),128))])])):e.createCommentVNode("",!0),te.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",em," Даних не знайдено. "))],64))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-f89447ba"]]),Qo=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var p,u;const n=t,o=((u=(p=e.getCurrentInstance())==null?void 0:p.appContext.config.globalProperties)==null?void 0:u.$settings)||null,{map:l,ready:r}=ve();let a=null;function i(){a==null||a.remove(),a=null}function s(m){if(!m)return null;if(typeof m=="string")try{m=JSON.parse(m)}catch{return null}return m.type==="FeatureCollection"?m:m.type==="Feature"?{type:"FeatureCollection",features:[m]}:m.type&&Array.isArray(m.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:m,properties:{}}]}:Array.isArray(m.features)?{type:"FeatureCollection",features:m.features}:m.geometry?s(m.geometry):null}function f(m){var d,x,B;return{type:"line",color:"#8e4484",width:2,opacity:((((B=(x=(d=m==null?void 0:m.features)==null?void 0:d[0])==null?void 0:x.geometry)==null?void 0:B.type)||"").includes("Polygon"),.95)}}async function y(m){const g=await fetch(m);if(!g.ok)throw new Error(String(g.status));return g.json()}async function b(m,g){if(m){const h=/^https?:\/\//.test(m)?m:new URL(m,location.origin).toString(),d=await y(h).catch(()=>null),x=s(d);if(x)return x}if(g){const h=await y(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(g)}`).catch(()=>null),d=s(h);if(d)return d}return null}async function c(){var d,x,B,M;if(!n.layerId||!l.value){i();return}typeof r=="function"&&await r().catch(()=>{});const m=n.boundary??((d=n.settingsMap)==null?void 0:d.boundary)??((x=o==null?void 0:o.map)==null?void 0:x.boundary)??null,g=n.katottg??((B=n.settingsMap)==null?void 0:B.katottg)??((M=o==null?void 0:o.map)==null?void 0:M.katottg)??null;if(!m&&!g){i();return}const h=await b(m,g);if(!h){i();return}i(),a=se(`${n.layerId}-boundary`,{source:{type:"geojson",data:h},style:f(h)},l)}return e.watch(()=>{var m,g;return[n.layerId,n.boundary,n.katottg,(m=n.settingsMap)==null?void 0:m.boundary,(g=n.settingsMap)==null?void 0:g.katottg,l.value]},()=>{c()},{immediate:!0}),e.onBeforeUnmount(i),(m,g)=>null}}),om={class:"map-center-control"},lm=["aria-label"],rm=e.defineComponent({directives:{tooltip:le.TooltipDirective},__name:"MapCenterControl",props:{center:{},zoom:{},targetCenter:{},targetZoom:{},targetLabel:{},targetAriaLabel:{}},setup(t){const n=t,{map:o,ready:l}=ve(),r=e.ref(null),a=e.ref(null),i=e.ref(null),s=e.ref(null);function f(m){if(Array.isArray(m)&&m.length>=2){const[g,h]=m.slice(0,2).map(d=>Number(d));return Number.isNaN(g)||Number.isNaN(h)?null:[g,h]}if(m&&typeof m=="object"){const g=m,h=g.lng??g.lon??g.long??g.x,d=g.lat??g.y;if(h!=null&&d!=null){const x=Number(h),B=Number(d);if(!Number.isNaN(x)&&!Number.isNaN(B))return[x,B]}}if(typeof m=="string"){const g=m.split(",").map(h=>Number(h.trim()));if(g.length>=2&&g.every(h=>!Number.isNaN(h)))return[g[0],g[1]]}return null}e.watch(()=>n.center,m=>{const g=f(m);g&&(r.value=g)},{immediate:!0}),e.watch(()=>n.zoom,m=>{const g=Number(m);Number.isNaN(g)||(a.value=g)},{immediate:!0}),e.watch(()=>n.targetCenter,m=>{i.value=f(m)},{immediate:!0}),e.watch(()=>n.targetZoom,m=>{const g=Number(m);s.value=Number.isNaN(g)?null:g},{immediate:!0});const y=e.computed(()=>{var m;return((m=n.targetLabel)==null?void 0:m.trim())||"Точка"}),b=e.computed(()=>n.targetAriaLabel||"Перейти до точки"),c=e.computed(()=>!!i.value);e.onMounted(async()=>{await(l==null?void 0:l());const m=o.value;if(m){if(!r.value){const g=m.getCenter();r.value=[g.lng,g.lat]}a.value==null&&(a.value=m.getZoom())}});function p(){const m=o.value;if(!m)return;const g=r.value||(()=>{const d=m.getCenter();return[d.lng,d.lat]})(),h=a.value??m.getZoom();m.flyTo({center:g,zoom:h})}function u(){const m=o.value;if(!m||!i.value)return;const g=s.value??a.value??m.getZoom();m.flyTo({center:i.value,zoom:g})}return(m,g)=>{const h=e.resolveDirective("tooltip");return e.openBlock(),e.createElementBlock("div",om,[c.value?e.createCommentVNode("",!0):e.withDirectives((e.openBlock(),e.createElementBlock("button",{key:0,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(p,["stop"])},[e.createVNode(e.unref(vl),{class:"w-4 h-4"})])),[[h,"Центр мапи"]]),c.value?e.withDirectives((e.openBlock(),e.createElementBlock("button",{key:1,id:"goto-target-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":b.value,onClick:e.withModifiers(u,["stop"])},[e.createVNode(e.unref(Sl),{class:"w-4 h-4"})],8,lm)),[[h,y.value]]):e.createCommentVNode("",!0)])}}}),mn=Q(rm,[["__scopeId","data-v-92671a57"]]),am={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},im={class:"flex-1 relative overflow-hidden"},sm={class:"absolute top-0 left-0 w-full z-20"},cm={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},dm={class:"flex items-center gap-3"},um={class:"font-semibold text-lg text-gray-800 line-clamp-1"},pm={class:"text-xs text-gray-500 truncate"},mm=["title"],fm={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]"},gm={class:"relative w-full h-full"},ym={style:{top:"17px",left:"230px",position:"absolute","z-index":"1"}},hm={class:"absolute top-4 left-4 z-20"},xm={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},bm={class:"absolute bottom-4 left-4 z-20"},km={class:"w-[650px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},wm={class:"flex-1 flex flex-col h-full"},_m={class:"px-3 pt-3 pb-2 border-b border-gray-100"},Em={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"},Nm=["aria-selected","onClick"],Vm={class:"leading-none"},Bm={class:"flex flex-col flex-1 overflow-y-hidden p-3"},Cm=Q(e.defineComponent({__name:"service",setup(t){var U,D;const n=pe.useRoute(),o=pe.useRouter(),{id:l}=n.params,r=e.ref(null),a=e.ref({}),i=e.ref(null),s=((D=(U=e.getCurrentInstance())==null?void 0:U.appContext.config.globalProperties)==null?void 0:D.$settings)||null,f=e.ref(null),y=e.ref(""),b=e.ref([]),c=e.ref([]),p=e.ref([]),u=e.ref("list"),m=e.ref(""),g=e.ref([]),h=e.computed(()=>{var S,k;return((S=i.value)==null?void 0:S.id)??((k=i.value)==null?void 0:k.service_id)??null}),d=e.computed(()=>{const S=(s==null?void 0:s.map)||null,k=(S==null?void 0:S.boundary)??null,v=(S==null?void 0:S.katottg)??null;return!k&&!v?null:{boundary:k,katottg:v}}),x=[{key:"style",label:"Стиль",icon:Uo},{key:"popup",label:"Попап",icon:au},{key:"filter",label:"Фільтр",icon:du},{key:"legend",label:"Легенда",icon:Jd},{key:"card",label:"Картка",icon:nu}],B=x.map(S=>S.key),M=e.ref("style");e.onMounted(async()=>{const S=n.query.tab;S&&B.includes(S)&&(M.value=S),await V()}),e.watch(M,S=>{n.query.tab!==S&&o.replace({query:{...n.query,tab:S}})}),e.watch(()=>n.query.tab,S=>{S&&B.includes(S)&&M.value!==S&&(M.value=S)});function j(S){if(!S)return null;try{return JSON.parse(JSON.stringify(S))}catch(k){return console.warn("Failed to clone style",k),null}}function E(S){if(!S)return null;if(typeof S=="string")try{return on(Ro.load(S)||null)}catch(k){return console.warn("Failed to parse style yaml",k),null}return on(j(S))}const V=async()=>{try{const S=await fetch(`/api/gis-service/${l}`);if(!S.ok)throw new Error(`${S.status}`);const k=await S.json();a.value=k||{},r.value=l;const v=E(k.style);i.value=k?{...k,style:j(v)}:null,f.value=v,y.value=typeof(k==null?void 0:k.style)=="string"?k.style:v?Ro.dump(v):"",c.value=(k==null?void 0:k.popup)||[],u.value=k.card_mode==="html"?"html":"list",p.value=k.card,m.value=k.html,b.value=(k==null?void 0:k.legend)||[],g.value=(k==null?void 0:k.filters)||[]}catch(S){console.error("Failed to fetch map info",S)}};e.watch(()=>{var S;return(S=i.value)==null?void 0:S.style},S=>{f.value=E(S)},{deep:!0});async function $(S,k){await I({[S]:k},S)}function A(){const S=j(f.value);i.value=i.value?{...i.value,style:S}:i.value}async function I(S,k){if(i.value={...i.value||{},...S},typeof S.html<"u"&&(a.value={...a.value||{},html:S.html}),!!h.value)try{if(!(await fetch(`/api/gis-service/${h.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(S)})).ok)throw new Error("Save failed");le.notify({type:"success",title:"Успіх",message:`${k} saved`}),await V()}catch(v){le.notify({type:"error",title:"Помилка",message:`Failed to save ${k}`}),console.error(v)}}async function q(S,k){if(S!=="card"){await $(S,k);return}const v=(k==null?void 0:k.card_mode)==="html"?"html":"list",T=v==="html"&&typeof(k==null?void 0:k.html)=="string"?k.html:"",C=(v==="html"?[]:null)||(Array.isArray(k==null?void 0:k.list)?k.list:[]);p.value=C,u.value=v,m.value=T;const N={card_mode:v};v==="html"&&(N.html=T),v==="list"&&(N.card=C),await I(N,"card")}return(S,k)=>{var v,T,C,N;return e.openBlock(),e.createElementBlock("div",am,[e.createElementVNode("div",im,[e.createElementVNode("div",sm,[e.createElementVNode("div",cm,[e.createElementVNode("div",dm,[e.createElementVNode("button",{onClick:k[0]||(k[0]=w=>S.$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",um,e.toDisplayString((v=i.value)==null?void 0:v.name),1),e.createElementVNode("div",pm," Сервіс: "+e.toDisplayString((T=i.value)==null?void 0:T.service_key),1)])]),e.createElementVNode("div",{class:"max-w-xl text-xs text-gray-600 truncate",title:(C=i.value)==null?void 0:C.description},e.toDisplayString((N=i.value)==null?void 0:N.description),9,mm)])]),e.createElementVNode("div",fm,[e.createElementVNode("div",gm,[e.createVNode(Tt,null,{default:e.withCtx(()=>{var w,F,P,R,G,W,Y;return[(w=i.value)!=null&&w.service_id?(e.openBlock(),e.createBlock(np,{key:0,id:(F=i.value)==null?void 0:F.service_id,layer:i.value,"style-spec":((P=i.value)==null?void 0:P.style)||null},null,8,["id","layer","style-spec"])):e.createCommentVNode("",!0),h.value?(e.openBlock(),e.createBlock(Qo,{key:1,"layer-id":h.value,boundary:((R=i.value)==null?void 0:R.boundary)||((G=d.value)==null?void 0:G.boundary)||null,katottg:((W=i.value)==null?void 0:W.katottg)||((Y=d.value)==null?void 0:Y.katottg)||null},null,8,["layer-id","boundary","katottg"])):e.createCommentVNode("",!0),e.createElementVNode("div",ym,[h.value?(e.openBlock(),e.createBlock(dn,{key:0,"layer-id":h.value,filters:g.value},null,8,["layer-id","filters"])):e.createCommentVNode("",!0)]),k[11]||(k[11]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createElementVNode("div",hm,[e.createVNode(_t)]),e.createElementVNode("div",xm,[e.createVNode(mn),a.value.center?(e.openBlock(),e.createBlock(mn,{key:0,targetCenter:a.value.center,targetLabel:"Ценр даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",bm,[e.createVNode(Et,{items:b.value||null},null,8,["items"])]),e.createVNode(Ko),e.createVNode(Jo,{html:a.value.html},null,8,["html"])]}),_:1})])])]),e.createElementVNode("div",km,[e.createElementVNode("div",wm,[e.createElementVNode("div",_m,[e.createElementVNode("div",Em,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(x,w=>e.createElementVNode("button",{key:w.key,type:"button",role:"tab","aria-selected":M.value===w.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",M.value===w.key?"bg-white shadow-sm text-gray-700":""]),onClick:F=>M.value=w.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(w.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",Vm,e.toDisplayString(w.label),1)],10,Nm)),64))])]),e.createElementVNode("div",Bm,[M.value==="style"?(e.openBlock(),e.createBlock(hu,{key:0,token:h.value,"style-text":y.value,"style-yaml":f.value,"onUpdate:styleYaml":k[1]||(k[1]=w=>f.value=w),"onUpdate:styleText":k[2]||(k[2]=w=>y.value=w),onUpdate:A},null,8,["token","style-text","style-yaml"])):M.value==="legend"?(e.openBlock(),e.createBlock(Hu,{key:1,token:h.value,columns:b.value,"onUpdate:columns":k[3]||(k[3]=w=>b.value=w),onSave:k[4]||(k[4]=w=>$("legend",w))},null,8,["token","columns"])):M.value==="popup"?(e.openBlock(),e.createBlock(Iu,{key:2,token:h.value,columns:c.value,fields:a.value.fields,"onUpdate:columns":k[5]||(k[5]=w=>c.value=w),onSave:k[6]||(k[6]=w=>$("popup",w))},null,8,["token","columns","fields"])):M.value==="card"?(e.openBlock(),e.createBlock(Qu,{key:3,token:h.value,columns:p.value,fields:a.value.fields,"view-mode":u.value,html:m.value,"onUpdate:columns":k[7]||(k[7]=w=>p.value=w),onSave:q},null,8,["token","columns","fields","view-mode","html"])):M.value==="filter"?(e.openBlock(),e.createBlock(tp,{key:4,token:h.value,fields:a.value.fields,columns:g.value,"onUpdate:columns":k[8]||(k[8]=w=>g.value=w),onSave:k[9]||(k[9]=w=>$("filters",w))},null,8,["token","fields","columns"])):e.createCommentVNode("",!0)])])])])}}}),[["__scopeId","data-v-453aa0f6"]]),$m={class:"flex-1 overflow-y-auto p-4 sm:p-6"},vm={class:"space-y-6"},Sm={class:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm"},Am={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4"},Lm={class:"text-xs text-gray-500 mb-1"},Fm={class:"text-base font-semibold text-gray-900"},Tm={class:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm"},Mm={class:"space-y-4"},Dm={class:"bg-gradient-to-br from-blue-50 to-blue-100/30 p-4 rounded-lg border border-blue-200"},Im={class:"text-sm font-semibold text-gray-900"},jm={class:"text-xs text-gray-600 mt-1"},zm={class:"grid grid-cols-2 gap-3"},Om={class:"text-xs text-gray-500 mb-1"},Pm={class:"text-sm font-semibold text-gray-900"},Rm={class:"bg-gray-50 p-4 rounded-lg"},Um={class:"grid grid-cols-2 gap-4"},qm={class:"text-xs text-gray-500 mb-1"},Hm={class:"text-sm font-semibold text-gray-900"},Wm={class:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm"},Ym={class:"grid grid-cols-1 sm:grid-cols-2 gap-4"},Zm={class:"space-y-2"},Km={class:"text-gray-600"},Gm={class:"font-semibold text-gray-900"},Xm={class:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm"},Jm={class:"grid grid-cols-1 sm:grid-cols-2 gap-4"},Qm={class:"text-xs text-gray-500 mb-1"},ef={class:"text-sm font-medium text-gray-900"},tf=e.defineComponent({__name:"raster-info-tab",props:{details:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",$m,[e.createElementVNode("div",vm,[o[6]||(o[6]=e.createElementVNode("div",null,[e.createElementVNode("h3",{class:"text-lg font-semibold text-gray-900 mb-4"},"Інформація про растр")],-1)),e.createElementVNode("div",Sm,[o[0]||(o[0]=e.createElementVNode("div",{class:"mb-4"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Основні параметри")],-1)),e.createElementVNode("div",Am,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.baseParams,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label,class:"bg-gray-50 p-4 rounded-lg"},[e.createElementVNode("p",Lm,e.toDisplayString(l.label),1),e.createElementVNode("p",Fm,e.toDisplayString(l.value),1)]))),128))])]),e.createElementVNode("div",Tm,[o[3]||(o[3]=e.createElementVNode("div",{class:"mb-4"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Просторова інформація")],-1)),e.createElementVNode("div",Mm,[e.createElementVNode("div",null,[o[1]||(o[1]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Система координат",-1)),e.createElementVNode("div",Dm,[e.createElementVNode("p",Im,e.toDisplayString(t.details.spatial.crs.code),1),e.createElementVNode("p",jm,e.toDisplayString(t.details.spatial.crs.description),1)])]),e.createElementVNode("div",null,[o[2]||(o[2]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Межі покриття",-1)),e.createElementVNode("div",zm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.bounds,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label,class:"bg-gray-50 p-3 rounded-lg border border-gray-200"},[e.createElementVNode("p",Om,e.toDisplayString(l.label),1),e.createElementVNode("p",Pm,e.toDisplayString(l.value),1)]))),128))])]),e.createElementVNode("div",Rm,[e.createElementVNode("div",Um,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.resolution,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label},[e.createElementVNode("p",qm,e.toDisplayString(l.label),1),e.createElementVNode("p",Hm,e.toDisplayString(l.value),1)]))),128))])])])]),e.createElementVNode("div",Wm,[o[4]||(o[4]=e.createElementVNode("div",{class:"mb-4"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Статистика даних")],-1)),e.createElementVNode("div",Ym,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.statistics,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label,class:e.normalizeClass(["p-4 rounded-lg border",l.cardClass])},[e.createElementVNode("p",{class:e.normalizeClass(["text-xs font-medium mb-2",l.titleClass])},e.toDisplayString(l.label),3),e.createElementVNode("div",Zm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.metrics,r=>(e.openBlock(),e.createElementBlock("div",{class:"flex justify-between text-xs",key:r.label},[e.createElementVNode("span",Km,e.toDisplayString(r.label)+":",1),e.createElementVNode("span",Gm,e.toDisplayString(r.value),1)]))),128))])],2))),128))])]),e.createElementVNode("div",Xm,[o[5]||(o[5]=e.createElementVNode("div",{class:"mb-4"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Технічні деталі")],-1)),e.createElementVNode("div",Jm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.technical,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label},[e.createElementVNode("p",Qm,e.toDisplayString(l.label),1),e.createElementVNode("p",ef,e.toDisplayString(l.value),1)]))),128))])])])]))}}),nf={class:"flex-1 overflow-y-auto space-y-3 pr-1"},of={class:"font-medium text-sm text-gray-800"},lf={class:"text-xs text-gray-500"},rf=e.defineComponent({__name:"raster-files-tab",props:{files:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",nf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.files,l=>(e.openBlock(),e.createElementBlock("div",{key:l.name,class:"border border-gray-100 rounded-xl p-4 shadow-sm bg-white flex items-start justify-between"},[e.createElementVNode("div",null,[e.createElementVNode("p",of,e.toDisplayString(l.name),1),e.createElementVNode("p",lf,e.toDisplayString(l.resolution)+" • "+e.toDisplayString(l.size),1)]),e.createElementVNode("span",{class:e.normalizeClass(["text-[11px] font-semibold px-2 py-0.5 rounded-full",l.statusClass])},e.toDisplayString(l.status),3)]))),128))]))}}),af={},sf={xmlns:"http://www.w3.org/2000/svg",width:"12px",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"};function cf(t,n){return e.openBlock(),e.createElementBlock("svg",sf,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M20,16v4a2,2,0,0,1-2,2H4a2,2,0,0,1-2-2V6A2,2,0,0,1,4,4H8",fill:"none",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1),e.createElementVNode("polygon",{fill:"none",points:"12.5 15.8 22 6.2 17.8 2 8.3 11.5 8 16 12.5 15.8",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)])])}const df=Q(af,[["render",cf]]),uf={},pf={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"};function mf(t,n){return e.openBlock(),e.createElementBlock("svg",pf,[...n[0]||(n[0]=[e.createElementVNode("circle",{cx:"12",cy:"12",r:"9"},null,-1),e.createElementVNode("line",{x1:"12",y1:"8",x2:"12",y2:"8"},null,-1),e.createElementVNode("path",{d:"M11 12h1v4h1"},null,-1)])])}const ff=Q(uf,[["render",mf]]),gf={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},yf={class:"flex-1 relative overflow-hidden"},hf={class:"absolute top-0 left-0 w-full z-20"},xf={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},bf={class:"flex items-center gap-3"},kf={class:"font-semibold text-lg text-gray-800 line-clamp-1"},wf={class:"text-xs text-gray-500 truncate"},_f=["title"],Ef={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]"},Nf={class:"relative w-full h-full"},Vf={class:"absolute top-4 left-4 z-20"},Bf={class:"absolute bottom-4 left-4 z-20"},Cf={class:"w-[520px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},$f={class:"flex-1 flex flex-col h-full"},vf={class:"px-3 pt-3 pb-2 border-b border-gray-100"},Sf={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-2 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},Af=["aria-selected","onClick"],Lf={class:"leading-none"},Ff={class:"flex flex-col flex-1 overflow-y-hidden p-4"},Tf="3600301717964457703",Mf=e.defineComponent({__name:"raster",setup(t){const n=pe.useRouter(),o=pe.useRoute(),l=e.computed(()=>{var c;return((c=o.params)==null?void 0:c.id)||Tf}),r=e.computed(()=>({id:l.value,name:"Фрагмент растра 30 см",description:"Попередній перегляд растрового шару. Реальні метадані підтягнемо після підключення API.",coverage:"Київська область, 2024 рік",crs:"EPSG:4326",source:"ДП «Центр ДЗК»",updatedAt:"14 травня 2024"})),a=[{key:"files",label:"Файли",icon:df},{key:"info",label:"Інформація",icon:ff}],i=a.map(c=>c.key),s=e.ref(i.includes(o.query.tab)?o.query.tab:"files");e.watch(()=>o.query.tab,c=>{c&&i.includes(c)&&s.value!==c&&(s.value=c)}),e.watch(s,c=>{o.query.tab!==c&&n.replace({query:{...o.query,tab:c}})});const f=[{label:"Покриття 2024",color:"#0ea5e9"},{label:"Попередні дані 2023",color:"#94a3b8"}],y=e.ref([{name:"mosaic_01.tif",resolution:"0.3 м/піксель",size:"245 MB",status:"Готово",statusClass:"bg-emerald-50 text-emerald-600 border border-emerald-100"},{name:"mosaic_01.tfw",resolution:"georeferencing",size:"4 KB",status:"Готово",statusClass:"bg-emerald-50 text-emerald-600 border border-emerald-100"},{name:"metadata.xml",resolution:"опис",size:"8 KB",status:"Чернетка",statusClass:"bg-amber-50 text-amber-600 border border-amber-100"}]),b=e.computed(()=>({baseParams:[{label:"Розмір растру",value:"2048 × 1536 px"},{label:"Формат файлу",value:"GeoTIFF"},{label:"Розмір файлу",value:"45.2 MB"},{label:"Кількість каналів",value:"4 (RGBA)"},{label:"Глибина кольору",value:"8 біт/канал"},{label:"Стиснення",value:"LZW"}],spatial:{crs:{code:"EPSG:4326",description:"WGS 84 — World Geodetic System 1984"},bounds:[{label:"Північ",value:"52.3791° N"},{label:"Схід",value:"31.1656° E"},{label:"Південь",value:"44.3864° N"},{label:"Захід",value:"22.1371° E"}],resolution:[{label:"Роздільна здатність X",value:"0.00417° (~460 м)"},{label:"Роздільна здатність Y",value:"0.00417° (~460 м)"}]},statistics:[{label:"Канал 1 (Червоний)",cardClass:"bg-gradient-to-br from-green-50 to-green-100/30 border-green-200",titleClass:"text-green-900",metrics:[{label:"Min",value:"0"},{label:"Max",value:"255"},{label:"Середнє",value:"127.3"}]},{label:"Канал 2 (Зелений)",cardClass:"bg-gradient-to-br from-blue-50 to-blue-100/30 border-blue-200",titleClass:"text-blue-900",metrics:[{label:"Min",value:"0"},{label:"Max",value:"255"},{label:"Середнє",value:"134.8"}]},{label:"Канал 3 (Синій)",cardClass:"bg-gradient-to-br from-purple-50 to-purple-100/30 border-purple-200",titleClass:"text-purple-900",metrics:[{label:"Min",value:"0"},{label:"Max",value:"255"},{label:"Середнє",value:"118.5"}]},{label:"Канал 4 (Альфа)",cardClass:"bg-gradient-to-br from-gray-50 to-gray-100/30 border-gray-200",titleClass:"text-gray-900",metrics:[{label:"Min",value:"0"},{label:"Max",value:"255"},{label:"Середнє",value:"255.0"}]}],technical:[{label:"Тип даних",value:"Unsigned Integer 8-bit"},{label:"Інтерливінг",value:"Pixel"},{label:"Значення NoData",value:"0"},{label:"Кольорова інтерпретація",value:"RGB + Alpha"},{label:"Тайлування",value:"256 × 256"},{label:"Оверв'ю",value:"4 рівні"}]}));return(c,p)=>(e.openBlock(),e.createElementBlock("div",gf,[e.createElementVNode("div",yf,[e.createElementVNode("div",hf,[e.createElementVNode("div",xf,[e.createElementVNode("div",bf,[e.createElementVNode("button",{type:"button",onClick:p[0]||(p[0]=u=>e.unref(n).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"},[...p[1]||(p[1]=[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",kf,e.toDisplayString(r.value.name),1),e.createElementVNode("div",wf," Растер ID: "+e.toDisplayString(r.value.id),1)])]),e.createElementVNode("div",{class:"max-w-xl text-xs text-gray-600 truncate",title:r.value.description},e.toDisplayString(r.value.description),9,_f)])]),e.createElementVNode("div",Ef,[e.createElementVNode("div",Nf,[e.createVNode(Tt,null,{default:e.withCtx(()=>[e.createElementVNode("div",Vf,[e.createVNode(_t)]),e.createElementVNode("div",Bf,[e.createVNode(Et,{items:f})])]),_:1})])])]),e.createElementVNode("div",Cf,[e.createElementVNode("div",$f,[e.createElementVNode("div",vf,[e.createElementVNode("div",Sf,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,u=>e.createElementVNode("button",{key:u.key,type:"button",role:"tab","aria-selected":s.value===u.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",s.value===u.key?"bg-white shadow-sm text-gray-700":""]),onClick:m=>s.value=u.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(u.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",Lf,e.toDisplayString(u.label),1)],10,Af)),64))])]),e.createElementVNode("div",Ff,[s.value==="files"?(e.openBlock(),e.createBlock(rf,{key:0,files:y.value},null,8,["files"])):(e.openBlock(),e.createBlock(tf,{key:1,details:b.value},null,8,["details"]))])])])]))}}),Df={},If={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-table"};function jf(t,n){return e.openBlock(),e.createElementBlock("svg",If,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M12 3v18"},null,-1),e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"},null,-1),e.createElementVNode("path",{d:"M3 9h18"},null,-1),e.createElementVNode("path",{d:"M3 15h18"},null,-1)])])}const zf=Q(Df,[["render",jf]]),Of={class:"flex flex-col h-full"},Pf={class:"flex justify-end mb-3 gap-2"},Rf=e.defineComponent({__name:"cartocss-css-tab",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,l=n,r=e.computed({get:()=>o.modelValue,set:a=>l("update:modelValue",a)});return(a,i)=>(e.openBlock(),e.createElementBlock("div",Of,[e.createElementVNode("div",Pf,[e.createElementVNode("button",{type:"button",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",onClick:i[0]||(i[0]=s=>a.$emit("save"))},[...i[2]||(i[2]=[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:"h-3.5 w-3.5"},[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 2H5a 2 2 0 0 1-2-2V5a 2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a 1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти ",-1)])])]),e.createVNode(Ft,{modelValue:r.value,"onUpdate:modelValue":i[1]||(i[1]=s=>r.value=s),language:"css",class:"flex-1 rounded-lg overflow-hidden"},null,8,["modelValue"])]))}}),Uf={class:"flex flex-col flex-1 min-h-0"},qf={class:"flex justify-between mb-3 gap-2"},Hf={class:"text-left"},Wf={class:"font-medium text-gray-900"},Yf={class:"text-xs text-gray-500"},Zf={class:"flex justify-center gap-2"},Kf=["checked","onChange"],Gf={class:"text-sm font-medium text-gray-900"},Xf=e.defineComponent({__name:"cartocss-data-tab",props:{modelValue:{default:[]},modelModifiers:{}},emits:e.mergeModels(["save"],["update:modelValue"]),setup(t,{emit:n}){const o=[{key:"table",label:"Таблиця",slot:"datasetCell"},{key:"active",label:"Активний",slot:"activeCell",width:"140px"},{key:"zoom",label:"Зум",slot:"zoomCell",width:"140px"}],l={table:{type:"text",label:"Таблиця",validators:["required"]},caption:{type:"text",label:"Підпис",validators:["required"]},active:{type:"switcher",label:"Активний"},zoom:{type:"number",label:"Зум"}},r=e.defineAsyncComponent(()=>import("@opengis/core").then(g=>g.VsModal)),a=e.defineAsyncComponent(()=>import("@opengis/form")),i=e.useModel(t,"modelValue"),s=n,f=e.ref(!1),y=e.ref({table:"",caption:"",zoom:"0-12",active:!0}),b={table:{type:"text",label:"Таблиця",validators:["required"]},caption:{type:"text",label:"Підпис",validators:["required"]},active:{type:"switcher",label:"Активна"},zoom:{type:"text",label:"Зум",placeholder:"0-12"}};function c(){y.value={table:"",caption:"",zoom:"",active:!0},f.value=!0}function p(){f.value=!1}function u(){var d,x;const g=(d=y.value.table)==null?void 0:d.trim(),h=(x=y.value.caption)==null?void 0:x.trim();if(!g||!h){le.notify({type:"warning",title:"Перевірка",message:"Вкажіть таблицю та підпис"});return}i.value=[...Array.isArray(i.value)?i.value:[],{...y.value,table:g,caption:h}],f.value=!1}function m(g,h){var x;const d=((x=h==null?void 0:h.target)==null?void 0:x.checked)??!1;g.active=d,i.value=Array.isArray(i.value)?[...i.value]:[]}return(g,h)=>(e.openBlock(),e.createElementBlock("div",Uf,[e.createElementVNode("div",qf,[e.createElementVNode("button",{type:"button",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",onClick:c}," Додати таблицю "),e.createElementVNode("button",{type:"button",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",onClick:h[0]||(h[0]=d=>s("save"))}," Зберегти ")]),e.createVNode(qe,{modelValue:i.value,"onUpdate:modelValue":h[1]||(h[1]=d=>i.value=d),"columns-scheme":o,"form-scheme":l,"add-button":!1,"main-col-width":"260px"},{datasetCell:e.withCtx(({row:d})=>[e.createElementVNode("div",Hf,[e.createElementVNode("div",Wf,e.toDisplayString(d.table),1),e.createElementVNode("div",Yf,e.toDisplayString(d.caption),1)])]),activeCell:e.withCtx(({row:d})=>[e.createElementVNode("label",Zf,[e.createElementVNode("input",{type:"checkbox",class:"h-4 w-4 text-sky-500 border-gray-300 rounded focus:ring-sky-300",checked:d.active,onChange:x=>m(d,x)},null,40,Kf)])]),zoomCell:e.withCtx(({row:d})=>[e.createElementVNode("div",Gf,e.toDisplayString(d.zoom),1)]),_:1},8,["modelValue"]),e.createVNode(e.unref(r),{teleport:"#modal",visible:f.value,"onUpdate:visible":h[3]||(h[3]=d=>f.value=d),title:"Нова таблиця CartoCSS"},{footer:e.withCtx(()=>[e.createElementVNode("div",{class:"flex justify-end gap-2 p-4 border-т"},[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:p},"Скасувати"),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:u},"Додати")])]),default:e.withCtx(()=>[e.createVNode(e.unref(a),{values:y.value,"onUpdate:values":h[2]||(h[2]=d=>y.value=d),schema:b},null,8,["values"])]),_:1},8,["visible"])]))}}),Jf={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},Qf={class:"flex-1 relative overflow-hidden"},e0={class:"absolute top-0 left-0 w-full z-20"},t0={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},n0={class:"flex items-center gap-3"},o0={class:"font-semibold text-lg text-gray-800 line-clamp-1"},l0={class:"text-xs text-gray-500 truncate"},r0=["title"],a0={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]"},i0={class:"relative w-full h-full"},s0={class:"absolute top-4 left-4 z-20"},c0={class:"absolute bottom-4 left-4 z-20"},d0={class:"w-[650px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},u0={class:"flex-1 flex flex-col h-full"},p0={class:"px-3 pt-3 pb-2 border-b border-gray-100"},m0={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-2 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},f0=["aria-selected","onClick"],g0={class:"leading-none"},y0={class:"flex flex-col flex-1 overflow-y-hidden p-4"},h0={key:0,class:"flex-1 flex items-center justify-center text-sm text-gray-500"},x0="cartocss-demo-001",b0=e.defineComponent({__name:"cartocss",setup(t){const n=pe.useRouter(),o=pe.useRoute(),l=[{label:"Основні дороги",color:"#e11d48"},{label:"Населені пункти",color:"#f97316"},{label:"Фон",color:"#0ea5e9"}],r=[{key:"css",label:"CSS",icon:Uo},{key:"data",label:"Дані",icon:zf}],a=r.map(d=>d.key),i=e.ref(a.includes(o.query.tab)?o.query.tab:"css"),s=e.computed(()=>o.params.id||x0),f=e.ref({id:s.value,name:"",description:""}),y=e.ref(""),b=e.ref([]),c=e.ref(!1),p=e.ref(!1);e.watch(s,d=>{d&&g(d)},{immediate:!0}),e.watch(()=>o.query.tab,d=>{d&&a.includes(d)&&i.value!==d&&(i.value=d)}),e.watch(i,d=>{o.query.tab!==d&&n.replace({query:{...o.query,tab:d}})});function u(d){if(!d)return null;if(typeof d=="string")try{return JSON.parse(d)}catch(x){return console.warn("Failed to parse CartoCSS config",x),null}return typeof d=="object"?d:null}function m(d){const x=Array.isArray(d)?d:d==null?void 0:d.datasets;return Array.isArray(x)?x.map((B,M)=>({table:(B==null?void 0:B.table)||(B==null?void 0:B.id)||`dataset_${M+1}`,caption:(B==null?void 0:B.caption)||(B==null?void 0:B.label)||"Без підпису",active:typeof(B==null?void 0:B.active)=="boolean"?B.active:!0,zoom:typeof(B==null?void 0:B.zoom)>"u"?"0-12":String(B.zoom)})):[]}async function g(d){c.value=!0;try{const x=await fetch(`/api/cartocss/${d}`);if(!x.ok)throw new Error(`Failed to load cartocss: ${x.status}`);const B=await x.json(),M=(B==null?void 0:B.message)||B||{};f.value={id:M.cartocss_key||d,name:M.name||f.value.name,description:M.description||f.value.description},y.value=typeof M.style=="string"?M.style:"";const j=u(M.config);b.value=m(j)}catch(x){console.error("Failed to fetch CartoCSS",x)}finally{c.value=!1}}async function h(){if(s.value){p.value=!0;try{const d={style:y.value||"",config:JSON.stringify(b.value)},x=await fetch(`/api/cartocss/${s.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)});if(!x.ok)throw new Error(`Failed to save cartocss: ${x.status}`);le.notify({type:"success",title:"Збережено",message:"CartoCSS оновлено"}),await g(s.value)}catch(d){console.error("Failed to save CartoCSS",d),le.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти CartoCSS"})}finally{p.value=!1}}}return(d,x)=>(e.openBlock(),e.createElementBlock("div",Jf,[e.createElementVNode("div",Qf,[e.createElementVNode("div",e0,[e.createElementVNode("div",t0,[e.createElementVNode("div",n0,[e.createElementVNode("button",{type:"button",onClick:x[0]||(x[0]=B=>e.unref(n).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"},[...x[3]||(x[3]=[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",o0,e.toDisplayString(f.value.name),1),e.createElementVNode("div",l0," CartoCSS ID: "+e.toDisplayString(f.value.id),1)])]),e.createElementVNode("div",{class:"max-w-xl text-xs text-gray-600 truncate",title:f.value.description},e.toDisplayString(f.value.description),9,r0)])]),e.createElementVNode("div",a0,[e.createElementVNode("div",i0,[e.createVNode(Tt,null,{default:e.withCtx(()=>[e.createElementVNode("div",s0,[e.createVNode(_t)]),e.createElementVNode("div",c0,[e.createVNode(Et,{items:l})])]),_:1})])])]),e.createElementVNode("div",d0,[e.createElementVNode("div",u0,[e.createElementVNode("div",p0,[e.createElementVNode("div",m0,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(r,B=>e.createElementVNode("button",{key:B.key,type:"button",role:"tab","aria-selected":i.value===B.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",i.value===B.key?"bg-white shadow-sm text-gray-700":""]),onClick:M=>i.value=B.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(B.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",g0,e.toDisplayString(B.label),1)],10,f0)),64))])]),e.createElementVNode("div",y0,[c.value?(e.openBlock(),e.createElementBlock("div",h0," Завантаження стилю… ")):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[i.value==="css"?(e.openBlock(),e.createBlock(Rf,{key:0,modelValue:y.value,"onUpdate:modelValue":x[1]||(x[1]=B=>y.value=B),class:"flex-1 min-h-0",onSave:h},null,8,["modelValue"])):(e.openBlock(),e.createBlock(Xf,{key:1,modelValue:b.value,"onUpdate:modelValue":x[2]||(x[2]=B=>b.value=B),class:"flex-1 min-h-0 flex flex-col",onSave:h},null,8,["modelValue"]))],64))])])])]))}}),k0={class:"w-full mb-6"},w0={class:"flex items-center w-full h-10 max-w-md p-1 bg-white border border-gray-200 rounded-md"},_0=["onClick"],E0=e.defineComponent({__name:"MapSettingsTabs",props:{tabs:{},activeTab:{}},emits:["update:activeTab"],setup(t,{emit:n}){const o=n,l=r=>{o("update:activeTab",r)};return(r,a)=>(e.openBlock(),e.createElementBlock("div",k0,[e.createElementVNode("div",w0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.tabs,i=>(e.openBlock(),e.createElementBlock("button",{key:i.id,onClick:s=>l(i.id),class:e.normalizeClass(["inline-flex flex-1 items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium transition-all",i.id===t.activeTab?"bg-blue-50 text-blue-700":"text-gray-600 hover:bg-gray-50"])},e.toDisplayString(i.name),11,_0))),128))])]))}}),N0={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},V0=e.defineComponent({__name:"GeneralSettings",props:{schema:{},modelValue:{},loading:{type:Boolean},form:{}},emits:["update:modelValue","update:form"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/form")),l=t,r=n,a=e.computed({get:()=>l.modelValue,set:s=>r("update:modelValue",s)}),i=e.computed({get:()=>l.form,set:s=>r("update:form",s)});return(s,f)=>(e.openBlock(),e.createElementBlock("section",N0,[f[2]||(f[2]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Основна інформація ",-1)),t.loading?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(o),{key:0,schema:t.schema,values:a.value,"onUpdate:values":f[0]||(f[0]=y=>a.value=y),form:i.value,"onUpdate:form":f[1]||(f[1]=y=>i.value=y)},null,8,["schema","values","form"]))]))}}),B0={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},C0=e.defineComponent({__name:"LayerSettings",props:{layerIDs:{},layerNames:{},options:{}},emits:["update:layerIDs","update:layerNames"],setup(t,{emit:n}){const o=t,l=n,r=e.computed({get:()=>o.layerIDs,set:a=>l("update:layerIDs",a)});return e.computed({get:()=>o.layerNames,set:a=>l("update:layerNames",a)}),(a,i)=>(e.openBlock(),e.createElementBlock("section",B0,[i[1]||(i[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"},"Шари",-1)),i[2]||(i[2]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Доступні шари",-1)),e.createVNode(e.unref(kn.VsInputArraySelect),{options:t.options,modelValue:r.value,"onUpdate:modelValue":i[0]||(i[0]=s=>r.value=s),placeholder:"Шари"},null,8,["options","modelValue"])]))}}),$0={class:"mapLayer-info__inner"},v0={class:"mapLayer-info__item-label"},fn=Q(e.defineComponent({__name:"MapLayerInfoPopover",props:{items:{}},setup(t,{expose:n}){const o=t,l=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),r=e.ref(null),a=e.ref(null);let i=null;const s=e.computed(()=>l.open?{position:"absolute",width:"auto",maxWidth:`${Math.min(300,window.innerWidth-24)}px`,top:`${l.top}px`,left:`${l.left}px`,transform:l.transform,display:"block"}:{display:"none"});function f(g){if(l.open){p();return}const h=g.currentTarget,d=h==null?void 0:h.closest(".mapLayer-info");if(!d){p();return}r.value=d,l.open=!0,e.nextTick(()=>{y(),u(),requestAnimationFrame(()=>{y()})})}function y(){if(!l.open||!r.value||!a.value)return;const g=r.value.getBoundingClientRect(),h=12,d=window.scrollX+h,x=window.scrollX+window.innerWidth-h,B=window.scrollY+h,M=window.scrollY+window.innerHeight-h,j=a.value.offsetWidth||Math.min(300,window.innerWidth-24),E=a.value.offsetHeight||0;let V=g.left+window.scrollX+(g.width-j)/2;V<d&&(V=d),V+j>x&&(V=Math.max(d,x-j)),l.left=V;let $=g.bottom+window.scrollY+h;$+E>M&&($=g.top+window.scrollY-E-h,$<B&&($=Math.max(B,M-E))),$<B&&($=B),$+E>M&&($=Math.max(B,M-E)),l.top=$,l.transform="none"}function b(g){var d,x;if(!l.open)return;const h=g.target;(d=r.value)!=null&&d.contains(h)||(x=a.value)!=null&&x.contains(h)||p()}function c(g){g.key==="Escape"&&p()}function p(){m(),l.open=!1,r.value=null,a.value=null}function u(){m(),a.value&&(i=new ResizeObserver(()=>{y()}),i.observe(a.value))}function m(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",b,!0),document.addEventListener("keydown",c),window.addEventListener("scroll",y,!0),window.addEventListener("resize",y)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",b,!0),document.removeEventListener("keydown",c),window.removeEventListener("scroll",y,!0),window.removeEventListener("resize",y),m()}),e.watch(()=>o.items,()=>{l.open&&e.nextTick(()=>y())},{deep:!0}),n({close:p}),(g,h)=>(e.openBlock(),e.createElementBlock("div",{class:"mapLayer-info",ref_key:"anchorEl",ref:r},[e.createElementVNode("a",{class:"mapLayer-info__trigger",href:"#",onClick:e.withModifiers(f,["prevent","stop"])},[...h[1]||(h[1]=[e.createStaticVNode('<div class="mapLayer-info__icon" data-v-cc1cc7bf><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-cc1cc7bf><circle cx="12" cy="12" r="10" data-v-cc1cc7bf></circle><line x1="12" y1="16" x2="12" y2="12" data-v-cc1cc7bf></line><line x1="12" y1="8" x2="12.01" y2="8" data-v-cc1cc7bf></line></svg></div>',1)])]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[l.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-[81] py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-info__popover",style:e.normalizeStyle(s.value),ref_key:"popoverEl",ref:a,onClick:h[0]||(h[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",$0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,d=>(e.openBlock(),e.createElementBlock("div",{key:d.label,class:"mapLayer-info__item"},[e.createElementVNode("div",v0,e.toDisplayString(d.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":d.breakLine}])},e.toDisplayString(d.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-cc1cc7bf"]]),S0={key:0,class:"map-info__title"},A0={class:"map-info__actions"},L0={key:0,class:"map-info__menu"},F0=["onClick"],T0=["innerHTML"],el=Q(e.defineComponent({__name:"MapInfoWidget",props:{title:{},content:{},links:{},mapName:{},mapDescription:{}},setup(t){const n=t,o=e.ref(null),l=e.ref(!1),r=e.ref(null),a=e.ref(null),i=e.ref({top:0,left:0}),s=pe.useRouter(),f=e.ref(!1),y=e.ref(!1),b=e.computed(()=>Array.isArray(n.links)?n.links.filter(B=>(B==null?void 0:B.name)&&(B==null?void 0:B.slug)):[]),c=e.computed(()=>({top:`${i.value.top}px`,left:`${i.value.left}px`})),p=e.computed(()=>{const B=[];return n.mapName&&B.push({label:"Назва карти",value:n.mapName}),n.mapDescription&&B.push({label:"Опис",value:n.mapDescription,breakLine:!0}),B});function u(B){B.stopPropagation(),l.value=!l.value}function m(){const B=r.value;if(!B||!a.value)return;const M=B.getBoundingClientRect(),j=12,E=8,V=window.scrollX+j,$=window.scrollX+window.innerWidth-j,A=window.scrollY+j,I=window.scrollY+window.innerHeight-j,q=a.value.offsetWidth||160,U=a.value.offsetHeight||0;let D=M.bottom+window.scrollY+E,S=M.left+window.scrollX;S+q>$&&(S=M.right+window.scrollX-q,S<V&&(S=V)),S<V&&(S=V),D+U>I&&(D=M.top+window.scrollY-U-E,D<A&&(D=Math.max(A,I-U))),D<A&&(D=A),D+U>I&&(D=Math.max(A,I-U)),i.value={top:D,left:S}}function g(B){if(!l.value)return;const M=o.value;if(!M){l.value=!1;return}M.contains(B.target)||(l.value=!1)}e.watch(l,B=>{B?e.nextTick(()=>{m(),requestAnimationFrame(()=>{m()}),window.addEventListener("scroll",m,!0),window.addEventListener("resize",m)}):(window.removeEventListener("scroll",m,!0),window.removeEventListener("resize",m))});function h(B){l.value=!1,s.push(`/maps/${B}`)}function d(){f.value=!f.value}function x(){y.value=window.innerWidth<=768}return e.onMounted(()=>{document.addEventListener("click",g,!0),x(),window.addEventListener("resize",x)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",g,!0),window.removeEventListener("scroll",m,!0),window.removeEventListener("resize",m),window.removeEventListener("resize",x)}),(B,M)=>(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},[t.title||b.value.length||p.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"map-info__header",style:e.normalizeStyle([t.content?"":"padding-bottom: 20px"])},[t.title?(e.openBlock(),e.createElementBlock("h2",S0,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",A0,[b.value.length?(e.openBlock(),e.createElementBlock("div",L0,[e.createElementVNode("button",{ref_key:"menuButton",ref:r,type:"button",class:"map-info__menu-button",onClick:u,"aria-label":"Показати посилання"},[...M[1]||(M[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"},[l.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuPopover",ref:a,class:"vsTailwind vs-popover__content right map-info__popover",style:e.normalizeStyle(c.value),onClick:M[0]||(M[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.value,j=>(e.openBlock(),e.createElementBlock("button",{key:j.slug||j.name,type:"button",class:"map-info__popover-link",onClick:E=>h(j.slug)},e.toDisplayString(j.name),9,F0))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),p.value.length?(e.openBlock(),e.createBlock(fn,{key:1,items:p.value},null,8,["items"])):e.createCommentVNode("",!0),y.value&&(t.content||p.value.length)?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"map-info__toggle-button",onClick:d,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"map-info__toggle-icon--rotated":f.value})},[...M[2]||(M[2]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0)])],4)):e.createCommentVNode("",!0),t.content?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["map-info__content",{"map-info__content--collapsed":y.value&&!f.value}]),innerHTML:t.content},null,10,T0)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-b7a90727"]]),M0={class:"opacity-popover__content"},D0={class:"opacity-popover__value"},tl=Q(e.defineComponent({__name:"LayerOpacityPopover",props:{layerId:{}},setup(t){const n=t,o=e.ref(!1),l=e.ref(100),r=e.ref(null),a=e.ref(null),i=e.reactive({top:0,left:0});function s(){var j;const c=(j=a.value)==null?void 0:j.querySelector("button");if(!c||!r.value)return;const p=c.getBoundingClientRect(),u=260,m=r.value.offsetHeight||60,g=8,h=12,d=window.innerWidth,x=window.innerHeight;let B=p.bottom+g+window.scrollY,M=p.left+window.scrollX;M+u>d-h&&(M=d-u-h+window.scrollX),M<h+window.scrollX&&(M=h+window.scrollX),B+m>x+window.scrollY-h&&(B=p.top-m-g+window.scrollY,B<h+window.scrollY&&(B=x-m-h+window.scrollY)),i.top=B,i.left=M}function f(){o.value=!o.value,o.value&&e.nextTick(s)}function y(){var m;const c=se(n.layerId),p=(l.value??100)/100;if(c!=null&&c.setOpacity){c.setOpacity(p);return}const u=(m=c==null?void 0:c.getLayer)==null?void 0:m.call(c);if(u)switch(u.type){case"raster":c.updatePaint({"raster-opacity":p});break;case"fill":c.updatePaint({"fill-opacity":p});break;case"line":c.updatePaint({"line-opacity":p});break;case"circle":c.updatePaint({"circle-opacity":p});break;case"symbol":c.updatePaint({"icon-opacity":p});break}}function b(c){var u,m;if(!o.value)return;const p=c.target;(u=r.value)!=null&&u.contains(p)||(m=a.value)!=null&&m.contains(p)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",b),window.addEventListener("scroll",s,!0),window.addEventListener("resize",s)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",b),window.removeEventListener("scroll",s,!0),window.removeEventListener("resize",s)}),(c,p)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:a},[e.renderSlot(c.$slots,"trigger",{toggle:f,opacity:l.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(f,["stop"])},e.toDisplayString(l.value)+"% ",1)],!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popoverEl",ref:r,class:"opacity-popover",style:e.normalizeStyle({top:i.top+"px",left:i.left+"px"})},[e.createElementVNode("div",M0,[p[1]||(p[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":p[0]||(p[0]=u=>l.value=u),class:"opacity-popover__range",onInput:y},null,544),[[e.vModelText,l.value]]),e.createElementVNode("span",D0,e.toDisplayString(l.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-b278347a"]]),I0={class:"layers-panel"},j0={class:"layers-panel__header"},z0={class:"layers-panel__heading"},O0={class:"layers-panel__title"},P0={key:0,class:"layers-panel__description"},R0={class:"layers-panel__header-actions"},U0={class:"layers-panel__label"},q0={class:"layers-panel__label-row"},H0=["checked","onChange"],W0={class:"layers-panel__title-block"},Y0=["aria-label"],Z0={class:"layers-panel__name"},K0={class:"layers-panel__meta text-slate-500"},G0=["onClick"],X0={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},J0={key:0,class:"layers-panel__actions"},Q0=["innerHTML","onClick"],nl="map:temporary-layer-request",eg=e.defineComponent({directives:{tooltip:le.TooltipDirective},__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,l=e.ref({}),r=e.ref(!1),a=e.ref(!1),i=ve(),{temporaryLayers:s,activateTemporaryLayer:f,deactivateTemporaryLayer:y,clearTemporaryLayers:b}=Xo(i.map),c=e.computed(()=>{const D=o.layers.map(k=>({...k,isTemporary:!1,owner:null,visible:k.visible!==!1})),S=s.value.map(k=>({id:k.id,name:k.title,visible:l.value[k.id]??!0,actions:[],filters:null,isTemporary:!0,owner:k.owner??null,handle:k.handle??null,card:k.card??null,popup:k.popup??null,style:k.style??null,group_name:null,count:null,holder:null}));return[...D,...S]}),p=e.computed(()=>s.value.length>0),u=n;function m(){var D;for(let S=0;S<o.layers.length;S++){const k=o.layers[S],v=g(k);if(!v)continue;const T=se(k.id,v),C=k.visible!==!1;l.value[k.id]=C,C||(D=T==null?void 0:T.setVisible)==null||D.call(T,!1)}}function g(D){const S=D.id;if(!S)return null;const k=(D.service||D.service_type||D.type||"").toString().toLowerCase(),v=D.service_url||D.url||null;if(!!v&&(k==="tms"||k==="wmts"||k==="wms"||k==="ogc")){const N=h(v);return N?{sourceId:S,source:{type:"raster",tiles:[N],tileSize:D.tileSize||256,minzoom:D.minzoom??0,maxzoom:D.maxzoom??22,scheme:D.scheme||"xyz"},layer:{id:S,type:"raster",source:S},card:D.card,popup:D.popup}:null}const C=`${location.origin}/api/vtile/${S}/ua/{z}/{x}/{y}.vmt`;return{sourceId:S,source:{type:"vector",tiles:[C],minZoom:4,maxZoom:14},layer:{id:S,source:S,"source-layer":S,style:D.style},card:D.card,popup:D.popup}}function h(D){return D?/^https?:\/\//i.test(D)?D:D.startsWith("//")?`${window.location.protocol}${D}`:D.startsWith("/")?`${location.origin}${D}`:`${location.origin}/${D}`:null}function d(D){const S=l.value[D];return S??!0}function x(D){var v,T;if(!(D!=null&&D.id))return null;const S=(v=D.title)==null?void 0:v.trim(),k=(T=D.url)==null?void 0:T.trim();return!S||!k?null:{id:D.id,title:S,url:k,tileSize:D.tileSize,minzoom:D.minzoom,maxzoom:D.maxzoom,opacity:D.opacity}}function B(D){if(!D)return;const S=D.owner;if(D.action==="clear"){const v=s.value.filter(T=>!S||T.owner===S).map(T=>T.id);b(S),v.forEach(T=>{T in l.value&&delete l.value[T]});return}const k=x(D.spec);if(k){if(D.action==="activate"){f(k,D.context||{},S),l.value[k.id]=!0;return}D.action==="deactivate"&&(y(k.id,S),delete l.value[k.id])}}function M(D){D instanceof CustomEvent&&B(D.detail)}e.watch(()=>s.value.map(D=>D.id),(D,S)=>{const k=new Set(S||[]),v=new Set(D);D.forEach(T=>{T in l.value||(l.value[T]=!0)}),k.forEach(T=>{v.has(T)||delete l.value[T]})},{immediate:!0});function j(D,S){var C,N,w;const v=S.target.checked;if(l.value[D.id]=v,D.isTemporary){if(!v){y(D.id,D.owner||void 0),delete l.value[D.id];return}const F=D.handle||((C=s.value.find(P=>P.id===D.id))==null?void 0:C.handle);(N=F==null?void 0:F.setVisible)==null||N.call(F,!0);return}const T=se(D.id);(w=T==null?void 0:T.setVisible)==null||w.call(T,v)}function E(D){return D.isTemporary?[{label:"Назва",value:D.name??null},{label:"Тип",value:"Тимчасовий шар"},D.owner?{label:"Джерело",value:D.owner}:null].filter(Boolean):[{label:"Назва",value:D.name??null},{label:"Назва групи",value:D.group_name||null},{label:"Кількість",value:D.count??null},{label:"Балансоутримувач",value:D.holder??null}]}function V(D){var S,k,v;return((S=D==null?void 0:D.style)==null?void 0:S.color)||((k=D==null?void 0:D.style)==null?void 0:k.stroke)||((v=D==null?void 0:D.style)==null?void 0:v.fill)||null}function $(D){var S,k;return((k=(S=D==null?void 0:D.legend)==null?void 0:S[0])==null?void 0:k.name)||null}function A(D){return $(D)||null}function I(){if(!s.value.length)return;const D=s.value.map(S=>S.id);b(),D.forEach(S=>delete l.value[S])}function q(){r.value=!r.value}function U(){a.value=window.innerWidth<=768}return e.onMounted(()=>{m(),window.addEventListener(nl,M),U(),window.addEventListener("resize",U)}),e.onBeforeUnmount(()=>{window.removeEventListener(nl,M),window.removeEventListener("resize",U)}),(D,S)=>{var v,T;const k=e.resolveDirective("tooltip");return e.openBlock(),e.createElementBlock("div",I0,[e.createElementVNode("div",j0,[e.createElementVNode("div",z0,[e.createElementVNode("h2",O0,e.toDisplayString(((v=t.config)==null?void 0:v.title)||"Шари"),1),(T=t.config)!=null&&T.description?(e.openBlock(),e.createElementBlock("div",P0,[e.createElementVNode("p",null,e.toDisplayString(t.config.description),1)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",R0,[a.value&&c.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__toggle-button",onClick:q,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"layers-panel__toggle-icon--rotated":r.value})},[...S[0]||(S[0]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0),p.value?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"layers-panel__clear",onClick:I}," Очистити тимчасові шари ")):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:e.normalizeClass(["layers-panel__content",{"layers-panel__content--collapsed":a.value&&!r.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,C=>{var N;return e.openBlock(),e.createElementBlock("div",{key:C.id,class:"layers-panel__item"},[e.createElementVNode("label",U0,[e.createElementVNode("div",q0,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:d(C.id),onChange:w=>j(C,w)},null,40,H0),e.createElementVNode("div",W0,[d(C.id)&&V(C)&&A(C)?e.withDirectives((e.openBlock(),e.createElementBlock("span",{key:0,class:"layers-panel__legend-dot layers-panel__legend-dot--inline",style:e.normalizeStyle({background:V(C)}),"aria-label":A(C),role:"img"},null,12,Y0)),[[k,A(C)]]):d(C.id)&&V(C)?(e.openBlock(),e.createElementBlock("span",{key:1,class:"layers-panel__legend-dot layers-panel__legend-dot--inline",style:e.normalizeStyle({background:V(C)}),role:"img"},null,4)):e.createCommentVNode("",!0),e.createElementVNode("span",Z0,e.toDisplayString(C.name),1)]),e.createElementVNode("div",K0,[d(C.id)&&!C.isTemporary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(tl,{"layer-id":C.id,class:"flex"},{trigger:e.withCtx(({toggle:w})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(w,["prevent","stop"])},[e.createElementVNode("div",X0,[e.createVNode(e.unref(Cl))])],8,G0)]),_:1},8,["layer-id"]),e.createVNode(Mt,{count:Array.isArray(C.filters)?C.filters.length:0,layer:C},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(fn,{items:E(C)},null,8,["items"])])])]),(N=C.actions)!=null&&N.length?(e.openBlock(),e.createElementBlock("div",J0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.actions,w=>(e.openBlock(),e.createElementBlock("button",{key:w.widget||w.id||w.icon,type:"button",class:"layers-panel__action",innerHTML:w.icon,onClick:F=>u("action",{layerId:w.widget})},null,8,Q0))),128))])):e.createCommentVNode("",!0)])}),128))],2)])}}}),ol=Q(eg,[["__scopeId","data-v-2724c3c9"]]),tg={class:"catalog-tab__search relative mt-[10px]"},ng={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%)"}},og={class:"catalog-tab__list flex-1 overflow-y-auto mt-2"},lg={key:0,class:"text-sm text-gray-400 text-center mt-6"},rg=["onClick"],ag={class:"flex items-center gap-x-3"},ig={class:"max-w-[260px] text-[14px] text-[#4b5563]"},sg={class:"text-xs opacity-60 text-[#4b5563]"},cg={class:"flex items-center cursor-pointer gap-2 flex-1"},dg=["checked","onChange"],ug={class:"text-[13px] text-gray-600 max-w-[260px]"},pg={class:"flex items-center gap-2"},mg=Q(e.defineComponent({__name:"LayersCatalogTab",props:{catalog:{},selected:{},search:{}},emits:["toggle-layer","update:search","open-filter"],setup(t,{emit:n}){const o=t,l=n,r=e.reactive({}),a=e.ref(null),i=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0,layerId:null}),s=e.computed(()=>{const g=o.search.trim().toLowerCase();return o.catalog.groups.map(h=>{const d=g?h.layers.filter(x=>(typeof x.name=="string"?x.name:"").toLowerCase().includes(g)):h.layers;return{...h,layers:d}}).filter(h=>h.layers.length>0)}),f=e.computed({get:()=>o.search,set:g=>l("update:search",g)});function y(g){r[g]=!r[g],op()}function b(g){return!!r[g]}function c(g,h){if(o.selected.includes(h)){i.visible=!1,i.layerId=null;return}const d=g.currentTarget;if(!d)return;const x=d.getBoundingClientRect(),B=typeof window<"u"?window.scrollX:0,M=typeof window<"u"?window.scrollY:0;i.left=x.left+x.width/2+B,i.top=x.bottom+8+M,i.layerId=h,i.visible=!0}function p(){i.visible=!1,i.layerId=null}function u(g){return[{label:"Назва",value:m(g.name)},{label:"Сервіс",value:m(g.service)},{label:"Посилання",value:m(g.url),breakLine:!0}]}function m(g){return g==null||g===""?null:String(g)}return e.watch(()=>o.selected?o.selected.slice():[],g=>{!i.visible||!i.layerId||g.includes(i.layerId)&&(i.visible=!1,i.layerId=null)}),(g,h)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"catalogRef",ref:a,class:"catalog-tab"},[e.createElementVNode("div",tg,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[0]||(h[0]=d=>f.value=d),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,f.value]]),(e.openBlock(),e.createElementBlock("svg",ng,[...h[1]||(h[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.createElementVNode("div",og,[s.value.length===0?(e.openBlock(),e.createElementBlock("div",lg," Нічого не знайдено ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,d=>(e.openBlock(),e.createElementBlock("div",{key:d.id,class:"mt-2"},[e.createElementVNode("div",{class:"hover:bg-gray-100 cursor-pointer p-[8px] rounded-lg flex justify-between items-center",onClick:x=>y(d.id)},[e.createElementVNode("div",ag,[(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",b(d.id)?"rotate-90":""])},[...h[2]||(h[2]=[e.createElementVNode("path",{d:"M1 9L5 5L1 1",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2)),e.createElementVNode("div",ig,e.toDisplayString(d.name),1)]),e.createElementVNode("div",sg,e.toDisplayString(d.layers.length),1)],8,rg),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(d.layers,x=>(e.openBlock(),e.createElementBlock("div",{key:x.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",cg,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:t.selected.includes(x.id),onChange:B=>g.$emit("toggle-layer",x.id,B.target.checked,x)},null,40,dg),h[3]||(h[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",ug,e.toDisplayString(x.name),1)]),e.createElementVNode("div",pg,[Array.isArray(x.filters)&&x.filters.length?(e.openBlock(),e.createBlock(Mt,{key:0,count:x.filters.length,layer:x,disabled:!t.selected.includes(x.id),onMouseenter:B=>c(B,x.id),onMouseleave:p,onFocus:B=>c(B,x.id),onBlur:p},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(fn,{items:u(x)},null,8,["items"])])]))),128))],512),[[e.vShow,b(d.id)]])]),_:2},1024)]))),128))]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[i.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${i.top}px`,left:`${i.left}px`})},e.toDisplayString(i.text),5)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-f68d8bda"]]),fg={class:"flex flex-col gap-0"},gg={class:"text-xs text-slate-600 font-semibold"},yg=e.defineComponent({__name:"MapLayerPopover",props:{items:{}},setup(t,{expose:n}){const o=t,l=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),r=e.ref(null),a=e.ref(null);let i=null;const s=e.computed(()=>{if(!l.open)return{display:"none"};const g=Math.min(460,window.innerWidth-24);return{position:"absolute",width:`${g}px`,maxWidth:`${g}px`,top:`${l.top}px`,left:`${l.left}px`,transform:l.transform,display:"block"}});function f(){if(l.open){p();return}if(!r.value){p();return}l.open=!0,e.nextTick(()=>{y(),u(),requestAnimationFrame(()=>{y()})})}function y(){if(!l.open||!r.value||!a.value)return;const g=r.value.getBoundingClientRect(),h=12,d=window.scrollX+h,x=window.scrollX+window.innerWidth-h,B=window.scrollY+h,M=window.scrollY+window.innerHeight-h,j=a.value.offsetWidth||Math.min(460,window.innerWidth-24),E=a.value.offsetHeight||0;let V=g.left+window.scrollX+(g.width-j)/2;V<d&&(V=d),V+j>x&&(V=Math.max(d,x-j)),l.left=V;let $=g.bottom+window.scrollY+h;$+E>M&&($=g.top+window.scrollY-E-h,$<B&&($=Math.max(B,M-E))),$<B&&($=B),$+E>M&&($=Math.max(B,M-E)),l.top=$,l.transform="none"}function b(g){var d,x;if(!l.open)return;const h=g.target;(d=r.value)!=null&&d.contains(h)||(x=a.value)!=null&&x.contains(h)||p()}function c(g){g.key==="Escape"&&p()}function p(){m(),l.open=!1,r.value=null,a.value=null}function u(){m(),a.value&&(i=new ResizeObserver(()=>{y()}),i.observe(a.value))}function m(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",b,!0),document.addEventListener("keydown",c),window.addEventListener("scroll",y,!0),window.addEventListener("resize",y)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",b,!0),document.removeEventListener("keydown",c),window.removeEventListener("scroll",y,!0),window.removeEventListener("resize",y),m()}),e.watch(()=>o.items,()=>{l.open&&e.nextTick(()=>y())},{deep:!0}),n({close:p}),(g,h)=>(e.openBlock(),e.createElementBlock("div",{class:"inline-flex relative",ref_key:"anchorEl",ref:r},[e.createElementVNode("div",{onClick:e.withModifiers(f,["prevent","stop"])},[e.renderSlot(g.$slots,"default")]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[l.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-[103] py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom absolute min-w-[200px]",style:e.normalizeStyle(s.value),ref_key:"popoverEl",ref:a,onClick:h[0]||(h[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",fg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,d=>(e.openBlock(),e.createElementBlock("div",{key:d.label,class:"grid grid-cols-[120px_1fr] gap-3 items-start py-1.5 border-b border-slate-200 last:border-b-0"},[e.createElementVNode("div",gg,e.toDisplayString(d.label),1),e.createElementVNode("div",{class:e.normalizeClass(["text-sm text-gray-800",{"break-all":d.breakLine}])},e.toDisplayString(d.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),hg={class:"selected-tab"},xg={class:"selected-tab__actions"},bg={key:0,class:"selected-tab__scroll"},kg=["onDragstart","onDragover","onDrop"],wg={class:"selected-tab__item-header"},_g={class:"selected-tab__item-info"},Eg=["checked","onChange"],Ng={class:"selected-tab__item-name"},Vg={class:"selected-tab__item-controls"},Bg=["onClick"],Cg={class:"selected-tab__menu-inner"},$g=Q(e.defineComponent({__name:"LayersSelectedTab",props:{catalog:{},selected:{}},emits:["select-layer","reorder","remove","toggle-layer"],setup(t,{emit:n}){const o=t,l=n,r=e.reactive({}),a=e.ref(null),i=e.ref(null),s=new Map,f=e.reactive({top:0,left:0}),y=e.ref(null),b=e.reactive({top:0,left:0}),c=e.ref(null),p=new Map,u=e.reactive({});function m(C){var N;for(const w of((N=o.catalog)==null?void 0:N.groups)??[]){const F=w.layers.find(P=>P.id===C);if(F)return F}return null}e.watch(()=>o.selected,C=>{C.forEach(N=>{r[N]==null&&(r[N]=100)})},{immediate:!0});function g(){if(!a.value)return;const C=s.get(a.value);if(!C)return;const N=C.getBoundingClientRect();f.top=N.bottom+8+window.scrollY,f.left=N.left+window.scrollX}e.watch(()=>o.selected,C=>{C.forEach(N=>{u[N]==null&&(u[N]=!0)})},{immediate:!0});function h(C,N){u[C]=N;const w=se(C);w&&w.setVisible(N)}function d(C,N){N?p.set(C,N):p.delete(C)}function x(C){y.value=y.value===C?null:C,y.value&&e.nextTick(()=>{B(C),requestAnimationFrame(()=>{B(C)})})}function B(C){const N=p.get(C);if(!N||!c.value)return;const w=N.getBoundingClientRect(),F=12,P=6,R=window.scrollX+F,G=window.scrollX+window.innerWidth-F,W=window.scrollY+F,Y=window.scrollY+window.innerHeight-F,re=c.value.offsetWidth||190,ae=c.value.offsetHeight||0;let ne=w.bottom+window.scrollY+P,ie=w.left+window.scrollX;ie+re>G&&(ie=w.right+window.scrollX-re,ie<R&&(ie=R)),ie<R&&(ie=R),ne+ae>Y&&(ne=w.top+window.scrollY-ae-P,ne<W&&(ne=Math.max(W,Y-ae))),ne<W&&(ne=W),ne+ae>Y&&(ne=Math.max(W,Y-ae)),b.top=ne,b.left=ie}function M(C){const N=se(C);N&&N.remove(),l("remove",C),y.value=null}function j(C){const N=C.target,w=a.value,F=y.value;if(w){const P=i.value,R=s.get(w);if(P&&P.contains(N)||R&&R.contains(N))return;a.value=null}if(F){const P=c.value,R=p.get(F);if(P&&P.contains(N)||R&&R.contains(N))return;y.value=null}}function E(){a.value&&g(),y.value&&B(y.value)}e.onMounted(()=>{document.addEventListener("click",j),window.addEventListener("resize",E),window.addEventListener("scroll",E,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",j),window.removeEventListener("resize",E),window.removeEventListener("scroll",E,!0)});const{map:V}=ve();function $(C){var P,R,G;if(!C)return;const N=se(C),w=m(C);if(!N&&!w)return;if(((P=w==null?void 0:w.extent)==null?void 0:P.length)===4&&((R=V.value)!=null&&R.fitBounds)){const W=w.extent.map(Y=>Number(Y));if(W.every(Y=>Number.isFinite(Y))){const[Y,re,ae,ne]=W;V.value.fitBounds([[Y,re],[ae,ne]],{padding:40}),y.value=null;return}}(G=N==null?void 0:N.getSource)!=null&&G.call(N)&&(y.value=null)}const A=e.ref(null),I=e.ref(null);function q(C,N){A.value=N,I.value=N,C.dataTransfer&&(C.dataTransfer.effectAllowed="move",C.dataTransfer.setData("text/plain",String(N)))}function U(C){I.value=C}function D(C,N){if(C.preventDefault(),A.value===null||A.value===N){A.value=null,I.value=null;return}const w=[...o.selected],[F]=w.splice(A.value,1);w.splice(N,0,F),l("reorder",w),A.value=null,I.value=null}function S(){A.value=null,I.value=null}function k(C){return C==null||C===""?null:String(C)}function v(C,N){return!Array.isArray(C)||C.length===0?null:`${C.length} ${N}`}function T(C){var ne,ie,ce,Ae,Le,je;const N=se(C),w=m(C);if(!N&&!w)return[];const F=(w==null?void 0:w.name)||((ie=(ne=N==null?void 0:N.opts)==null?void 0:ne.layer)==null?void 0:ie.name)||null,P=(w==null?void 0:w.service)||((ce=N==null?void 0:N.opts)==null?void 0:ce.service)||null,R=(Ae=N==null?void 0:N.getSource)==null?void 0:Ae.call(N),G=R&&"tiles"in R?(Le=R.tiles)==null?void 0:Le[0]:(w==null?void 0:w.url)||null,W=(w==null?void 0:w.source_path)||null,Y=(N==null?void 0:N.popup)||(w==null?void 0:w.popup),re=(N==null?void 0:N.card)||(w==null?void 0:w.card),ae=(w==null?void 0:w.filters)||((je=N==null?void 0:N.opts)==null?void 0:je.filters);return[{label:"Назва",value:k(F)},{label:"Сервіс",value:k(P)},{label:"Посилання",value:k(G),breakLine:!0},{label:"Джерело",value:k(W),breakLine:!0},{label:"Popup",value:v(Y,"полів")},{label:"Картка",value:v(re,"полів")},{label:"Фільтри",value:v(ae,"фільтрів")}]}return(C,N)=>(e.openBlock(),e.createElementBlock("div",hg,[e.createElementVNode("div",xg,[e.createElementVNode("button",{class:"selected-tab__add",onClick:N[0]||(N[0]=w=>l("select-layer"))},[...N[3]||(N[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",bg,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.selected,(w,F)=>{var P;return e.openBlock(),e.createElementBlock("div",{key:w,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":A.value===F,"selected-tab__item--over":I.value===F}]),draggable:"true",onDragstart:R=>q(R,F),onDragover:e.withModifiers(R=>U(F),["prevent"]),onDrop:R=>D(R,F),onDragend:S},[e.createElementVNode("div",wg,[e.createElementVNode("div",_g,[N[4]||(N[4]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox",checked:u[w]??!0,onChange:R=>h(w,R.target.checked)},null,40,Eg),e.createElementVNode("span",Ng,e.toDisplayString(((P=m(w))==null?void 0:P.name)||"Шар"),1)]),e.createElementVNode("div",Vg,[e.createVNode(tl,{"layer-id":w},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:R=>d(w,R),onClick:e.withModifiers(R=>x(w),["stop"])},[...N[5]||(N[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,Bg)])])],42,kg)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[y.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:c,class:"selected-tab__menu",style:e.normalizeStyle({top:b.top+"px",left:b.left+"px"})},[e.createElementVNode("div",Cg,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:N[1]||(N[1]=w=>$(y.value))},[...N[6]||(N[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)])]),e.createVNode(yg,{items:T(y.value)},{default:e.withCtx(()=>[...N[7]||(N[7]=[e.createElementVNode("button",{class:"selected-tab__menu-item"},[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)])]),_:1},8,["items"]),N[9]||(N[9]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:N[2]||(N[2]=w=>M(y.value))},[...N[8]||(N[8]=[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-39b6f281"]]),vg={class:"filter-tab"},Sg={key:0,class:"filter-tab__header"},Ag={class:"filter-tab__title"},Lg={key:1,class:"filter-tab__content rounded-md"},Fg={class:"filter-tab__scroll"},Tg={key:2,class:"filter-tab__empty"},Mg=Q(e.defineComponent({__name:"LayersFilterTab",props:{layer:{},value:{}},emits:["change"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/filter")),l=t,r=n,a=e.computed(()=>{var f;return((f=l.layer)==null?void 0:f.filters)??[]}),i=e.computed(()=>a.value.length>0);function s(f){r("change",f.data)}return(f,y)=>(e.openBlock(),e.createElementBlock("div",vg,[t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",Sg,[e.createElementVNode("div",null,[e.createElementVNode("p",Ag,e.toDisplayString(t.layer.name),1)])])):e.createCommentVNode("",!0),t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",Lg,[e.createElementVNode("div",Fg,[e.createVNode(e.unref(o),{view:"vertical",schema:a.value,value:t.value,limit:5,class:"rounded-md pb-0",onChange:y[0]||(y[0]=b=>s(b))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",Tg,[...y[1]||(y[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),Dg={class:"flex items-center justify-between mb-4"},Ig={class:"flex items-center gap-2"},jg={class:"text-lg font-semibold text-gray-800"},zg={key:0},Og={key:1,class:"block text-sm font-normal text-gray-500"},Pg={class:"flex items-center gap-2"},Rg={class:"flex mb-4 border-b border-gray-200"},Ug={class:"map-catalog-widget__body"},ll=Q(e.defineComponent({__name:"MapCatalogWidget",setup(t){const n=e.ref("catalog"),o=e.ref({groups:[]}),l=e.ref([]),r=e.ref(""),{map:a}=ve(),i=pe.useRoute(),s=pe.useRouter(),f=e.reactive({}),y=e.ref(null),b=e.ref(!1),c=e.ref(!1);function p(k){return o.value.groups.map(v=>v.layers.find(T=>T.id===k)).find(Boolean)||null}function u(){const k=y.value;if(!k)return;delete f[k];const v=se(k);v!=null&&v.setFilter&&v.setFilter("")}function m(k,v){const T=se(k);if(f[k]={...v},!(T!=null&&T.setFilter))return;const C=Object.entries(v).filter(([,N])=>N!=null&&N!=="").map(([N,w])=>`${N}=${w}`);T.setFilter(C.join("|"))}function g(k){const v=y.value;v&&m(v,k)}function h(k){const v=k.url;let T=null;if(v&&(T=v.startsWith("http")?v:`${window.location.origin}${v}`),!T)return null;const C=(k.service||"").toString().toLowerCase(),N=k.count??null;return C&&C!=="vtile"?{service:C,count:N,source:{type:"raster",tiles:[T],tileSize:256,minzoom:0,maxzoom:20}}:{service:C,count:N,source:{type:"vector",tiles:[T],minzoom:0,maxzoom:14},layer:{style:k.style},card:k.card,popup:k.popup}}function d(k,v,T){var F;const C=T??p(k);if(!C)return;const N=h(C);if(!N)return;const w=se(C.id,N,a);if(w)if(w.setVisible(v),v){if(!l.value.includes(k)&&(l.value.push(k),(F=a.value)!=null&&F.getLayer(k)))try{a.value.moveLayer(k)}catch(P){console.warn("Cannot move new layer",k,P)}}else l.value=l.value.filter(P=>P!==k),y.value===k&&(u(),y.value=null)}function x(){l.value.forEach(k=>{const v=se(k);v&&v.setVisible(!1)}),l.value=[]}function B(k){l.value=[...k],e.nextTick(()=>{var N;if(!a.value)return;const v=((N=a.value.getStyle())==null?void 0:N.layers)??[];let T;const C=w=>v.filter(F=>{var P,R;return(F==null?void 0:F.source)===w||(F==null?void 0:F.id)===w||((R=(P=F==null?void 0:F.id)==null?void 0:P.startsWith)==null?void 0:R.call(P,`${w}`))}).map(F=>F.id);for(let w=k.length-1;w>=0;w-=1){const F=k[w],P=C(F);P.length&&(P.forEach(R=>{var G;if((G=a.value)!=null&&G.getLayer(R))try{a.value.moveLayer(R,T)}catch(W){console.warn("Cannot move layer",R,W)}}),T=P[0])}})}function M(k){!k||!Array.isArray(k.filters)||k.filters.length===0||l.value.includes(k.id)&&(y.value=k.id,f[k.id]||(f[k.id]={}),n.value="filter")}function j(){n.value="catalog"}const E=e.computed(()=>y.value?p(y.value):null),V=e.computed(()=>{const k=y.value;return k?f[k]??{}:{}}),$=e.computed(()=>o.value.groups.reduce((k,v)=>k+v.layers.length,0)),A=e.computed(()=>n.value==="selected"?"Вибрані шари":n.value==="filter"?"Фільтр шарів":"Каталог"),I=e.computed(()=>n.value==="selected"?l.value.length:n.value==="catalog"?$.value:null),q=e.computed(()=>{var k;return n.value==="filter"?((k=E.value)==null?void 0:k.name)??"":""});async function U(){const v=await(await fetch("/api/gis-layer-list")).json(),T=new Map;v.forEach(w=>{const F=w.group_id??"other";T.has(F)||T.set(F,{id:F,name:w.group_name||"Інші шари",layers:[]}),T.get(F).layers.push(w)}),o.value={groups:Array.from(T.values())};const C=i.query.layers;if(!C)return;const N=Array.isArray(C)?C[0]:C;typeof N=="string"&&N.split(",").forEach(w=>{const F=w.trim();if(!F)return;const P=p(F);P&&d(F,!0,P)})}e.watch(y,k=>{!k&&n.value==="filter"&&(n.value="catalog")}),e.watch(E,k=>{!k&&y.value&&(y.value=null)}),e.watch(l,k=>{const v={...i.query};k.length?v.layers=k.join(","):delete v.layers,s.replace({query:v}).catch(()=>{})},{deep:!0});function D(){b.value=!b.value}function S(){c.value=window.innerWidth<=768}return e.onMounted(()=>{U(),S(),window.addEventListener("resize",S)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",S)}),(k,v)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["map-catalog-widget w-full max-w-md mx-auto p-4 bg-white border border-gray-200 rounded-lg shadow-sm widget",I.value>1?"min-h-[250px]":"min-h-[0px]"])},[e.createElementVNode("div",Dg,[e.createElementVNode("div",Ig,[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",jg,[e.createTextVNode(e.toDisplayString(A.value)+" ",1),I.value!==null?(e.openBlock(),e.createElementBlock("span",zg,"("+e.toDisplayString(I.value)+")",1)):e.createCommentVNode("",!0),q.value?(e.openBlock(),e.createElementBlock("span",Og,e.toDisplayString(q.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Pg,[e.createElementVNode("button",{onClick:x,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-6372b747><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-6372b747></path><path d="M21 3v5h-5" data-v-6372b747></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-6372b747></path><path d="M8 16H3v5" data-v-6372b747></path></svg>',1)])]),c.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"map-catalog-widget__toggle-button",onClick:D,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"map-catalog-widget__toggle-icon--rotated":b.value})},[...v[7]||(v[7]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:e.normalizeClass(["map-catalog-widget__content",{"map-catalog-widget__content--collapsed":c.value&&!b.value}])},[e.createElementVNode("div",Rg,[e.createElementVNode("button",{onClick:v[0]||(v[0]=T=>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]=T=>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",Ug,[n.value==="catalog"?(e.openBlock(),e.createBlock(mg,{key:0,class:"map-catalog-widget__scroll",catalog:o.value,selected:l.value,search:r.value,"onUpdate:search":v[2]||(v[2]=T=>r.value=T),onToggleLayer:d,onOpenFilter:M},null,8,["catalog","selected","search"])):n.value==="selected"?(e.openBlock(),e.createBlock($g,{key:1,catalog:o.value,selected:l.value,onToggleLayer:d,onSelectLayer:v[3]||(v[3]=T=>n.value="catalog"),onReorder:B,onRemove:v[4]||(v[4]=T=>l.value=l.value.filter(C=>C!==T))},null,8,["catalog","selected"])):(e.openBlock(),e.createBlock(Mg,{key:2,layer:E.value,value:V.value,onChange:g,onClose:j},null,8,["layer","value"]))])],2)],2))}}),[["__scopeId","data-v-6372b747"]]),qg={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},Hg={class:"flex items-start justify-between gap-3 p-5 pb-3"},Wg={class:"inline-block text-xl font-semibold text-gray-800"},Yg={key:0,class:"mt-1 text-sm text-gray-500"},Zg={class:"flex items-center gap-[6px]"},Kg={class:"px-5 pb-5 space-y-6"},Gg={key:0,class:"space-y-2"},Xg={class:"flex flex-wrap gap-4"},Jg=["value"],Qg={key:1,class:"text-sm text-gray-500"},ey={key:2,class:"text-sm text-gray-500"},ty={class:"text-4xl font-medium text-gray-800"},ny={class:"space-y-[14px]"},oy={class:"flex items-center gap-[10px] text-gray-600"},ly={class:"font-medium text-gray-700"},ry={class:"flex items-center justify-end text-end gap-3"},ay={class:"font-medium text-gray-800"},iy={class:"min-w-[40px] font-medium text-[#3C3C4399]"},rl=Q(e.defineComponent({__name:"MapAttributeWidget",props:{config:{}},setup(t){const n=["#3a7a57","#d970d5","#8e997b","#b4c039","#a855f7","#71823a","#f79d92","#8b5cf6","#a6514e","#6b7280"],o=t,l=e.ref(!0),r=e.ref(!1),a=e.ref([]),i=e.ref(null),s=e.ref(null),f=e.ref(null),y=e.ref(null),b=e.ref(null),c=e.ref({}),p=e.ref(null);function u(v){return v&&JSON.parse(JSON.stringify(v))}const m=e.computed(()=>{const v=o.config.layer;if(typeof v!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const T=v.trim();if(!T)throw new Error("MapAttributeWidget: `layer` must be non-empty");return T}),g=e.computed(()=>{const{list:v,attribute:T}=o.config;if(Array.isArray(v)&&v.length)return v.map(C=>({id:(C==null?void 0:C.id)!=null?String(C.id).trim():"",text:(C==null?void 0:C.text)!=null&&String(C.text).trim()||null})).filter(C=>C.id.length);if(Array.isArray(T))return T.map(C=>C!=null?String(C).trim():"").filter(C=>C.length).map(C=>({id:C,text:null}));if(typeof T=="string"){const C=T.trim();if(!C)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:C,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),h=e.computed(()=>g.value.map(v=>({id:v.id,label:v.text||c.value[v.id]||v.id})));e.watch(g,v=>{if(!v.length){p.value=null,a.value=[];return}(!p.value||!v.some(T=>T.id===p.value))&&(p.value=v[0].id)},{immediate:!0});const d=e.computed(()=>{var v;return p.value||((v=g.value[0])==null?void 0:v.id)||null});e.watch(m,()=>{var v,T;(T=(v=s.value)==null?void 0:v.remove)==null||T.call(v),s.value=null,f.value=null,y.value=null,b.value=null,c.value={}});const x=e.computed(()=>{var v;return(v=y.value)!=null&&v.length?{id:m.value,name:f.value,filters:y.value}:null}),B=e.computed(()=>{var v,T;return((T=(v=x.value)==null?void 0:v.filters)==null?void 0:T.length)||0});async function M(v){var N;const T=await fetch(`/api/gis-service/${encodeURIComponent(v)}`);if(!T.ok){let w="Не вдалося завантажити налаштування шару";try{const F=await T.json();w=((N=F==null?void 0:F.message)==null?void 0:N.error)||(F==null?void 0:F.message)||w}catch{}throw new Error(w)}const C=await T.json();return f.value=(C==null?void 0:C.name)||null,y.value=Array.isArray(C==null?void 0:C.filters)?C.filters:null,b.value=u((C==null?void 0:C.style)||{}),c.value=((C==null?void 0:C.attributes)||[]).reduce((w,F)=>{const P=typeof(F==null?void 0:F.name)=="string"?F.name.trim():"",R=typeof(F==null?void 0:F.ua)=="string"?F.ua.trim():"";return P&&(w[P]=R||P),w},{}),C}function j(v,T){let C=se(v);if(!C){const N=`${location.origin}/api/vtile/${v}/ua/{z}/{x}/{y}.vmt`;C=se(v,{source:{type:"vector",tiles:[N],minzoom:0,maxzoom:14},layer:{id:v,source:v,"source-layer":v,style:(T==null?void 0:T.style)||{}},card:T==null?void 0:T.card,popup:T==null?void 0:T.popup})}return s.value=C,C}async function E(v,T){var w;const C=`/api/gis-service/${encodeURIComponent(v)}/${encodeURIComponent(T)}`,N=await fetch(C);if(!N.ok){let F="Не вдалося отримати статистику";try{const P=await N.json();F=((w=P==null?void 0:P.message)==null?void 0:w.error)||(P==null?void 0:P.message)||F}catch{}throw new Error(F)}return N.json()}function V(v){const T=new Map;return v&&(v.rules||[]).forEach(N=>{const w=(N==null?void 0:N.value)??(N==null?void 0:N.id);w!=null&&T.set(String(w),N)}),T}function $(v,T,C,N,w){if(typeof(T==null?void 0:T.color)=="string"&&T.color.trim())return T.color.trim();const F=o.config.colors||{};if(F[v])return F[v];const R=V(C==null?void 0:C.style).get(v);return typeof(R==null?void 0:R.color)=="string"&&R.color.trim()?R.color.trim():n[w%n.length]}function A(v,T,C,N){var w;return(T==null?void 0:T.text)||(T==null?void 0:T.label)||(T==null?void 0:T.name)||(T==null?void 0:T[`${N}_text`])||((w=V(C==null?void 0:C.style).get(v))==null?void 0:w.label)||v}function I(v,T,C,N){if(!v)return;const w=u((T==null?void 0:T.style)||b.value)||{},F=N.trim();if(!F)return;const P={...w.colors||{},...o.config.colors||{}};F===N&&C.forEach(R=>{R.color.trim()&&(P[R.id]=R.color)}),v.setStyle({...w,type:w.type||"polygon",colorAttr:F,opacity:.8,colors:P})}async function q(){var F,P;a.value=[],i.value=null;const v=m.value,T=d.value;if(!T)return;r.value=!0;const C=await M(v);j(v,C);const N=await E(v,T),w=Array.isArray(N==null?void 0:N.rows)?N.rows.map((R,G)=>{const W=(R==null?void 0:R.id)??(R==null?void 0:R.value),Y=W!=null?String(W):"";if(!Y)return null;const re=A(Y,R,C,T),ae=Number((R==null?void 0:R.count)??0)||0,ne=$(Y,R,C,T,G);return{id:Y,label:re,count:ae,color:ne}}).filter(Boolean):[];a.value=w,i.value=((F=N==null?void 0:N.field)==null?void 0:F.label)||((P=N==null?void 0:N.field)==null?void 0:P.name)||null,I(s.value,C,w,T),r.value=!1}e.watch(()=>[m.value,d.value],()=>{q()},{immediate:!0});const U=e.computed(()=>"Набори даних"),D=e.computed(()=>a.value.reduce((v,T)=>v+T.count,0)),S=e.computed(()=>{var C;const v=d.value;return((C=h.value.find(N=>N.id===v))==null?void 0:C.label)||null||i.value||v||null});function k(v){return D.value?`${(v/D.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var v,T;(T=(v=s.value)==null?void 0:v.remove)==null||T.call(v)}),(v,T)=>l.value?(e.openBlock(),e.createElementBlock("div",qg,[e.createElementVNode("div",Hg,[e.createElementVNode("div",null,[e.createElementVNode("h2",Wg,e.toDisplayString(U.value),1),S.value&&h.value.length===1?(e.openBlock(),e.createElementBlock("p",Yg,e.toDisplayString(S.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Zg,[x.value?(e.openBlock(),e.createBlock(Mt,{key:0,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",count:B.value,layer:x.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:T[1]||(T[1]=C=>l.value=!1)},[...T[3]||(T[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",Kg,[h.value.length>1?(e.openBlock(),e.createElementBlock("div",Gg,[e.createElementVNode("div",Xg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,C=>(e.openBlock(),e.createElementBlock("label",{key:C.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:C.id,"onUpdate:modelValue":T[2]||(T[2]=N=>p.value=N)},null,8,Jg),[[e.vModelRadio,p.value]]),e.createElementVNode("span",null,e.toDisplayString(C.label),1)]))),128))])])):e.createCommentVNode("",!0),r.value?(e.openBlock(),e.createElementBlock("div",Qg,"Завантаження…")):a.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",ty,e.toDisplayString(D.value),1),e.createElementVNode("ul",ny,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,C=>(e.openBlock(),e.createElementBlock("li",{key:C.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",oy,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:C.color})},null,4),e.createElementVNode("span",ly,e.toDisplayString(C.label),1)]),e.createElementVNode("div",ry,[e.createElementVNode("span",ay,e.toDisplayString(C.count),1),e.createElementVNode("span",iy,e.toDisplayString(k(C.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",ey,"Дані відсутні"))])])):(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:T[0]||(T[0]=C=>l.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-9686ce7b"]]),sy={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]"},cy=["title"],dy={key:0,class:"vs-select__options absolute z-50 mt-1 w-auto min-w-full bg-white border border-gray-300 shadow-lg rounded-lg text-sm text-gray-900"},uy=["onClick"],py=["placeholder"],my={class:"divide-y divide-gray-100"},fy=["onClick"],gy=600,yy=30,hy=8,xy="https://data.softpro.ua/api-user/gis-url-proxy",by="https://geo.rv.ua/api-user/dzk.api",ky="https://nominatim.openstreetmap.org/search",al=Q(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n=t,o=ve(),l=e.getCurrentInstance();function r(){return typeof globalThis<"u"&&globalThis.proxy?globalThis.proxy:typeof window<"u"&&window.proxy?window.proxy:null}function a(){var P,R,G;const N=(P=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:P.$settings,w=(R=N==null?void 0:N.map)==null?void 0:R.searchViewbox;if(w)return w;const F=r();return(G=F==null?void 0:F.map)==null?void 0:G.searchViewbox}const s=!!a()?["xy","parcel","address"]:["xy","parcel"],f=e.computed(()=>{var w,F;const N=(F=(w=n.config)==null?void 0:w.tools)==null?void 0:F.filter(P=>s.includes(P));return N&&N.length?N:s}),y=e.computed(()=>{var N,w;return((w=(N=n.config)==null?void 0:N.placeholder)==null?void 0:w.trim())||"Пошук…"}),b=e.ref(f.value[0]);e.watch(f,N=>{N.includes(b.value)||(b.value=N[0])});const c=e.ref(""),p=e.ref(!1),u=e.ref(null),m=e.ref(null),g=e.ref([]),h=e.ref(null),d=e.computed(()=>b.value==="address"&&g.value.length>0);let x=null;const B=e.reactive({position:"absolute",left:"0px",top:"0px",width:"100%",display:"none"});function M(){if(!m.value)return;const N=m.value.getBoundingClientRect(),w=N.width+yy,F=N.left+window.scrollX,P=N.bottom+window.scrollY+hy;B.left=`${F}px`,B.top=`${P}px`,B.width=`${w}px`,B.display="block"}const j=()=>{d.value&&M()};function E(){x&&(clearTimeout(x),x=null)}e.watch(b,()=>{c.value="",p.value=!1,g.value=[],E()}),e.watch(d,N=>{N?e.nextTick(()=>{M()}):B.display="none"}),e.watch(c,N=>{if(b.value!=="address"){g.value=[],E();return}if(!N.trim()){g.value=[],E();return}E(),x=window.setTimeout(()=>{S(N).catch(w=>{const F=(w==null?void 0:w.message)||"Помилка пошуку адреси";le.notify({type:"error",title:"Пошук адреси",message:F})})},gy)});function V(N){b.value=N}function $(N){const w=N.target;if(p.value){const F=u.value;F&&!F.contains(w)&&(p.value=!1)}if(d.value){const F=h.value;F&&!F.contains(w)&&(g.value=[])}}e.onMounted(()=>{window.addEventListener("click",$,!0),window.addEventListener("scroll",j,!0),window.addEventListener("resize",j)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",$,!0),window.removeEventListener("scroll",j,!0),window.removeEventListener("resize",j),E()});function A(N){return N==="xy"?"Координати":N==="parcel"?"Кадастр":"Адреси"}function I(N){const w=N.replace(/[,]+/g," ").trim();if(!w)return null;const F=w.split(/\s+/).filter(Boolean);if(F.length<2)return null;const P=F.slice(0,2).map(Number);if(!P.every(ne=>Number.isFinite(ne)))return null;let[R,G]=P,W=R,Y=G;const re=ne=>Math.abs(ne)<=90,ae=ne=>Math.abs(ne)<=180;if(!re(W)||!ae(Y))if(re(Y)&&ae(W))W=G,Y=R;else return null;return{lat:W,lng:Y}}function q(N){return((N==null?void 0:N.items)||[]).map((F,P)=>{var R,G,W;return{id:String((F==null?void 0:F.id)??P),title:(F==null?void 0:F.title)||((R=F==null?void 0:F.address)==null?void 0:R.label)||"Знайдений обʼєкт",lat:Number((G=F==null?void 0:F.position)==null?void 0:G.lat),lng:Number((W=F==null?void 0:F.position)==null?void 0:W.lng)}})}function U(N){const w=(N==null?void 0:N.result)||(N==null?void 0:N.data)||N;if(!w)return[];const F=w.geom_centroid;if(!F||!Array.isArray(F.coordinates))return[];const[P,R]=F.coordinates;return!Number.isFinite(R)||!Number.isFinite(P)?[]:[{id:"parcel",title:w.cadnum||w.cad_num||"Земельна ділянка",lat:R,lng:P}]}function D(N){return(Array.isArray(N==null?void 0:N.features)?N.features:[]).map((F,P)=>{var ne,ie,ce;const R=(ne=F==null?void 0:F.geometry)==null?void 0:ne.coordinates,G=Number(R==null?void 0:R[0]),W=Number(R==null?void 0:R[1]);if(!Number.isFinite(W)||!Number.isFinite(G))return null;const Y=(F==null?void 0:F.properties)||{},re=((ie=Y==null?void 0:Y.geocoding)==null?void 0:ie.label)||(Y==null?void 0:Y.display_name)||(Y==null?void 0:Y.label)||"Адреса";return{id:String(((ce=Y==null?void 0:Y.geocoding)==null?void 0:ce.place_id)||(Y==null?void 0:Y.place_id)||P),title:re,lat:W,lng:G}}).filter(F=>!!F)}async function S(N){g.value=[],E();const w=new URL(ky);w.searchParams.set("format","geojson"),w.searchParams.set("q",N),w.searchParams.set("addressdetails","1"),w.searchParams.set("bounded","1");const F=a();F&&w.searchParams.set("viewbox",F);const P=await fetch(w.toString());if(!P.ok)throw new Error(`HTTP ${P.status}`);const R=await P.json(),G=D(R);if(!G.length){le.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}g.value=G}function k(N){T(N),g.value=[],c.value=""}function v(N){const F=N.replace(/\s+/g,"").split(":");if(console.log(F),F.length!==4)return!1;const P=[10,2,3,4];return F.every((R,G)=>R.length===P[G]&&/^\d+$/.test(R))}function T(N){var F,P;const w=((F=n.config)==null?void 0:F.zoom)??17;(P=o.flyTo)==null||P.call(o,{center:[N.lng,N.lat],zoom:w})}async function C(){const N=c.value.trim();if(N){if(b.value==="xy"){const w=I(N);if(!w){le.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}T({id:"xy",title:"Точка на мапі",...w}),c.value="";return}if(b.value==="address"){try{await S(N)}catch(w){const F=(w==null?void 0:w.message)||"Помилка пошуку адреси";le.notify({type:"error",title:"Пошук адреси",message:F})}return}try{const w=new URL(b.value==="here"?xy:by);if(b.value==="here")w.searchParams.set("searchtext",N);else{if(!v(N)){le.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}w.searchParams.set("cad_num",N)}const F=await fetch(w.toString());if(!F.ok)throw new Error(`HTTP ${F.status}`);const P=await F.json(),R=b.value==="here"?q(P):U(P);if(!R.length)le.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const G=R[0];T(G),c.value=""}}catch(w){const F=(w==null?void 0:w.message)||"Помилка пошуку";le.notify({type:"error",title:"Пошук",message:F})}}}return(N,w)=>(e.openBlock(),e.createElementBlock("div",sy,[e.createElementVNode("form",{class:"flex gap-2",onSubmit:e.withModifiers(C,["prevent"])},[f.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:u,class:"relative search-type w-[100px]"},[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]=F=>p.value=!p.value)},[e.createElementVNode("span",{class:"block w-full truncate",title:A(b.value)},e.toDisplayString(A(b.value)),9,cy),(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[3]||(w[3]=[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",dy,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,F=>(e.openBlock(),e.createElementBlock("li",{key:F,class:"px-3 py-2 cursor-pointer hover:bg-gray-100 text-gray-900",onClick:P=>V(F)},e.toDisplayString(A(F)),9,uy))),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"searchWrapperRef",ref:m,class:"relative flex-1 min-w-[140px]"},[b.value==="parcel"?(e.openBlock(),e.createBlock(e.unref(kn.VsInputMask),{key:0,modelValue:c.value,"onUpdate:modelValue":w[1]||(w[1]=F=>c.value=F),mask:"0000000000:00:000:0000",class:"vs-input !h-[34px] 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,["modelValue"])):e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:1,"onUpdate:modelValue":w[2]||(w[2]=F=>c.value=F),placeholder:y.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,py)),[[e.vModelText,c.value,void 0,{trim:!0}]]),w[4]||(w[4]=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)),d.value?(e.openBlock(),e.createBlock(e.Teleport,{key:2,to:"body"},[e.createElementVNode("div",{ref_key:"addressResultsRef",ref:h,class:"vs-select__options mt-1 bg-white border border-gray-300 shadow-lg rounded-lg text-sm text-gray-900 z-50 max-h-60 overflow-auto",style:e.normalizeStyle(B)},[e.createElementVNode("ul",my,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,F=>(e.openBlock(),e.createElementBlock("li",{key:F.id,class:"px-3 py-2 cursor-pointer hover:bg-gray-50",onClick:P=>k(F)},e.toDisplayString(F.title),9,fy))),128))])],4)])):e.createCommentVNode("",!0)],512)],32)]))}}),[["__scopeId","data-v-6650498a"]]),wy="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",_y="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",Ey=Q(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:l,removeControl:r}=ve(),a=e.ref(null),i=e.ref(null),s=e.ref(null),f=e.ref(null);let y=null;function b(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function c(E){if(Array.from(document.styleSheets).some(A=>{var I;return(I=A==null?void 0:A.href)==null?void 0:I.includes(E)}))return;const $=document.createElement("link");$.rel="stylesheet",$.href=E,document.head.appendChild($)}function p(E){return new Promise((V,$)=>{const A=Array.from(document.scripts).find(q=>q.src===E);if(A){if(A._loaded)return V();A.addEventListener("load",()=>V()),A.addEventListener("error",()=>$(new Error(`Failed ${E}`)));return}const I=document.createElement("script");I.src=E,I.async=!0,I.onload=()=>{I._loaded=!0,V()},I.onerror=()=>$(new Error(`Failed ${E}`)),document.head.appendChild(I)})}function u(){var V,$,A;const E=window;return E.MapboxExportControl||((V=E.mapboxgl)==null?void 0:V.MapboxExportControl)||(($=E.mapboxglExport)==null?void 0:$.MapboxExportControl)||((A=E.mapboxglExport)==null?void 0:A.default)||null}function m(){const E=document.createElementNS("http://www.w3.org/2000/svg","svg");return E.setAttribute("xmlns","http://www.w3.org/2000/svg"),E.setAttribute("viewBox","0 0 24 24"),E.setAttribute("width","18"),E.setAttribute("height","18"),E.setAttribute("fill","none"),E.setAttribute("stroke","currentColor"),E.setAttribute("stroke-width","2"),E.setAttribute("stroke-linecap","round"),E.setAttribute("stroke-linejoin","round"),E.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(($,A)=>{const I=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries($).forEach(([q,U])=>{I.setAttribute(q,U)}),E.appendChild(I)}),E}function g(){const E=document.createElement("button");E.id="print-btn",E.type="button",E.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(" "),E.setAttribute("aria-label","Друк");const V=m(),$=document.createElement("span");return $.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(" "),$.textContent="Друк",$.setAttribute("aria-hidden","true"),E.appendChild(V),E.appendChild($),E.addEventListener("click",A=>{A.stopPropagation(),h()}),f.value=E,E}function h(){if(!s.value)return;s.value.style.display==="block"?x():d()}function d(){var E,V,$;s.value&&(s.value.style.display="block",(E=f.value)==null||E.classList.add("scale-105","shadow-xl"),(V=i.value)==null||V.toggleCrosshair(!0),($=i.value)==null||$.togglePrintableArea(!0),document.addEventListener("click",B))}function x(){var E,V,$;s.value&&(s.value.style.display="none",(E=f.value)==null||E.classList.remove("scale-105","shadow-xl"),(V=i.value)==null||V.toggleCrosshair(!1),($=i.value)==null||$.togglePrintableArea(!1),document.removeEventListener("click",B))}function B(E){const V=a.value;V&&(E.target&&V.contains(E.target)||x())}function M(E){const V={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};E.querySelectorAll("label, option").forEach(A=>{var q;const I=(q=A.textContent)==null?void 0:q.trim();I&&V[I]&&(A.textContent=V[I])});const $=E.querySelector("button");$&&($.textContent="Друкувати")}function j(E){const V=E.querySelector(".mapboxgl-export-list");if(!V||!a.value)return;s.value=V;const $=E.querySelector("button");if($&&($.style.display="none"),E.style.display="none",!f.value){const I=g();a.value.appendChild(I)}V.style.display="none";const A="_printControlBound";if(!V[A]){const I=q=>q.stopPropagation();V.addEventListener("click",I),V.addEventListener("mousedown",I),V[A]=!0}a.value.appendChild(V),M(V)}return e.onMounted(async()=>{await(o==null?void 0:o());const E=n.value;if(!E)return;c(wy),b();try{await p(_y)}catch(A){console.warn("[MapPrintControl] load error",A);return}const V=u();if(!V)return;const $=new V({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(i.value=$,typeof $.onAdd=="function"){const A=$.onAdd.bind($);$.onAdd=I=>{const q=A(I);return setTimeout(()=>q&&j(q),50),q}}l?l($,"top-right"):E.addControl($,"top-right"),y=A=>{A.key==="Escape"&&x()},document.addEventListener("keyup",y)}),e.onBeforeUnmount(()=>{x(),y&&(document.removeEventListener("keyup",y),y=null);const E=n.value;if(i.value)try{r?r(i.value):E==null||E.removeControl(i.value)}catch{}i.value=null}),(E,V)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:a,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-89156246"]]),Ny={class:"cursor-coordinates"},Vy={class:"cursor-coordinates__text"},By=Q(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Ny,[e.createElementVNode("span",Vy,e.toDisplayString(t.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),Cy={class:"minimap__wrapper"},Dt="minimap-viewport",$y="minimap-viewport-layer",vy=Q(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var B,M,j,E;const n=t,o=((M=(B=e.getCurrentInstance())==null?void 0:B.appContext.config.globalProperties)==null?void 0:M.$settings)||null,l=ut((j=o==null?void 0:o.map)==null?void 0:j.center)||[30,50],r=e.ref(null),a=e.shallowRef(null),i=(E=n.options)==null?void 0:E.active,s=e.ref(i===void 0?!1:!!i);function f(V,$){return typeof V=="number"&&Number.isFinite(V)?V:$}const y=e.computed(()=>{var q,U;const V=(q=n.options)==null?void 0:q.width,$=(U=n.options)==null?void 0:U.height,A=f(n.width??V,210),I=f(n.height??$,150);return{width:`${A}px`,height:`${I}px`}});function b(){var $,A;const V=(A=($=n.mapContext)==null?void 0:$.map)==null?void 0:A.value;if(!V||typeof V.getStyle!="function")return null;try{const I=V.getStyle();return I?JSON.parse(JSON.stringify(I)):null}catch{return null}}let c=null;function p(){var q;if(typeof window>"u"||a.value||!r.value)return;const V=b(),$=l,A={container:r.value,style:V??{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:$,zoom:((q=n.options)==null?void 0:q.zoom)??3,interactive:!1,attributionControl:!1},I={...A,...n.options??{}};I.container=A.container,a.value=new maplibregl.Map(I),a.value.on("load",()=>{m(),h()})}function u(){if(!a.value)return;const V=b();V&&(a.value.once("styledata",()=>{m(),h()}),a.value.setStyle(V))}function m(){if(a.value){if(typeof a.value.isStyleLoaded=="function"&&!a.value.isStyleLoaded()){a.value.once("styledata",()=>{m(),h()});return}a.value.getSource(Dt)||(a.value.addSource(Dt,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),a.value.addLayer({id:$y,type:"fill",source:Dt,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function g(){s.value=!s.value,s.value&&e.nextTick(()=>{var V;return(V=a.value)==null?void 0:V.resize()})}function h(){var D,S;const V=(S=(D=n.mapContext)==null?void 0:D.map)==null?void 0:S.value;if(!a.value||!V||!V.getBounds)return;if(typeof a.value.isStyleLoaded=="function"&&!a.value.isStyleLoaded()){a.value.once("styledata",()=>{h()});return}const $=V.getBounds();if(!$)return;const A=$.getNorthEast(),I=$.getSouthWest();if(!A||!I)return;const q=[[I.lng,A.lat],[A.lng,A.lat],[A.lng,I.lat],[I.lng,I.lat],[I.lng,A.lat]],U=a.value.getSource(Dt);if(!U){m();return}U.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[q]},properties:{}})}function d(){var A;const V=n.mapContext,$=(A=V==null?void 0:V.map)==null?void 0:A.value;!(V!=null&&V.on)||!$||(c==null||c(),c=V.on("move",h),h())}async function x(){const V=n.mapContext;if(V){if(typeof V.ready=="function")try{await V.ready()}catch{return}d()}}return e.onMounted(()=>{p(),x()}),e.watch(()=>n.mapContext,()=>{x(),h()}),e.watch(()=>{var V,$;return($=(V=n.mapContext)==null?void 0:V.map)==null?void 0:$.value},()=>{a.value&&(u(),x())}),e.watch(y,()=>{a.value&&e.nextTick(()=>{var V;return(V=a.value)==null?void 0:V.resize()})}),e.watch(()=>n.options,()=>{var $;c==null||c(),c=null,a.value&&(a.value.remove(),a.value=null);const V=($=n.options)==null?void 0:$.active;typeof V=="boolean"&&(s.value=V),e.nextTick(()=>{p(),x()})},{deep:!0}),e.onBeforeUnmount(()=>{c==null||c(),c=null,a.value&&(a.value.remove(),a.value=null)}),(V,$)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["minimap",{"minimap--open":s.value}])},[e.createElementVNode("button",{type:"button",class:"minimap__button",onClick:g},[e.createVNode(e.unref(_l))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",Cy,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:r,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(y.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,s.value]])]),_:1})],2))}}),[["__scopeId","data-v-bc754c89"]]),Sy={key:1,class:"absolute bottom-4 right-4 z-[80] flex items-end gap-2"},Ay={class:"absolute top-[103px] right-[6.5px] z-[80] flex flex-col items-end gap-1"},Ly={class:"map-widget__overlay-grid"},Fy={key:0,id:"map-filter-popover-host",class:"map-widget__filter-host"},Ty={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},My={class:"map-widget__stack"},Dy={key:2,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom xl:mb-5 mb-2"},Iy={class:"map-widget__stack map-widget__stack--bottom"},jy={key:0,class:"map-widget__state"},zy={key:1,class:"map-widget__state map-widget__state--error"},It=Q(e.defineComponent({__name:"MapWidget",props:{id:{},height:{},minZoom:{},maxZoom:{},data:{}},setup(t){var jt,zt,Je,mt;const n=t,o=pe.useRoute(),l=pe.useRouter(),r=e.ref(null),a=e.ref({}),i=e.ref(null),s=e.ref(!1),f=e.ref(null),y=e.ref(!1),b=e.ref([]),c=e.computed(()=>n.id||"main"),p=e.computed(()=>{var z,H;return{height:((z=n.height)==null?void 0:z.trim())||((H=a.value)==null?void 0:H.height)||"calc(100vh - 65px)"}}),u=e.computed(()=>{var z;return((z=a.value)==null?void 0:z.name)??null}),m=e.computed(()=>{var z;return((z=a.value)==null?void 0:z.description)??null}),g=e.computed(()=>{var z;return D((z=a.value)==null?void 0:z.maps)}),h=e.computed(()=>{var H,te;const z=((H=a.value)==null?void 0:H.minZoom)??((te=a.value)==null?void 0:te.minzoom)??null;return typeof z=="number"?z:null}),d=e.computed(()=>{var H,te;const z=((H=a.value)==null?void 0:H.maxZoom)??((te=a.value)==null?void 0:te.maxzoom)??null;return typeof z=="number"?z:typeof n.maxZoom=="number"?n.maxZoom:20}),x=e.ref(null),B=e.computed(()=>{if(!x.value)return null;const{lng:z,lat:H}=x.value;return`${H.toFixed(6)}, ${z.toFixed(6)}`}),M=e.computed(()=>{var z;return((z=r.value)==null?void 0:z.ctx)??null}),j=e.computed(()=>{var z;return((z=a.value)==null?void 0:z.minimap)??null});function E(z){if(!z||typeof z!="object")return z;const H=ut(z.center);return H?{...z,center:H}:z}const V=((zt=(jt=e.getCurrentInstance())==null?void 0:jt.appContext.config.globalProperties)==null?void 0:zt.$settings)||null;function $(z){if(z==null)return null;const H=Number(typeof z=="string"?z.trim():z);return Number.isFinite(H)?H:null}const A=ut((Je=V==null?void 0:V.map)==null?void 0:Je.center),I=$((mt=V==null?void 0:V.map)==null?void 0:mt.zoom),q=e.computed(()=>{const z=(V==null?void 0:V.map)||null,H=(z==null?void 0:z.boundary)??null,te=(z==null?void 0:z.katottg)??null;return!H&&!te?null:{boundary:H,katottg:te}});function U(z){return typeof z=="string"&&z.trim()?z.trim().toLowerCase():"top-left"}function D(z){return Array.isArray(z)?z:z&&typeof z=="object"?Object.values(z).filter(Boolean):[]}const S=e.computed(()=>{var z;return D((z=a.value)==null?void 0:z.widgets)}),k=["left","right"],v=e.computed(()=>{const z={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},H={"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 S.value.forEach(te=>{const ge=U(te.position),J=H[ge]??{side:"left",align:"top"};z[J.side][J.align].push(te)}),z});function T(z){return Array.isArray(z)?z[0]??null:typeof z=="string"?z:null}async function C(){var H;await e.nextTick();const z=(H=r.value)==null?void 0:H.ctx;return z?(z.ready&&await z.ready(),z):null}function N(){var z,H,te;return((te=(H=(z=r.value)==null?void 0:z.ctx)==null?void 0:H.map)==null?void 0:te.value)??null}function w(){const z=N();if(!z)return null;const H=z.getCenter();return{z:z.getZoom().toFixed(2),x:H.lng.toFixed(5),y:H.lat.toFixed(5)}}async function F(){var te;const z=await C(),H=(te=z==null?void 0:z.map)==null?void 0:te.value;H&&(typeof h.value=="number"&&H.setMinZoom(h.value),typeof d.value=="number"&&H.setMaxZoom(d.value))}async function P(){var J;if(i.value)return;const z=await C(),H=(J=z==null?void 0:z.map)==null?void 0:J.value;if(!H)return;const te=H.getCenter(),ge=H.getZoom();i.value={center:[te.lng,te.lat],zoom:ge}}function R(){const z=w();if(!z)return;const H=T(o.query.x),te=T(o.query.y),ge=T(o.query.z);H===z.x&&te===z.y&&ge===z.z||l.replace({query:{...o.query,...z}}).catch(()=>{})}function G(z,H,te=1e-6){return Math.abs(z-H)<=te}async function W(){var Be;const z=await C(),H=(Be=z==null?void 0:z.map)==null?void 0:Be.value;if(!z||!H)return;const te=parseFloat(T(o.query.x)??""),ge=parseFloat(T(o.query.y)??""),J=parseFloat(T(o.query.z)??""),de=!Number.isNaN(te),_e=!Number.isNaN(ge),Z=!Number.isNaN(J);let Ee=!1;if(de&&_e){const Me=H.getCenter();(!G(Me.lng,te)||!G(Me.lat,ge))&&(H.setCenter([te,ge]),Ee=!0)}Z&&H.setZoom(J),(!de||!_e||!Z||Ee)&&R()}let Y=null,re=null;function ae(z){const H=z==null?void 0:z.lngLat;H&&(x.value={lng:H.lng,lat:H.lat})}async function ne(){const z=await C();z!=null&&z.on&&(Y==null||Y(),Y=z.on("moveend",R),re==null||re(),re=z.on("mousemove",ae))}e.onUnmounted(()=>{Y==null||Y(),Y=null,re==null||re(),re=null});async function ie(z=!1){var te,ge;y.value=!1,f.value=null,x.value=null;const H=z||!n.data;s.value=H;try{const J=H?await(async()=>{const Be=await fetch(`/api/gis-map/${encodeURIComponent(c.value)}`);if(!Be.ok)throw new Error(`Помилка завантаження (${Be.status})`);return Be.json()})():n.data;H||(y.value=!0);const de=ut(J.center)??A,_e=D(J.layers).map(Be=>E(Be)),Z=$(J.zoom)??I;a.value={...J,center:de??null,zoom:Z??J.zoom??null,layers:_e,widgets:J.widgets},b.value=J.tools||["home","print"];const Ee=await C();Ee&&(de&&((te=Ee.setCenter)==null||te.call(Ee,de)),Z!=null&&((ge=Ee.setZoom)==null||ge.call(Ee,Z)),i.value||await P()),await F(),await W(),await ne(),y.value=!0}catch(J){f.value=(J==null?void 0:J.message)||"Не вдалося завантажити карту"}finally{H&&(s.value=!1)}}const ce=e.computed(()=>{var ge;const z=new Map;return D((ge=a.value)==null?void 0:ge.layers).forEach(J=>{if(!(J!=null&&J.id))return;const de=E(J)||J;z.set(J.id,{...de})}),S.value.filter(J=>(J==null?void 0:J.type)==="layers").flatMap(J=>{var de;return D((de=J==null?void 0:J.config)==null?void 0:de.layers)}).forEach(J=>{if(!(J!=null&&J.id))return;const de=z.get(J.id)||{},_e=E(J)||J;z.set(J.id,{...de,..._e,actions:J.actions||de.actions||null,name:de.name||J.name||J.title||de.title||J.id,title:de.title||J.title||de.name||null,visible:de.visible??J.visible??!0})}),Array.from(z.values())}),Ae=e.ref([]);function Le(z){Ae.value.includes(z)?Ae.value=Ae.value.filter(H=>H!==z):Ae.value.push(z)}const je=e.computed(()=>z=>Ae.value.includes(z.id));return e.watch([h,d],()=>{F()},{immediate:!0}),e.watch(c,()=>{ie(!0)}),e.watch(()=>n.data,z=>{z&&ie()}),e.onMounted(()=>{ie()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{W()}),(z,H)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(p.value)},[H[2]||(H[2]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createVNode(Tt,{ref_key:"mapViewRef",ref:r,class:"map-widget__view"},{default:e.withCtx(()=>{var te,ge,J,de;return[q.value?(e.openBlock(),e.createBlock(Qo,{key:0,"layer-id":"app-boundary",boundary:q.value.boundary,katottg:q.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),M.value?(e.openBlock(),e.createElementBlock("div",Sy,[B.value?(e.openBlock(),e.createBlock(By,{key:0,coordinates:B.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(vy,{"map-context":M.value,options:j.value},null,8,["map-context","options"])])):e.createCommentVNode("",!0),e.createElementVNode("div",Ay,[b.value.includes("home")?(e.openBlock(),e.createBlock(mn,{key:0,center:((te=a.value)==null?void 0:te.center)||((ge=i.value)==null?void 0:ge.center)||null,zoom:((J=a.value)==null?void 0:J.zoom)??((de=i.value)==null?void 0:de.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),b.value.includes("print")?(e.openBlock(),e.createBlock(Ey,{key:1})):e.createCommentVNode("",!0)]),y.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("div",Ly,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(k,_e=>e.createElementVNode("div",{key:_e,class:e.normalizeClass(["map-widget__side",`map-widget__side--${_e}`])},[_e==="left"?(e.openBlock(),e.createElementBlock("div",Fy)):e.createCommentVNode("",!0),v.value[_e].top.length?(e.openBlock(),e.createElementBlock("div",Ty,[e.createElementVNode("div",My,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.value[_e].top,Z=>{var Ee,Be,Me,Ze,Ke,Pe,ze,Re;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:Z.id||Z.type,class:"map-overlay__item"},[Z.type==="info"?(e.openBlock(),e.createBlock(el,{key:0,title:((Ee=Z.config)==null?void 0:Ee.title)||Z.title||null,content:((Be=Z.config)==null?void 0:Be.content)||"",links:g.value,"map-name":u.value,"map-description":m.value},null,8,["title","content","links","map-name","map-description"])):Z.type==="catalog"?(e.openBlock(),e.createBlock(ll,{key:1,api:((Me=Z.config)==null?void 0:Me.api)||null},null,8,["api"])):Z.type==="layers"?(e.openBlock(),e.createBlock(ol,{key:2,layers:ce.value,onAction:H[0]||(H[0]=Qe=>Le(Qe.layerId)),config:Z.config},null,8,["layers","config"])):Z.type==="basemaps"?(e.openBlock(),e.createBlock(_t,{key:3,layers:((Ze=Z.config)==null?void 0:Ze.layers)||null,"default-layer":((Ke=Z.config)==null?void 0:Ke.default)||null,title:Z.title||((Pe=Z.config)==null?void 0:Pe.title)||null},null,8,["layers","default-layer","title"])):Z.type==="legend"?(e.openBlock(),e.createBlock(Et,{key:4,items:((ze=Z.config)==null?void 0:ze.items)||[]},null,8,["items"])):Z.type==="filters"&&je.value(Z)?(e.openBlock(),e.createBlock(dn,{key:5,"layer-id":(Re=Z.config)==null?void 0:Re.layer,onClose:Le},null,8,["layer-id"])):Z.type==="dataset"||Z.type==="attribute"?(e.openBlock(),e.createBlock(rl,{key:6,config:Z.config},null,8,["config"])):Z.type==="search"?(e.openBlock(),e.createBlock(al,{key:7,config:Z.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,Z.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),v.value[_e].bottom.length?(e.openBlock(),e.createElementBlock("div",Dy,[e.createElementVNode("div",Iy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.value[_e].bottom,Z=>{var Ee,Be,Me,Ze,Ke,Pe,ze,Re;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:Z.id||Z.type,class:"map-overlay__item"},[Z.type==="info"?(e.openBlock(),e.createBlock(el,{key:0,title:((Ee=Z.config)==null?void 0:Ee.title)||Z.title||null,content:((Be=Z.config)==null?void 0:Be.content)||"",links:g.value,"map-name":u.value,"map-description":m.value},null,8,["title","content","links","map-name","map-description"])):Z.type==="catalog"?(e.openBlock(),e.createBlock(ll,{key:1,api:((Me=Z.config)==null?void 0:Me.api)||null},null,8,["api"])):Z.type==="layers"?(e.openBlock(),e.createBlock(ol,{key:2,layers:ce.value,onAction:H[1]||(H[1]=Qe=>Le(Qe.layerId)),config:Z.config},null,8,["layers","config"])):Z.type==="basemaps"?(e.openBlock(),e.createBlock(_t,{key:3,layers:((Ze=Z.config)==null?void 0:Ze.layers)||null,"default-layer":((Ke=Z.config)==null?void 0:Ke.default)||null,title:Z.title||((Pe=Z.config)==null?void 0:Pe.title)||null},null,8,["layers","default-layer","title"])):Z.type==="legend"?(e.openBlock(),e.createBlock(Et,{key:4,items:((ze=Z.config)==null?void 0:ze.items)||[]},null,8,["items"])):Z.type==="filters"&&je.value(Z)?(e.openBlock(),e.createBlock(dn,{key:5,"layer-id":(Re=Z.config)==null?void 0:Re.layer,onClose:Le},null,8,["layer-id"])):Z.type==="dataset"||Z.type==="attribute"?(e.openBlock(),e.createBlock(rl,{key:6,config:Z.config},null,8,["config"])):Z.type==="search"?(e.openBlock(),e.createBlock(al,{key:7,config:Z.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,Z.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(Ko),e.createVNode(Jo,{"map-id":c.value},null,8,["map-id"])],64)):e.createCommentVNode("",!0)]}),_:1},512),s.value?(e.openBlock(),e.createElementBlock("div",jy,"Завантаження карти…")):f.value?(e.openBlock(),e.createElementBlock("div",zy,e.toDisplayString(f.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-73d647f9"]]),Oy={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},Py={class:"rounded-xl border border-gray-200 overflow-hidden bg-white"},Ry=e.defineComponent({__name:"MapPreview",props:{id:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("section",Oy,[o[0]||(o[0]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Попередній перегляд карти ",-1)),e.createElementVNode("div",Py,[e.createVNode(It,{class:"w-full h-[360px]",id:t.id},null,8,["id"])])]))}}),Uy={class:"bg-white rounded-lg shadow-xl w-full max-w-4xl flex flex-col h-[80vh] m-4"},qy={class:"flex items-center justify-between px-6 py-4 border-b border-gray-200"},Hy={key:0,class:"absolute top-0 left-0 right-0 bg-red-100 text-red-700 text-sm px-4 py-2 z-10 border-b border-red-200"},Wy={class:"flex-1 overflow-hidden relative bg-[#fffffe]"},Yy={class:"px-6 py-4 border-t border-gray-200 flex justify-end gap-3"},Zy=["disabled"],Ky=e.defineComponent({__name:"ConfigEditor",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,l=n,r=e.ref(""),a=e.ref(null);e.watch(()=>o.modelValue,f=>{if(f){try{r.value=JSON.stringify(f,null,2)}catch{r.value="{}"}a.value=null}},{immediate:!0}),e.watch(r,f=>{if(!f.trim()){a.value=null;return}try{JSON.parse(f),a.value=null}catch(y){a.value=y.message}}),e.watch(()=>o.modelValue,()=>{setTimeout(()=>{const{monaco:f}=window;if(f&&f.editor){const y=f.editor.getEditors();y.length>0&&y[y.length-1].updateOptions({wordWrap:"on"})}},300)},{immediate:!0});function i(){l("update:modelValue",null),r.value="",a.value=null}function s(){if(!a.value)try{const f=JSON.parse(r.value);l("save",f),i()}catch(f){console.error("Failed to parse JSON",f)}}return(f,y)=>t.modelValue!==null?(e.openBlock(),e.createElementBlock("div",{key:0,class:"fixed inset-0 flex items-center justify-center bg-black/50 backdrop-blur-sm",onClick:e.withModifiers(i,["self"])},[e.createElementVNode("div",Uy,[e.createElementVNode("div",qy,[y[1]||(y[1]=e.createElementVNode("h3",{class:"text-lg font-semibold text-gray-800"}," Редагування конфігурації (JSON) ",-1)),e.createElementVNode("button",{onClick:i,class:"text-gray-500 hover:text-gray-700 transition-colors"},[e.createVNode(e.unref(ft),{size:20})])]),a.value?(e.openBlock(),e.createElementBlock("div",Hy," Помилка JSON: "+e.toDisplayString(a.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Wy,[e.createVNode(Ft,{modelValue:r.value,"onUpdate:modelValue":y[0]||(y[0]=b=>r.value=b),language:"json",theme:"vs-light",class:"w-full h-full"},null,8,["modelValue"])]),e.createElementVNode("div",Yy,[e.createElementVNode("button",{onClick:i,class:"px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 transition-colors"}," Скасувати "),e.createElementVNode("button",{onClick:s,disabled:!!a.value,class:"px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed"}," Зберегти ",8,Zy)])])])):e.createCommentVNode("",!0)}}),Gy={key:0,class:"text-center py-8 text-gray-500 border rounded-lg bg-gray-50"},Xy={key:1,class:"rounded-lg border border-gray-200 overflow-hidden"},Jy={class:"w-full text-sm"},Qy={class:"divide-y divide-gray-200"},eh={class:"px-4 py-3"},th=["onUpdate:modelValue","onChange"],nh=["value"],oh={class:"px-4 py-3"},lh=["onUpdate:modelValue","onChange"],rh=["value"],ah={class:"px-4 py-3 text-center"},ih=["checked","onChange"],sh={class:"px-4 py-3"},ch={key:0,class:"flex items-center gap-2"},dh=["onClick"],uh=["onClick"],ph={key:1},mh=["onClick"],fh={class:"px-4 py-3 text-right"},gh=["onClick"],yh=e.defineComponent({__name:"WidgetSettings",props:{modelValue:{}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,l=n,r=["catalog","legend","basemaps","info","layers","dataset","filters","search"],a=["top-left","top-right","bottom-left","bottom-right"],i=e.ref(null),s=e.ref(-1),f=e.computed(()=>o.modelValue||[]);function y(){const d=[...f.value,{type:"info",position:"top-left",visible:!0,config:{}}];l("update:modelValue",d)}function b(d){le.confirm({title:"Видалити віджет?",message:"Ви впевнені, що хочете видалити цей віджет?",type:"warning",onConfirm:()=>{const x=f.value.filter((B,M)=>M!==d);l("update:modelValue",x)}})}function c(d,x,B){const M=[...f.value];M[d]={...M[d],[x]:B},l("update:modelValue",M)}function p(d){return!!d&&Object.keys(d).length>0}function u(d,x){s.value=d,i.value=x||{}}function m(d){u(d,{})}function g(d){le.confirm({title:"Видалити конфігурацію?",message:"Ви впевнені, що хочете видалити конфігурацію цього віджета?",type:"warning",onConfirm:()=>{c(d,"config",void 0)}})}function h(d){s.value>-1&&c(s.value,"config",d),i.value=null,s.value=-1}return(d,x)=>{var B;return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",{class:"flex items-center justify-between mb-4"},[x[1]||(x[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800"},"Віджети",-1)),e.createElementVNode("button",{onClick:y,class:"px-3 py-1.5 text-sm bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors"}," + Додати віджет ")]),(B=f.value)!=null&&B.length?(e.openBlock(),e.createElementBlock("div",Xy,[e.createElementVNode("table",Jy,[x[2]||(x[2]=e.createElementVNode("thead",{class:"bg-gray-50 border-b border-gray-200"},[e.createElementVNode("tr",null,[e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700 w-1/4"},"Тип"),e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700 w-1/4"},"Розташування"),e.createElementVNode("th",{class:"px-4 py-3 text-center font-medium text-gray-700 w-24"},"Видимість"),e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700"},"Конфігурація"),e.createElementVNode("th",{class:"px-4 py-3 text-right font-medium text-gray-700 w-24"},"Дії")])],-1)),e.createElementVNode("tbody",Qy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,(M,j)=>(e.openBlock(),e.createElementBlock("tr",{key:j,class:"hover:bg-gray-50"},[e.createElementVNode("td",eh,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":E=>M.type=E,onChange:E=>c(j,"type",M.type),class:"w-full px-2 py-1.5 bg-white border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-blue-500 text-gray-700"},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(r,E=>e.createElementVNode("option",{key:E,value:E},e.toDisplayString(E),9,nh)),64))],40,th),[[e.vModelSelect,M.type]])]),e.createElementVNode("td",oh,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":E=>M.position=E,onChange:E=>c(j,"position",M.position),class:"w-full px-2 py-1.5 bg-white border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-blue-500 text-gray-700"},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,E=>e.createElementVNode("option",{key:E,value:E},e.toDisplayString(E),9,rh)),64))],40,lh),[[e.vModelSelect,M.position]])]),e.createElementVNode("td",ah,[e.createElementVNode("input",{type:"checkbox",checked:M.visible!==!1,onChange:E=>c(j,"visible",E.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"},null,40,ih)]),e.createElementVNode("td",sh,[p(M.config)?(e.openBlock(),e.createElementBlock("div",ch,[e.createElementVNode("button",{onClick:E=>u(j,M.config),class:"p-1 text-blue-600 hover:text-blue-800 hover:bg-blue-50 rounded transition-colors",title:"Редагувати конфігурацію"},[e.createVNode(e.unref(Al),{size:16})],8,dh),e.createElementVNode("button",{onClick:E=>g(j),class:"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors",title:"Видалити конфігурацію"},[e.createVNode(e.unref(ft),{size:16})],8,uh)])):(e.openBlock(),e.createElementBlock("div",ph,[e.createElementVNode("button",{onClick:E=>m(j),class:"p-1 text-green-600 hover:text-green-800 hover:bg-green-50 rounded transition-colors",title:"Додати конфігурацію"},[e.createVNode(e.unref(Rt),{size:16})],8,mh)]))]),e.createElementVNode("td",fh,[e.createElementVNode("button",{onClick:E=>b(j),class:"p-1 text-gray-400 hover:text-red-500 transition-colors",title:"Видалити віджет"},[e.createVNode(e.unref(Cn),{size:16})],8,gh)])]))),128))])])])):(e.openBlock(),e.createElementBlock("div",Gy," Немає віджетів. Додайте перший віджет. ")),e.createVNode(Ky,{teleport:"#modal",modelValue:i.value,"onUpdate:modelValue":x[0]||(x[0]=M=>i.value=M),onSave:h},null,8,["modelValue"])])}}}),hh={class:"relative min-h-svh flex-1 flex-col flex gap-4 bg-white p-8 overflow-y-auto"},xh={class:"max-w-6xl mx-auto w-full"},bh={class:"flex items-center justify-between mb-6"},kh={class:"mb-2 text-2xl font-semibold text-gray-900"},wh={class:"flex items-center gap-2"},_h=["disabled"],Eh={key:0,class:"text-center py-12"},Nh={class:"space-y-6"},Vh={class:"space-y-6"},Bh={class:"space-y-6"},Ch=Q(e.defineComponent({__name:"MapSettings",setup(t){const n=pe.useRouter(),o=pe.useRoute(),l=e.ref(!0),r=e.ref(!1),a=e.ref([]),i=e.ref({}),s=[{name:"Загальна",id:"general"},{name:"Шари",id:"layers"},{name:"Віджети",id:"widgets"},{name:"Карта",id:"map"}],f=s.map(E=>E.id),y=E=>E?Array.isArray(E)?E[0]:E:null,b=(()=>{const E=y(o.query.tab);return E&&f.includes(E)?E:"general"})(),c=e.ref(b);e.watch(()=>o.query.tab,E=>{const V=y(E);V&&f.includes(V)&&c.value!==V&&(c.value=V)}),e.watch(c,E=>{o.query.tab!==E&&n.replace({query:{...o.query,tab:E}})});const p=e.ref({name:"",map_key:"",description:"",holder:"",image:"",keywords:[],center:null,zoom:11,widgets:[],layers:[]}),u=e.computed({get:()=>(p.value.layers||[]).map(E=>E.id||E),set:E=>{p.value.layers=E}}),m=e.computed(()=>a.value.map(E=>({id:E.id,text:E.name||E.id}))),g=e.computed({get:()=>u.value.map(E=>{const V=m.value.find($=>$.id===E);return V?V.text:E}),set:E=>{const V=E.map($=>{const A=m.value.find(I=>I.text===$);return A?A.id:null}).filter($=>$!==null);u.value=V}}),h=e.computed(()=>{const E=p.value.center;if(!Array.isArray(E)||E.length<2)return"Не задано";const[V,$]=E;return V===void 0||$===void 0||V===null||$===null||Number.isNaN(Number(V))||Number.isNaN(Number($))?"Не задано":`Lng ${Number(V).toFixed(6)}, Lat ${Number($).toFixed(6)}`}),d=e.computed(()=>{const E=p.value.zoom;if(E==null||E==="")return"Не задано";const V=Number(E);return Number.isNaN(V)?"Не задано":V.toFixed(2)}),x=[{name:"name",type:"text",label:"Назва",col:6,validators:["required"]},{name:"map_key",type:"text",label:"Унікальний ключ",col:6,validators:["required"]},{name:"description",type:"textarea",label:"Опис",col:12},{name:"holder",type:"text",label:"Власник/Утримувач/Відповідальний",col:6},{name:"keywords",type:"Tags",label:"Ключові слова",placeholder:"Введіть тег та натисніть Enter",col:6},{name:"center",type:"array",label:"Центр",inputType:"number",limit:2,count:2,col:6},{name:"zoom",type:"number",label:"Зум",col:6,validators:["required"]},{name:"is_public",type:"switcher",label:"Чи публічна карта?",col:6,data:"yes_no"},{name:"is_active",type:"switcher",label:"Чи активна?",col:6,data:"yes_no"},{name:"image",type:"File",label:"Фото",col:12}];async function B(){try{const E=await fetch("/api/gis-layer-list");E.ok&&(a.value=await E.json())}catch(E){console.error("Failed to load available layers:",E)}}async function M(){try{const V=await(await fetch(`/api/gis-map/${o.params.id}?original=1`)).json();p.value={...V,keywords:V.keywords||[],center:V.center??null,widgets:Array.isArray(V.widgets)?V.widgets:[],layers:(V.layers||[]).map($=>$.id||$)}}catch(E){console.error("Failed to load map:",E),le.notify({type:"error",title:"Помилка",message:"Не вдалося завантажити карту"})}finally{l.value=!1}}async function j(){var V,$;const E=($=(V=i.value)==null?void 0:V.validate)==null?void 0:$.call(V);if(E){le.notify({type:"warning",title:"Валідація",message:Object.entries(E).map(([A,I])=>`${A}: ${I}`).join(`
152
+ ${M}`:M}s.value=!1,f.value=[]}function u(){s.value=!1,f.value=[]}function m(){const h=a.value==="html"?"html":"list",d={card_mode:h};h==="html"?d.html=i.value:h==="list"&&(d.list=r.value),l("save","card",d)}const g=[{value:"all",label:"Всі"},{value:"list",label:"Список"},{value:"none",label:"Жодне"},{value:"html",label:"HTML"}];return(h,d)=>(e.openBlock(),e.createElementBlock("div",Xu,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:c,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:m,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти ")]),e.createVNode(Gu,{modelValue:a.value,"onUpdate:modelValue":d[0]||(d[0]=x=>a.value=x),options:g},null,8,["modelValue"]),e.createElementVNode("div",Ju,[a.value==="list"?(e.openBlock(),e.createBlock(qe,{key:0,modelValue:r.value,"onUpdate:modelValue":d[1]||(d[1]=x=>r.value=x),"columns-scheme":y,"form-scheme":b,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):a.value==="html"?(e.openBlock(),e.createBlock(Ft,{key:1,modelValue:i.value,"onUpdate:modelValue":d[2]||(d[2]=x=>i.value=x),language:"html",theme:"vs-light",class:"flex-1 min-h-0"},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(tt,{visible:s.value,"onUpdate:visible":d[3]||(d[3]=x=>s.value=x),selection:f.value,"onUpdate:selection":d[4]||(d[4]=x=>f.value=x),fields:t.fields,title:"Імпорт полів для картки","id-prefix":"import-card",onConfirm:p,onCancel:u},null,8,["visible","selection","fields"])]))}}),ep={class:"flex flex-col flex-1 min-h-0"},tp=e.defineComponent({__name:"vs-tab-filter",props:{fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,l=n;console.log(o.columns);const r=e.ref(o.columns||[]);e.watch(()=>o.columns,m=>r.value=m||[],{immediate:!0}),e.watch(r,m=>l("update:columns",m),{deep:!0,immediate:!0});const a=e.ref("list"),i=e.ref(!1),s=e.ref([]),f=[{key:"id",label:"Name"},{key:"label",label:"UA"}],y={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 b(){s.value=r.value.map(m=>m.name||m.id),i.value=!0}function c(){var d;const m=[...r.value],g=((d=o.fields)==null?void 0:d.filter(x=>s.value.includes(x.name)))||[],h=ot(m,g,{selectedKeys:s.value,resolveKey:x=>He(x)});r.value=h,i.value=!1,s.value=[]}function p(){i.value=!1,s.value=[]}function u(){let m=[];a.value==="all"?m=o.fields||[]:a.value==="none"?m=[]:m=r.value,l("save",m)}return(m,g)=>(e.openBlock(),e.createElementBlock("div",ep,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:b,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:u,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти фільтр ")]),a.value==="list"?(e.openBlock(),e.createBlock(qe,{key:0,modelValue:r.value,"onUpdate:modelValue":g[0]||(g[0]=h=>r.value=h),"columns-scheme":f,"form-scheme":y,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0),e.createVNode(tt,{visible:i.value,"onUpdate:visible":g[1]||(g[1]=h=>i.value=h),selection:s.value,"onUpdate:selection":g[2]||(g[2]=h=>s.value=h),fields:t.fields,title:"Імпорт полів","id-prefix":"import-filter",onConfirm:c,onCancel:p},null,8,["visible","selection","fields"])]))}}),Tt=e.defineComponent({__name:"MapView",setup(t,{expose:n}){var y,b;const o=e.ref(null),l=e.ref(null),r=((b=(y=e.getCurrentInstance())==null?void 0:y.appContext.config.globalProperties)==null?void 0:b.$settings)||null,a=xu({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},doubleClickZoom:!1},controls:{navigation:!0,scale:!0},settings:r});async function i(){var p;await e.nextTick();const c=(p=a.map)==null?void 0:p.value;c!=null&&c.resize&&c.resize()}function s(){typeof ResizeObserver>"u"||l.value||!o.value||(l.value=new ResizeObserver(()=>{i()}),l.value.observe(o.value))}function f(){var c;(c=l.value)==null||c.disconnect(),l.value=null}return e.onMounted(()=>{i(),s(),window.addEventListener("resize",i)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",i),f()}),n({ctx:a}),(c,p)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"el",ref:o,class:"w-full h-full rounded-xl overflow-hidden"},[e.renderSlot(c.$slots,"default")],512))}}),np=e.defineComponent({__name:"MapDataLayer",props:{id:{},layer:{},styleSpec:{}},setup(t,{expose:n}){var m,g,h,d;const{map:o,flyTo:l,setZoom:r}=ve(),a=((g=(m=e.getCurrentInstance())==null?void 0:m.appContext.config.globalProperties)==null?void 0:g.$settings)||null,i=t,s=i.id;String(i.id);const f=`${location.origin}/api/vtile/${i.id}/ua/{z}/{x}/{y}.vmt?all=1`,y=se(s,{source:{type:"vector",tiles:[f],minzoom:0,maxzoom:14},popup:i.layer.popup,layer:{style:(h=i.layer)==null?void 0:h.style}});n({layerHandle:y}),l({center:i.layer.center||((d=a==null?void 0:a.map)==null?void 0:d.center)||[30,50],animate:!1});let b=null;function c(){if(!(y!=null&&y.setTiles))return;const x=f.includes("?")?"&":"?",B=`${f}${x}_=${Date.now()}`;y.setTiles([B])}function p(){b&&clearTimeout(b),b=setTimeout(()=>{b=null,u().catch(x=>console.error("Failed to update map layer",x))},300)}async function u(){o.value&&(c(),y.setStyle(i.styleSpec??null))}return e.watch(()=>i.styleSpec,p,{deep:!0}),e.onBeforeUnmount(()=>{y.remove()}),(x,B)=>null}}),wt=e.ref(null);function op(){wt.value=null}function lp(t){const n=e.ref(!1),o=()=>typeof t=="string"?t:t.value;e.watch(wt,i=>{i!==o()&&n.value&&(n.value=!1)});function l(){wt.value=o(),n.value=!0}function r(){wt.value===o()&&(wt.value=null),n.value=!1}function a(){n.value?r():l()}return{isOpen:n,open:l,close:r,toggle:a}}const rp={class:"map-filter"},ap={class:"map-filter__header"},ip={class:"map-filter__title"},sp={"aria-hidden":"true"},cn="#map-filter-popover-host",Mt=Q(e.defineComponent({__name:"MapFilterPopover",props:{count:{},layer:{},catalogAnchor:{},disabled:{type:Boolean}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/filter")),o=t,l=e.computed(()=>{var w;return((w=o.layer)==null?void 0:w.id)??""}),r=e.computed(()=>`filter-popover-${l.value}`),{isOpen:a,close:i,toggle:s}=lp(r),f=e.reactive({top:0,left:0,transform:"translateX(-50%)"}),y=e.ref(null),b=e.ref(null);let c=null;const p=e.ref({}),u=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0}),m=e.computed(()=>a.value),g=e.computed(()=>{var w;return Array.isArray((w=o.layer)==null?void 0:w.filters)?o.layer.filters:[]}),h=e.computed(()=>g.value.length>0),d=e.computed(()=>{var w;return((w=o.layer)==null?void 0:w.name)??""}),x=e.computed(()=>g.value),B=e.ref(null),M=e.computed(()=>g.value.length),j=e.computed(()=>M.value<=2),E=e.computed(()=>j.value?"body":typeof window>"u"||B.value?cn:"body"),V=e.computed(()=>{if(!m.value||!j.value)return{};const w=typeof window<"u"?window.innerWidth:280,P=Math.max(280,w-16*2);return{position:"absolute",top:`${f.top}px`,left:`${f.left}px`,transform:f.transform,zIndex:1e3,width:"280px",maxWidth:`${P}px`}});function $(){i()}function A(w,F,P=8){const R=window.scrollY+P,G=window.scrollY+window.innerHeight-P;let W=w;return W+F>G&&(W=G-F),W<R&&(W=R),W}function I(){var re,ae,ne;if(!y.value||!j.value)return;const w=y.value.getBoundingClientRect(),F=window.scrollX+8,P=window.scrollX+window.innerWidth-8,R=((re=b.value)==null?void 0:re.offsetWidth)||280,G=((ae=b.value)==null?void 0:ae.offsetHeight)||0;let W=0,Y=0;if((ne=o.catalogAnchor)!=null&&ne.value){const ie=o.catalogAnchor.value.getBoundingClientRect(),ce=ie.top+window.scrollY;W=A(ce,G,8);const Ae=ie.right+window.scrollX+12,Le=P-R,je=F;Y=Math.min(Math.max(Ae,je),Math.max(je,Le))}else{const ie=w.bottom+window.scrollY+8;W=A(ie,G,8);let ce=w.left+window.scrollX;ce<F&&(ce=F),ce+R>P&&(ce=Math.max(F,P-R)),Y=ce}f.left=Y,f.top=W,f.transform="none"}function q(){j.value||N(),s(),a.value&&j.value&&e.nextTick(()=>{I(),T(),requestAnimationFrame(()=>I())})}function U(){o.disabled||q()}e.watch(m,w=>{w&&j.value?e.nextTick(()=>{I(),T(),requestAnimationFrame(()=>I())}):(C(),j.value||N())}),e.watch(x,()=>{!m.value||!j.value||e.nextTick(()=>I())},{deep:!0}),e.watch(j,w=>{m.value&&(w?e.nextTick(()=>{I(),T()}):(C(),N()))}),e.watch(()=>o.disabled,w=>{w&&(i(),p.value={})});function D(){!m.value||!j.value||I()}function S(w){const F=l.value;if(!F)return;const P=se(F);if(!(P!=null&&P.setFilter))return;p.value=w;const R=Object.entries(w).map(([G,W])=>`${G}=${W}`).join("|");P.setFilter(R)}function k(w){if(!o.disabled)return;const F=w.currentTarget;if(!F)return;const P=F.getBoundingClientRect();u.left=P.left+P.width/2+window.scrollX,u.top=P.bottom+8+window.scrollY,u.visible=!0}function v(){u.visible=!1}e.onMounted(()=>{N(),window.addEventListener("resize",D),window.addEventListener("scroll",D,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",D),window.removeEventListener("scroll",D,!0),C()});function T(){C(),!(!b.value||!j.value)&&(c=new ResizeObserver(()=>{!m.value||!j.value||I()}),c.observe(b.value))}function C(){c&&(c.disconnect(),c=null)}function N(){typeof window>"u"||typeof document>"u"||(B.value=document.querySelector(cn))}return(w,F)=>h.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mapLayer-filter",ref_key:"anchor",ref:y},[e.createElementVNode("a",{class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(U,["prevent","stop"]),onMouseenter:k,onMouseleave:v,onFocus:k,onBlur:v},[...F[2]||(F[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),m.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:E.value},[e.createElementVNode("div",{class:e.normalizeClass(["vst-popover__content inline-block z-50 rounded-[16px] bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-filter__popover",{"mapLayer-filter__popover--static":!j.value}]),style:e.normalizeStyle(V.value),ref_key:"panel",ref:b,onClick:F[1]||(F[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",rp,[e.createElementVNode("div",ap,[e.createElementVNode("h3",ip,e.toDisplayString(d.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:$},[e.createElementVNode("span",sp,[e.createVNode(e.unref(ft),{class:"h-4 w-4"})]),F[3]||(F[3]=e.createElementVNode("span",{class:"sr-only"},"Закрити",-1))])]),e.createVNode(e.unref(n),{view:"inline",schema:x.value,value:p.value,limit:10,onChange:F[0]||(F[0]=P=>S(P.data)),width:250},null,8,["schema","value"])])],6)],8,["to"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[u.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${u.top}px`,left:`${u.left}px`})},e.toDisplayString(u.text),5)):e.createCommentVNode("",!0)]))],512)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-0d4c9370"]]),cp={key:0,class:"flex justify-center items-center h-[40px] w-[40px] bg-white text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full"},dn=Q(e.defineComponent({__name:"MapFilterWidget",props:{filters:{},title:{},layerId:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",null,[t.filters.length>0?(e.openBlock(),e.createElementBlock("div",cp,[e.createVNode(Mt,{layer:{filters:t.filters,id:t.layerId},count:t.filters.length},null,8,["layer","count"])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-98772410"]]),dp={class:"flex flex-row gap-x-3 z-10 relative widget"},up=["onClick"],pp=["src","alt"],_t=e.defineComponent({__name:"BaseMaps",setup(t){var u,m,g;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={z:13,x:4790,y:2762};function l(h){if(h)return h.replace(/{z}/gi,String(o.z)).replace(/{x}/gi,String(o.x)).replace(/{y}/gi,String(o.y))}function r(h,d){let x=h||`layers-${Object.keys(d).length}`,B=1;for(;d[x];)x=`${h}-${B}`,B+=1;return x}const a=e.getCurrentInstance(),i=(u=a==null?void 0:a.appContext.config.globalProperties)==null?void 0:u.$settings,s=i==null?void 0:i.map,f=e.computed(()=>{const h=Array.isArray(s==null?void 0:s.basemaps)?s==null?void 0:s.basemaps:[];if(!h.length)return{};const d={};return h.forEach((x,B)=>{const M=x.name??x.title??`basemap-${B}`,j=(x.id??M??`basemap-${B}`).toString().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),E=r(j||`basemap-${B}`,d),V=x.preview||(x.url?l(x.url):void 0);d[E]={url:x.url,preview:V,title:M}}),d}),y=e.computed(()=>{const h=f.value;return Object.keys(h).length?h:n}),b=e.ref(Object.keys(y.value)[0]??"gki"),c=se("base",{source:{type:"raster",tiles:(m=y.value[b.value])!=null&&m.url?[(g=y.value[b.value])==null?void 0:g.url]:[]},beforeId:0});function p(h){if(!y.value[h])return;b.value=h;const d=y.value[h];if(!(d!=null&&d.url)){c.setVisible(!1);return}c.setVisible(!0),c.setTiles([d.url])}return e.watch(()=>y.value,h=>{h[b.value]||(b.value=Object.keys(h)[0]??b.value);const d=h[b.value];d!=null&&d.url?(c.setVisible(!0),c.setTiles([d.url])):c.setVisible(!1)},{immediate:!0}),(h,d)=>(e.openBlock(),e.createElementBlock("div",dp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,(x,B)=>(e.openBlock(),e.createElementBlock("div",{key:B,onClick:M=>p(B)},[B!=="none"&&x.url?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["lg:w-14 lg:h-14 w-10 h-10 flex items-center justify-center bg-gray-200 rounded-xl shadow-2xs cursor-pointer transition-all border-4",b.value===B?"border-blue-500":"border-gray-200"])},[x.preview?(e.openBlock(),e.createElementBlock("img",{key:0,src:x.preview,alt:x.title,class:"object-cover rounded-lg lg:w-12 lg:h-12 w-8 h-8"},null,8,pp)):e.createCommentVNode("",!0)],2)):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["lg:w-14 lg:h-14 w-10 h-10 flex items-center justify-center bg-gray-200/80 rounded-xl shadow-2xs cursor-pointer transition-all border-4",b.value===B?"border-blue-500":"border-gray-200"])},[e.createVNode(e.unref($l),{class:"w-4 h-4 text-gray-500"})],2))],8,up))),128))]))}}),mp={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%"}},fp={class:"flex flex-col gap-1 p-5"},gp={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},Et=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:l}=ve(),r=e.ref([]);let a=null;function i(b){return b?b.map((c,p)=>{var g;const u=(c==null?void 0:c.name)||(c==null?void 0:c.label)||(c==null?void 0:c.title)||(c==null?void 0:c.id)||`Layer ${p+1}`,m=(c==null?void 0:c.color)||(c==null?void 0:c.fill)||((g=c==null?void 0:c.paint)==null?void 0:g.color)||"#3388ff";return{id:`${u}-${p}`,label:u,color:m}}):[]}function s(b){return b!=null&&b.layers?b.layers.filter(c=>{const p=c.paint||{};return p["fill-color"]||p["line-color"]||p["circle-color"]}).map((c,p)=>{var g;const u=c.paint||{},m=u["fill-color"]||u["line-color"]||u["circle-color"]||"#3388ff";return{id:c.id||`layer-${p}`,label:((g=c.metadata)==null?void 0:g.title)||c.id||`Layer ${p+1}`,color:m}}):[]}async function f(){var p;await l();const b=o.value;if(!b)return;const c=(p=b.getStyle)==null?void 0:p.call(b);r.value=s(c)}function y(){o.value&&(a==null||a())}return e.watch(()=>n.items,async b=>{b!=null?(r.value=i(b),a==null||a()):(await l(),y(),f())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await l(),y(),f())}),e.onBeforeUnmount(()=>{a==null||a(),a=null}),(b,c)=>r.value.length?(e.openBlock(),e.createElementBlock("div",mp,[e.createElementVNode("div",fp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,p=>(e.openBlock(),e.createElementBlock("div",{key:p.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:p.color})},null,4),e.createElementVNode("span",gp,[e.createElementVNode("span",null,e.toDisplayString(p.label),1)])]))),128))])])):e.createCommentVNode("",!0)}});function yp(){const{map:t,ready:n}=ve(),o=e.ref(null),l=e.ref(null),r=e.ref(null),a=e.ref(null);let i=[];function s(){i.forEach(u=>u()),i=[]}const f=u=>{const m=(u==null?void 0:u.properties)||{};return!!(m.cluster||m.point_count||m.point_count_abbreviated)},y=u=>{var d,x;o.value=[u.point.x,u.point.y];const m=t.value.queryRenderedFeatures(u.point);if(!(m!=null&&m.length)){b();return}const g=m.find(B=>!f(B));if(!g){b();return}const h=se(g.source)||se((d=g.layer)==null?void 0:d.id);h!=null&&h.popup&&(l.value=((x=h.popup)==null?void 0:x.fields)||h.popup,a.value=g.properties)},b=()=>{l.value=null,a.value=null,o.value=null};async function c(){await n(),t.value&&(s(),t.value.on("mousemove",y),t.value.on("mouseleave",b))}function p(){s(),l.value=null,a.value=null,o.value=null}return n().then(c),{popupCoords:o,popupFields:l,popupValues:a,disable:p,title:r}}const hp={class:"min-w-[200px] max-w-[280px] rounded-lg border border-slate-200 bg-white/90 p-3 text-xs shadow-lg backdrop-blur"},xp={class:"space-y-1.5"},bp={class:"font-bold text-slate-700"},kp={class:"text-slate-700"},Ko=e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,popupFields:o,popupValues:l,disable:r}=yp(),{map:a}=ve(),i=e.ref(null),s=e.ref({left:"-9999px",top:"-9999px"}),f=new Intl.NumberFormat("uk-UA",{maximumFractionDigits:2});function y(g,h){if(h==null||h==="")return h;if((g==null?void 0:g.type)==="number"){const d=typeof h=="number"?h:Number(h);if(Number.isFinite(d))return f.format(d)}return h}function b(g,h,d){const x=g.name||g.label||g.title||`field-${d}`,B=g.label||g.title||g.name||x,M=g.name?h[g.name]:void 0,E=(g.name?h[`${g.name}_text`]:void 0)??M??g.value??null;return{key:x,label:B,value:y(g,E)}}const c=e.computed(()=>{const g=o.value||[],h=l.value||{};return g.filter(d=>(d==null?void 0:d.meta)!=="title").map((d,x)=>b(d,h,x)).filter(d=>d.label)}),p=e.computed(()=>{const g=o.value||[],h=l.value||{},d=g.find(x=>(x==null?void 0:x.meta)==="title");return d?b(d,h,0):null}),u=e.computed(()=>{var h;const g=c.value;return(h=p.value)!=null&&h.value?[{...p.value,key:`${p.value.key}-title`,label:"Назва"},...g]:g});function m(){var C,N;if(!u.value.length||!n.value||!i.value){s.value={left:"-9999px",top:"-9999px"};return}const g=i.value,h=g.offsetParent||null,d=(h==null?void 0:h.getBoundingClientRect())??{left:0,top:0,width:window.innerWidth,height:window.innerHeight},x=((N=(C=a.value)==null?void 0:C.getContainer)==null?void 0:N.call(C))||void 0,B=(x==null?void 0:x.getBoundingClientRect())??d,M=B.left-d.left,j=B.top-d.top,E=g.offsetWidth||0,V=g.offsetHeight||0,$=12,A=8,[I,q]=n.value;let U=M+I+$,D=j+q+$;U+E+A>d.width&&(U=M+I-E-$),D+V+A>d.height&&(D=j+q-V-$);const S=A,k=A,v=Math.max(A,d.width-E-A),T=Math.max(A,d.height-V-A);U=Math.min(Math.max(U,S),v),D=Math.min(Math.max(D,k),T),s.value={left:`${U}px`,top:`${D}px`}}return e.watch([n,u],()=>{e.nextTick(()=>m())}),e.onMounted(()=>{window.addEventListener("resize",m)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",m),r()}),(g,h)=>u.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popupRef",ref:i,class:"absolute pointer-events-none z-20",style:e.normalizeStyle(s.value)},[e.createElementVNode("div",hp,[e.createElementVNode("div",xp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,d=>(e.openBlock(),e.createElementBlock("div",{key:d.key,class:"flex flex-col"},[e.createElementVNode("span",bp,e.toDisplayString(d.label),1),e.createElementVNode("span",kp,e.toDisplayString(d.value??"—"),1)]))),128))])])],4)):e.createCommentVNode("",!0)}});function wp(){const{map:t,ready:n}=ve(),o=pe.useRoute(),l=pe.useRouter(),r=e.ref(null),a=e.ref(null),i=e.ref(null),s=e.ref(!1),f=e.ref([]),y=e.ref(0),b=e.computed(()=>f.value.length),c=e.computed(()=>s.value||!!r.value||!!i.value);let p=null,u=!1;function m(){r.value=null,a.value=null,i.value=null,s.value=!1,f.value=[],y.value=0}function g(){if(p){try{p()}catch{}p=null}}async function h(){await n();const U=t.value;U&&(g(),m(),U.on("click",d),p=()=>U.off("click",d),q($()))}function d(U){const D=t.value;if(!D)return;const S=(D.queryRenderedFeatures(U.point)||[]).filter(k=>{var v;return(v=k==null?void 0:k.properties)==null?void 0:v.id});if(!S.length){m(),I(null);return}f.value=S,y.value=0,x(y.value)}function x(U){const D=f.value[U];if(!D)return;y.value=U;const S=se(D.source);j(D,S==null?void 0:S.card)}function B(){y.value>=f.value.length-1||x(y.value+1)}function M(){y.value<=0||x(y.value-1)}async function j(U,D){var v,T,C,N;if(!((v=U==null?void 0:U.properties)!=null&&v.id))return;const S=new URLSearchParams;S.set("layer",U.source),S.set("id",String((T=U.properties)==null?void 0:T.id));const k=Array.isArray(D)&&D.length>0;s.value=k,i.value=null,r.value=null,a.value=U||null;try{const w=await fetch(`/api/map-format?${S.toString()}`);if(!w.ok)throw new Error(`Failed (${w.status})`);const F=await w.json(),P=Array.isArray(F.columns)?F.columns:[],R=Array.isArray(D)?D:[];if(!P.length&&!R.length){console.error("Configure layer in admin"),E();return}r.value={rows:F.rows||{},fields:R,columns:P,html:F.html||null},u||I(a.value);const G=(C=F.rows)==null?void 0:C.geom;if(G){const W=typeof G=="string"?JSON.parse(G):G;W&&(a.value={...a.value,geometry:W,properties:{...((N=a.value)==null?void 0:N.properties)||{},geom:W,geom_4326:W}})}}catch(w){console.error("Failed to load feature card:",w),E()}finally{s.value=!1}}function E(){m(),I(null)}function V(){g(),m()}n().then(h),e.onBeforeUnmount(()=>V());function $(){const U=Array.isArray(o.query.info)?o.query.info[0]:o.query.info;return typeof U!="string"?null:U.trim()||null}function A(U){var v,T;const D=(U==null?void 0:U.source)??((v=U==null?void 0:U.layer)==null?void 0:v.id),S=(T=U==null?void 0:U.properties)==null?void 0:T.id;return!D||S===void 0||S===null?null:`${D},${S}`.trim()||null}function I(U){const D=A(U),S=$();if(D===S)return;const k={...o.query};D?k.info=D:delete k.info,l.push({query:k}).catch(()=>{})}async function q(U){if(!U){m();return}if(U===A(a.value))return;const[D,S]=U.split(","),k=D==null?void 0:D.trim(),v=S==null?void 0:S.trim();if(!k||!v){m(),I(null);return}u=!0;try{const T={source:k,properties:{id:v}};f.value=[T],y.value=0;const C=se(k);await j(T,C==null?void 0:C.card)}finally{u=!1}}return e.watch(()=>$(),U=>{U!==A(a.value)&&(u=!0,q(U).finally(()=>{u=!1}))}),{card:r,cardFeature:a,cardError:i,cardLoading:s,isOpen:c,close:E,next:B,prev:M,count:b,index:y}}function _p(){const{map:t,ready:n}=ve(),o=e.ref([]),l=e.ref(0),r=e.ref(0),a=e.ref(!1),i=e.ref(null),s=e.ref({}),f=e.ref(null),y=e.ref([]),b=e.computed(()=>o.value[r.value]||null),c=e.computed(()=>o.value.length>0);let p=null;const u=()=>{p==null||p.remove(),p=null},m=$=>$?$.type==="FeatureCollection"?$:$.type==="Feature"?{type:"FeatureCollection",features:[$]}:$.type&&Array.isArray($.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:$,properties:{}}]}:Array.isArray($.features)?{type:"FeatureCollection",features:$.features}:$.geometry?m($.geometry):null:null,g=()=>({type:"line",color:"#0a57ff",width:4,opacity:.95}),h=$=>Number($.toFixed(5)),d=async $=>{if(await n(),!t.value)return;const A=m($);A&&(u(),p=se("feature-highlight",{source:{type:"geojson",data:A},style:g()},t))},x=async($,A,I)=>{var D,S;const[q,U]=[h($),h(A)];f.value={x:q,y:U},y.value=I,a.value=!0,i.value=null,o.value=[],s.value={},r.value=0;try{const k=I.map(async w=>{const F=`/api/map-info-point?x=${q}&y=${U}&layers=${w}`,P=await fetch(F);if(!P.ok)return null;const R=await P.json();if(!R.count)return null;const W=await(await fetch(`${F}&index=0`)).json();return{layerId:w,data:W,count:R.count}}),T=(await Promise.all(k)).filter(Boolean);if(T.length===0){l.value=0;return}o.value=T.map(w=>w.data);const[C]=o.value;l.value=T.reduce((w,F)=>w+(F.count||0),0),s.value[0]=C;const N=((D=C==null?void 0:C.data)==null?void 0:D.geom_4326)??((S=C==null?void 0:C.data)==null?void 0:S.geom);await d(N)}catch(k){i.value=k.message}finally{a.value=!1}},B=async $=>{if(!f.value||!y.value.length)return;if(s.value[$]){o.value[$]=s.value[$];return}const{x:A,y:I}=f.value,q=y.value.join(","),U=`/api/map-info-point?x=${A}&y=${I}&index=${$}&layers=${q}`;try{a.value=!0;const D=await fetch(U);if(!D.ok)throw new Error("Failed to fetch feature by index");const S=await D.json();o.value[$]=S,s.value[$]=S}catch(D){i.value=D.message}finally{a.value=!1}},M=async()=>{r.value<l.value-1&&(r.value+=1,s.value[r.value]||await B(r.value))},j=async()=>{r.value>0&&(r.value-=1,s.value[r.value]||await B(r.value))},E=()=>{o.value=[],l.value=0,r.value=0,s.value={},f.value=null,y.value=[],u()};e.watch(r,async()=>{var A,I;const $=b.value;if($){const q=((A=$==null?void 0:$.data)==null?void 0:A.geom_4326)??((I=$==null?void 0:$.data)==null?void 0:I.geom);await d(q)}});let V=null;return e.onMounted(async()=>{await n(),t.value&&(V=async $=>{const{lng:A,lat:I}=$.lngLat,q=se(),D=Object.entries(q).map(([S,k])=>{var v,T,C,N;return{id:S,service:((v=k==null?void 0:k.opts)==null?void 0:v.service)??((C=(T=k==null?void 0:k.opts)==null?void 0:T.source)==null?void 0:C.service)??null,count:((N=k==null?void 0:k.opts)==null?void 0:N.count)??null,visible:(()=>{var w;try{return((w=t.value)==null?void 0:w.getLayer(S))?t.value.getLayoutProperty(S,"visibility")!=="none":!0}catch{return!0}})()}}).filter(S=>S.service==="ogc"&&S.visible).map(S=>S.id);D.length>0&&await x(A,I,D)},t.value.on("dblclick",V))}),e.onBeforeUnmount(()=>{t.value&&V&&t.value.off("dblclick",V),u()}),{features:o,count:l,index:r,current:b,loading:a,error:i,active:c,next:M,prev:j,close:E}}const Go=e.defineComponent({__name:"LayerSwitcher",props:{title:{},url:{},id:{},buttonText:{}},emits:["activate"],setup(t,{emit:n}){const o=t,l=n;function r(y){const b=y.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(b)return b;const c=Array.from(y).map(p=>p.charCodeAt(0).toString(16)).join("").slice(0,8);return c?`layer-${c}`:"layer-temp"}const a=e.computed(()=>{var y;return((y=o.id)==null?void 0:y.trim())||r(o.title)}),i=e.computed(()=>o.buttonText||"Показати шар");function s(){return{id:a.value,title:o.title,url:o.url}}function f(){l("activate",s())}return(y,b)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:"flex items-center justify-center bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded w-full",onClick:f},[e.renderSlot(y.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(i.value),1)])]))}}),Te=e.ref([]);function Ep(t,n){return typeof t!="string"?"":t.includes("{{")?t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*}}/g,(o,l)=>{const r=String(l||"").trim();if(!r)return"";const a=n[r];return a!=null?String(a):""}):t}function un(t){return t==null?"":String(t).trim()}function pn(t){var n,o;(o=(n=t==null?void 0:t.handle)==null?void 0:n.remove)==null||o.call(n)}function Np(t){return t?typeof(t==null?void 0:t.value)<"u"?t.value:t:null}function Vp(t){var o;if(!(t!=null&&t.getStyle))return;const n=((o=t.getStyle())==null?void 0:o.layers)||[];for(let l=0;l<n.length;l+=1){const r=n[l];if(!(!r||typeof r.id!="string")&&r.type&&r.type!=="background"&&r.type!=="raster")return r.id}}function Xo(t){function n(a,i={},s,f){var x,B;const y=un(a==null?void 0:a.id),b=((x=a==null?void 0:a.title)==null?void 0:x.trim())||y,c=((B=a==null?void 0:a.url)==null?void 0:B.trim())||"";if(!y||!c)return;const p=Ep(c,i);if(!p)return;const u=f??t;if(!u)return;const m=Np(u);if(!m)return;const g=Te.value.findIndex(M=>M.id===y);g!==-1&&(pn(Te.value[g]),Te.value.splice(g,1));let h=null;const d=a.beforeId??Vp(m);try{h=se(y,{source:{type:"raster",tiles:[p],tileSize:a.tileSize??256,minzoom:a.minzoom??0,maxzoom:a.maxzoom??19},layer:{id:y,type:"raster",source:y,paint:{"raster-opacity":a.opacity??.85}},beforeId:d},u)}catch(M){const j=(M==null?void 0:M.message)??"";if(!(typeof j=="string"&&j.includes("Map provider")))throw M;return}Te.value=[...Te.value,{id:y,title:b,originalUrl:c,resolvedUrl:p,owner:s??null,handle:h??null}]}function o(a,i){const s=un(a);if(!s)return;const f=Te.value.findIndex(b=>b.id===s&&(!i||b.owner===i));if(f===-1)return;const[y]=Te.value.splice(f,1);pn(y)}function l(a){if(!Te.value.length)return;const i=[];Te.value.forEach(s=>{(a?s.owner===a:!0)?pn(s):i.push(s)}),Te.value=i}function r(a,i){const s=un(a);return s?Te.value.some(f=>f.id===s&&(!i||f.owner===i)):!1}return{temporaryLayers:Te,activateTemporaryLayer:n,deactivateTemporaryLayer:o,clearTemporaryLayers:l,isTemporaryLayerActive:r}}const Bp={key:0,class:"card absolute top-4 lg:left-auto right-11 md:left-4 z-[82] w-[calc(100%-36px)] md:w-[400px] max-h-[80%] overflow-hidden rounded-2xl border border-slate-200 bg-white/95 shadow-2xl backdrop-blur-md flex flex-col"},Cp={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},$p={class:"min-w-0 flex-1"},vp={class:"text-base font-semibold text-slate-900 truncate"},Sp={key:0,class:"flex gap-1 mt-1"},Ap=["disabled"],Lp=["disabled"],Fp={key:1,class:"flex gap-1 mt-1"},Tp=["disabled"],Mp=["disabled"],Dp={class:"flex-1 overflow-y-auto px-4 py-3 space-y-4 text-sm text-slate-700"},Ip={key:0,class:"text-center text-xs text-slate-500"},jp={key:1,class:"text-center text-xs text-red-500"},zp={key:0,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},Op={class:"divide-y divide-gray-100 py-[5px]"},Pp={class:"text-gray-900 font-normal"},Rp={key:1,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},Up=["innerHTML"],qp=["innerHTML"],Hp={key:2,class:"space-y-3 border-t border-slate-200 pt-3"},Wp={key:3,class:"border-t border-slate-100 px-4 py-2 text-right text-xs text-slate-500"},Yp={class:"text-xs tracking-[0.02em] leading-none"},Zp={key:4,class:"space-y-3 border-t border-slate-200 pt-3"},Kp={class:"space-y-1"},Gp={class:"flex items-center cursor-pointer gap-2 flex-1"},Xp=["checked","onChange"],Jp={class:"text-[13px] text-gray-600"},Qp={key:0,class:"text-right text-xs text-gray-400 truncate max-w-[40%]"},em={key:5,class:"text-center text-xs text-slate-400"},tm="map:temporary-layer-request",nm=14,Jo=Q(e.defineComponent({__name:"MapCardWidget",props:{mapId:{}},setup(t){var Pt,fl;const n=t,o=wp(),l=_p(),r=e.computed(()=>l.active.value),a=e.computed(()=>r.value||o.isOpen.value),i=e.computed(()=>r.value?l.loading.value:o.cardLoading.value),s=e.computed(()=>r.value?l.error.value:o.cardError.value),f=e.computed(()=>{var _,L;return r.value?((_=l.current.value)==null?void 0:_.html)||null:((L=o.card.value)==null?void 0:L.html)||null}),y=ve(),b=pe.useRoute(),{activateTemporaryLayer:c,deactivateTemporaryLayer:p,clearTemporaryLayers:u,isTemporaryLayerActive:m}=Xo(y.map);function g(_){window.dispatchEvent(new CustomEvent(tm,{detail:_}))}const h=e.computed(()=>{var _;return((_=o.cardFeature.value)==null?void 0:_.source)??null}),d=e.computed(()=>h.value?`map-card:${h.value}`:"map-card"),x=e.computed(()=>{var K,ee;const _=o.cardFeature.value,L=(_==null?void 0:_.source)||((K=_==null?void 0:_.layer)==null?void 0:K.id),O=((ee=_==null?void 0:_.properties)==null?void 0:ee.id)??(_==null?void 0:_.id);return L&&O!=null?`${L}:${O}`:null}),B=e.ref(null),M=e.ref(null),j=e.ref(0),E=new Map;function V(){if(typeof window>"u")return null;const L=(window.location.pathname||"").match(/\/maps?\/([^/]+)/i);return L&&L[1]?L[1]:null}const $=e.computed(()=>{const _=typeof n.mapId=="string"?n.mapId.trim():"";if(_.length)return _;const L=typeof b.params.slug=="string"?b.params.slug.trim():"";if(L.length)return L;const O=typeof b.query.slug=="string"?b.query.slug.trim():"";return O.length?O:V()}),A=e.ref(null),I=e.ref(null),q=new Map;function U(_){const L=_.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(L)return L;const O=Array.from(_).map(K=>K.charCodeAt(0).toString(16)).join("").slice(0,8);return O?`layer-${O}`:`layer-${Math.random().toString(36).slice(2,8)}`}function D(_){if(typeof _!="string")return"";const L=_.trim();if(!L)return"";if(/^https?:\/\//i.test(L))return L;if(L.startsWith("//"))return typeof window>"u"?`https:${L}`:`${window.location.protocol}${L}`;const O=typeof window<"u"?window.location.origin:"";return L.startsWith("/")?O?`${O}${L}`:L:O?`${O}/${L}`:L}function S(_){const L={},O=/([:@\w-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;let K;for(;(K=O.exec(_))!==null;){const ee=K[1],oe=K[2]??K[3]??K[4]??"";ee&&(L[ee]=oe)}return L}function k(_,L){for(const O of L)if(_[O]!=null&&String(_[O]).trim().length)return String(_[O]).trim();return""}function v(_){if(!(_!=null&&_.length))return;const L=Number(_);return Number.isFinite(L)?L:void 0}function T(_){if(typeof _!="string"||!_.length)return[];const L=[],O=/<LayerSwitcher\b([^>]*)>([\s\S]*?)<\/LayerSwitcher>/gi;let K=0,ee;const oe=new Set,me=fe=>{let be=fe,Ce=2;for(;oe.has(be);)be=`${fe}-${Ce}`,Ce+=1;return oe.add(be),be};for(;(ee=O.exec(_))!==null;){const[fe,be="",Ce=""]=ee,ye=ee.index;if(ye>K){const hl=_.slice(K,ye);hl.trim().length&&L.push({type:"html",content:hl})}const De=S(be),Fe=k(De,["title"])||"Тимчасовий шар",Ge=D(k(De,["url"]));if(!Ge){L.push({type:"html",content:fe}),K=ye+fe.length;continue}const Vt=k(De,["id"]),hn=k(De,["button-text","buttonText","show","show-label","showLabel"]),Y1=v(k(De,["tile-size","tileSize"])),Z1=v(k(De,["minzoom","minZoom"])),K1=v(k(De,["maxzoom","maxZoom"])),G1=v(k(De,["opacity"])),X1=Vt||U(`${Fe}-${Ge}`)||U(Fe),gl=me(X1||`layer-${L.length+1}`),xn=Ce.trim(),yl=/<[^>]+>/.test(xn),J1=yl?xn:null,bn=yl?null:xn,Q1=hn&&hn.trim().length?hn.trim():bn&&bn.trim().length?bn.trim():void 0;L.push({type:"layer",spec:{id:gl,title:Fe,url:Ge,tileSize:Y1,minzoom:Z1,maxzoom:K1,opacity:G1},componentProps:{title:Fe,url:Ge,id:gl,buttonText:Q1},slotText:J1}),K=ye+fe.length}if(K<_.length){const fe=_.slice(K);fe.trim().length&&L.push({type:"html",content:fe})}return!L.length&&_.trim().length&&L.push({type:"html",content:_}),L}function C(_){if(!_)return null;const L=typeof _.id=="string"?_.id.trim():"",O=typeof _.title=="string"?_.title.trim():"",K=D(typeof _.url=="string"?_.url:"");return!L||!K?null:{id:L,title:O||L,url:K,tileSize:_.tileSize,minzoom:_.minzoom,maxzoom:_.maxzoom,opacity:_.opacity}}const N=e.computed(()=>{if(r.value&&l.current.value)return l.current.value.data??{};const _=o.card.value;return(_==null?void 0:_.rows)??{}}),w=e.computed(()=>{if(r.value&&l.current.value)return l.current.value.fields??[];const _=o.card.value;if(!_)return[];const L=Array.isArray(_.columns)?_.columns:[];return L.length?L:Array.isArray(_.fields)?_.fields:[]}),F=e.computed(()=>{const _=w.value;if(!_.length)return[];const L=N.value;return _.map(O=>({key:O.name,label:O.ua||O.label||O.title||O.name,value:L[O.name]??"—",format:O.format||"text"}))}),P=new Set(["—","-","–","−"]);function R(_){if(_==null)return!0;if(typeof _=="string"){const L=_.trim();return L.length?P.has(L):!0}return!1}const G=e.ref(!1),W=e.ref(!0);if(typeof window<"u"){const _=(fl=(Pt=window.localStorage)==null?void 0:Pt.getItem)==null?void 0:fl.call(Pt,"cardHideEmpty"),L=typeof _=="string"&&_.toLowerCase()==="true";G.value=L,W.value=!L}const Y=e.computed(()=>F.value.filter(_=>R(_.value)).length),re=e.computed(()=>G.value&&!W.value?F.value.filter(_=>!R(_.value)):F.value);function ae(_){const L=typeof _=="string"?_:"";if(!L.length)return{sanitized:"",hiddenCount:0};if(typeof DOMParser>"u")return{sanitized:L,hiddenCount:0};const K=new DOMParser().parseFromString(L,"text/html");let ee=0;return K.querySelectorAll("dd").forEach(oe=>{var be;const me=((be=oe.textContent)==null?void 0:be.trim())??"",fe=oe.closest("div");if(R(me)){ee+=1,fe?fe.remove():oe.remove();return}}),{sanitized:K.body.innerHTML,hiddenCount:ee}}const ne=e.computed(()=>ae(f.value)),ie=e.computed(()=>f.value?ne.value.hiddenCount:0),ce=e.computed(()=>Y.value+ie.value),Ae=e.computed(()=>{var _;return G.value&&!W.value&&!!((_=f.value)!=null&&_.trim())}),Le=e.computed(()=>G.value&&ce.value>0),je=e.computed(()=>W.value?"Приховати пусті значення":"Показати пусті значення"),jt=e.computed(()=>W.value?Vl:Nl);function zt(){W.value=!W.value}const Je=e.computed(()=>{const _=Ae.value?ne.value.sanitized:f.value??"";return T(_)}),mt=e.computed(()=>Je.value.filter(_=>_.type==="layer"));function z(_){return Array.isArray(_)?_.map((L,O)=>{const K=D(typeof(L==null?void 0:L.url)=="string"?L.url:""),ee=typeof(L==null?void 0:L.geohub)=="string"&&L.geohub.trim().length?`/api-hub/tms/${L.geohub.trim()}/ua/{z}/{x}/{y}.png`:"",oe=((L==null?void 0:L.name)||(L==null?void 0:L.title)||(L==null?void 0:L.label)||`Шар ${O+1}`).toString(),me=(L==null?void 0:L.id)!=null?String(L.id):U(`${oe}-${O+1}`),fe=(L==null?void 0:L.buttonText)||(L==null?void 0:L.button_text)||null,be=(L==null?void 0:L.description)||(L==null?void 0:L.subtitle)||null,Ce=K||D(ee)||"";if(!Ce)return null;const ye={id:me,title:oe,url:Ce,subtitle:be,buttonText:fe||void 0};return typeof(L==null?void 0:L.tileSize)=="number"&&(ye.tileSize=L.tileSize),typeof(L==null?void 0:L.tile_size)=="number"&&(ye.tileSize=L.tile_size),typeof(L==null?void 0:L.minzoom)=="number"&&(ye.minzoom=L.minzoom),typeof(L==null?void 0:L.maxzoom)=="number"&&(ye.maxzoom=L.maxzoom),typeof(L==null?void 0:L.opacity)=="number"&&(ye.opacity=L.opacity),ye}).filter(Boolean):[]}const H=e.computed(()=>{var K,ee;const _=o.card.value,L=l.current.value,O=[(K=_==null?void 0:_.rows)==null?void 0:K.layers,_==null?void 0:_.layers,(ee=L==null?void 0:L.data)==null?void 0:ee.layers,L==null?void 0:L.layers];for(const oe of O){const me=z(oe);if(me.length)return me}return[]}),te=e.computed(()=>Je.value.length>0||F.value.length>0||H.value.length>0),ge=e.computed(()=>!o.cardLoading.value&&!!o.card.value);function J(){const _={},L=A.value;if(L&&typeof L=="object"&&Object.entries(L).forEach(([O,K])=>{typeof K=="string"&&(_[O]=K)}),h.value&&(_.layer=h.value),!_.geohub){const O=typeof(L==null?void 0:L.geohub)=="string"?L.geohub:null,K=typeof(L==null?void 0:L.geohub_key)=="string"?L.geohub_key:null,ee=typeof(L==null?void 0:L.geohubId)=="string"?L.geohubId:null;_.geohub=O||K||ee||_.layer||""}return _}async function de(){const _=h.value;if(!_)return A.value=null,I.value=null,null;if(I.value===_&&A.value)return A.value;if(q.has(_)){const L=q.get(_);return A.value=L,I.value=_,L}try{const L=await fetch(`/api/gis-service/${encodeURIComponent(_)}`);if(!L.ok)return null;const O=await L.json();return q.set(_,O),A.value=O,I.value=_,O}catch{return null}}async function _e(_){if(!(_!=null&&_.id))return;await de();const L=J(),O=mt.value.find(me=>me.spec.id===_.id),K=H.value.find(me=>me.id===_.id),ee=(O==null?void 0:O.spec)||C(K)||C(_);if(!ee||m(ee.id,d.value))return;const oe=d.value||void 0;B.value=oe??null,c(ee,L,oe),g({action:"activate",owner:oe,spec:ee,context:L})}function Z(_){if(!_)return;const L=Me()||void 0;p(_,L),g({action:"deactivate",owner:L,spec:{id:_}})}function Ee(_){return m(_,Me())}function Be(_,L){const O=L.target;!!(O!=null&&O.checked)?_e(_):Z(_.id)}function Me(){return B.value||d.value||null}e.watch(h,(_,L)=>{_!==L&&(A.value=null,I.value=null)});const{next:Ze,prev:Ke,count:Pe,index:ze}=l,Re=e.computed(()=>o.count.value),Qe=e.computed(()=>o.index.value),il=e.computed(()=>Re.value>1),sl=e.computed(()=>r.value?Pe.value:Re.value),cl=e.computed(()=>r.value?ze.value:Qe.value),dl=o.next,ul=o.prev;function et(){const _=Me();_&&(u(_),g({action:"clear",owner:_}),B.value=null)}function j1(){o.close(),l.close(),et()}e.watch(a,(_,L)=>{!_&&L&&(et(),Ue())});function pl(){!o.isOpen.value&&!l.active.value&&et()}e.watch(()=>o.isOpen.value,()=>{pl()}),e.watch(()=>l.active.value,()=>{pl()}),e.watch(h,(_,L)=>{_&&L&&_!==L&&et()}),e.watch(ze,(_,L)=>{_!==L&&et()}),e.watch(x,(_,L)=>{_&&L&&_!==L&&et()});function z1(_){if(!_)return null;if(_.geometry)return _.geometry;const L=(_==null?void 0:_.data)??(_==null?void 0:_.properties);return L!=null&&L.geom_4326?L.geom_4326:L!=null&&L.geom?L.geom:null}function Ue(){var _,L;(L=(_=M.value)==null?void 0:_.remove)==null||L.call(_),M.value=null}function O1(_){var O,K,ee;const L=(_==null?void 0:_.type)||((ee=(K=(O=_==null?void 0:_.features)==null?void 0:O[0])==null?void 0:K.geometry)==null?void 0:ee.type)||"";return L.includes("Polygon")?{type:"fill",paint:{"fill-color":"#0a57ff","fill-opacity":.2,"fill-outline-color":"#0a57ff"}}:L.includes("LineString")?{type:"line",paint:{"line-color":"#0a57ff","line-width":3,"line-opacity":.9}}:{type:"circle",paint:{"circle-color":"#0a57ff","circle-opacity":.9,"circle-radius":8,"circle-stroke-color":"#ffffff","circle-stroke-width":2}}}let yn=null;function ml(){const _=Array.isArray(b.query.info)?b.query.info[0]:b.query.info;return typeof _!="string"?null:_.trim()||null}function P1(_){var ee,oe;if(!_)return null;const L=(_==null?void 0:_.source)??((ee=_==null?void 0:_.layer)==null?void 0:ee.id),O=((oe=_==null?void 0:_.properties)==null?void 0:oe.id)??(_==null?void 0:_.id);return!L||O===void 0||O===null?null:`${L},${O}`.trim()||null}function Ot(_,L){if(_){if(Array.isArray(_)){if(_.length>=2&&typeof _[0]=="number"&&typeof _[1]=="number"){L.push([_[0],_[1]]);return}_.forEach(O=>Ot(O,L));return}typeof _=="object"&&(Array.isArray(_.coordinates)&&Ot(_.coordinates,L),Array.isArray(_.features)&&_.features.forEach(O=>Ot(O==null?void 0:O.geometry,L)))}}function R1(_){var fe,be;if(!_)return null;const L=_.type==="FeatureCollection"?(be=(fe=_.features)==null?void 0:fe[0])==null?void 0:be.geometry:_.type==="Feature"?_.geometry:_,O=[];if(Ot(L,O),!O.length)return null;let K=O[0][0],ee=O[0][0],oe=O[0][1],me=O[0][1];return O.forEach(([Ce,ye])=>{Ce<K&&(K=Ce),Ce>ee&&(ee=Ce),ye<oe&&(oe=ye),ye>me&&(me=ye)}),[(K+ee)/2,(oe+me)/2]}async function U1(_,L){var oe;const O=ml();if(!O)return;const K=P1(_);if(!K||K!==O||yn===O)return;const ee=R1(L);ee&&(await((oe=y.ready)==null?void 0:oe.call(y)),y.flyTo({center:ee,zoom:nm}),yn=O)}function q1(_){var ee;if(!_){Ue();return}const L=(ee=y.map)==null?void 0:ee.value,O={type:"FeatureCollection",features:[{type:"Feature",geometry:_,properties:{}}]};Ue();const K=O1(_);if(M.value=se("feature-card-highlight",{source:{type:"geojson",data:O},layer:{id:"feature-card-highlight",type:K.type,source:"feature-card-highlight",paint:K.paint}},y.map),L!=null&&L.moveLayer){const oe=()=>{try{L.moveLayer("feature-card-highlight")}catch{}},me=()=>{typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame(()=>{window.requestAnimationFrame(oe)}):setTimeout(oe,0)};me();const fe=()=>me();L.once("styledata",fe);const be=()=>{me(),L.off("styledata",fe),L.off("idle",be)};L.on("idle",be)}}function H1(_){var K,ee;const L=(_==null?void 0:_.source)||((K=_==null?void 0:_.layer)==null?void 0:K.id)||"unknown",O=((ee=_==null?void 0:_.properties)==null?void 0:ee.id)??(_==null?void 0:_.id)??"unknown";return`${L}:${O}`}async function W1(_){var oe,me,fe,be,Ce;if(!_)return null;const L=z1(_);if(L)return L;const O=((oe=_==null?void 0:_.properties)==null?void 0:oe.id)??(_==null?void 0:_.id);if(!O)return null;const K=H1(_);if(E.has(K))return E.get(K);const ee=[$.value,_==null?void 0:_.source,(me=_==null?void 0:_.layer)==null?void 0:me.id].map(ye=>typeof ye=="string"?ye.trim():"").filter(Boolean);for(const ye of ee)try{const De=await fetch(`/api/map-features/${encodeURIComponent(ye)}/${encodeURIComponent(String(O))}`);if(!De.ok)continue;const Fe=await De.json(),Ge=((fe=Fe==null?void 0:Fe.data)==null?void 0:fe.geom)||((be=Fe==null?void 0:Fe.data)==null?void 0:be.geometry)||((Ce=Fe==null?void 0:Fe.data)==null?void 0:Ce.geom_4326)||null,Vt=typeof Ge=="string"?JSON.parse(Ge):Ge;if(Vt)return E.set(K,Vt),Vt}catch{continue}return null}async function Nt(_){j.value+=1;const L=j.value;if(!_||r.value){Ue();return}if(!ge.value){Ue();return}const O=await W1(_);if(L===j.value){if(!O){Ue();return}q1(O),U1(_,O)}}return e.watch(()=>o.cardFeature.value,_=>{Nt(_)},{immediate:!0}),e.watch(()=>o.index.value,()=>{r.value||Nt(o.cardFeature.value)}),e.watch(r,_=>{_?Ue():Nt(o.cardFeature.value)}),e.watch($,()=>{!r.value&&o.cardFeature.value&&Nt(o.cardFeature.value)}),e.watch(ge,_=>{_?Nt(o.cardFeature.value):Ue()}),e.watch(()=>ml(),()=>{yn=null}),e.onBeforeUnmount(()=>{et(),Ue()}),(_,L)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[a.value?(e.openBlock(),e.createElementBlock("div",Bp,[e.createElementVNode("div",Cp,[e.createElementVNode("div",$p,[e.createElementVNode("p",vp,[r.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString(cl.value+1)+" / "+e.toDisplayString(sl.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[il.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Об’єкт "+e.toDisplayString(cl.value+1)+" / "+e.toDisplayString(sl.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Інформація про об’єкт ")],64))],64))])]),r.value&&e.unref(Pe)>1?(e.openBlock(),e.createElementBlock("div",Sp,[e.createElementVNode("button",{onClick:L[0]||(L[0]=(...O)=>e.unref(Ke)&&e.unref(Ke)(...O)),disabled:e.unref(ze)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(_n),{class:"h-4 w-4"})],8,Ap),e.createElementVNode("button",{onClick:L[1]||(L[1]=(...O)=>e.unref(Ze)&&e.unref(Ze)(...O)),disabled:e.unref(ze)===e.unref(Pe)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(En),{class:"h-4 w-4"})],8,Lp)])):!r.value&&il.value?(e.openBlock(),e.createElementBlock("div",Fp,[e.createElementVNode("button",{onClick:L[2]||(L[2]=(...O)=>e.unref(ul)&&e.unref(ul)(...O)),disabled:Qe.value===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(_n),{class:"h-4 w-4"})],8,Tp),e.createElementVNode("button",{onClick:L[3]||(L[3]=(...O)=>e.unref(dl)&&e.unref(dl)(...O)),disabled:Qe.value===Re.value-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(En),{class:"h-4 w-4"})],8,Mp)])):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:j1}," ✕ ")]),e.createElementVNode("div",Dp,[i.value?(e.openBlock(),e.createElementBlock("div",Ip," Завантаження даних… ")):s.value?(e.openBlock(),e.createElementBlock("div",jp,e.toDisplayString(s.value),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[F.value.length?(e.openBlock(),e.createElementBlock("div",zp,[e.createElementVNode("dl",Op,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(re.value,O=>(e.openBlock(),e.createElementBlock("div",{key:O.key,class:"grid grid-cols-1 gap-1 py-3 sm:grid-cols-3 sm:gap-4 even:bg-gray-50 text-[12px]"},[e.createElementVNode("dt",Pp,e.toDisplayString(O.label),1),e.createElementVNode("dd",{class:e.normalizeClass(["text-gray-700 sm:col-span-2 font-normal whitespace-pre-wrap",O.format==="badge"?"font-semibold text-yellow-800":""])},e.toDisplayString(O.value),3)]))),128))])])):Je.value.length?(e.openBlock(),e.createElementBlock("div",Rp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Je.value,(O,K)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:K},[O.type==="html"?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:O.content},null,8,Up)):(e.openBlock(),e.createBlock(Go,{key:1,title:O.componentProps.title,url:O.componentProps.url,id:O.componentProps.id,"button-text":O.componentProps.buttonText,onActivate:_e},e.createSlots({_:2},[O.slotText?{name:"default",fn:e.withCtx(()=>[e.createElementVNode("span",{innerHTML:O.slotText},null,8,qp)]),key:"0"}:void 0]),1032,["title","url","id","button-text"]))],64))),128))])):e.createCommentVNode("",!0),mt.value.length?(e.openBlock(),e.createElementBlock("div",Hp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(mt.value,O=>(e.openBlock(),e.createBlock(Go,{key:O.spec.id,title:O.componentProps.title,url:O.componentProps.url,id:O.spec.id,"button-text":O.componentProps.buttonText,onActivate:_e},null,8,["title","url","id","button-text"]))),128))])):e.createCommentVNode("",!0),Le.value?(e.openBlock(),e.createElementBlock("div",Wp,[e.createElementVNode("button",{type:"button",class:"flex items-center gap-1 justify-end w-full font-medium text-blue-600 hover:text-blue-800 transition-colors disabled:opacity-60 cursor-pointer",onClick:zt},[e.createElementVNode("span",Yp,e.toDisplayString(je.value),1),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(jt.value),{class:"h-3 w-3 stroke-[1.5px]"}))])])):e.createCommentVNode("",!0),H.value.length?(e.openBlock(),e.createElementBlock("div",Zp,[L[5]||(L[5]=e.createElementVNode("p",{class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},"Шари",-1)),e.createElementVNode("div",Kp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(H.value,O=>(e.openBlock(),e.createElementBlock("div",{key:O.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",Gp,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:Ee(O.id),onChange:K=>Be(O,K)},null,40,Xp),L[4]||(L[4]=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-width":"1.4","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e.createElementVNode("span",Jp,e.toDisplayString(O.title),1)]),O.subtitle?(e.openBlock(),e.createElementBlock("div",Qp,e.toDisplayString(O.subtitle),1)):e.createCommentVNode("",!0)]))),128))])])):e.createCommentVNode("",!0),te.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",em," Даних не знайдено. "))],64))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-f89447ba"]]),Qo=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var p,u;const n=t,o=((u=(p=e.getCurrentInstance())==null?void 0:p.appContext.config.globalProperties)==null?void 0:u.$settings)||null,{map:l,ready:r}=ve();let a=null;function i(){a==null||a.remove(),a=null}function s(m){if(!m)return null;if(typeof m=="string")try{m=JSON.parse(m)}catch{return null}return m.type==="FeatureCollection"?m:m.type==="Feature"?{type:"FeatureCollection",features:[m]}:m.type&&Array.isArray(m.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:m,properties:{}}]}:Array.isArray(m.features)?{type:"FeatureCollection",features:m.features}:m.geometry?s(m.geometry):null}function f(m){var d,x,B;return{type:"line",color:"#8e4484",width:2,opacity:((((B=(x=(d=m==null?void 0:m.features)==null?void 0:d[0])==null?void 0:x.geometry)==null?void 0:B.type)||"").includes("Polygon"),.95)}}async function y(m){const g=await fetch(m);if(!g.ok)throw new Error(String(g.status));return g.json()}async function b(m,g){if(m){const h=/^https?:\/\//.test(m)?m:new URL(m,location.origin).toString(),d=await y(h).catch(()=>null),x=s(d);if(x)return x}if(g){const h=await y(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(g)}`).catch(()=>null),d=s(h);if(d)return d}return null}async function c(){var d,x,B,M;if(!n.layerId||!l.value){i();return}typeof r=="function"&&await r().catch(()=>{});const m=n.boundary??((d=n.settingsMap)==null?void 0:d.boundary)??((x=o==null?void 0:o.map)==null?void 0:x.boundary)??null,g=n.katottg??((B=n.settingsMap)==null?void 0:B.katottg)??((M=o==null?void 0:o.map)==null?void 0:M.katottg)??null;if(!m&&!g){i();return}const h=await b(m,g);if(!h){i();return}i(),a=se(`${n.layerId}-boundary`,{source:{type:"geojson",data:h},style:f(h)},l)}return e.watch(()=>{var m,g;return[n.layerId,n.boundary,n.katottg,(m=n.settingsMap)==null?void 0:m.boundary,(g=n.settingsMap)==null?void 0:g.katottg,l.value]},()=>{c()},{immediate:!0}),e.onBeforeUnmount(i),(m,g)=>null}}),om={class:"map-center-control"},lm=["aria-label"],rm=e.defineComponent({directives:{tooltip:le.TooltipDirective},__name:"MapCenterControl",props:{center:{},zoom:{},targetCenter:{},targetZoom:{},targetLabel:{},targetAriaLabel:{}},setup(t){const n=t,{map:o,ready:l}=ve(),r=e.ref(null),a=e.ref(null),i=e.ref(null),s=e.ref(null);function f(m){if(Array.isArray(m)&&m.length>=2){const[g,h]=m.slice(0,2).map(d=>Number(d));return Number.isNaN(g)||Number.isNaN(h)?null:[g,h]}if(m&&typeof m=="object"){const g=m,h=g.lng??g.lon??g.long??g.x,d=g.lat??g.y;if(h!=null&&d!=null){const x=Number(h),B=Number(d);if(!Number.isNaN(x)&&!Number.isNaN(B))return[x,B]}}if(typeof m=="string"){const g=m.split(",").map(h=>Number(h.trim()));if(g.length>=2&&g.every(h=>!Number.isNaN(h)))return[g[0],g[1]]}return null}e.watch(()=>n.center,m=>{const g=f(m);g&&(r.value=g)},{immediate:!0}),e.watch(()=>n.zoom,m=>{const g=Number(m);Number.isNaN(g)||(a.value=g)},{immediate:!0}),e.watch(()=>n.targetCenter,m=>{i.value=f(m)},{immediate:!0}),e.watch(()=>n.targetZoom,m=>{const g=Number(m);s.value=Number.isNaN(g)?null:g},{immediate:!0});const y=e.computed(()=>{var m;return((m=n.targetLabel)==null?void 0:m.trim())||"Точка"}),b=e.computed(()=>n.targetAriaLabel||"Перейти до точки"),c=e.computed(()=>!!i.value);e.onMounted(async()=>{await(l==null?void 0:l());const m=o.value;if(m){if(!r.value){const g=m.getCenter();r.value=[g.lng,g.lat]}a.value==null&&(a.value=m.getZoom())}});function p(){const m=o.value;if(!m)return;const g=r.value||(()=>{const d=m.getCenter();return[d.lng,d.lat]})(),h=a.value??m.getZoom();m.flyTo({center:g,zoom:h})}function u(){const m=o.value;if(!m||!i.value)return;const g=s.value??a.value??m.getZoom();m.flyTo({center:i.value,zoom:g})}return(m,g)=>{const h=e.resolveDirective("tooltip");return e.openBlock(),e.createElementBlock("div",om,[c.value?e.createCommentVNode("",!0):e.withDirectives((e.openBlock(),e.createElementBlock("button",{key:0,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(p,["stop"])},[e.createVNode(e.unref(vl),{class:"w-4 h-4"})])),[[h,"Центр мапи"]]),c.value?e.withDirectives((e.openBlock(),e.createElementBlock("button",{key:1,id:"goto-target-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":b.value,onClick:e.withModifiers(u,["stop"])},[e.createVNode(e.unref(Sl),{class:"w-4 h-4"})],8,lm)),[[h,y.value]]):e.createCommentVNode("",!0)])}}}),mn=Q(rm,[["__scopeId","data-v-92671a57"]]),am={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},im={class:"flex-1 relative overflow-hidden"},sm={class:"absolute top-0 left-0 w-full z-20"},cm={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},dm={class:"flex items-center gap-3"},um={class:"font-semibold text-lg text-gray-800 line-clamp-1"},pm={class:"text-xs text-gray-500 truncate"},mm=["title"],fm={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]"},gm={class:"relative w-full h-full"},ym={style:{top:"17px",left:"230px",position:"absolute","z-index":"1"}},hm={class:"absolute top-4 left-4 z-20"},xm={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},bm={class:"absolute bottom-4 left-4 z-20"},km={class:"w-[650px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},wm={class:"flex-1 flex flex-col h-full"},_m={class:"px-3 pt-3 pb-2 border-b border-gray-100"},Em={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"},Nm=["aria-selected","onClick"],Vm={class:"leading-none"},Bm={class:"flex flex-col flex-1 overflow-y-hidden p-3"},Cm=Q(e.defineComponent({__name:"service",setup(t){var U,D;const n=pe.useRoute(),o=pe.useRouter(),{id:l}=n.params,r=e.ref(null),a=e.ref({}),i=e.ref(null),s=((D=(U=e.getCurrentInstance())==null?void 0:U.appContext.config.globalProperties)==null?void 0:D.$settings)||null,f=e.ref(null),y=e.ref(""),b=e.ref([]),c=e.ref([]),p=e.ref([]),u=e.ref("list"),m=e.ref(""),g=e.ref([]),h=e.computed(()=>{var S,k;return((S=i.value)==null?void 0:S.id)??((k=i.value)==null?void 0:k.service_id)??null}),d=e.computed(()=>{const S=(s==null?void 0:s.map)||null,k=(S==null?void 0:S.boundary)??null,v=(S==null?void 0:S.katottg)??null;return!k&&!v?null:{boundary:k,katottg:v}}),x=[{key:"style",label:"Стиль",icon:Uo},{key:"popup",label:"Попап",icon:au},{key:"filter",label:"Фільтр",icon:du},{key:"legend",label:"Легенда",icon:Jd},{key:"card",label:"Картка",icon:nu}],B=x.map(S=>S.key),M=e.ref("style");e.onMounted(async()=>{const S=n.query.tab;S&&B.includes(S)&&(M.value=S),await V()}),e.watch(M,S=>{n.query.tab!==S&&o.replace({query:{...n.query,tab:S}})}),e.watch(()=>n.query.tab,S=>{S&&B.includes(S)&&M.value!==S&&(M.value=S)});function j(S){if(!S)return null;try{return JSON.parse(JSON.stringify(S))}catch(k){return console.warn("Failed to clone style",k),null}}function E(S){if(!S)return null;if(typeof S=="string")try{return on(Ro.load(S)||null)}catch(k){return console.warn("Failed to parse style yaml",k),null}return on(j(S))}const V=async()=>{try{const S=await fetch(`/api/gis-service/${l}`);if(!S.ok)throw new Error(`${S.status}`);const k=await S.json();a.value=k||{},r.value=l;const v=E(k.style);i.value=k?{...k,style:j(v)}:null,f.value=v,y.value=typeof(k==null?void 0:k.style)=="string"?k.style:v?Ro.dump(v):"",c.value=(k==null?void 0:k.popup)||[],u.value=k.card_mode==="html"?"html":"list",p.value=k.card,m.value=k.html,b.value=(k==null?void 0:k.legend)||[],g.value=(k==null?void 0:k.filters)||[]}catch(S){console.error("Failed to fetch map info",S)}};e.watch(()=>{var S;return(S=i.value)==null?void 0:S.style},S=>{f.value=E(S)},{deep:!0});async function $(S,k){await I({[S]:k},S)}function A(){const S=j(f.value);i.value=i.value?{...i.value,style:S}:i.value}async function I(S,k){if(i.value={...i.value||{},...S},typeof S.html<"u"&&(a.value={...a.value||{},html:S.html}),!!h.value)try{if(!(await fetch(`/api/gis-service/${h.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(S)})).ok)throw new Error("Save failed");le.notify({type:"success",title:"Успіх",message:`${k} saved`}),await V()}catch(v){le.notify({type:"error",title:"Помилка",message:`Failed to save ${k}`}),console.error(v)}}async function q(S,k){if(S!=="card"){await $(S,k);return}const v=(k==null?void 0:k.card_mode)==="html"?"html":"list",T=v==="html"&&typeof(k==null?void 0:k.html)=="string"?k.html:"",C=(v==="html"?[]:null)||(Array.isArray(k==null?void 0:k.list)?k.list:[]);p.value=C,u.value=v,m.value=T;const N={card_mode:v};v==="html"&&(N.html=T),v==="list"&&(N.card=C),await I(N,"card")}return(S,k)=>{var v,T,C,N;return e.openBlock(),e.createElementBlock("div",am,[e.createElementVNode("div",im,[e.createElementVNode("div",sm,[e.createElementVNode("div",cm,[e.createElementVNode("div",dm,[e.createElementVNode("button",{onClick:k[0]||(k[0]=w=>S.$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",um,e.toDisplayString((v=i.value)==null?void 0:v.name),1),e.createElementVNode("div",pm," Сервіс: "+e.toDisplayString((T=i.value)==null?void 0:T.service_key),1)])]),e.createElementVNode("div",{class:"max-w-xl text-xs text-gray-600 truncate",title:(C=i.value)==null?void 0:C.description},e.toDisplayString((N=i.value)==null?void 0:N.description),9,mm)])]),e.createElementVNode("div",fm,[e.createElementVNode("div",gm,[e.createVNode(Tt,null,{default:e.withCtx(()=>{var w,F,P,R,G,W,Y;return[(w=i.value)!=null&&w.service_id?(e.openBlock(),e.createBlock(np,{key:0,id:(F=i.value)==null?void 0:F.service_id,layer:i.value,"style-spec":((P=i.value)==null?void 0:P.style)||null},null,8,["id","layer","style-spec"])):e.createCommentVNode("",!0),h.value?(e.openBlock(),e.createBlock(Qo,{key:1,"layer-id":h.value,boundary:((R=i.value)==null?void 0:R.boundary)||((G=d.value)==null?void 0:G.boundary)||null,katottg:((W=i.value)==null?void 0:W.katottg)||((Y=d.value)==null?void 0:Y.katottg)||null},null,8,["layer-id","boundary","katottg"])):e.createCommentVNode("",!0),e.createElementVNode("div",ym,[h.value?(e.openBlock(),e.createBlock(dn,{key:0,"layer-id":h.value,filters:g.value},null,8,["layer-id","filters"])):e.createCommentVNode("",!0)]),k[11]||(k[11]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createElementVNode("div",hm,[e.createVNode(_t)]),e.createElementVNode("div",xm,[e.createVNode(mn),a.value.center?(e.openBlock(),e.createBlock(mn,{key:0,targetCenter:a.value.center,targetLabel:"Ценр даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",bm,[e.createVNode(Et,{items:b.value||null},null,8,["items"])]),e.createVNode(Ko),e.createVNode(Jo,{html:a.value.html},null,8,["html"])]}),_:1})])])]),e.createElementVNode("div",km,[e.createElementVNode("div",wm,[e.createElementVNode("div",_m,[e.createElementVNode("div",Em,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(x,w=>e.createElementVNode("button",{key:w.key,type:"button",role:"tab","aria-selected":M.value===w.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",M.value===w.key?"bg-white shadow-sm text-gray-700":""]),onClick:F=>M.value=w.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(w.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",Vm,e.toDisplayString(w.label),1)],10,Nm)),64))])]),e.createElementVNode("div",Bm,[M.value==="style"?(e.openBlock(),e.createBlock(hu,{key:0,token:h.value,"style-text":y.value,"style-yaml":f.value,"onUpdate:styleYaml":k[1]||(k[1]=w=>f.value=w),"onUpdate:styleText":k[2]||(k[2]=w=>y.value=w),onUpdate:A},null,8,["token","style-text","style-yaml"])):M.value==="legend"?(e.openBlock(),e.createBlock(Hu,{key:1,token:h.value,columns:b.value,"onUpdate:columns":k[3]||(k[3]=w=>b.value=w),onSave:k[4]||(k[4]=w=>$("legend",w))},null,8,["token","columns"])):M.value==="popup"?(e.openBlock(),e.createBlock(Iu,{key:2,token:h.value,columns:c.value,fields:a.value.fields,"onUpdate:columns":k[5]||(k[5]=w=>c.value=w),onSave:k[6]||(k[6]=w=>$("popup",w))},null,8,["token","columns","fields"])):M.value==="card"?(e.openBlock(),e.createBlock(Qu,{key:3,token:h.value,columns:p.value,fields:a.value.fields,"view-mode":u.value,html:m.value,"onUpdate:columns":k[7]||(k[7]=w=>p.value=w),onSave:q},null,8,["token","columns","fields","view-mode","html"])):M.value==="filter"?(e.openBlock(),e.createBlock(tp,{key:4,token:h.value,fields:a.value.fields,columns:g.value,"onUpdate:columns":k[8]||(k[8]=w=>g.value=w),onSave:k[9]||(k[9]=w=>$("filters",w))},null,8,["token","fields","columns"])):e.createCommentVNode("",!0)])])])])}}}),[["__scopeId","data-v-453aa0f6"]]),$m={class:"flex-1 overflow-y-auto p-4 sm:p-6"},vm={class:"space-y-6"},Sm={class:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm"},Am={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4"},Lm={class:"text-xs text-gray-500 mb-1"},Fm={class:"text-base font-semibold text-gray-900"},Tm={class:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm"},Mm={class:"space-y-4"},Dm={class:"bg-gradient-to-br from-blue-50 to-blue-100/30 p-4 rounded-lg border border-blue-200"},Im={class:"text-sm font-semibold text-gray-900"},jm={class:"text-xs text-gray-600 mt-1"},zm={class:"grid grid-cols-2 gap-3"},Om={class:"text-xs text-gray-500 mb-1"},Pm={class:"text-sm font-semibold text-gray-900"},Rm={class:"bg-gray-50 p-4 rounded-lg"},Um={class:"grid grid-cols-2 gap-4"},qm={class:"text-xs text-gray-500 mb-1"},Hm={class:"text-sm font-semibold text-gray-900"},Wm={class:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm"},Ym={class:"grid grid-cols-1 sm:grid-cols-2 gap-4"},Zm={class:"space-y-2"},Km={class:"text-gray-600"},Gm={class:"font-semibold text-gray-900"},Xm={class:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm"},Jm={class:"grid grid-cols-1 sm:grid-cols-2 gap-4"},Qm={class:"text-xs text-gray-500 mb-1"},ef={class:"text-sm font-medium text-gray-900"},tf=e.defineComponent({__name:"raster-info-tab",props:{details:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",$m,[e.createElementVNode("div",vm,[o[6]||(o[6]=e.createElementVNode("div",null,[e.createElementVNode("h3",{class:"text-lg font-semibold text-gray-900 mb-4"},"Інформація про растр")],-1)),e.createElementVNode("div",Sm,[o[0]||(o[0]=e.createElementVNode("div",{class:"mb-4"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Основні параметри")],-1)),e.createElementVNode("div",Am,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.baseParams,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label,class:"bg-gray-50 p-4 rounded-lg"},[e.createElementVNode("p",Lm,e.toDisplayString(l.label),1),e.createElementVNode("p",Fm,e.toDisplayString(l.value),1)]))),128))])]),e.createElementVNode("div",Tm,[o[3]||(o[3]=e.createElementVNode("div",{class:"mb-4"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Просторова інформація")],-1)),e.createElementVNode("div",Mm,[e.createElementVNode("div",null,[o[1]||(o[1]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Система координат",-1)),e.createElementVNode("div",Dm,[e.createElementVNode("p",Im,e.toDisplayString(t.details.spatial.crs.code),1),e.createElementVNode("p",jm,e.toDisplayString(t.details.spatial.crs.description),1)])]),e.createElementVNode("div",null,[o[2]||(o[2]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Межі покриття",-1)),e.createElementVNode("div",zm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.bounds,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label,class:"bg-gray-50 p-3 rounded-lg border border-gray-200"},[e.createElementVNode("p",Om,e.toDisplayString(l.label),1),e.createElementVNode("p",Pm,e.toDisplayString(l.value),1)]))),128))])]),e.createElementVNode("div",Rm,[e.createElementVNode("div",Um,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.resolution,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label},[e.createElementVNode("p",qm,e.toDisplayString(l.label),1),e.createElementVNode("p",Hm,e.toDisplayString(l.value),1)]))),128))])])])]),e.createElementVNode("div",Wm,[o[4]||(o[4]=e.createElementVNode("div",{class:"mb-4"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Статистика даних")],-1)),e.createElementVNode("div",Ym,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.statistics,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label,class:e.normalizeClass(["p-4 rounded-lg border",l.cardClass])},[e.createElementVNode("p",{class:e.normalizeClass(["text-xs font-medium mb-2",l.titleClass])},e.toDisplayString(l.label),3),e.createElementVNode("div",Zm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.metrics,r=>(e.openBlock(),e.createElementBlock("div",{class:"flex justify-between text-xs",key:r.label},[e.createElementVNode("span",Km,e.toDisplayString(r.label)+":",1),e.createElementVNode("span",Gm,e.toDisplayString(r.value),1)]))),128))])],2))),128))])]),e.createElementVNode("div",Xm,[o[5]||(o[5]=e.createElementVNode("div",{class:"mb-4"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Технічні деталі")],-1)),e.createElementVNode("div",Jm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.technical,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label},[e.createElementVNode("p",Qm,e.toDisplayString(l.label),1),e.createElementVNode("p",ef,e.toDisplayString(l.value),1)]))),128))])])])]))}}),nf={class:"flex-1 overflow-y-auto space-y-3 pr-1"},of={class:"font-medium text-sm text-gray-800"},lf={class:"text-xs text-gray-500"},rf=e.defineComponent({__name:"raster-files-tab",props:{files:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",nf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.files,l=>(e.openBlock(),e.createElementBlock("div",{key:l.name,class:"border border-gray-100 rounded-xl p-4 shadow-sm bg-white flex items-start justify-between"},[e.createElementVNode("div",null,[e.createElementVNode("p",of,e.toDisplayString(l.name),1),e.createElementVNode("p",lf,e.toDisplayString(l.resolution)+" • "+e.toDisplayString(l.size),1)]),e.createElementVNode("span",{class:e.normalizeClass(["text-[11px] font-semibold px-2 py-0.5 rounded-full",l.statusClass])},e.toDisplayString(l.status),3)]))),128))]))}}),af={},sf={xmlns:"http://www.w3.org/2000/svg",width:"12px",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"};function cf(t,n){return e.openBlock(),e.createElementBlock("svg",sf,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M20,16v4a2,2,0,0,1-2,2H4a2,2,0,0,1-2-2V6A2,2,0,0,1,4,4H8",fill:"none",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1),e.createElementVNode("polygon",{fill:"none",points:"12.5 15.8 22 6.2 17.8 2 8.3 11.5 8 16 12.5 15.8",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)])])}const df=Q(af,[["render",cf]]),uf={},pf={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"};function mf(t,n){return e.openBlock(),e.createElementBlock("svg",pf,[...n[0]||(n[0]=[e.createElementVNode("circle",{cx:"12",cy:"12",r:"9"},null,-1),e.createElementVNode("line",{x1:"12",y1:"8",x2:"12",y2:"8"},null,-1),e.createElementVNode("path",{d:"M11 12h1v4h1"},null,-1)])])}const ff=Q(uf,[["render",mf]]),gf={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},yf={class:"flex-1 relative overflow-hidden"},hf={class:"absolute top-0 left-0 w-full z-20"},xf={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},bf={class:"flex items-center gap-3"},kf={class:"font-semibold text-lg text-gray-800 line-clamp-1"},wf={class:"text-xs text-gray-500 truncate"},_f=["title"],Ef={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]"},Nf={class:"relative w-full h-full"},Vf={class:"absolute top-4 left-4 z-20"},Bf={class:"absolute bottom-4 left-4 z-20"},Cf={class:"w-[520px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},$f={class:"flex-1 flex flex-col h-full"},vf={class:"px-3 pt-3 pb-2 border-b border-gray-100"},Sf={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-2 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},Af=["aria-selected","onClick"],Lf={class:"leading-none"},Ff={class:"flex flex-col flex-1 overflow-y-hidden p-4"},Tf="3600301717964457703",Mf=e.defineComponent({__name:"raster",setup(t){const n=pe.useRouter(),o=pe.useRoute(),l=e.computed(()=>{var c;return((c=o.params)==null?void 0:c.id)||Tf}),r=e.computed(()=>({id:l.value,name:"Фрагмент растра 30 см",description:"Попередній перегляд растрового шару. Реальні метадані підтягнемо після підключення API.",coverage:"Київська область, 2024 рік",crs:"EPSG:4326",source:"ДП «Центр ДЗК»",updatedAt:"14 травня 2024"})),a=[{key:"files",label:"Файли",icon:df},{key:"info",label:"Інформація",icon:ff}],i=a.map(c=>c.key),s=e.ref(i.includes(o.query.tab)?o.query.tab:"files");e.watch(()=>o.query.tab,c=>{c&&i.includes(c)&&s.value!==c&&(s.value=c)}),e.watch(s,c=>{o.query.tab!==c&&n.replace({query:{...o.query,tab:c}})});const f=[{label:"Покриття 2024",color:"#0ea5e9"},{label:"Попередні дані 2023",color:"#94a3b8"}],y=e.ref([{name:"mosaic_01.tif",resolution:"0.3 м/піксель",size:"245 MB",status:"Готово",statusClass:"bg-emerald-50 text-emerald-600 border border-emerald-100"},{name:"mosaic_01.tfw",resolution:"georeferencing",size:"4 KB",status:"Готово",statusClass:"bg-emerald-50 text-emerald-600 border border-emerald-100"},{name:"metadata.xml",resolution:"опис",size:"8 KB",status:"Чернетка",statusClass:"bg-amber-50 text-amber-600 border border-amber-100"}]),b=e.computed(()=>({baseParams:[{label:"Розмір растру",value:"2048 × 1536 px"},{label:"Формат файлу",value:"GeoTIFF"},{label:"Розмір файлу",value:"45.2 MB"},{label:"Кількість каналів",value:"4 (RGBA)"},{label:"Глибина кольору",value:"8 біт/канал"},{label:"Стиснення",value:"LZW"}],spatial:{crs:{code:"EPSG:4326",description:"WGS 84 — World Geodetic System 1984"},bounds:[{label:"Північ",value:"52.3791° N"},{label:"Схід",value:"31.1656° E"},{label:"Південь",value:"44.3864° N"},{label:"Захід",value:"22.1371° E"}],resolution:[{label:"Роздільна здатність X",value:"0.00417° (~460 м)"},{label:"Роздільна здатність Y",value:"0.00417° (~460 м)"}]},statistics:[{label:"Канал 1 (Червоний)",cardClass:"bg-gradient-to-br from-green-50 to-green-100/30 border-green-200",titleClass:"text-green-900",metrics:[{label:"Min",value:"0"},{label:"Max",value:"255"},{label:"Середнє",value:"127.3"}]},{label:"Канал 2 (Зелений)",cardClass:"bg-gradient-to-br from-blue-50 to-blue-100/30 border-blue-200",titleClass:"text-blue-900",metrics:[{label:"Min",value:"0"},{label:"Max",value:"255"},{label:"Середнє",value:"134.8"}]},{label:"Канал 3 (Синій)",cardClass:"bg-gradient-to-br from-purple-50 to-purple-100/30 border-purple-200",titleClass:"text-purple-900",metrics:[{label:"Min",value:"0"},{label:"Max",value:"255"},{label:"Середнє",value:"118.5"}]},{label:"Канал 4 (Альфа)",cardClass:"bg-gradient-to-br from-gray-50 to-gray-100/30 border-gray-200",titleClass:"text-gray-900",metrics:[{label:"Min",value:"0"},{label:"Max",value:"255"},{label:"Середнє",value:"255.0"}]}],technical:[{label:"Тип даних",value:"Unsigned Integer 8-bit"},{label:"Інтерливінг",value:"Pixel"},{label:"Значення NoData",value:"0"},{label:"Кольорова інтерпретація",value:"RGB + Alpha"},{label:"Тайлування",value:"256 × 256"},{label:"Оверв'ю",value:"4 рівні"}]}));return(c,p)=>(e.openBlock(),e.createElementBlock("div",gf,[e.createElementVNode("div",yf,[e.createElementVNode("div",hf,[e.createElementVNode("div",xf,[e.createElementVNode("div",bf,[e.createElementVNode("button",{type:"button",onClick:p[0]||(p[0]=u=>e.unref(n).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"},[...p[1]||(p[1]=[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",kf,e.toDisplayString(r.value.name),1),e.createElementVNode("div",wf," Растер ID: "+e.toDisplayString(r.value.id),1)])]),e.createElementVNode("div",{class:"max-w-xl text-xs text-gray-600 truncate",title:r.value.description},e.toDisplayString(r.value.description),9,_f)])]),e.createElementVNode("div",Ef,[e.createElementVNode("div",Nf,[e.createVNode(Tt,null,{default:e.withCtx(()=>[e.createElementVNode("div",Vf,[e.createVNode(_t)]),e.createElementVNode("div",Bf,[e.createVNode(Et,{items:f})])]),_:1})])])]),e.createElementVNode("div",Cf,[e.createElementVNode("div",$f,[e.createElementVNode("div",vf,[e.createElementVNode("div",Sf,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,u=>e.createElementVNode("button",{key:u.key,type:"button",role:"tab","aria-selected":s.value===u.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",s.value===u.key?"bg-white shadow-sm text-gray-700":""]),onClick:m=>s.value=u.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(u.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",Lf,e.toDisplayString(u.label),1)],10,Af)),64))])]),e.createElementVNode("div",Ff,[s.value==="files"?(e.openBlock(),e.createBlock(rf,{key:0,files:y.value},null,8,["files"])):(e.openBlock(),e.createBlock(tf,{key:1,details:b.value},null,8,["details"]))])])])]))}}),Df={},If={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-table"};function jf(t,n){return e.openBlock(),e.createElementBlock("svg",If,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M12 3v18"},null,-1),e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"},null,-1),e.createElementVNode("path",{d:"M3 9h18"},null,-1),e.createElementVNode("path",{d:"M3 15h18"},null,-1)])])}const zf=Q(Df,[["render",jf]]),Of={class:"flex flex-col h-full"},Pf={class:"flex justify-end mb-3 gap-2"},Rf=e.defineComponent({__name:"cartocss-css-tab",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,l=n,r=e.computed({get:()=>o.modelValue,set:a=>l("update:modelValue",a)});return(a,i)=>(e.openBlock(),e.createElementBlock("div",Of,[e.createElementVNode("div",Pf,[e.createElementVNode("button",{type:"button",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",onClick:i[0]||(i[0]=s=>a.$emit("save"))},[...i[2]||(i[2]=[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:"h-3.5 w-3.5"},[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 2H5a 2 2 0 0 1-2-2V5a 2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a 1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти ",-1)])])]),e.createVNode(Ft,{modelValue:r.value,"onUpdate:modelValue":i[1]||(i[1]=s=>r.value=s),language:"css",class:"flex-1 rounded-lg overflow-hidden"},null,8,["modelValue"])]))}}),Uf={class:"flex flex-col flex-1 min-h-0"},qf={class:"flex justify-between mb-3 gap-2"},Hf={class:"text-left"},Wf={class:"font-medium text-gray-900"},Yf={class:"text-xs text-gray-500"},Zf={class:"flex justify-center gap-2"},Kf=["checked","onChange"],Gf={class:"text-sm font-medium text-gray-900"},Xf=e.defineComponent({__name:"cartocss-data-tab",props:{modelValue:{default:[]},modelModifiers:{}},emits:e.mergeModels(["save"],["update:modelValue"]),setup(t,{emit:n}){const o=[{key:"table",label:"Таблиця",slot:"datasetCell"},{key:"active",label:"Активний",slot:"activeCell",width:"140px"},{key:"zoom",label:"Зум",slot:"zoomCell",width:"140px"}],l={table:{type:"text",label:"Таблиця",validators:["required"]},caption:{type:"text",label:"Підпис",validators:["required"]},active:{type:"switcher",label:"Активний"},zoom:{type:"number",label:"Зум"}},r=e.defineAsyncComponent(()=>import("@opengis/core").then(g=>g.VsModal)),a=e.defineAsyncComponent(()=>import("@opengis/form")),i=e.useModel(t,"modelValue"),s=n,f=e.ref(!1),y=e.ref({table:"",caption:"",zoom:"0-12",active:!0}),b={table:{type:"text",label:"Таблиця",validators:["required"]},caption:{type:"text",label:"Підпис",validators:["required"]},active:{type:"switcher",label:"Активна"},zoom:{type:"text",label:"Зум",placeholder:"0-12"}};function c(){y.value={table:"",caption:"",zoom:"",active:!0},f.value=!0}function p(){f.value=!1}function u(){var d,x;const g=(d=y.value.table)==null?void 0:d.trim(),h=(x=y.value.caption)==null?void 0:x.trim();if(!g||!h){le.notify({type:"warning",title:"Перевірка",message:"Вкажіть таблицю та підпис"});return}i.value=[...Array.isArray(i.value)?i.value:[],{...y.value,table:g,caption:h}],f.value=!1}function m(g,h){var x;const d=((x=h==null?void 0:h.target)==null?void 0:x.checked)??!1;g.active=d,i.value=Array.isArray(i.value)?[...i.value]:[]}return(g,h)=>(e.openBlock(),e.createElementBlock("div",Uf,[e.createElementVNode("div",qf,[e.createElementVNode("button",{type:"button",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",onClick:c}," Додати таблицю "),e.createElementVNode("button",{type:"button",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",onClick:h[0]||(h[0]=d=>s("save"))}," Зберегти ")]),e.createVNode(qe,{modelValue:i.value,"onUpdate:modelValue":h[1]||(h[1]=d=>i.value=d),"columns-scheme":o,"form-scheme":l,"add-button":!1,"main-col-width":"260px"},{datasetCell:e.withCtx(({row:d})=>[e.createElementVNode("div",Hf,[e.createElementVNode("div",Wf,e.toDisplayString(d.table),1),e.createElementVNode("div",Yf,e.toDisplayString(d.caption),1)])]),activeCell:e.withCtx(({row:d})=>[e.createElementVNode("label",Zf,[e.createElementVNode("input",{type:"checkbox",class:"h-4 w-4 text-sky-500 border-gray-300 rounded focus:ring-sky-300",checked:d.active,onChange:x=>m(d,x)},null,40,Kf)])]),zoomCell:e.withCtx(({row:d})=>[e.createElementVNode("div",Gf,e.toDisplayString(d.zoom),1)]),_:1},8,["modelValue"]),e.createVNode(e.unref(r),{teleport:"#modal",visible:f.value,"onUpdate:visible":h[3]||(h[3]=d=>f.value=d),title:"Нова таблиця CartoCSS"},{footer:e.withCtx(()=>[e.createElementVNode("div",{class:"flex justify-end gap-2 p-4 border-т"},[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:p},"Скасувати"),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:u},"Додати")])]),default:e.withCtx(()=>[e.createVNode(e.unref(a),{values:y.value,"onUpdate:values":h[2]||(h[2]=d=>y.value=d),schema:b},null,8,["values"])]),_:1},8,["visible"])]))}}),Jf={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},Qf={class:"flex-1 relative overflow-hidden"},e0={class:"absolute top-0 left-0 w-full z-20"},t0={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},n0={class:"flex items-center gap-3"},o0={class:"font-semibold text-lg text-gray-800 line-clamp-1"},l0={class:"text-xs text-gray-500 truncate"},r0=["title"],a0={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]"},i0={class:"relative w-full h-full"},s0={class:"absolute top-4 left-4 z-20"},c0={class:"absolute bottom-4 left-4 z-20"},d0={class:"w-[650px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},u0={class:"flex-1 flex flex-col h-full"},p0={class:"px-3 pt-3 pb-2 border-b border-gray-100"},m0={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-2 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},f0=["aria-selected","onClick"],g0={class:"leading-none"},y0={class:"flex flex-col flex-1 overflow-y-hidden p-4"},h0={key:0,class:"flex-1 flex items-center justify-center text-sm text-gray-500"},x0="cartocss-demo-001",b0=e.defineComponent({__name:"cartocss",setup(t){const n=pe.useRouter(),o=pe.useRoute(),l=[{label:"Основні дороги",color:"#e11d48"},{label:"Населені пункти",color:"#f97316"},{label:"Фон",color:"#0ea5e9"}],r=[{key:"css",label:"CSS",icon:Uo},{key:"data",label:"Дані",icon:zf}],a=r.map(d=>d.key),i=e.ref(a.includes(o.query.tab)?o.query.tab:"css"),s=e.computed(()=>o.params.id||x0),f=e.ref({id:s.value,name:"",description:""}),y=e.ref(""),b=e.ref([]),c=e.ref(!1),p=e.ref(!1);e.watch(s,d=>{d&&g(d)},{immediate:!0}),e.watch(()=>o.query.tab,d=>{d&&a.includes(d)&&i.value!==d&&(i.value=d)}),e.watch(i,d=>{o.query.tab!==d&&n.replace({query:{...o.query,tab:d}})});function u(d){if(!d)return null;if(typeof d=="string")try{return JSON.parse(d)}catch(x){return console.warn("Failed to parse CartoCSS config",x),null}return typeof d=="object"?d:null}function m(d){const x=Array.isArray(d)?d:d==null?void 0:d.datasets;return Array.isArray(x)?x.map((B,M)=>({table:(B==null?void 0:B.table)||(B==null?void 0:B.id)||`dataset_${M+1}`,caption:(B==null?void 0:B.caption)||(B==null?void 0:B.label)||"Без підпису",active:typeof(B==null?void 0:B.active)=="boolean"?B.active:!0,zoom:typeof(B==null?void 0:B.zoom)>"u"?"0-12":String(B.zoom)})):[]}async function g(d){c.value=!0;try{const x=await fetch(`/api/cartocss/${d}`);if(!x.ok)throw new Error(`Failed to load cartocss: ${x.status}`);const B=await x.json(),M=(B==null?void 0:B.message)||B||{};f.value={id:M.cartocss_key||d,name:M.name||f.value.name,description:M.description||f.value.description},y.value=typeof M.style=="string"?M.style:"";const j=u(M.config);b.value=m(j)}catch(x){console.error("Failed to fetch CartoCSS",x)}finally{c.value=!1}}async function h(){if(s.value){p.value=!0;try{const d={style:y.value||"",config:b.value},x=await fetch(`/api/cartocss/${s.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)});if(!x.ok)throw new Error(`Failed to save cartocss: ${x.status}`);le.notify({type:"success",title:"Збережено",message:"CartoCSS оновлено"}),await g(s.value)}catch(d){console.error("Failed to save CartoCSS",d),le.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти CartoCSS"})}finally{p.value=!1}}}return(d,x)=>(e.openBlock(),e.createElementBlock("div",Jf,[e.createElementVNode("div",Qf,[e.createElementVNode("div",e0,[e.createElementVNode("div",t0,[e.createElementVNode("div",n0,[e.createElementVNode("button",{type:"button",onClick:x[0]||(x[0]=B=>e.unref(n).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"},[...x[3]||(x[3]=[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",o0,e.toDisplayString(f.value.name),1),e.createElementVNode("div",l0," CartoCSS ID: "+e.toDisplayString(f.value.id),1)])]),e.createElementVNode("div",{class:"max-w-xl text-xs text-gray-600 truncate",title:f.value.description},e.toDisplayString(f.value.description),9,r0)])]),e.createElementVNode("div",a0,[e.createElementVNode("div",i0,[e.createVNode(Tt,null,{default:e.withCtx(()=>[e.createElementVNode("div",s0,[e.createVNode(_t)]),e.createElementVNode("div",c0,[e.createVNode(Et,{items:l})])]),_:1})])])]),e.createElementVNode("div",d0,[e.createElementVNode("div",u0,[e.createElementVNode("div",p0,[e.createElementVNode("div",m0,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(r,B=>e.createElementVNode("button",{key:B.key,type:"button",role:"tab","aria-selected":i.value===B.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",i.value===B.key?"bg-white shadow-sm text-gray-700":""]),onClick:M=>i.value=B.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(B.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",g0,e.toDisplayString(B.label),1)],10,f0)),64))])]),e.createElementVNode("div",y0,[c.value?(e.openBlock(),e.createElementBlock("div",h0," Завантаження стилю… ")):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[i.value==="css"?(e.openBlock(),e.createBlock(Rf,{key:0,modelValue:y.value,"onUpdate:modelValue":x[1]||(x[1]=B=>y.value=B),class:"flex-1 min-h-0",onSave:h},null,8,["modelValue"])):(e.openBlock(),e.createBlock(Xf,{key:1,modelValue:b.value,"onUpdate:modelValue":x[2]||(x[2]=B=>b.value=B),class:"flex-1 min-h-0 flex flex-col",onSave:h},null,8,["modelValue"]))],64))])])])]))}}),k0={class:"w-full mb-6"},w0={class:"flex items-center w-full h-10 max-w-md p-1 bg-white border border-gray-200 rounded-md"},_0=["onClick"],E0=e.defineComponent({__name:"MapSettingsTabs",props:{tabs:{},activeTab:{}},emits:["update:activeTab"],setup(t,{emit:n}){const o=n,l=r=>{o("update:activeTab",r)};return(r,a)=>(e.openBlock(),e.createElementBlock("div",k0,[e.createElementVNode("div",w0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.tabs,i=>(e.openBlock(),e.createElementBlock("button",{key:i.id,onClick:s=>l(i.id),class:e.normalizeClass(["inline-flex flex-1 items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium transition-all",i.id===t.activeTab?"bg-blue-50 text-blue-700":"text-gray-600 hover:bg-gray-50"])},e.toDisplayString(i.name),11,_0))),128))])]))}}),N0={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},V0=e.defineComponent({__name:"GeneralSettings",props:{schema:{},modelValue:{},loading:{type:Boolean},form:{}},emits:["update:modelValue","update:form"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/form")),l=t,r=n,a=e.computed({get:()=>l.modelValue,set:s=>r("update:modelValue",s)}),i=e.computed({get:()=>l.form,set:s=>r("update:form",s)});return(s,f)=>(e.openBlock(),e.createElementBlock("section",N0,[f[2]||(f[2]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Основна інформація ",-1)),t.loading?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(o),{key:0,schema:t.schema,values:a.value,"onUpdate:values":f[0]||(f[0]=y=>a.value=y),form:i.value,"onUpdate:form":f[1]||(f[1]=y=>i.value=y)},null,8,["schema","values","form"]))]))}}),B0={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},C0=e.defineComponent({__name:"LayerSettings",props:{layerIDs:{},layerNames:{},options:{}},emits:["update:layerIDs","update:layerNames"],setup(t,{emit:n}){const o=t,l=n,r=e.computed({get:()=>o.layerIDs,set:a=>l("update:layerIDs",a)});return e.computed({get:()=>o.layerNames,set:a=>l("update:layerNames",a)}),(a,i)=>(e.openBlock(),e.createElementBlock("section",B0,[i[1]||(i[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"},"Шари",-1)),i[2]||(i[2]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Доступні шари",-1)),e.createVNode(e.unref(kn.VsInputArraySelect),{options:t.options,modelValue:r.value,"onUpdate:modelValue":i[0]||(i[0]=s=>r.value=s),placeholder:"Шари"},null,8,["options","modelValue"])]))}}),$0={class:"mapLayer-info__inner"},v0={class:"mapLayer-info__item-label"},fn=Q(e.defineComponent({__name:"MapLayerInfoPopover",props:{items:{}},setup(t,{expose:n}){const o=t,l=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),r=e.ref(null),a=e.ref(null);let i=null;const s=e.computed(()=>l.open?{position:"absolute",width:"auto",maxWidth:`${Math.min(300,window.innerWidth-24)}px`,top:`${l.top}px`,left:`${l.left}px`,transform:l.transform,display:"block"}:{display:"none"});function f(g){if(l.open){p();return}const h=g.currentTarget,d=h==null?void 0:h.closest(".mapLayer-info");if(!d){p();return}r.value=d,l.open=!0,e.nextTick(()=>{y(),u(),requestAnimationFrame(()=>{y()})})}function y(){if(!l.open||!r.value||!a.value)return;const g=r.value.getBoundingClientRect(),h=12,d=window.scrollX+h,x=window.scrollX+window.innerWidth-h,B=window.scrollY+h,M=window.scrollY+window.innerHeight-h,j=a.value.offsetWidth||Math.min(300,window.innerWidth-24),E=a.value.offsetHeight||0;let V=g.left+window.scrollX+(g.width-j)/2;V<d&&(V=d),V+j>x&&(V=Math.max(d,x-j)),l.left=V;let $=g.bottom+window.scrollY+h;$+E>M&&($=g.top+window.scrollY-E-h,$<B&&($=Math.max(B,M-E))),$<B&&($=B),$+E>M&&($=Math.max(B,M-E)),l.top=$,l.transform="none"}function b(g){var d,x;if(!l.open)return;const h=g.target;(d=r.value)!=null&&d.contains(h)||(x=a.value)!=null&&x.contains(h)||p()}function c(g){g.key==="Escape"&&p()}function p(){m(),l.open=!1,r.value=null,a.value=null}function u(){m(),a.value&&(i=new ResizeObserver(()=>{y()}),i.observe(a.value))}function m(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",b,!0),document.addEventListener("keydown",c),window.addEventListener("scroll",y,!0),window.addEventListener("resize",y)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",b,!0),document.removeEventListener("keydown",c),window.removeEventListener("scroll",y,!0),window.removeEventListener("resize",y),m()}),e.watch(()=>o.items,()=>{l.open&&e.nextTick(()=>y())},{deep:!0}),n({close:p}),(g,h)=>(e.openBlock(),e.createElementBlock("div",{class:"mapLayer-info",ref_key:"anchorEl",ref:r},[e.createElementVNode("a",{class:"mapLayer-info__trigger",href:"#",onClick:e.withModifiers(f,["prevent","stop"])},[...h[1]||(h[1]=[e.createStaticVNode('<div class="mapLayer-info__icon" data-v-cc1cc7bf><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-cc1cc7bf><circle cx="12" cy="12" r="10" data-v-cc1cc7bf></circle><line x1="12" y1="16" x2="12" y2="12" data-v-cc1cc7bf></line><line x1="12" y1="8" x2="12.01" y2="8" data-v-cc1cc7bf></line></svg></div>',1)])]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[l.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-[81] py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-info__popover",style:e.normalizeStyle(s.value),ref_key:"popoverEl",ref:a,onClick:h[0]||(h[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",$0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,d=>(e.openBlock(),e.createElementBlock("div",{key:d.label,class:"mapLayer-info__item"},[e.createElementVNode("div",v0,e.toDisplayString(d.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":d.breakLine}])},e.toDisplayString(d.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-cc1cc7bf"]]),S0={key:0,class:"map-info__title"},A0={class:"map-info__actions"},L0={key:0,class:"map-info__menu"},F0=["onClick"],T0=["innerHTML"],el=Q(e.defineComponent({__name:"MapInfoWidget",props:{title:{},content:{},links:{},mapName:{},mapDescription:{}},setup(t){const n=t,o=e.ref(null),l=e.ref(!1),r=e.ref(null),a=e.ref(null),i=e.ref({top:0,left:0}),s=pe.useRouter(),f=e.ref(!1),y=e.ref(!1),b=e.computed(()=>Array.isArray(n.links)?n.links.filter(B=>(B==null?void 0:B.name)&&(B==null?void 0:B.slug)):[]),c=e.computed(()=>({top:`${i.value.top}px`,left:`${i.value.left}px`})),p=e.computed(()=>{const B=[];return n.mapName&&B.push({label:"Назва карти",value:n.mapName}),n.mapDescription&&B.push({label:"Опис",value:n.mapDescription,breakLine:!0}),B});function u(B){B.stopPropagation(),l.value=!l.value}function m(){const B=r.value;if(!B||!a.value)return;const M=B.getBoundingClientRect(),j=12,E=8,V=window.scrollX+j,$=window.scrollX+window.innerWidth-j,A=window.scrollY+j,I=window.scrollY+window.innerHeight-j,q=a.value.offsetWidth||160,U=a.value.offsetHeight||0;let D=M.bottom+window.scrollY+E,S=M.left+window.scrollX;S+q>$&&(S=M.right+window.scrollX-q,S<V&&(S=V)),S<V&&(S=V),D+U>I&&(D=M.top+window.scrollY-U-E,D<A&&(D=Math.max(A,I-U))),D<A&&(D=A),D+U>I&&(D=Math.max(A,I-U)),i.value={top:D,left:S}}function g(B){if(!l.value)return;const M=o.value;if(!M){l.value=!1;return}M.contains(B.target)||(l.value=!1)}e.watch(l,B=>{B?e.nextTick(()=>{m(),requestAnimationFrame(()=>{m()}),window.addEventListener("scroll",m,!0),window.addEventListener("resize",m)}):(window.removeEventListener("scroll",m,!0),window.removeEventListener("resize",m))});function h(B){l.value=!1,s.push(`/maps/${B}`)}function d(){f.value=!f.value}function x(){y.value=window.innerWidth<=768}return e.onMounted(()=>{document.addEventListener("click",g,!0),x(),window.addEventListener("resize",x)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",g,!0),window.removeEventListener("scroll",m,!0),window.removeEventListener("resize",m),window.removeEventListener("resize",x)}),(B,M)=>(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},[t.title||b.value.length||p.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"map-info__header",style:e.normalizeStyle([t.content?"":"padding-bottom: 20px"])},[t.title?(e.openBlock(),e.createElementBlock("h2",S0,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",A0,[b.value.length?(e.openBlock(),e.createElementBlock("div",L0,[e.createElementVNode("button",{ref_key:"menuButton",ref:r,type:"button",class:"map-info__menu-button",onClick:u,"aria-label":"Показати посилання"},[...M[1]||(M[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"},[l.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuPopover",ref:a,class:"vsTailwind vs-popover__content right map-info__popover",style:e.normalizeStyle(c.value),onClick:M[0]||(M[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.value,j=>(e.openBlock(),e.createElementBlock("button",{key:j.slug||j.name,type:"button",class:"map-info__popover-link",onClick:E=>h(j.slug)},e.toDisplayString(j.name),9,F0))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),p.value.length?(e.openBlock(),e.createBlock(fn,{key:1,items:p.value},null,8,["items"])):e.createCommentVNode("",!0),y.value&&(t.content||p.value.length)?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"map-info__toggle-button",onClick:d,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"map-info__toggle-icon--rotated":f.value})},[...M[2]||(M[2]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0)])],4)):e.createCommentVNode("",!0),t.content?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["map-info__content",{"map-info__content--collapsed":y.value&&!f.value}]),innerHTML:t.content},null,10,T0)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-b7a90727"]]),M0={class:"opacity-popover__content"},D0={class:"opacity-popover__value"},tl=Q(e.defineComponent({__name:"LayerOpacityPopover",props:{layerId:{}},setup(t){const n=t,o=e.ref(!1),l=e.ref(100),r=e.ref(null),a=e.ref(null),i=e.reactive({top:0,left:0});function s(){var j;const c=(j=a.value)==null?void 0:j.querySelector("button");if(!c||!r.value)return;const p=c.getBoundingClientRect(),u=260,m=r.value.offsetHeight||60,g=8,h=12,d=window.innerWidth,x=window.innerHeight;let B=p.bottom+g+window.scrollY,M=p.left+window.scrollX;M+u>d-h&&(M=d-u-h+window.scrollX),M<h+window.scrollX&&(M=h+window.scrollX),B+m>x+window.scrollY-h&&(B=p.top-m-g+window.scrollY,B<h+window.scrollY&&(B=x-m-h+window.scrollY)),i.top=B,i.left=M}function f(){o.value=!o.value,o.value&&e.nextTick(s)}function y(){var m;const c=se(n.layerId),p=(l.value??100)/100;if(c!=null&&c.setOpacity){c.setOpacity(p);return}const u=(m=c==null?void 0:c.getLayer)==null?void 0:m.call(c);if(u)switch(u.type){case"raster":c.updatePaint({"raster-opacity":p});break;case"fill":c.updatePaint({"fill-opacity":p});break;case"line":c.updatePaint({"line-opacity":p});break;case"circle":c.updatePaint({"circle-opacity":p});break;case"symbol":c.updatePaint({"icon-opacity":p});break}}function b(c){var u,m;if(!o.value)return;const p=c.target;(u=r.value)!=null&&u.contains(p)||(m=a.value)!=null&&m.contains(p)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",b),window.addEventListener("scroll",s,!0),window.addEventListener("resize",s)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",b),window.removeEventListener("scroll",s,!0),window.removeEventListener("resize",s)}),(c,p)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:a},[e.renderSlot(c.$slots,"trigger",{toggle:f,opacity:l.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(f,["stop"])},e.toDisplayString(l.value)+"% ",1)],!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popoverEl",ref:r,class:"opacity-popover",style:e.normalizeStyle({top:i.top+"px",left:i.left+"px"})},[e.createElementVNode("div",M0,[p[1]||(p[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":p[0]||(p[0]=u=>l.value=u),class:"opacity-popover__range",onInput:y},null,544),[[e.vModelText,l.value]]),e.createElementVNode("span",D0,e.toDisplayString(l.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-b278347a"]]),I0={class:"layers-panel"},j0={class:"layers-panel__header"},z0={class:"layers-panel__heading"},O0={class:"layers-panel__title"},P0={key:0,class:"layers-panel__description"},R0={class:"layers-panel__header-actions"},U0={class:"layers-panel__label"},q0={class:"layers-panel__label-row"},H0=["checked","onChange"],W0={class:"layers-panel__title-block"},Y0=["aria-label"],Z0={class:"layers-panel__name"},K0={class:"layers-panel__meta text-slate-500"},G0=["onClick"],X0={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},J0={key:0,class:"layers-panel__actions"},Q0=["innerHTML","onClick"],nl="map:temporary-layer-request",eg=e.defineComponent({directives:{tooltip:le.TooltipDirective},__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,l=e.ref({}),r=e.ref(!1),a=e.ref(!1),i=ve(),{temporaryLayers:s,activateTemporaryLayer:f,deactivateTemporaryLayer:y,clearTemporaryLayers:b}=Xo(i.map),c=e.computed(()=>{const D=o.layers.map(k=>({...k,isTemporary:!1,owner:null,visible:k.visible!==!1})),S=s.value.map(k=>({id:k.id,name:k.title,visible:l.value[k.id]??!0,actions:[],filters:null,isTemporary:!0,owner:k.owner??null,handle:k.handle??null,card:k.card??null,popup:k.popup??null,style:k.style??null,group_name:null,count:null,holder:null}));return[...D,...S]}),p=e.computed(()=>s.value.length>0),u=n;function m(){var D;for(let S=0;S<o.layers.length;S++){const k=o.layers[S],v=g(k);if(!v)continue;const T=se(k.id,v),C=k.visible!==!1;l.value[k.id]=C,C||(D=T==null?void 0:T.setVisible)==null||D.call(T,!1)}}function g(D){const S=D.id;if(!S)return null;const k=(D.service||D.service_type||D.type||"").toString().toLowerCase(),v=D.service_url||D.url||null;if(!!v&&(k==="tms"||k==="wmts"||k==="wms"||k==="ogc")){const N=h(v);return N?{sourceId:S,source:{type:"raster",tiles:[N],tileSize:D.tileSize||256,minzoom:D.minzoom??0,maxzoom:D.maxzoom??22,scheme:D.scheme||"xyz"},layer:{id:S,type:"raster",source:S},card:D.card,popup:D.popup}:null}const C=`${location.origin}/api/vtile/${S}/ua/{z}/{x}/{y}.vmt`;return{sourceId:S,source:{type:"vector",tiles:[C],minZoom:4,maxZoom:14},layer:{id:S,source:S,"source-layer":S,style:D.style},card:D.card,popup:D.popup}}function h(D){return D?/^https?:\/\//i.test(D)?D:D.startsWith("//")?`${window.location.protocol}${D}`:D.startsWith("/")?`${location.origin}${D}`:`${location.origin}/${D}`:null}function d(D){const S=l.value[D];return S??!0}function x(D){var v,T;if(!(D!=null&&D.id))return null;const S=(v=D.title)==null?void 0:v.trim(),k=(T=D.url)==null?void 0:T.trim();return!S||!k?null:{id:D.id,title:S,url:k,tileSize:D.tileSize,minzoom:D.minzoom,maxzoom:D.maxzoom,opacity:D.opacity}}function B(D){if(!D)return;const S=D.owner;if(D.action==="clear"){const v=s.value.filter(T=>!S||T.owner===S).map(T=>T.id);b(S),v.forEach(T=>{T in l.value&&delete l.value[T]});return}const k=x(D.spec);if(k){if(D.action==="activate"){f(k,D.context||{},S),l.value[k.id]=!0;return}D.action==="deactivate"&&(y(k.id,S),delete l.value[k.id])}}function M(D){D instanceof CustomEvent&&B(D.detail)}e.watch(()=>s.value.map(D=>D.id),(D,S)=>{const k=new Set(S||[]),v=new Set(D);D.forEach(T=>{T in l.value||(l.value[T]=!0)}),k.forEach(T=>{v.has(T)||delete l.value[T]})},{immediate:!0});function j(D,S){var C,N,w;const v=S.target.checked;if(l.value[D.id]=v,D.isTemporary){if(!v){y(D.id,D.owner||void 0),delete l.value[D.id];return}const F=D.handle||((C=s.value.find(P=>P.id===D.id))==null?void 0:C.handle);(N=F==null?void 0:F.setVisible)==null||N.call(F,!0);return}const T=se(D.id);(w=T==null?void 0:T.setVisible)==null||w.call(T,v)}function E(D){return D.isTemporary?[{label:"Назва",value:D.name??null},{label:"Тип",value:"Тимчасовий шар"},D.owner?{label:"Джерело",value:D.owner}:null].filter(Boolean):[{label:"Назва",value:D.name??null},{label:"Назва групи",value:D.group_name||null},{label:"Кількість",value:D.count??null},{label:"Балансоутримувач",value:D.holder??null}]}function V(D){var S,k,v;return((S=D==null?void 0:D.style)==null?void 0:S.color)||((k=D==null?void 0:D.style)==null?void 0:k.stroke)||((v=D==null?void 0:D.style)==null?void 0:v.fill)||null}function $(D){var S,k;return((k=(S=D==null?void 0:D.legend)==null?void 0:S[0])==null?void 0:k.name)||null}function A(D){return $(D)||null}function I(){if(!s.value.length)return;const D=s.value.map(S=>S.id);b(),D.forEach(S=>delete l.value[S])}function q(){r.value=!r.value}function U(){a.value=window.innerWidth<=768}return e.onMounted(()=>{m(),window.addEventListener(nl,M),U(),window.addEventListener("resize",U)}),e.onBeforeUnmount(()=>{window.removeEventListener(nl,M),window.removeEventListener("resize",U)}),(D,S)=>{var v,T;const k=e.resolveDirective("tooltip");return e.openBlock(),e.createElementBlock("div",I0,[e.createElementVNode("div",j0,[e.createElementVNode("div",z0,[e.createElementVNode("h2",O0,e.toDisplayString(((v=t.config)==null?void 0:v.title)||"Шари"),1),(T=t.config)!=null&&T.description?(e.openBlock(),e.createElementBlock("div",P0,[e.createElementVNode("p",null,e.toDisplayString(t.config.description),1)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",R0,[a.value&&c.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__toggle-button",onClick:q,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"layers-panel__toggle-icon--rotated":r.value})},[...S[0]||(S[0]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0),p.value?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"layers-panel__clear",onClick:I}," Очистити тимчасові шари ")):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:e.normalizeClass(["layers-panel__content",{"layers-panel__content--collapsed":a.value&&!r.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,C=>{var N;return e.openBlock(),e.createElementBlock("div",{key:C.id,class:"layers-panel__item"},[e.createElementVNode("label",U0,[e.createElementVNode("div",q0,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:d(C.id),onChange:w=>j(C,w)},null,40,H0),e.createElementVNode("div",W0,[d(C.id)&&V(C)&&A(C)?e.withDirectives((e.openBlock(),e.createElementBlock("span",{key:0,class:"layers-panel__legend-dot layers-panel__legend-dot--inline",style:e.normalizeStyle({background:V(C)}),"aria-label":A(C),role:"img"},null,12,Y0)),[[k,A(C)]]):d(C.id)&&V(C)?(e.openBlock(),e.createElementBlock("span",{key:1,class:"layers-panel__legend-dot layers-panel__legend-dot--inline",style:e.normalizeStyle({background:V(C)}),role:"img"},null,4)):e.createCommentVNode("",!0),e.createElementVNode("span",Z0,e.toDisplayString(C.name),1)]),e.createElementVNode("div",K0,[d(C.id)&&!C.isTemporary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(tl,{"layer-id":C.id,class:"flex"},{trigger:e.withCtx(({toggle:w})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(w,["prevent","stop"])},[e.createElementVNode("div",X0,[e.createVNode(e.unref(Cl))])],8,G0)]),_:1},8,["layer-id"]),e.createVNode(Mt,{count:Array.isArray(C.filters)?C.filters.length:0,layer:C},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(fn,{items:E(C)},null,8,["items"])])])]),(N=C.actions)!=null&&N.length?(e.openBlock(),e.createElementBlock("div",J0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.actions,w=>(e.openBlock(),e.createElementBlock("button",{key:w.widget||w.id||w.icon,type:"button",class:"layers-panel__action",innerHTML:w.icon,onClick:F=>u("action",{layerId:w.widget})},null,8,Q0))),128))])):e.createCommentVNode("",!0)])}),128))],2)])}}}),ol=Q(eg,[["__scopeId","data-v-2724c3c9"]]),tg={class:"catalog-tab__search relative mt-[10px]"},ng={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%)"}},og={class:"catalog-tab__list flex-1 overflow-y-auto mt-2"},lg={key:0,class:"text-sm text-gray-400 text-center mt-6"},rg=["onClick"],ag={class:"flex items-center gap-x-3"},ig={class:"max-w-[260px] text-[14px] text-[#4b5563]"},sg={class:"text-xs opacity-60 text-[#4b5563]"},cg={class:"flex items-center cursor-pointer gap-2 flex-1"},dg=["checked","onChange"],ug={class:"text-[13px] text-gray-600 max-w-[260px]"},pg={class:"flex items-center gap-2"},mg=Q(e.defineComponent({__name:"LayersCatalogTab",props:{catalog:{},selected:{},search:{}},emits:["toggle-layer","update:search","open-filter"],setup(t,{emit:n}){const o=t,l=n,r=e.reactive({}),a=e.ref(null),i=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0,layerId:null}),s=e.computed(()=>{const g=o.search.trim().toLowerCase();return o.catalog.groups.map(h=>{const d=g?h.layers.filter(x=>(typeof x.name=="string"?x.name:"").toLowerCase().includes(g)):h.layers;return{...h,layers:d}}).filter(h=>h.layers.length>0)}),f=e.computed({get:()=>o.search,set:g=>l("update:search",g)});function y(g){r[g]=!r[g],op()}function b(g){return!!r[g]}function c(g,h){if(o.selected.includes(h)){i.visible=!1,i.layerId=null;return}const d=g.currentTarget;if(!d)return;const x=d.getBoundingClientRect(),B=typeof window<"u"?window.scrollX:0,M=typeof window<"u"?window.scrollY:0;i.left=x.left+x.width/2+B,i.top=x.bottom+8+M,i.layerId=h,i.visible=!0}function p(){i.visible=!1,i.layerId=null}function u(g){return[{label:"Назва",value:m(g.name)},{label:"Сервіс",value:m(g.service)},{label:"Посилання",value:m(g.url),breakLine:!0}]}function m(g){return g==null||g===""?null:String(g)}return e.watch(()=>o.selected?o.selected.slice():[],g=>{!i.visible||!i.layerId||g.includes(i.layerId)&&(i.visible=!1,i.layerId=null)}),(g,h)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"catalogRef",ref:a,class:"catalog-tab"},[e.createElementVNode("div",tg,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[0]||(h[0]=d=>f.value=d),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,f.value]]),(e.openBlock(),e.createElementBlock("svg",ng,[...h[1]||(h[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.createElementVNode("div",og,[s.value.length===0?(e.openBlock(),e.createElementBlock("div",lg," Нічого не знайдено ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,d=>(e.openBlock(),e.createElementBlock("div",{key:d.id,class:"mt-2"},[e.createElementVNode("div",{class:"hover:bg-gray-100 cursor-pointer p-[8px] rounded-lg flex justify-between items-center",onClick:x=>y(d.id)},[e.createElementVNode("div",ag,[(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",b(d.id)?"rotate-90":""])},[...h[2]||(h[2]=[e.createElementVNode("path",{d:"M1 9L5 5L1 1",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2)),e.createElementVNode("div",ig,e.toDisplayString(d.name),1)]),e.createElementVNode("div",sg,e.toDisplayString(d.layers.length),1)],8,rg),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(d.layers,x=>(e.openBlock(),e.createElementBlock("div",{key:x.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",cg,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:t.selected.includes(x.id),onChange:B=>g.$emit("toggle-layer",x.id,B.target.checked,x)},null,40,dg),h[3]||(h[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",ug,e.toDisplayString(x.name),1)]),e.createElementVNode("div",pg,[Array.isArray(x.filters)&&x.filters.length?(e.openBlock(),e.createBlock(Mt,{key:0,count:x.filters.length,layer:x,disabled:!t.selected.includes(x.id),onMouseenter:B=>c(B,x.id),onMouseleave:p,onFocus:B=>c(B,x.id),onBlur:p},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(fn,{items:u(x)},null,8,["items"])])]))),128))],512),[[e.vShow,b(d.id)]])]),_:2},1024)]))),128))]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[i.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${i.top}px`,left:`${i.left}px`})},e.toDisplayString(i.text),5)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-f68d8bda"]]),fg={class:"flex flex-col gap-0"},gg={class:"text-xs text-slate-600 font-semibold"},yg=e.defineComponent({__name:"MapLayerPopover",props:{items:{}},setup(t,{expose:n}){const o=t,l=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),r=e.ref(null),a=e.ref(null);let i=null;const s=e.computed(()=>{if(!l.open)return{display:"none"};const g=Math.min(460,window.innerWidth-24);return{position:"absolute",width:`${g}px`,maxWidth:`${g}px`,top:`${l.top}px`,left:`${l.left}px`,transform:l.transform,display:"block"}});function f(){if(l.open){p();return}if(!r.value){p();return}l.open=!0,e.nextTick(()=>{y(),u(),requestAnimationFrame(()=>{y()})})}function y(){if(!l.open||!r.value||!a.value)return;const g=r.value.getBoundingClientRect(),h=12,d=window.scrollX+h,x=window.scrollX+window.innerWidth-h,B=window.scrollY+h,M=window.scrollY+window.innerHeight-h,j=a.value.offsetWidth||Math.min(460,window.innerWidth-24),E=a.value.offsetHeight||0;let V=g.left+window.scrollX+(g.width-j)/2;V<d&&(V=d),V+j>x&&(V=Math.max(d,x-j)),l.left=V;let $=g.bottom+window.scrollY+h;$+E>M&&($=g.top+window.scrollY-E-h,$<B&&($=Math.max(B,M-E))),$<B&&($=B),$+E>M&&($=Math.max(B,M-E)),l.top=$,l.transform="none"}function b(g){var d,x;if(!l.open)return;const h=g.target;(d=r.value)!=null&&d.contains(h)||(x=a.value)!=null&&x.contains(h)||p()}function c(g){g.key==="Escape"&&p()}function p(){m(),l.open=!1,r.value=null,a.value=null}function u(){m(),a.value&&(i=new ResizeObserver(()=>{y()}),i.observe(a.value))}function m(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",b,!0),document.addEventListener("keydown",c),window.addEventListener("scroll",y,!0),window.addEventListener("resize",y)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",b,!0),document.removeEventListener("keydown",c),window.removeEventListener("scroll",y,!0),window.removeEventListener("resize",y),m()}),e.watch(()=>o.items,()=>{l.open&&e.nextTick(()=>y())},{deep:!0}),n({close:p}),(g,h)=>(e.openBlock(),e.createElementBlock("div",{class:"inline-flex relative",ref_key:"anchorEl",ref:r},[e.createElementVNode("div",{onClick:e.withModifiers(f,["prevent","stop"])},[e.renderSlot(g.$slots,"default")]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[l.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-[103] py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom absolute min-w-[200px]",style:e.normalizeStyle(s.value),ref_key:"popoverEl",ref:a,onClick:h[0]||(h[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",fg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,d=>(e.openBlock(),e.createElementBlock("div",{key:d.label,class:"grid grid-cols-[120px_1fr] gap-3 items-start py-1.5 border-b border-slate-200 last:border-b-0"},[e.createElementVNode("div",gg,e.toDisplayString(d.label),1),e.createElementVNode("div",{class:e.normalizeClass(["text-sm text-gray-800",{"break-all":d.breakLine}])},e.toDisplayString(d.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),hg={class:"selected-tab"},xg={class:"selected-tab__actions"},bg={key:0,class:"selected-tab__scroll"},kg=["onDragstart","onDragover","onDrop"],wg={class:"selected-tab__item-header"},_g={class:"selected-tab__item-info"},Eg=["checked","onChange"],Ng={class:"selected-tab__item-name"},Vg={class:"selected-tab__item-controls"},Bg=["onClick"],Cg={class:"selected-tab__menu-inner"},$g=Q(e.defineComponent({__name:"LayersSelectedTab",props:{catalog:{},selected:{}},emits:["select-layer","reorder","remove","toggle-layer"],setup(t,{emit:n}){const o=t,l=n,r=e.reactive({}),a=e.ref(null),i=e.ref(null),s=new Map,f=e.reactive({top:0,left:0}),y=e.ref(null),b=e.reactive({top:0,left:0}),c=e.ref(null),p=new Map,u=e.reactive({});function m(C){var N;for(const w of((N=o.catalog)==null?void 0:N.groups)??[]){const F=w.layers.find(P=>P.id===C);if(F)return F}return null}e.watch(()=>o.selected,C=>{C.forEach(N=>{r[N]==null&&(r[N]=100)})},{immediate:!0});function g(){if(!a.value)return;const C=s.get(a.value);if(!C)return;const N=C.getBoundingClientRect();f.top=N.bottom+8+window.scrollY,f.left=N.left+window.scrollX}e.watch(()=>o.selected,C=>{C.forEach(N=>{u[N]==null&&(u[N]=!0)})},{immediate:!0});function h(C,N){u[C]=N;const w=se(C);w&&w.setVisible(N)}function d(C,N){N?p.set(C,N):p.delete(C)}function x(C){y.value=y.value===C?null:C,y.value&&e.nextTick(()=>{B(C),requestAnimationFrame(()=>{B(C)})})}function B(C){const N=p.get(C);if(!N||!c.value)return;const w=N.getBoundingClientRect(),F=12,P=6,R=window.scrollX+F,G=window.scrollX+window.innerWidth-F,W=window.scrollY+F,Y=window.scrollY+window.innerHeight-F,re=c.value.offsetWidth||190,ae=c.value.offsetHeight||0;let ne=w.bottom+window.scrollY+P,ie=w.left+window.scrollX;ie+re>G&&(ie=w.right+window.scrollX-re,ie<R&&(ie=R)),ie<R&&(ie=R),ne+ae>Y&&(ne=w.top+window.scrollY-ae-P,ne<W&&(ne=Math.max(W,Y-ae))),ne<W&&(ne=W),ne+ae>Y&&(ne=Math.max(W,Y-ae)),b.top=ne,b.left=ie}function M(C){const N=se(C);N&&N.remove(),l("remove",C),y.value=null}function j(C){const N=C.target,w=a.value,F=y.value;if(w){const P=i.value,R=s.get(w);if(P&&P.contains(N)||R&&R.contains(N))return;a.value=null}if(F){const P=c.value,R=p.get(F);if(P&&P.contains(N)||R&&R.contains(N))return;y.value=null}}function E(){a.value&&g(),y.value&&B(y.value)}e.onMounted(()=>{document.addEventListener("click",j),window.addEventListener("resize",E),window.addEventListener("scroll",E,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",j),window.removeEventListener("resize",E),window.removeEventListener("scroll",E,!0)});const{map:V}=ve();function $(C){var P,R,G;if(!C)return;const N=se(C),w=m(C);if(!N&&!w)return;if(((P=w==null?void 0:w.extent)==null?void 0:P.length)===4&&((R=V.value)!=null&&R.fitBounds)){const W=w.extent.map(Y=>Number(Y));if(W.every(Y=>Number.isFinite(Y))){const[Y,re,ae,ne]=W;V.value.fitBounds([[Y,re],[ae,ne]],{padding:40}),y.value=null;return}}(G=N==null?void 0:N.getSource)!=null&&G.call(N)&&(y.value=null)}const A=e.ref(null),I=e.ref(null);function q(C,N){A.value=N,I.value=N,C.dataTransfer&&(C.dataTransfer.effectAllowed="move",C.dataTransfer.setData("text/plain",String(N)))}function U(C){I.value=C}function D(C,N){if(C.preventDefault(),A.value===null||A.value===N){A.value=null,I.value=null;return}const w=[...o.selected],[F]=w.splice(A.value,1);w.splice(N,0,F),l("reorder",w),A.value=null,I.value=null}function S(){A.value=null,I.value=null}function k(C){return C==null||C===""?null:String(C)}function v(C,N){return!Array.isArray(C)||C.length===0?null:`${C.length} ${N}`}function T(C){var ne,ie,ce,Ae,Le,je;const N=se(C),w=m(C);if(!N&&!w)return[];const F=(w==null?void 0:w.name)||((ie=(ne=N==null?void 0:N.opts)==null?void 0:ne.layer)==null?void 0:ie.name)||null,P=(w==null?void 0:w.service)||((ce=N==null?void 0:N.opts)==null?void 0:ce.service)||null,R=(Ae=N==null?void 0:N.getSource)==null?void 0:Ae.call(N),G=R&&"tiles"in R?(Le=R.tiles)==null?void 0:Le[0]:(w==null?void 0:w.url)||null,W=(w==null?void 0:w.source_path)||null,Y=(N==null?void 0:N.popup)||(w==null?void 0:w.popup),re=(N==null?void 0:N.card)||(w==null?void 0:w.card),ae=(w==null?void 0:w.filters)||((je=N==null?void 0:N.opts)==null?void 0:je.filters);return[{label:"Назва",value:k(F)},{label:"Сервіс",value:k(P)},{label:"Посилання",value:k(G),breakLine:!0},{label:"Джерело",value:k(W),breakLine:!0},{label:"Popup",value:v(Y,"полів")},{label:"Картка",value:v(re,"полів")},{label:"Фільтри",value:v(ae,"фільтрів")}]}return(C,N)=>(e.openBlock(),e.createElementBlock("div",hg,[e.createElementVNode("div",xg,[e.createElementVNode("button",{class:"selected-tab__add",onClick:N[0]||(N[0]=w=>l("select-layer"))},[...N[3]||(N[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",bg,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.selected,(w,F)=>{var P;return e.openBlock(),e.createElementBlock("div",{key:w,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":A.value===F,"selected-tab__item--over":I.value===F}]),draggable:"true",onDragstart:R=>q(R,F),onDragover:e.withModifiers(R=>U(F),["prevent"]),onDrop:R=>D(R,F),onDragend:S},[e.createElementVNode("div",wg,[e.createElementVNode("div",_g,[N[4]||(N[4]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox",checked:u[w]??!0,onChange:R=>h(w,R.target.checked)},null,40,Eg),e.createElementVNode("span",Ng,e.toDisplayString(((P=m(w))==null?void 0:P.name)||"Шар"),1)]),e.createElementVNode("div",Vg,[e.createVNode(tl,{"layer-id":w},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:R=>d(w,R),onClick:e.withModifiers(R=>x(w),["stop"])},[...N[5]||(N[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,Bg)])])],42,kg)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[y.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:c,class:"selected-tab__menu",style:e.normalizeStyle({top:b.top+"px",left:b.left+"px"})},[e.createElementVNode("div",Cg,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:N[1]||(N[1]=w=>$(y.value))},[...N[6]||(N[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)])]),e.createVNode(yg,{items:T(y.value)},{default:e.withCtx(()=>[...N[7]||(N[7]=[e.createElementVNode("button",{class:"selected-tab__menu-item"},[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)])]),_:1},8,["items"]),N[9]||(N[9]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:N[2]||(N[2]=w=>M(y.value))},[...N[8]||(N[8]=[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-39b6f281"]]),vg={class:"filter-tab"},Sg={key:0,class:"filter-tab__header"},Ag={class:"filter-tab__title"},Lg={key:1,class:"filter-tab__content rounded-md"},Fg={class:"filter-tab__scroll"},Tg={key:2,class:"filter-tab__empty"},Mg=Q(e.defineComponent({__name:"LayersFilterTab",props:{layer:{},value:{}},emits:["change"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/filter")),l=t,r=n,a=e.computed(()=>{var f;return((f=l.layer)==null?void 0:f.filters)??[]}),i=e.computed(()=>a.value.length>0);function s(f){r("change",f.data)}return(f,y)=>(e.openBlock(),e.createElementBlock("div",vg,[t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",Sg,[e.createElementVNode("div",null,[e.createElementVNode("p",Ag,e.toDisplayString(t.layer.name),1)])])):e.createCommentVNode("",!0),t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",Lg,[e.createElementVNode("div",Fg,[e.createVNode(e.unref(o),{view:"vertical",schema:a.value,value:t.value,limit:5,class:"rounded-md pb-0",onChange:y[0]||(y[0]=b=>s(b))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",Tg,[...y[1]||(y[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),Dg={class:"flex items-center justify-between mb-4"},Ig={class:"flex items-center gap-2"},jg={class:"text-lg font-semibold text-gray-800"},zg={key:0},Og={key:1,class:"block text-sm font-normal text-gray-500"},Pg={class:"flex items-center gap-2"},Rg={class:"flex mb-4 border-b border-gray-200"},Ug={class:"map-catalog-widget__body"},ll=Q(e.defineComponent({__name:"MapCatalogWidget",setup(t){const n=e.ref("catalog"),o=e.ref({groups:[]}),l=e.ref([]),r=e.ref(""),{map:a}=ve(),i=pe.useRoute(),s=pe.useRouter(),f=e.reactive({}),y=e.ref(null),b=e.ref(!1),c=e.ref(!1);function p(k){return o.value.groups.map(v=>v.layers.find(T=>T.id===k)).find(Boolean)||null}function u(){const k=y.value;if(!k)return;delete f[k];const v=se(k);v!=null&&v.setFilter&&v.setFilter("")}function m(k,v){const T=se(k);if(f[k]={...v},!(T!=null&&T.setFilter))return;const C=Object.entries(v).filter(([,N])=>N!=null&&N!=="").map(([N,w])=>`${N}=${w}`);T.setFilter(C.join("|"))}function g(k){const v=y.value;v&&m(v,k)}function h(k){const v=k.url;let T=null;if(v&&(T=v.startsWith("http")?v:`${window.location.origin}${v}`),!T)return null;const C=(k.service||"").toString().toLowerCase(),N=k.count??null;return C&&C!=="vtile"?{service:C,count:N,source:{type:"raster",tiles:[T],tileSize:256,minzoom:0,maxzoom:20}}:{service:C,count:N,source:{type:"vector",tiles:[T],minzoom:0,maxzoom:14},layer:{style:k.style},card:k.card,popup:k.popup}}function d(k,v,T){var F;const C=T??p(k);if(!C)return;const N=h(C);if(!N)return;const w=se(C.id,N,a);if(w)if(w.setVisible(v),v){if(!l.value.includes(k)&&(l.value.push(k),(F=a.value)!=null&&F.getLayer(k)))try{a.value.moveLayer(k)}catch(P){console.warn("Cannot move new layer",k,P)}}else l.value=l.value.filter(P=>P!==k),y.value===k&&(u(),y.value=null)}function x(){l.value.forEach(k=>{const v=se(k);v&&v.setVisible(!1)}),l.value=[]}function B(k){l.value=[...k],e.nextTick(()=>{var N;if(!a.value)return;const v=((N=a.value.getStyle())==null?void 0:N.layers)??[];let T;const C=w=>v.filter(F=>{var P,R;return(F==null?void 0:F.source)===w||(F==null?void 0:F.id)===w||((R=(P=F==null?void 0:F.id)==null?void 0:P.startsWith)==null?void 0:R.call(P,`${w}`))}).map(F=>F.id);for(let w=k.length-1;w>=0;w-=1){const F=k[w],P=C(F);P.length&&(P.forEach(R=>{var G;if((G=a.value)!=null&&G.getLayer(R))try{a.value.moveLayer(R,T)}catch(W){console.warn("Cannot move layer",R,W)}}),T=P[0])}})}function M(k){!k||!Array.isArray(k.filters)||k.filters.length===0||l.value.includes(k.id)&&(y.value=k.id,f[k.id]||(f[k.id]={}),n.value="filter")}function j(){n.value="catalog"}const E=e.computed(()=>y.value?p(y.value):null),V=e.computed(()=>{const k=y.value;return k?f[k]??{}:{}}),$=e.computed(()=>o.value.groups.reduce((k,v)=>k+v.layers.length,0)),A=e.computed(()=>n.value==="selected"?"Вибрані шари":n.value==="filter"?"Фільтр шарів":"Каталог"),I=e.computed(()=>n.value==="selected"?l.value.length:n.value==="catalog"?$.value:null),q=e.computed(()=>{var k;return n.value==="filter"?((k=E.value)==null?void 0:k.name)??"":""});async function U(){const v=await(await fetch("/api/gis-layer-list")).json(),T=new Map;v.forEach(w=>{const F=w.group_id??"other";T.has(F)||T.set(F,{id:F,name:w.group_name||"Інші шари",layers:[]}),T.get(F).layers.push(w)}),o.value={groups:Array.from(T.values())};const C=i.query.layers;if(!C)return;const N=Array.isArray(C)?C[0]:C;typeof N=="string"&&N.split(",").forEach(w=>{const F=w.trim();if(!F)return;const P=p(F);P&&d(F,!0,P)})}e.watch(y,k=>{!k&&n.value==="filter"&&(n.value="catalog")}),e.watch(E,k=>{!k&&y.value&&(y.value=null)}),e.watch(l,k=>{const v={...i.query};k.length?v.layers=k.join(","):delete v.layers,s.replace({query:v}).catch(()=>{})},{deep:!0});function D(){b.value=!b.value}function S(){c.value=window.innerWidth<=768}return e.onMounted(()=>{U(),S(),window.addEventListener("resize",S)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",S)}),(k,v)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["map-catalog-widget w-full max-w-md mx-auto p-4 bg-white border border-gray-200 rounded-lg shadow-sm widget",I.value>1?"min-h-[250px]":"min-h-[0px]"])},[e.createElementVNode("div",Dg,[e.createElementVNode("div",Ig,[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",jg,[e.createTextVNode(e.toDisplayString(A.value)+" ",1),I.value!==null?(e.openBlock(),e.createElementBlock("span",zg,"("+e.toDisplayString(I.value)+")",1)):e.createCommentVNode("",!0),q.value?(e.openBlock(),e.createElementBlock("span",Og,e.toDisplayString(q.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Pg,[e.createElementVNode("button",{onClick:x,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-6372b747><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-6372b747></path><path d="M21 3v5h-5" data-v-6372b747></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-6372b747></path><path d="M8 16H3v5" data-v-6372b747></path></svg>',1)])]),c.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"map-catalog-widget__toggle-button",onClick:D,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"map-catalog-widget__toggle-icon--rotated":b.value})},[...v[7]||(v[7]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:e.normalizeClass(["map-catalog-widget__content",{"map-catalog-widget__content--collapsed":c.value&&!b.value}])},[e.createElementVNode("div",Rg,[e.createElementVNode("button",{onClick:v[0]||(v[0]=T=>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]=T=>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",Ug,[n.value==="catalog"?(e.openBlock(),e.createBlock(mg,{key:0,class:"map-catalog-widget__scroll",catalog:o.value,selected:l.value,search:r.value,"onUpdate:search":v[2]||(v[2]=T=>r.value=T),onToggleLayer:d,onOpenFilter:M},null,8,["catalog","selected","search"])):n.value==="selected"?(e.openBlock(),e.createBlock($g,{key:1,catalog:o.value,selected:l.value,onToggleLayer:d,onSelectLayer:v[3]||(v[3]=T=>n.value="catalog"),onReorder:B,onRemove:v[4]||(v[4]=T=>l.value=l.value.filter(C=>C!==T))},null,8,["catalog","selected"])):(e.openBlock(),e.createBlock(Mg,{key:2,layer:E.value,value:V.value,onChange:g,onClose:j},null,8,["layer","value"]))])],2)],2))}}),[["__scopeId","data-v-6372b747"]]),qg={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},Hg={class:"flex items-start justify-between gap-3 p-5 pb-3"},Wg={class:"inline-block text-xl font-semibold text-gray-800"},Yg={key:0,class:"mt-1 text-sm text-gray-500"},Zg={class:"flex items-center gap-[6px]"},Kg={class:"px-5 pb-5 space-y-6"},Gg={key:0,class:"space-y-2"},Xg={class:"flex flex-wrap gap-4"},Jg=["value"],Qg={key:1,class:"text-sm text-gray-500"},ey={key:2,class:"text-sm text-gray-500"},ty={class:"text-4xl font-medium text-gray-800"},ny={class:"space-y-[14px]"},oy={class:"flex items-center gap-[10px] text-gray-600"},ly={class:"font-medium text-gray-700"},ry={class:"flex items-center justify-end text-end gap-3"},ay={class:"font-medium text-gray-800"},iy={class:"min-w-[40px] font-medium text-[#3C3C4399]"},rl=Q(e.defineComponent({__name:"MapAttributeWidget",props:{config:{}},setup(t){const n=["#3a7a57","#d970d5","#8e997b","#b4c039","#a855f7","#71823a","#f79d92","#8b5cf6","#a6514e","#6b7280"],o=t,l=e.ref(!0),r=e.ref(!1),a=e.ref([]),i=e.ref(null),s=e.ref(null),f=e.ref(null),y=e.ref(null),b=e.ref(null),c=e.ref({}),p=e.ref(null);function u(v){return v&&JSON.parse(JSON.stringify(v))}const m=e.computed(()=>{const v=o.config.layer;if(typeof v!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const T=v.trim();if(!T)throw new Error("MapAttributeWidget: `layer` must be non-empty");return T}),g=e.computed(()=>{const{list:v,attribute:T}=o.config;if(Array.isArray(v)&&v.length)return v.map(C=>({id:(C==null?void 0:C.id)!=null?String(C.id).trim():"",text:(C==null?void 0:C.text)!=null&&String(C.text).trim()||null})).filter(C=>C.id.length);if(Array.isArray(T))return T.map(C=>C!=null?String(C).trim():"").filter(C=>C.length).map(C=>({id:C,text:null}));if(typeof T=="string"){const C=T.trim();if(!C)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:C,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),h=e.computed(()=>g.value.map(v=>({id:v.id,label:v.text||c.value[v.id]||v.id})));e.watch(g,v=>{if(!v.length){p.value=null,a.value=[];return}(!p.value||!v.some(T=>T.id===p.value))&&(p.value=v[0].id)},{immediate:!0});const d=e.computed(()=>{var v;return p.value||((v=g.value[0])==null?void 0:v.id)||null});e.watch(m,()=>{var v,T;(T=(v=s.value)==null?void 0:v.remove)==null||T.call(v),s.value=null,f.value=null,y.value=null,b.value=null,c.value={}});const x=e.computed(()=>{var v;return(v=y.value)!=null&&v.length?{id:m.value,name:f.value,filters:y.value}:null}),B=e.computed(()=>{var v,T;return((T=(v=x.value)==null?void 0:v.filters)==null?void 0:T.length)||0});async function M(v){var N;const T=await fetch(`/api/gis-service/${encodeURIComponent(v)}`);if(!T.ok){let w="Не вдалося завантажити налаштування шару";try{const F=await T.json();w=((N=F==null?void 0:F.message)==null?void 0:N.error)||(F==null?void 0:F.message)||w}catch{}throw new Error(w)}const C=await T.json();return f.value=(C==null?void 0:C.name)||null,y.value=Array.isArray(C==null?void 0:C.filters)?C.filters:null,b.value=u((C==null?void 0:C.style)||{}),c.value=((C==null?void 0:C.attributes)||[]).reduce((w,F)=>{const P=typeof(F==null?void 0:F.name)=="string"?F.name.trim():"",R=typeof(F==null?void 0:F.ua)=="string"?F.ua.trim():"";return P&&(w[P]=R||P),w},{}),C}function j(v,T){let C=se(v);if(!C){const N=`${location.origin}/api/vtile/${v}/ua/{z}/{x}/{y}.vmt`;C=se(v,{source:{type:"vector",tiles:[N],minzoom:0,maxzoom:14},layer:{id:v,source:v,"source-layer":v,style:(T==null?void 0:T.style)||{}},card:T==null?void 0:T.card,popup:T==null?void 0:T.popup})}return s.value=C,C}async function E(v,T){var w;const C=`/api/gis-service/${encodeURIComponent(v)}/${encodeURIComponent(T)}`,N=await fetch(C);if(!N.ok){let F="Не вдалося отримати статистику";try{const P=await N.json();F=((w=P==null?void 0:P.message)==null?void 0:w.error)||(P==null?void 0:P.message)||F}catch{}throw new Error(F)}return N.json()}function V(v){const T=new Map;return v&&(v.rules||[]).forEach(N=>{const w=(N==null?void 0:N.value)??(N==null?void 0:N.id);w!=null&&T.set(String(w),N)}),T}function $(v,T,C,N,w){if(typeof(T==null?void 0:T.color)=="string"&&T.color.trim())return T.color.trim();const F=o.config.colors||{};if(F[v])return F[v];const R=V(C==null?void 0:C.style).get(v);return typeof(R==null?void 0:R.color)=="string"&&R.color.trim()?R.color.trim():n[w%n.length]}function A(v,T,C,N){var w;return(T==null?void 0:T.text)||(T==null?void 0:T.label)||(T==null?void 0:T.name)||(T==null?void 0:T[`${N}_text`])||((w=V(C==null?void 0:C.style).get(v))==null?void 0:w.label)||v}function I(v,T,C,N){if(!v)return;const w=u((T==null?void 0:T.style)||b.value)||{},F=N.trim();if(!F)return;const P={...w.colors||{},...o.config.colors||{}};F===N&&C.forEach(R=>{R.color.trim()&&(P[R.id]=R.color)}),v.setStyle({...w,type:w.type||"polygon",colorAttr:F,opacity:.8,colors:P})}async function q(){var F,P;a.value=[],i.value=null;const v=m.value,T=d.value;if(!T)return;r.value=!0;const C=await M(v);j(v,C);const N=await E(v,T),w=Array.isArray(N==null?void 0:N.rows)?N.rows.map((R,G)=>{const W=(R==null?void 0:R.id)??(R==null?void 0:R.value),Y=W!=null?String(W):"";if(!Y)return null;const re=A(Y,R,C,T),ae=Number((R==null?void 0:R.count)??0)||0,ne=$(Y,R,C,T,G);return{id:Y,label:re,count:ae,color:ne}}).filter(Boolean):[];a.value=w,i.value=((F=N==null?void 0:N.field)==null?void 0:F.label)||((P=N==null?void 0:N.field)==null?void 0:P.name)||null,I(s.value,C,w,T),r.value=!1}e.watch(()=>[m.value,d.value],()=>{q()},{immediate:!0});const U=e.computed(()=>"Набори даних"),D=e.computed(()=>a.value.reduce((v,T)=>v+T.count,0)),S=e.computed(()=>{var C;const v=d.value;return((C=h.value.find(N=>N.id===v))==null?void 0:C.label)||null||i.value||v||null});function k(v){return D.value?`${(v/D.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var v,T;(T=(v=s.value)==null?void 0:v.remove)==null||T.call(v)}),(v,T)=>l.value?(e.openBlock(),e.createElementBlock("div",qg,[e.createElementVNode("div",Hg,[e.createElementVNode("div",null,[e.createElementVNode("h2",Wg,e.toDisplayString(U.value),1),S.value&&h.value.length===1?(e.openBlock(),e.createElementBlock("p",Yg,e.toDisplayString(S.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Zg,[x.value?(e.openBlock(),e.createBlock(Mt,{key:0,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",count:B.value,layer:x.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:T[1]||(T[1]=C=>l.value=!1)},[...T[3]||(T[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",Kg,[h.value.length>1?(e.openBlock(),e.createElementBlock("div",Gg,[e.createElementVNode("div",Xg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,C=>(e.openBlock(),e.createElementBlock("label",{key:C.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:C.id,"onUpdate:modelValue":T[2]||(T[2]=N=>p.value=N)},null,8,Jg),[[e.vModelRadio,p.value]]),e.createElementVNode("span",null,e.toDisplayString(C.label),1)]))),128))])])):e.createCommentVNode("",!0),r.value?(e.openBlock(),e.createElementBlock("div",Qg,"Завантаження…")):a.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",ty,e.toDisplayString(D.value),1),e.createElementVNode("ul",ny,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,C=>(e.openBlock(),e.createElementBlock("li",{key:C.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",oy,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:C.color})},null,4),e.createElementVNode("span",ly,e.toDisplayString(C.label),1)]),e.createElementVNode("div",ry,[e.createElementVNode("span",ay,e.toDisplayString(C.count),1),e.createElementVNode("span",iy,e.toDisplayString(k(C.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",ey,"Дані відсутні"))])])):(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:T[0]||(T[0]=C=>l.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-9686ce7b"]]),sy={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]"},cy=["title"],dy={key:0,class:"vs-select__options absolute z-50 mt-1 w-auto min-w-full bg-white border border-gray-300 shadow-lg rounded-lg text-sm text-gray-900"},uy=["onClick"],py=["placeholder"],my={class:"divide-y divide-gray-100"},fy=["onClick"],gy=600,yy=30,hy=8,xy="https://data.softpro.ua/api-user/gis-url-proxy",by="https://geo.rv.ua/api-user/dzk.api",ky="https://nominatim.openstreetmap.org/search",al=Q(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n=t,o=ve(),l=e.getCurrentInstance();function r(){return typeof globalThis<"u"&&globalThis.proxy?globalThis.proxy:typeof window<"u"&&window.proxy?window.proxy:null}function a(){var P,R,G;const N=(P=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:P.$settings,w=(R=N==null?void 0:N.map)==null?void 0:R.searchViewbox;if(w)return w;const F=r();return(G=F==null?void 0:F.map)==null?void 0:G.searchViewbox}const s=!!a()?["xy","parcel","address"]:["xy","parcel"],f=e.computed(()=>{var w,F;const N=(F=(w=n.config)==null?void 0:w.tools)==null?void 0:F.filter(P=>s.includes(P));return N&&N.length?N:s}),y=e.computed(()=>{var N,w;return((w=(N=n.config)==null?void 0:N.placeholder)==null?void 0:w.trim())||"Пошук…"}),b=e.ref(f.value[0]);e.watch(f,N=>{N.includes(b.value)||(b.value=N[0])});const c=e.ref(""),p=e.ref(!1),u=e.ref(null),m=e.ref(null),g=e.ref([]),h=e.ref(null),d=e.computed(()=>b.value==="address"&&g.value.length>0);let x=null;const B=e.reactive({position:"absolute",left:"0px",top:"0px",width:"100%",display:"none"});function M(){if(!m.value)return;const N=m.value.getBoundingClientRect(),w=N.width+yy,F=N.left+window.scrollX,P=N.bottom+window.scrollY+hy;B.left=`${F}px`,B.top=`${P}px`,B.width=`${w}px`,B.display="block"}const j=()=>{d.value&&M()};function E(){x&&(clearTimeout(x),x=null)}e.watch(b,()=>{c.value="",p.value=!1,g.value=[],E()}),e.watch(d,N=>{N?e.nextTick(()=>{M()}):B.display="none"}),e.watch(c,N=>{if(b.value!=="address"){g.value=[],E();return}if(!N.trim()){g.value=[],E();return}E(),x=window.setTimeout(()=>{S(N).catch(w=>{const F=(w==null?void 0:w.message)||"Помилка пошуку адреси";le.notify({type:"error",title:"Пошук адреси",message:F})})},gy)});function V(N){b.value=N}function $(N){const w=N.target;if(p.value){const F=u.value;F&&!F.contains(w)&&(p.value=!1)}if(d.value){const F=h.value;F&&!F.contains(w)&&(g.value=[])}}e.onMounted(()=>{window.addEventListener("click",$,!0),window.addEventListener("scroll",j,!0),window.addEventListener("resize",j)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",$,!0),window.removeEventListener("scroll",j,!0),window.removeEventListener("resize",j),E()});function A(N){return N==="xy"?"Координати":N==="parcel"?"Кадастр":"Адреси"}function I(N){const w=N.replace(/[,]+/g," ").trim();if(!w)return null;const F=w.split(/\s+/).filter(Boolean);if(F.length<2)return null;const P=F.slice(0,2).map(Number);if(!P.every(ne=>Number.isFinite(ne)))return null;let[R,G]=P,W=R,Y=G;const re=ne=>Math.abs(ne)<=90,ae=ne=>Math.abs(ne)<=180;if(!re(W)||!ae(Y))if(re(Y)&&ae(W))W=G,Y=R;else return null;return{lat:W,lng:Y}}function q(N){return((N==null?void 0:N.items)||[]).map((F,P)=>{var R,G,W;return{id:String((F==null?void 0:F.id)??P),title:(F==null?void 0:F.title)||((R=F==null?void 0:F.address)==null?void 0:R.label)||"Знайдений обʼєкт",lat:Number((G=F==null?void 0:F.position)==null?void 0:G.lat),lng:Number((W=F==null?void 0:F.position)==null?void 0:W.lng)}})}function U(N){const w=(N==null?void 0:N.result)||(N==null?void 0:N.data)||N;if(!w)return[];const F=w.geom_centroid;if(!F||!Array.isArray(F.coordinates))return[];const[P,R]=F.coordinates;return!Number.isFinite(R)||!Number.isFinite(P)?[]:[{id:"parcel",title:w.cadnum||w.cad_num||"Земельна ділянка",lat:R,lng:P}]}function D(N){return(Array.isArray(N==null?void 0:N.features)?N.features:[]).map((F,P)=>{var ne,ie,ce;const R=(ne=F==null?void 0:F.geometry)==null?void 0:ne.coordinates,G=Number(R==null?void 0:R[0]),W=Number(R==null?void 0:R[1]);if(!Number.isFinite(W)||!Number.isFinite(G))return null;const Y=(F==null?void 0:F.properties)||{},re=((ie=Y==null?void 0:Y.geocoding)==null?void 0:ie.label)||(Y==null?void 0:Y.display_name)||(Y==null?void 0:Y.label)||"Адреса";return{id:String(((ce=Y==null?void 0:Y.geocoding)==null?void 0:ce.place_id)||(Y==null?void 0:Y.place_id)||P),title:re,lat:W,lng:G}}).filter(F=>!!F)}async function S(N){g.value=[],E();const w=new URL(ky);w.searchParams.set("format","geojson"),w.searchParams.set("q",N),w.searchParams.set("addressdetails","1"),w.searchParams.set("bounded","1");const F=a();F&&w.searchParams.set("viewbox",F);const P=await fetch(w.toString());if(!P.ok)throw new Error(`HTTP ${P.status}`);const R=await P.json(),G=D(R);if(!G.length){le.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}g.value=G}function k(N){T(N),g.value=[],c.value=""}function v(N){const F=N.replace(/\s+/g,"").split(":");if(console.log(F),F.length!==4)return!1;const P=[10,2,3,4];return F.every((R,G)=>R.length===P[G]&&/^\d+$/.test(R))}function T(N){var F,P;const w=((F=n.config)==null?void 0:F.zoom)??17;(P=o.flyTo)==null||P.call(o,{center:[N.lng,N.lat],zoom:w})}async function C(){const N=c.value.trim();if(N){if(b.value==="xy"){const w=I(N);if(!w){le.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}T({id:"xy",title:"Точка на мапі",...w}),c.value="";return}if(b.value==="address"){try{await S(N)}catch(w){const F=(w==null?void 0:w.message)||"Помилка пошуку адреси";le.notify({type:"error",title:"Пошук адреси",message:F})}return}try{const w=new URL(b.value==="here"?xy:by);if(b.value==="here")w.searchParams.set("searchtext",N);else{if(!v(N)){le.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}w.searchParams.set("cad_num",N)}const F=await fetch(w.toString());if(!F.ok)throw new Error(`HTTP ${F.status}`);const P=await F.json(),R=b.value==="here"?q(P):U(P);if(!R.length)le.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const G=R[0];T(G),c.value=""}}catch(w){const F=(w==null?void 0:w.message)||"Помилка пошуку";le.notify({type:"error",title:"Пошук",message:F})}}}return(N,w)=>(e.openBlock(),e.createElementBlock("div",sy,[e.createElementVNode("form",{class:"flex gap-2",onSubmit:e.withModifiers(C,["prevent"])},[f.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:u,class:"relative search-type w-[100px]"},[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]=F=>p.value=!p.value)},[e.createElementVNode("span",{class:"block w-full truncate",title:A(b.value)},e.toDisplayString(A(b.value)),9,cy),(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[3]||(w[3]=[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",dy,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,F=>(e.openBlock(),e.createElementBlock("li",{key:F,class:"px-3 py-2 cursor-pointer hover:bg-gray-100 text-gray-900",onClick:P=>V(F)},e.toDisplayString(A(F)),9,uy))),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"searchWrapperRef",ref:m,class:"relative flex-1 min-w-[140px]"},[b.value==="parcel"?(e.openBlock(),e.createBlock(e.unref(kn.VsInputMask),{key:0,modelValue:c.value,"onUpdate:modelValue":w[1]||(w[1]=F=>c.value=F),mask:"0000000000:00:000:0000",class:"vs-input !h-[34px] 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,["modelValue"])):e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:1,"onUpdate:modelValue":w[2]||(w[2]=F=>c.value=F),placeholder:y.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,py)),[[e.vModelText,c.value,void 0,{trim:!0}]]),w[4]||(w[4]=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)),d.value?(e.openBlock(),e.createBlock(e.Teleport,{key:2,to:"body"},[e.createElementVNode("div",{ref_key:"addressResultsRef",ref:h,class:"vs-select__options mt-1 bg-white border border-gray-300 shadow-lg rounded-lg text-sm text-gray-900 z-50 max-h-60 overflow-auto",style:e.normalizeStyle(B)},[e.createElementVNode("ul",my,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,F=>(e.openBlock(),e.createElementBlock("li",{key:F.id,class:"px-3 py-2 cursor-pointer hover:bg-gray-50",onClick:P=>k(F)},e.toDisplayString(F.title),9,fy))),128))])],4)])):e.createCommentVNode("",!0)],512)],32)]))}}),[["__scopeId","data-v-6650498a"]]),wy="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",_y="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",Ey=Q(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:l,removeControl:r}=ve(),a=e.ref(null),i=e.ref(null),s=e.ref(null),f=e.ref(null);let y=null;function b(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function c(E){if(Array.from(document.styleSheets).some(A=>{var I;return(I=A==null?void 0:A.href)==null?void 0:I.includes(E)}))return;const $=document.createElement("link");$.rel="stylesheet",$.href=E,document.head.appendChild($)}function p(E){return new Promise((V,$)=>{const A=Array.from(document.scripts).find(q=>q.src===E);if(A){if(A._loaded)return V();A.addEventListener("load",()=>V()),A.addEventListener("error",()=>$(new Error(`Failed ${E}`)));return}const I=document.createElement("script");I.src=E,I.async=!0,I.onload=()=>{I._loaded=!0,V()},I.onerror=()=>$(new Error(`Failed ${E}`)),document.head.appendChild(I)})}function u(){var V,$,A;const E=window;return E.MapboxExportControl||((V=E.mapboxgl)==null?void 0:V.MapboxExportControl)||(($=E.mapboxglExport)==null?void 0:$.MapboxExportControl)||((A=E.mapboxglExport)==null?void 0:A.default)||null}function m(){const E=document.createElementNS("http://www.w3.org/2000/svg","svg");return E.setAttribute("xmlns","http://www.w3.org/2000/svg"),E.setAttribute("viewBox","0 0 24 24"),E.setAttribute("width","18"),E.setAttribute("height","18"),E.setAttribute("fill","none"),E.setAttribute("stroke","currentColor"),E.setAttribute("stroke-width","2"),E.setAttribute("stroke-linecap","round"),E.setAttribute("stroke-linejoin","round"),E.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(($,A)=>{const I=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries($).forEach(([q,U])=>{I.setAttribute(q,U)}),E.appendChild(I)}),E}function g(){const E=document.createElement("button");E.id="print-btn",E.type="button",E.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(" "),E.setAttribute("aria-label","Друк");const V=m(),$=document.createElement("span");return $.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(" "),$.textContent="Друк",$.setAttribute("aria-hidden","true"),E.appendChild(V),E.appendChild($),E.addEventListener("click",A=>{A.stopPropagation(),h()}),f.value=E,E}function h(){if(!s.value)return;s.value.style.display==="block"?x():d()}function d(){var E,V,$;s.value&&(s.value.style.display="block",(E=f.value)==null||E.classList.add("scale-105","shadow-xl"),(V=i.value)==null||V.toggleCrosshair(!0),($=i.value)==null||$.togglePrintableArea(!0),document.addEventListener("click",B))}function x(){var E,V,$;s.value&&(s.value.style.display="none",(E=f.value)==null||E.classList.remove("scale-105","shadow-xl"),(V=i.value)==null||V.toggleCrosshair(!1),($=i.value)==null||$.togglePrintableArea(!1),document.removeEventListener("click",B))}function B(E){const V=a.value;V&&(E.target&&V.contains(E.target)||x())}function M(E){const V={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};E.querySelectorAll("label, option").forEach(A=>{var q;const I=(q=A.textContent)==null?void 0:q.trim();I&&V[I]&&(A.textContent=V[I])});const $=E.querySelector("button");$&&($.textContent="Друкувати")}function j(E){const V=E.querySelector(".mapboxgl-export-list");if(!V||!a.value)return;s.value=V;const $=E.querySelector("button");if($&&($.style.display="none"),E.style.display="none",!f.value){const I=g();a.value.appendChild(I)}V.style.display="none";const A="_printControlBound";if(!V[A]){const I=q=>q.stopPropagation();V.addEventListener("click",I),V.addEventListener("mousedown",I),V[A]=!0}a.value.appendChild(V),M(V)}return e.onMounted(async()=>{await(o==null?void 0:o());const E=n.value;if(!E)return;c(wy),b();try{await p(_y)}catch(A){console.warn("[MapPrintControl] load error",A);return}const V=u();if(!V)return;const $=new V({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(i.value=$,typeof $.onAdd=="function"){const A=$.onAdd.bind($);$.onAdd=I=>{const q=A(I);return setTimeout(()=>q&&j(q),50),q}}l?l($,"top-right"):E.addControl($,"top-right"),y=A=>{A.key==="Escape"&&x()},document.addEventListener("keyup",y)}),e.onBeforeUnmount(()=>{x(),y&&(document.removeEventListener("keyup",y),y=null);const E=n.value;if(i.value)try{r?r(i.value):E==null||E.removeControl(i.value)}catch{}i.value=null}),(E,V)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:a,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-89156246"]]),Ny={class:"cursor-coordinates"},Vy={class:"cursor-coordinates__text"},By=Q(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Ny,[e.createElementVNode("span",Vy,e.toDisplayString(t.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),Cy={class:"minimap__wrapper"},Dt="minimap-viewport",$y="minimap-viewport-layer",vy=Q(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var B,M,j,E;const n=t,o=((M=(B=e.getCurrentInstance())==null?void 0:B.appContext.config.globalProperties)==null?void 0:M.$settings)||null,l=ut((j=o==null?void 0:o.map)==null?void 0:j.center)||[30,50],r=e.ref(null),a=e.shallowRef(null),i=(E=n.options)==null?void 0:E.active,s=e.ref(i===void 0?!1:!!i);function f(V,$){return typeof V=="number"&&Number.isFinite(V)?V:$}const y=e.computed(()=>{var q,U;const V=(q=n.options)==null?void 0:q.width,$=(U=n.options)==null?void 0:U.height,A=f(n.width??V,210),I=f(n.height??$,150);return{width:`${A}px`,height:`${I}px`}});function b(){var $,A;const V=(A=($=n.mapContext)==null?void 0:$.map)==null?void 0:A.value;if(!V||typeof V.getStyle!="function")return null;try{const I=V.getStyle();return I?JSON.parse(JSON.stringify(I)):null}catch{return null}}let c=null;function p(){var q;if(typeof window>"u"||a.value||!r.value)return;const V=b(),$=l,A={container:r.value,style:V??{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:$,zoom:((q=n.options)==null?void 0:q.zoom)??3,interactive:!1,attributionControl:!1},I={...A,...n.options??{}};I.container=A.container,a.value=new maplibregl.Map(I),a.value.on("load",()=>{m(),h()})}function u(){if(!a.value)return;const V=b();V&&(a.value.once("styledata",()=>{m(),h()}),a.value.setStyle(V))}function m(){if(a.value){if(typeof a.value.isStyleLoaded=="function"&&!a.value.isStyleLoaded()){a.value.once("styledata",()=>{m(),h()});return}a.value.getSource(Dt)||(a.value.addSource(Dt,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),a.value.addLayer({id:$y,type:"fill",source:Dt,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function g(){s.value=!s.value,s.value&&e.nextTick(()=>{var V;return(V=a.value)==null?void 0:V.resize()})}function h(){var D,S;const V=(S=(D=n.mapContext)==null?void 0:D.map)==null?void 0:S.value;if(!a.value||!V||!V.getBounds)return;if(typeof a.value.isStyleLoaded=="function"&&!a.value.isStyleLoaded()){a.value.once("styledata",()=>{h()});return}const $=V.getBounds();if(!$)return;const A=$.getNorthEast(),I=$.getSouthWest();if(!A||!I)return;const q=[[I.lng,A.lat],[A.lng,A.lat],[A.lng,I.lat],[I.lng,I.lat],[I.lng,A.lat]],U=a.value.getSource(Dt);if(!U){m();return}U.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[q]},properties:{}})}function d(){var A;const V=n.mapContext,$=(A=V==null?void 0:V.map)==null?void 0:A.value;!(V!=null&&V.on)||!$||(c==null||c(),c=V.on("move",h),h())}async function x(){const V=n.mapContext;if(V){if(typeof V.ready=="function")try{await V.ready()}catch{return}d()}}return e.onMounted(()=>{p(),x()}),e.watch(()=>n.mapContext,()=>{x(),h()}),e.watch(()=>{var V,$;return($=(V=n.mapContext)==null?void 0:V.map)==null?void 0:$.value},()=>{a.value&&(u(),x())}),e.watch(y,()=>{a.value&&e.nextTick(()=>{var V;return(V=a.value)==null?void 0:V.resize()})}),e.watch(()=>n.options,()=>{var $;c==null||c(),c=null,a.value&&(a.value.remove(),a.value=null);const V=($=n.options)==null?void 0:$.active;typeof V=="boolean"&&(s.value=V),e.nextTick(()=>{p(),x()})},{deep:!0}),e.onBeforeUnmount(()=>{c==null||c(),c=null,a.value&&(a.value.remove(),a.value=null)}),(V,$)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["minimap",{"minimap--open":s.value}])},[e.createElementVNode("button",{type:"button",class:"minimap__button",onClick:g},[e.createVNode(e.unref(_l))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",Cy,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:r,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(y.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,s.value]])]),_:1})],2))}}),[["__scopeId","data-v-bc754c89"]]),Sy={key:1,class:"absolute bottom-4 right-4 z-[80] flex items-end gap-2"},Ay={class:"absolute top-[103px] right-[6.5px] z-[80] flex flex-col items-end gap-1"},Ly={class:"map-widget__overlay-grid"},Fy={key:0,id:"map-filter-popover-host",class:"map-widget__filter-host"},Ty={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},My={class:"map-widget__stack"},Dy={key:2,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom xl:mb-5 mb-2"},Iy={class:"map-widget__stack map-widget__stack--bottom"},jy={key:0,class:"map-widget__state"},zy={key:1,class:"map-widget__state map-widget__state--error"},It=Q(e.defineComponent({__name:"MapWidget",props:{id:{},height:{},minZoom:{},maxZoom:{},data:{}},setup(t){var jt,zt,Je,mt;const n=t,o=pe.useRoute(),l=pe.useRouter(),r=e.ref(null),a=e.ref({}),i=e.ref(null),s=e.ref(!1),f=e.ref(null),y=e.ref(!1),b=e.ref([]),c=e.computed(()=>n.id||"main"),p=e.computed(()=>{var z,H;return{height:((z=n.height)==null?void 0:z.trim())||((H=a.value)==null?void 0:H.height)||"calc(100vh - 65px)"}}),u=e.computed(()=>{var z;return((z=a.value)==null?void 0:z.name)??null}),m=e.computed(()=>{var z;return((z=a.value)==null?void 0:z.description)??null}),g=e.computed(()=>{var z;return D((z=a.value)==null?void 0:z.maps)}),h=e.computed(()=>{var H,te;const z=((H=a.value)==null?void 0:H.minZoom)??((te=a.value)==null?void 0:te.minzoom)??null;return typeof z=="number"?z:null}),d=e.computed(()=>{var H,te;const z=((H=a.value)==null?void 0:H.maxZoom)??((te=a.value)==null?void 0:te.maxzoom)??null;return typeof z=="number"?z:typeof n.maxZoom=="number"?n.maxZoom:20}),x=e.ref(null),B=e.computed(()=>{if(!x.value)return null;const{lng:z,lat:H}=x.value;return`${H.toFixed(6)}, ${z.toFixed(6)}`}),M=e.computed(()=>{var z;return((z=r.value)==null?void 0:z.ctx)??null}),j=e.computed(()=>{var z;return((z=a.value)==null?void 0:z.minimap)??null});function E(z){if(!z||typeof z!="object")return z;const H=ut(z.center);return H?{...z,center:H}:z}const V=((zt=(jt=e.getCurrentInstance())==null?void 0:jt.appContext.config.globalProperties)==null?void 0:zt.$settings)||null;function $(z){if(z==null)return null;const H=Number(typeof z=="string"?z.trim():z);return Number.isFinite(H)?H:null}const A=ut((Je=V==null?void 0:V.map)==null?void 0:Je.center),I=$((mt=V==null?void 0:V.map)==null?void 0:mt.zoom),q=e.computed(()=>{const z=(V==null?void 0:V.map)||null,H=(z==null?void 0:z.boundary)??null,te=(z==null?void 0:z.katottg)??null;return!H&&!te?null:{boundary:H,katottg:te}});function U(z){return typeof z=="string"&&z.trim()?z.trim().toLowerCase():"top-left"}function D(z){return Array.isArray(z)?z:z&&typeof z=="object"?Object.values(z).filter(Boolean):[]}const S=e.computed(()=>{var z;return D((z=a.value)==null?void 0:z.widgets)}),k=["left","right"],v=e.computed(()=>{const z={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},H={"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 S.value.forEach(te=>{const ge=U(te.position),J=H[ge]??{side:"left",align:"top"};z[J.side][J.align].push(te)}),z});function T(z){return Array.isArray(z)?z[0]??null:typeof z=="string"?z:null}async function C(){var H;await e.nextTick();const z=(H=r.value)==null?void 0:H.ctx;return z?(z.ready&&await z.ready(),z):null}function N(){var z,H,te;return((te=(H=(z=r.value)==null?void 0:z.ctx)==null?void 0:H.map)==null?void 0:te.value)??null}function w(){const z=N();if(!z)return null;const H=z.getCenter();return{z:z.getZoom().toFixed(2),x:H.lng.toFixed(5),y:H.lat.toFixed(5)}}async function F(){var te;const z=await C(),H=(te=z==null?void 0:z.map)==null?void 0:te.value;H&&(typeof h.value=="number"&&H.setMinZoom(h.value),typeof d.value=="number"&&H.setMaxZoom(d.value))}async function P(){var J;if(i.value)return;const z=await C(),H=(J=z==null?void 0:z.map)==null?void 0:J.value;if(!H)return;const te=H.getCenter(),ge=H.getZoom();i.value={center:[te.lng,te.lat],zoom:ge}}function R(){const z=w();if(!z)return;const H=T(o.query.x),te=T(o.query.y),ge=T(o.query.z);H===z.x&&te===z.y&&ge===z.z||l.replace({query:{...o.query,...z}}).catch(()=>{})}function G(z,H,te=1e-6){return Math.abs(z-H)<=te}async function W(){var Be;const z=await C(),H=(Be=z==null?void 0:z.map)==null?void 0:Be.value;if(!z||!H)return;const te=parseFloat(T(o.query.x)??""),ge=parseFloat(T(o.query.y)??""),J=parseFloat(T(o.query.z)??""),de=!Number.isNaN(te),_e=!Number.isNaN(ge),Z=!Number.isNaN(J);let Ee=!1;if(de&&_e){const Me=H.getCenter();(!G(Me.lng,te)||!G(Me.lat,ge))&&(H.setCenter([te,ge]),Ee=!0)}Z&&H.setZoom(J),(!de||!_e||!Z||Ee)&&R()}let Y=null,re=null;function ae(z){const H=z==null?void 0:z.lngLat;H&&(x.value={lng:H.lng,lat:H.lat})}async function ne(){const z=await C();z!=null&&z.on&&(Y==null||Y(),Y=z.on("moveend",R),re==null||re(),re=z.on("mousemove",ae))}e.onUnmounted(()=>{Y==null||Y(),Y=null,re==null||re(),re=null});async function ie(z=!1){var te,ge;y.value=!1,f.value=null,x.value=null;const H=z||!n.data;s.value=H;try{const J=H?await(async()=>{const Be=await fetch(`/api/gis-map/${encodeURIComponent(c.value)}`);if(!Be.ok)throw new Error(`Помилка завантаження (${Be.status})`);return Be.json()})():n.data;H||(y.value=!0);const de=ut(J.center)??A,_e=D(J.layers).map(Be=>E(Be)),Z=$(J.zoom)??I;a.value={...J,center:de??null,zoom:Z??J.zoom??null,layers:_e,widgets:J.widgets},b.value=J.tools||["home","print"];const Ee=await C();Ee&&(de&&((te=Ee.setCenter)==null||te.call(Ee,de)),Z!=null&&((ge=Ee.setZoom)==null||ge.call(Ee,Z)),i.value||await P()),await F(),await W(),await ne(),y.value=!0}catch(J){f.value=(J==null?void 0:J.message)||"Не вдалося завантажити карту"}finally{H&&(s.value=!1)}}const ce=e.computed(()=>{var ge;const z=new Map;return D((ge=a.value)==null?void 0:ge.layers).forEach(J=>{if(!(J!=null&&J.id))return;const de=E(J)||J;z.set(J.id,{...de})}),S.value.filter(J=>(J==null?void 0:J.type)==="layers").flatMap(J=>{var de;return D((de=J==null?void 0:J.config)==null?void 0:de.layers)}).forEach(J=>{if(!(J!=null&&J.id))return;const de=z.get(J.id)||{},_e=E(J)||J;z.set(J.id,{...de,..._e,actions:J.actions||de.actions||null,name:de.name||J.name||J.title||de.title||J.id,title:de.title||J.title||de.name||null,visible:de.visible??J.visible??!0})}),Array.from(z.values())}),Ae=e.ref([]);function Le(z){Ae.value.includes(z)?Ae.value=Ae.value.filter(H=>H!==z):Ae.value.push(z)}const je=e.computed(()=>z=>Ae.value.includes(z.id));return e.watch([h,d],()=>{F()},{immediate:!0}),e.watch(c,()=>{ie(!0)}),e.watch(()=>n.data,z=>{z&&ie()}),e.onMounted(()=>{ie()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{W()}),(z,H)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(p.value)},[H[2]||(H[2]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createVNode(Tt,{ref_key:"mapViewRef",ref:r,class:"map-widget__view"},{default:e.withCtx(()=>{var te,ge,J,de;return[q.value?(e.openBlock(),e.createBlock(Qo,{key:0,"layer-id":"app-boundary",boundary:q.value.boundary,katottg:q.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),M.value?(e.openBlock(),e.createElementBlock("div",Sy,[B.value?(e.openBlock(),e.createBlock(By,{key:0,coordinates:B.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(vy,{"map-context":M.value,options:j.value},null,8,["map-context","options"])])):e.createCommentVNode("",!0),e.createElementVNode("div",Ay,[b.value.includes("home")?(e.openBlock(),e.createBlock(mn,{key:0,center:((te=a.value)==null?void 0:te.center)||((ge=i.value)==null?void 0:ge.center)||null,zoom:((J=a.value)==null?void 0:J.zoom)??((de=i.value)==null?void 0:de.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),b.value.includes("print")?(e.openBlock(),e.createBlock(Ey,{key:1})):e.createCommentVNode("",!0)]),y.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("div",Ly,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(k,_e=>e.createElementVNode("div",{key:_e,class:e.normalizeClass(["map-widget__side",`map-widget__side--${_e}`])},[_e==="left"?(e.openBlock(),e.createElementBlock("div",Fy)):e.createCommentVNode("",!0),v.value[_e].top.length?(e.openBlock(),e.createElementBlock("div",Ty,[e.createElementVNode("div",My,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.value[_e].top,Z=>{var Ee,Be,Me,Ze,Ke,Pe,ze,Re;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:Z.id||Z.type,class:"map-overlay__item"},[Z.type==="info"?(e.openBlock(),e.createBlock(el,{key:0,title:((Ee=Z.config)==null?void 0:Ee.title)||Z.title||null,content:((Be=Z.config)==null?void 0:Be.content)||"",links:g.value,"map-name":u.value,"map-description":m.value},null,8,["title","content","links","map-name","map-description"])):Z.type==="catalog"?(e.openBlock(),e.createBlock(ll,{key:1,api:((Me=Z.config)==null?void 0:Me.api)||null},null,8,["api"])):Z.type==="layers"?(e.openBlock(),e.createBlock(ol,{key:2,layers:ce.value,onAction:H[0]||(H[0]=Qe=>Le(Qe.layerId)),config:Z.config},null,8,["layers","config"])):Z.type==="basemaps"?(e.openBlock(),e.createBlock(_t,{key:3,layers:((Ze=Z.config)==null?void 0:Ze.layers)||null,"default-layer":((Ke=Z.config)==null?void 0:Ke.default)||null,title:Z.title||((Pe=Z.config)==null?void 0:Pe.title)||null},null,8,["layers","default-layer","title"])):Z.type==="legend"?(e.openBlock(),e.createBlock(Et,{key:4,items:((ze=Z.config)==null?void 0:ze.items)||[]},null,8,["items"])):Z.type==="filters"&&je.value(Z)?(e.openBlock(),e.createBlock(dn,{key:5,"layer-id":(Re=Z.config)==null?void 0:Re.layer,onClose:Le},null,8,["layer-id"])):Z.type==="dataset"||Z.type==="attribute"?(e.openBlock(),e.createBlock(rl,{key:6,config:Z.config},null,8,["config"])):Z.type==="search"?(e.openBlock(),e.createBlock(al,{key:7,config:Z.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,Z.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),v.value[_e].bottom.length?(e.openBlock(),e.createElementBlock("div",Dy,[e.createElementVNode("div",Iy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.value[_e].bottom,Z=>{var Ee,Be,Me,Ze,Ke,Pe,ze,Re;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:Z.id||Z.type,class:"map-overlay__item"},[Z.type==="info"?(e.openBlock(),e.createBlock(el,{key:0,title:((Ee=Z.config)==null?void 0:Ee.title)||Z.title||null,content:((Be=Z.config)==null?void 0:Be.content)||"",links:g.value,"map-name":u.value,"map-description":m.value},null,8,["title","content","links","map-name","map-description"])):Z.type==="catalog"?(e.openBlock(),e.createBlock(ll,{key:1,api:((Me=Z.config)==null?void 0:Me.api)||null},null,8,["api"])):Z.type==="layers"?(e.openBlock(),e.createBlock(ol,{key:2,layers:ce.value,onAction:H[1]||(H[1]=Qe=>Le(Qe.layerId)),config:Z.config},null,8,["layers","config"])):Z.type==="basemaps"?(e.openBlock(),e.createBlock(_t,{key:3,layers:((Ze=Z.config)==null?void 0:Ze.layers)||null,"default-layer":((Ke=Z.config)==null?void 0:Ke.default)||null,title:Z.title||((Pe=Z.config)==null?void 0:Pe.title)||null},null,8,["layers","default-layer","title"])):Z.type==="legend"?(e.openBlock(),e.createBlock(Et,{key:4,items:((ze=Z.config)==null?void 0:ze.items)||[]},null,8,["items"])):Z.type==="filters"&&je.value(Z)?(e.openBlock(),e.createBlock(dn,{key:5,"layer-id":(Re=Z.config)==null?void 0:Re.layer,onClose:Le},null,8,["layer-id"])):Z.type==="dataset"||Z.type==="attribute"?(e.openBlock(),e.createBlock(rl,{key:6,config:Z.config},null,8,["config"])):Z.type==="search"?(e.openBlock(),e.createBlock(al,{key:7,config:Z.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,Z.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(Ko),e.createVNode(Jo,{"map-id":c.value},null,8,["map-id"])],64)):e.createCommentVNode("",!0)]}),_:1},512),s.value?(e.openBlock(),e.createElementBlock("div",jy,"Завантаження карти…")):f.value?(e.openBlock(),e.createElementBlock("div",zy,e.toDisplayString(f.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-73d647f9"]]),Oy={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},Py={class:"rounded-xl border border-gray-200 overflow-hidden bg-white"},Ry=e.defineComponent({__name:"MapPreview",props:{id:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("section",Oy,[o[0]||(o[0]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Попередній перегляд карти ",-1)),e.createElementVNode("div",Py,[e.createVNode(It,{class:"w-full h-[360px]",id:t.id},null,8,["id"])])]))}}),Uy={class:"bg-white rounded-lg shadow-xl w-full max-w-4xl flex flex-col h-[80vh] m-4"},qy={class:"flex items-center justify-between px-6 py-4 border-b border-gray-200"},Hy={key:0,class:"absolute top-0 left-0 right-0 bg-red-100 text-red-700 text-sm px-4 py-2 z-10 border-b border-red-200"},Wy={class:"flex-1 overflow-hidden relative bg-[#fffffe]"},Yy={class:"px-6 py-4 border-t border-gray-200 flex justify-end gap-3"},Zy=["disabled"],Ky=e.defineComponent({__name:"ConfigEditor",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,l=n,r=e.ref(""),a=e.ref(null);e.watch(()=>o.modelValue,f=>{if(f){try{r.value=JSON.stringify(f,null,2)}catch{r.value="{}"}a.value=null}},{immediate:!0}),e.watch(r,f=>{if(!f.trim()){a.value=null;return}try{JSON.parse(f),a.value=null}catch(y){a.value=y.message}}),e.watch(()=>o.modelValue,()=>{setTimeout(()=>{const{monaco:f}=window;if(f&&f.editor){const y=f.editor.getEditors();y.length>0&&y[y.length-1].updateOptions({wordWrap:"on"})}},300)},{immediate:!0});function i(){l("update:modelValue",null),r.value="",a.value=null}function s(){if(!a.value)try{const f=JSON.parse(r.value);l("save",f),i()}catch(f){console.error("Failed to parse JSON",f)}}return(f,y)=>t.modelValue!==null?(e.openBlock(),e.createElementBlock("div",{key:0,class:"fixed inset-0 flex items-center justify-center bg-black/50 backdrop-blur-sm",onClick:e.withModifiers(i,["self"])},[e.createElementVNode("div",Uy,[e.createElementVNode("div",qy,[y[1]||(y[1]=e.createElementVNode("h3",{class:"text-lg font-semibold text-gray-800"}," Редагування конфігурації (JSON) ",-1)),e.createElementVNode("button",{onClick:i,class:"text-gray-500 hover:text-gray-700 transition-colors"},[e.createVNode(e.unref(ft),{size:20})])]),a.value?(e.openBlock(),e.createElementBlock("div",Hy," Помилка JSON: "+e.toDisplayString(a.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Wy,[e.createVNode(Ft,{modelValue:r.value,"onUpdate:modelValue":y[0]||(y[0]=b=>r.value=b),language:"json",theme:"vs-light",class:"w-full h-full"},null,8,["modelValue"])]),e.createElementVNode("div",Yy,[e.createElementVNode("button",{onClick:i,class:"px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 transition-colors"}," Скасувати "),e.createElementVNode("button",{onClick:s,disabled:!!a.value,class:"px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed"}," Зберегти ",8,Zy)])])])):e.createCommentVNode("",!0)}}),Gy={key:0,class:"text-center py-8 text-gray-500 border rounded-lg bg-gray-50"},Xy={key:1,class:"rounded-lg border border-gray-200 overflow-hidden"},Jy={class:"w-full text-sm"},Qy={class:"divide-y divide-gray-200"},eh={class:"px-4 py-3"},th=["onUpdate:modelValue","onChange"],nh=["value"],oh={class:"px-4 py-3"},lh=["onUpdate:modelValue","onChange"],rh=["value"],ah={class:"px-4 py-3 text-center"},ih=["checked","onChange"],sh={class:"px-4 py-3"},ch={key:0,class:"flex items-center gap-2"},dh=["onClick"],uh=["onClick"],ph={key:1},mh=["onClick"],fh={class:"px-4 py-3 text-right"},gh=["onClick"],yh=e.defineComponent({__name:"WidgetSettings",props:{modelValue:{}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,l=n,r=["catalog","legend","basemaps","info","layers","dataset","filters","search"],a=["top-left","top-right","bottom-left","bottom-right"],i=e.ref(null),s=e.ref(-1),f=e.computed(()=>o.modelValue||[]);function y(){const d=[...f.value,{type:"info",position:"top-left",visible:!0,config:{}}];l("update:modelValue",d)}function b(d){le.confirm({title:"Видалити віджет?",message:"Ви впевнені, що хочете видалити цей віджет?",type:"warning",onConfirm:()=>{const x=f.value.filter((B,M)=>M!==d);l("update:modelValue",x)}})}function c(d,x,B){const M=[...f.value];M[d]={...M[d],[x]:B},l("update:modelValue",M)}function p(d){return!!d&&Object.keys(d).length>0}function u(d,x){s.value=d,i.value=x||{}}function m(d){u(d,{})}function g(d){le.confirm({title:"Видалити конфігурацію?",message:"Ви впевнені, що хочете видалити конфігурацію цього віджета?",type:"warning",onConfirm:()=>{c(d,"config",void 0)}})}function h(d){s.value>-1&&c(s.value,"config",d),i.value=null,s.value=-1}return(d,x)=>{var B;return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",{class:"flex items-center justify-between mb-4"},[x[1]||(x[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800"},"Віджети",-1)),e.createElementVNode("button",{onClick:y,class:"px-3 py-1.5 text-sm bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors"}," + Додати віджет ")]),(B=f.value)!=null&&B.length?(e.openBlock(),e.createElementBlock("div",Xy,[e.createElementVNode("table",Jy,[x[2]||(x[2]=e.createElementVNode("thead",{class:"bg-gray-50 border-b border-gray-200"},[e.createElementVNode("tr",null,[e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700 w-1/4"},"Тип"),e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700 w-1/4"},"Розташування"),e.createElementVNode("th",{class:"px-4 py-3 text-center font-medium text-gray-700 w-24"},"Видимість"),e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700"},"Конфігурація"),e.createElementVNode("th",{class:"px-4 py-3 text-right font-medium text-gray-700 w-24"},"Дії")])],-1)),e.createElementVNode("tbody",Qy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,(M,j)=>(e.openBlock(),e.createElementBlock("tr",{key:j,class:"hover:bg-gray-50"},[e.createElementVNode("td",eh,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":E=>M.type=E,onChange:E=>c(j,"type",M.type),class:"w-full px-2 py-1.5 bg-white border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-blue-500 text-gray-700"},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(r,E=>e.createElementVNode("option",{key:E,value:E},e.toDisplayString(E),9,nh)),64))],40,th),[[e.vModelSelect,M.type]])]),e.createElementVNode("td",oh,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":E=>M.position=E,onChange:E=>c(j,"position",M.position),class:"w-full px-2 py-1.5 bg-white border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-blue-500 text-gray-700"},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,E=>e.createElementVNode("option",{key:E,value:E},e.toDisplayString(E),9,rh)),64))],40,lh),[[e.vModelSelect,M.position]])]),e.createElementVNode("td",ah,[e.createElementVNode("input",{type:"checkbox",checked:M.visible!==!1,onChange:E=>c(j,"visible",E.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"},null,40,ih)]),e.createElementVNode("td",sh,[p(M.config)?(e.openBlock(),e.createElementBlock("div",ch,[e.createElementVNode("button",{onClick:E=>u(j,M.config),class:"p-1 text-blue-600 hover:text-blue-800 hover:bg-blue-50 rounded transition-colors",title:"Редагувати конфігурацію"},[e.createVNode(e.unref(Al),{size:16})],8,dh),e.createElementVNode("button",{onClick:E=>g(j),class:"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors",title:"Видалити конфігурацію"},[e.createVNode(e.unref(ft),{size:16})],8,uh)])):(e.openBlock(),e.createElementBlock("div",ph,[e.createElementVNode("button",{onClick:E=>m(j),class:"p-1 text-green-600 hover:text-green-800 hover:bg-green-50 rounded transition-colors",title:"Додати конфігурацію"},[e.createVNode(e.unref(Rt),{size:16})],8,mh)]))]),e.createElementVNode("td",fh,[e.createElementVNode("button",{onClick:E=>b(j),class:"p-1 text-gray-400 hover:text-red-500 transition-colors",title:"Видалити віджет"},[e.createVNode(e.unref(Cn),{size:16})],8,gh)])]))),128))])])])):(e.openBlock(),e.createElementBlock("div",Gy," Немає віджетів. Додайте перший віджет. ")),e.createVNode(Ky,{teleport:"#modal",modelValue:i.value,"onUpdate:modelValue":x[0]||(x[0]=M=>i.value=M),onSave:h},null,8,["modelValue"])])}}}),hh={class:"relative min-h-svh flex-1 flex-col flex gap-4 bg-white p-8 overflow-y-auto"},xh={class:"max-w-6xl mx-auto w-full"},bh={class:"flex items-center justify-between mb-6"},kh={class:"mb-2 text-2xl font-semibold text-gray-900"},wh={class:"flex items-center gap-2"},_h=["disabled"],Eh={key:0,class:"text-center py-12"},Nh={class:"space-y-6"},Vh={class:"space-y-6"},Bh={class:"space-y-6"},Ch=Q(e.defineComponent({__name:"MapSettings",setup(t){const n=pe.useRouter(),o=pe.useRoute(),l=e.ref(!0),r=e.ref(!1),a=e.ref([]),i=e.ref({}),s=[{name:"Загальна",id:"general"},{name:"Шари",id:"layers"},{name:"Віджети",id:"widgets"},{name:"Карта",id:"map"}],f=s.map(E=>E.id),y=E=>E?Array.isArray(E)?E[0]:E:null,b=(()=>{const E=y(o.query.tab);return E&&f.includes(E)?E:"general"})(),c=e.ref(b);e.watch(()=>o.query.tab,E=>{const V=y(E);V&&f.includes(V)&&c.value!==V&&(c.value=V)}),e.watch(c,E=>{o.query.tab!==E&&n.replace({query:{...o.query,tab:E}})});const p=e.ref({name:"",map_key:"",description:"",holder:"",image:"",keywords:[],center:null,zoom:11,widgets:[],layers:[]}),u=e.computed({get:()=>(p.value.layers||[]).map(E=>E.id||E),set:E=>{p.value.layers=E}}),m=e.computed(()=>a.value.map(E=>({id:E.id,text:E.name||E.id}))),g=e.computed({get:()=>u.value.map(E=>{const V=m.value.find($=>$.id===E);return V?V.text:E}),set:E=>{const V=E.map($=>{const A=m.value.find(I=>I.text===$);return A?A.id:null}).filter($=>$!==null);u.value=V}}),h=e.computed(()=>{const E=p.value.center;if(!Array.isArray(E)||E.length<2)return"Не задано";const[V,$]=E;return V===void 0||$===void 0||V===null||$===null||Number.isNaN(Number(V))||Number.isNaN(Number($))?"Не задано":`Lng ${Number(V).toFixed(6)}, Lat ${Number($).toFixed(6)}`}),d=e.computed(()=>{const E=p.value.zoom;if(E==null||E==="")return"Не задано";const V=Number(E);return Number.isNaN(V)?"Не задано":V.toFixed(2)}),x=[{name:"name",type:"text",label:"Назва",col:6,validators:["required"]},{name:"map_key",type:"text",label:"Унікальний ключ",col:6,validators:["required"]},{name:"description",type:"textarea",label:"Опис",col:12},{name:"holder",type:"text",label:"Власник/Утримувач/Відповідальний",col:6},{name:"keywords",type:"Tags",label:"Ключові слова",placeholder:"Введіть тег та натисніть Enter",col:6},{name:"center",type:"array",label:"Центр",inputType:"number",limit:2,count:2,col:6},{name:"zoom",type:"number",label:"Зум",col:6,validators:["required"]},{name:"is_public",type:"switcher",label:"Чи публічна карта?",col:6,data:"yes_no"},{name:"is_active",type:"switcher",label:"Чи активна?",col:6,data:"yes_no"},{name:"image",type:"File",label:"Фото",col:12}];async function B(){try{const E=await fetch("/api/gis-layer-list");E.ok&&(a.value=await E.json())}catch(E){console.error("Failed to load available layers:",E)}}async function M(){try{const V=await(await fetch(`/api/gis-map/${o.params.id}?original=1`)).json();p.value={...V,keywords:V.keywords||[],center:V.center??null,widgets:Array.isArray(V.widgets)?V.widgets:[],layers:(V.layers||[]).map($=>$.id||$)}}catch(E){console.error("Failed to load map:",E),le.notify({type:"error",title:"Помилка",message:"Не вдалося завантажити карту"})}finally{l.value=!1}}async function j(){var V,$;const E=($=(V=i.value)==null?void 0:V.validate)==null?void 0:$.call(V);if(E){le.notify({type:"warning",title:"Валідація",message:Object.entries(E).map(([A,I])=>`${A}: ${I}`).join(`
153
153
  `)});return}r.value=!0;try{const A=JSON.parse(JSON.stringify(p.value));if(A.zoom=Number(A.zoom),Array.isArray(A.center)&&(A.center.every(U=>U==null||U===""||U===0)||A.center.length===0)&&(A.center=null),delete A.created_at,delete A.updated_at,delete A.created_by,delete A.updated_by,delete A.history,delete A.maps,!(await fetch(`/api/gis-map/${o.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(A)})).ok)throw new Error("Save failed");le.notify({type:"success",title:"Успіх",message:"Збережено!"})}catch(A){console.error("Save error:",A),le.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти"})}finally{r.value=!1}}return e.onMounted(async()=>{await B(),M()}),(E,V)=>(e.openBlock(),e.createElementBlock("main",hh,[e.createElementVNode("div",xh,[e.createElementVNode("div",bh,[e.createElementVNode("div",null,[e.createElementVNode("h1",kh,e.toDisplayString(p.value.name||"Налаштування карти"),1),V[7]||(V[7]=e.createElementVNode("p",{class:"text-gray-600"},"Редагування параметрів карти",-1))]),e.createElementVNode("div",wh,[e.createElementVNode("a",{onClick:V[0]||(V[0]=$=>e.unref(n).back()),class:"inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50"}," Повернутися "),e.createElementVNode("button",{onClick:j,disabled:r.value,class:"inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700 disabled:opacity-50"},e.toDisplayString(r.value?"Збереження...":"Зберегти"),9,_h)])]),l.value?(e.openBlock(),e.createElementBlock("div",Eh,[...V[8]||(V[8]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(E0,{tabs:s,activeTab:c.value,"onUpdate:activeTab":V[1]||(V[1]=$=>c.value=$)},null,8,["activeTab"]),e.withDirectives(e.createElementVNode("div",Nh,[e.createVNode(V0,{schema:x,loading:l.value,modelValue:p.value,"onUpdate:modelValue":V[2]||(V[2]=$=>p.value=$),form:i.value,"onUpdate:form":V[3]||(V[3]=$=>i.value=$)},null,8,["loading","modelValue","form"])],512),[[e.vShow,c.value==="general"]]),e.withDirectives(e.createElementVNode("div",Vh,[e.createVNode(C0,{options:m.value,layerIDs:u.value,"onUpdate:layerIDs":V[4]||(V[4]=$=>u.value=$),layerNames:g.value,"onUpdate:layerNames":V[5]||(V[5]=$=>g.value=$)},null,8,["options","layerIDs","layerNames"])],512),[[e.vShow,c.value==="layers"]]),e.withDirectives(e.createVNode(yh,{modelValue:p.value.widgets,"onUpdate:modelValue":V[6]||(V[6]=$=>p.value.widgets=$)},null,8,["modelValue"]),[[e.vShow,c.value==="widgets"]]),e.withDirectives(e.createElementVNode("div",Bh,[e.createVNode(Ry,{"center-display":h.value,"zoom-display":d.value,"layer-names":g.value,id:e.unref(o).params.id},null,8,["center-display","zoom-display","layer-names","id"])],512),[[e.vShow,c.value==="map"]])],64))])]))}}),[["__scopeId","data-v-75f83258"]]),$h={class:"flex-1 overflow-y-auto p-0"},vh={class:"pt-0 mt-0"},Sh={key:0,class:"flex items-center justify-center py-12"},Ah={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm"},Lh={key:2,class:"text-center py-12 text-gray-500"},Fh={key:3,class:"grid grid-cols-1 lg:grid-cols-2 gap-4 max-h-[calc(100vh-400px)] md:max-h-[calc(100vh-370px)] lg:max-h-[calc(100vh-280px)]"},Th=["onClick"],Mh={class:"flex items-start justify-between"},Dh={class:"flex-1"},Ih={class:"text-base font-semibold text-gray-900 mb-1"},jh={class:"flex items-center gap-2 mb-3"},zh=["onClick"],Oh={class:"relative"},Ph=["onClick"],Rh={key:0,class:"absolute left-full top-1/2 -translate-y-1/2 ml-2 px-2 py-1 bg-white text-gray-600 text-xs rounded shadow-sm z-10 whitespace-nowrap animate-fade-in-out border border-gray-200/70"},Uh={class:"flex items-center gap-2"},qh={class:"text-xs text-gray-500"},Hh=["onClick"],Wh={class:"px-6 py-3 border-t border-gray-200 custom-pagination bg-gray-100"},gn=12,Yh=Q(e.defineComponent({__name:"DictionariesGrid",props:{search:{},type:{}},emits:["update:counts"],setup(t,{expose:n,emit:o}){const l=t,r=o,a=pe.useRouter(),i=pe.useRoute(),s=e.ref(Number(i.query.page)||1),f=e.ref(!1),y=e.ref(0),b=e.ref([]),c=e.computed(()=>{const A=(s.value-1)*gn,I=A+gn;return b.value.slice(A,I)}),p=e.ref(!0),u=e.ref(null),m=e.ref(null),g=e.ref(null);let h=null,d=null;const x=(A="",I="")=>{const q=new URLSearchParams,U=A.trim();U&&q.set("search",U);const D=(I||"").trim();D&&q.set("type",D);const S=q.toString();return S?`/api/user-cls?${S}`:"/api/user-cls"},B=async(A="",I="")=>{try{p.value=!0,u.value=null;const q=x(A,I),U=await fetch(q);if(!U.ok)throw new Error(`HTTP error: ${U.status}`);const D=await U.json();if(b.value=D.data,!A.trim())y.value=D.data.length;else if(y.value===0){const S=await fetch(x("",I));if(S.ok){const k=await S.json();y.value=k.data.length}}r("update:counts",{filtered:b.value.length,total:y.value})}catch(q){u.value=q instanceof Error?q.message:"Failed to load classifiers",console.error("Error fetching classifiers:",q)}finally{p.value=!1}};e.onMounted(()=>{f.value=!0,B(l.search,l.type??"")}),e.watch(()=>[l.search,l.type],([A,I])=>{h&&clearTimeout(h),h=setTimeout(()=>{B(A,I??""),s.value=1},300)});const M=A=>{a.push({name:"classifier-detail",params:{name:A.name}})},j=A=>{m.value={name:A.name,description:A.description,alias:A.alias}},E=()=>{B(l.search,l.type??"")},V=async A=>{try{await navigator.clipboard.writeText(A),g.value=A,d&&clearTimeout(d),d=setTimeout(()=>{g.value=null},500)}catch(I){console.error("Failed to copy text: ",I)}};n({refetch:E});const $=A=>{s.value=A,a.replace({query:{...i.query,page:String(A)}})};return(A,I)=>(e.openBlock(),e.createElementBlock("main",$h,[e.createElementVNode("div",vh,[p.value?(e.openBlock(),e.createElementBlock("div",Sh,[e.createVNode(e.unref(Nn),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):u.value?(e.openBlock(),e.createElementBlock("div",Ah,e.toDisplayString(u.value),1)):b.value.length===0?(e.openBlock(),e.createElementBlock("div",Lh," Нічого не знайдено ")):e.createCommentVNode("",!0),b.value.length>0?(e.openBlock(),e.createElementBlock("div",Fh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(q,U)=>(e.openBlock(),e.createElementBlock("div",{key:U,class:"bg-white rounded-lg shadow-sm border border-gray-200 p-5 hover:border-sky-300 hover:shadow-md transition-all cursor-pointer relative",onClick:D=>M(q)},[e.createElementVNode("div",Mh,[e.createElementVNode("div",Dh,[e.createElementVNode("h3",Ih,e.toDisplayString(q.description),1),e.createElementVNode("div",jh,[e.createElementVNode("p",{onClick:e.withModifiers(D=>V(q.name),["stop"]),class:"text-sm text-gray-600 mb-0 hover:border-b hover:border-gray-300"},e.toDisplayString(q.name),9,zh),e.createElementVNode("div",Oh,[e.createElementVNode("button",{onClick:e.withModifiers(D=>V(q.name),["stop"]),class:"pt-1 mt-0.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors"},[e.createVNode(e.unref(Bl),{width:14,height:14,"stroke-width":2})],8,Ph),g.value===q.name?(e.openBlock(),e.createElementBlock("div",Rh," Copied ")):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Uh,[e.createElementVNode("div",qh,e.toDisplayString(q.count)+" записів ",1)])]),e.createElementVNode("button",{class:"px-3 py-1.5 text-xs font-medium text-sky-600 hover:bg-sky-50 rounded-lg transition-colors",onClick:e.withModifiers(D=>j(q),["stop"])}," Редагувати ",8,Hh)]),e.createElementVNode("button",{class:"absolute bottom-4 right-3 pb-1 mr-4 text-gray-400 hover:text-red-600 hover:bg-red-50 rounded transition-colors",onClick:I[0]||(I[0]=e.withModifiers(()=>{},["stop"]))},[e.createVNode(e.unref(Cn),{width:16,height:16,"stroke-width":2,class:""})])],8,Th))),128))])):e.createCommentVNode("",!0)]),f.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:"#pagination"},[e.createElementVNode("div",Wh,[e.createVNode(e.unref(le.VsPagination),{total:b.value.length,page:s.value,"page-size":gn,showPageSizes:!1,pageRange:10,view:"button",color:"gray","onUpdate:page":$,onPageChange:$},null,8,["total","page"])])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-6f5da01d"]]),Zh={class:"flex flex-col 2xl:flex-row 2xl:items-center 2xl:justify-between"},Kh={class:""},Gh={class:"text-2xl font-bold mb-2 flex items-center gap-2"},Xh={key:0,class:"text-sm font-normal text-gray-500 mt-2 ml-1"},Jh={class:"flex flex-col gap-3 mt-4 lg:mt-5 lg:flex-row lg:items-center"},Qh={class:"w-full md:w-auto"},e1=["value"],t1={class:"relative w-full lg:w-[16rem]"},n1={class:"bg-white focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-lg"},o1={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},l1=["value"],r1=e.defineComponent({__name:"DictionariesHeader",props:{modelValue:{},filter:{default:""},counts:{}},emits:["update:modelValue","update:filter","refresh"],setup(t,{emit:n}){const o=t,l=n,r=i=>{const s=i.target.value;l("update:filter",s)},a=e.ref(!1);return(i,s)=>(e.openBlock(),e.createElementBlock("div",Zh,[e.createElementVNode("div",Kh,[e.createElementVNode("h1",Gh,[s[3]||(s[3]=e.createTextVNode(" Довідники ",-1)),t.counts&&t.counts.total>0?(e.openBlock(),e.createElementBlock("span",Xh,e.toDisplayString(t.counts.filtered)+" / "+e.toDisplayString(t.counts.total),1)):e.createCommentVNode("",!0)]),s[4]||(s[4]=e.createElementVNode("p",{class:"text-sm opacity-60"}," Редагуйте довідники класифікаторів, що використовуються у вашій системі ",-1))]),e.createElementVNode("div",Jh,[e.createElementVNode("div",Qh,[s[6]||(s[6]=e.createElementVNode("label",{class:"sr-only",for:"dictionary-filter"},"Фільтр типу",-1)),e.createElementVNode("select",{id:"dictionary-filter",class:"w-full md:w-[140px] h-[38px] rounded-lg border border-stone-300 bg-white px-3 text-sm text-stone-800 focus:border-blue-500 focus:ring-blue-500 selection:border-blue-500 selection:text-white active:border-blue-500 active:text-white",value:o.filter,onChange:r},[...s[5]||(s[5]=[e.createElementVNode("option",{value:""},"Всі",-1),e.createElementVNode("option",{value:"cls"},"Довідники",-1),e.createElementVNode("option",{value:"select"},"Вибірки з БД",-1)])],40,e1)]),e.createElementVNode("div",t1,[e.createElementVNode("div",n1,[e.createElementVNode("div",o1,[e.createVNode(e.unref(Vn),{width:14,height:14,"stroke-width":2,class:"stroke-gray-500 transition-all"})]),e.createElementVNode("input",{type:"text",value:t.modelValue,placeholder:"Пошук за назвою довідника",class:"pl-9 pr-8 bg-white h-[38px] min-w-[100px] py-2 px-3 block w-full border border-solid placeholder:text-nowrap border-stone-300 text-sm text-stone-800 placeholder:text-stone-400 focus:border-2 focus:z-10 focus:border-blue-500 focus:ring-blue-500 focus:outline-blue-500 rounded-lg",onInput:s[0]||(s[0]=f=>i.$emit("update:modelValue",f.target.value))},null,40,l1),t.modelValue?(e.openBlock(),e.createElementBlock("div",{key:0,class:"absolute top-1/2 -translate-y-1/2 right-3 cursor-pointer text-gray-400 hover:text-gray-600",onClick:s[1]||(s[1]=f=>i.$emit("update:modelValue",""))},[e.createVNode(e.unref(ft),{width:14,height:14,"stroke-width":2})])):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{onClick:s[2]||(s[2]=f=>a.value=!0),class:"w-full md:w-auto flex items-center justify-center gap-2 px-4 py-2 bg-sky-600 text-white rounded-lg hover:bg-sky-700 transition-colors text-sm font-medium"},[e.createVNode(e.unref(Rt),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),s[7]||(s[7]=e.createTextVNode(" Додати ",-1))])])]))}}),a1={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-x-auto"},i1={key:0,class:"flex items-center justify-center py-12"},s1={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm m-4"},c1={key:2,class:"text-center py-12 text-gray-500"},d1={key:3,class:"w-full min-w-[640px] divide-y divide-gray-200"},u1={class:"bg-gray-50 border-b border-gray-200"},p1={class:"divide-y divide-gray-200"},m1={class:"px-4 py-3 w-1/12"},f1={class:"px-4 py-3 text-sm font-medium text-gray-900 w-2/12"},g1={class:"px-4 py-3 text-sm text-gray-600 font-mono"},y1=e.defineComponent({__name:"DetailsTable",props:{classifierName:{},search:{}},setup(t,{expose:n}){const o=t,l=[{key:"color",label:"Колір",width:"w-2/12",align:"text-left"},{key:"text",label:"Назва",width:"w-6/12",align:"text-left"},{key:"id",label:"Код",width:"w-4/12",align:"text-left"}],r=e.ref([]),a=e.ref(!0),i=e.ref(null),s=e.computed(()=>{var c;if(!((c=o.search)!=null&&c.trim()))return r.value;const b=o.search.toLowerCase().trim();return r.value.filter(p=>{var u,m;return((u=p.text)==null?void 0:u.toLowerCase().includes(b))||((m=p.id)==null?void 0:m.toLowerCase().includes(b))})}),f=async b=>{try{a.value=!0,i.value=null;const c=await fetch(`/api/suggest/${encodeURIComponent(b)}`);if(!c.ok)throw new Error(`HTTP error: ${c.status}`);const p=await c.json();r.value=p.data}catch(c){i.value=c instanceof Error?c.message:"Failed to load items",console.error("Error fetching suggest items:",c)}finally{a.value=!1}};return e.onMounted(()=>{o.classifierName&&f(o.classifierName)}),e.watch(()=>o.classifierName,b=>{b&&f(b)}),n({refetch:()=>{f(o.classifierName)}}),(b,c)=>(e.openBlock(),e.createElementBlock("div",a1,[a.value?(e.openBlock(),e.createElementBlock("div",i1,[e.createVNode(e.unref(Nn),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):i.value?(e.openBlock(),e.createElementBlock("div",s1,e.toDisplayString(i.value),1)):r.value.length===0?(e.openBlock(),e.createElementBlock("div",c1," Записи відсутні ")):(e.openBlock(),e.createElementBlock("table",d1,[e.createElementVNode("thead",u1,[e.createElementVNode("tr",null,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,p=>e.createElementVNode("th",{key:p.key,class:e.normalizeClass(["px-4 py-3 text-xs font-semibold text-gray-900",[p.width,p.align]])},e.toDisplayString(p.label),3)),64))])]),e.createElementVNode("tbody",p1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,p=>(e.openBlock(),e.createElementBlock("tr",{key:p.id,class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",m1,[e.createElementVNode("div",{class:"w-6 h-6 rounded border border-gray-300",style:e.normalizeStyle({backgroundColor:p.color})},null,4)]),e.createElementVNode("td",f1,e.toDisplayString(p.text),1),e.createElementVNode("td",g1,e.toDisplayString(p.id),1)]))),128))])]))]))}}),h1={class:"space-y-6 flex-1 overflow-y-auto p-0"},x1={class:"flex items-center gap-2 text-sm text-gray-600 mb-4"},b1={class:"text-gray-900"},k1={class:"flex items-start justify-between mb-6"},w1={class:"flex-1 mr-4"},_1={key:0,class:"flex items-center gap-2 group"},E1={class:"text-2xl font-bold text-gray-900"},N1={key:1,class:"flex items-center gap-2"},V1=["disabled"],B1=["disabled"],C1={class:"text-sm text-gray-500 mt-1"},$1={class:"flex items-center gap-3"},v1={class:"bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-4"},S1={class:"relative max-w-md"},A1={class:"vs-form-text relative w-full border-transparent text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-sm"},L1={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},F1=e.defineComponent({__name:"DictionaryDetails",setup(t){const n=pe.useRouter(),o=pe.useRoute(),l=e.computed(()=>o.params.name),r=e.ref(!1),a=e.ref(null),i=e.ref(null),s=e.ref(""),f=e.ref(""),y=e.ref(""),b=e.ref(!1),c=e.ref(!1),p=e.ref(null),u=async()=>{var B;try{const M=await fetch(`/api/user-cls?name=${encodeURIComponent(l.value)}`);if(!M.ok)return;const E=(B=(await M.json()).data)==null?void 0:B[0];E&&(f.value=E.description||"")}catch(M){console.error("Error fetching classifier details:",M)}},m=()=>{y.value=f.value,b.value=!0,e.nextTick(()=>{var B;(B=p.value)==null||B.focus()})},g=()=>{b.value=!1,y.value=""},h=async()=>{try{c.value=!0;const j=(await(await fetch(`/api/suggest/${encodeURIComponent(l.value)}`)).json()).data||[],E={name:l.value,description:y.value.trim()||null,data:j},V=await fetch(`/api/user-cls/${encodeURIComponent(l.value)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(E)});if(!V.ok)throw new Error(`HTTP error: ${V.status}`);f.value=y.value,b.value=!1}catch(B){console.error("Error saving description:",B)}finally{c.value=!1}};e.onMounted(()=>{u()}),e.watch(l,()=>{u()});const d=()=>{a.value=null,r.value=!0},x=B=>{a.value=B,r.value=!0};return(B,M)=>(e.openBlock(),e.createElementBlock("div",h1,[e.createElementVNode("div",null,[e.createElementVNode("div",x1,[e.createElementVNode("button",{onClick:M[0]||(M[0]=j=>e.unref(n).back()),class:"text-sky-600 hover:text-sky-500 transition-colors"}," Довідники "),M[4]||(M[4]=e.createElementVNode("span",{class:"text-gray-400"},"/",-1)),e.createElementVNode("span",b1,e.toDisplayString(l.value),1)]),e.createElementVNode("div",k1,[e.createElementVNode("div",w1,[b.value?(e.openBlock(),e.createElementBlock("div",N1,[e.withDirectives(e.createElementVNode("input",{ref_key:"editInputRef",ref:p,"onUpdate:modelValue":M[1]||(M[1]=j=>y.value=j),type:"text",class:"text-2xl font-bold text-gray-900 border-b-2 border-sky-500 focus:outline-none bg-transparent w-full",onKeydown:[e.withKeys(h,["enter"]),e.withKeys(g,["esc"])],placeholder:"Введіть опис"},null,544),[[e.vModelText,y.value]]),e.createElementVNode("button",{onClick:h,disabled:c.value,class:"p-1.5 text-green-600 hover:bg-green-50 rounded transition-colors disabled:opacity-50"},[e.createVNode(e.unref(El),{width:20,height:20,"stroke-width":2})],8,V1),e.createElementVNode("button",{onClick:g,disabled:c.value,class:"p-1.5 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors"},[e.createVNode(e.unref(ft),{width:20,height:20,"stroke-width":2})],8,B1)])):(e.openBlock(),e.createElementBlock("div",_1,[e.createElementVNode("h1",E1,e.toDisplayString(f.value),1),e.createElementVNode("button",{onClick:m,class:"opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати опис"},[e.createVNode(e.unref(Bn),{width:18,height:18,"stroke-width":2})])])),e.createElementVNode("p",C1,e.toDisplayString(l.value),1)]),e.createElementVNode("div",$1,[e.createElementVNode("button",{onClick:d,class:"flex items-center gap-2 px-4 py-2 bg-sky-600 text-white rounded-lg hover:bg-sky-700 transition-colors text-sm font-medium"},[e.createVNode(e.unref(Rt),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),M[5]||(M[5]=e.createTextVNode(" Додати запис ",-1))]),e.createElementVNode("button",{onClick:M[2]||(M[2]=j=>e.unref(n).back()),class:"px-4 py-2 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium"}," Назад ")])])]),e.createElementVNode("div",v1,[e.createElementVNode("div",S1,[e.createElementVNode("div",A1,[e.createElementVNode("div",L1,[e.createVNode(e.unref(Vn),{width:18,height:18,"stroke-width":2,class:"stroke-gray-400 transition-all"})]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":M[3]||(M[3]=j=>s.value=j),type:"text",placeholder:"Пошук за назвою або описом...",class:"pl-9 bg-white h-[38px] min-w-[100px] py-2 px-3 block w-full border border-solid placeholder:text-nowrap border-stone-200 text-sm text-stone-800 placeholder:text-stone-400 focus:border-2 focus:z-10 focus:border-blue-500 focus:ring-blue-500 focus:outline-blue-500 rounded-lg"},null,512),[[e.vModelText,s.value]])])])]),e.createVNode(y1,{ref_key:"detailsTableRef",ref:i,"classifier-name":l.value,search:s.value,onEdit:x},null,8,["classifier-name","search"])]))}}),T1={class:"flex-col justify-between h-full"},M1={class:"classifiers-component space-y-6 p-8 pt-2 max-w-[90%] mx-auto h-[calc(100vh-95px)]"},D1=e.defineComponent({__name:"index",setup(t){const n=pe.useRoute(),o=e.ref(""),l=e.ref(""),r=e.ref(null),a=e.ref({filtered:0,total:0}),i=f=>{a.value=f},s=()=>{var f;(f=r.value)==null||f.refetch()};return(f,y)=>(e.openBlock(),e.createElementBlock("div",T1,[e.createElementVNode("div",M1,[e.unref(n).params.name?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(r1,{key:0,modelValue:o.value,"onUpdate:modelValue":y[0]||(y[0]=b=>o.value=b),filter:l.value,"onUpdate:filter":y[1]||(y[1]=b=>l.value=b),counts:a.value,onRefresh:s},null,8,["modelValue","filter","counts"])),e.unref(n).params.name?(e.openBlock(),e.createBlock(F1,{key:2})):(e.openBlock(),e.createBlock(Yh,{key:1,ref_key:"gridRef",ref:r,search:o.value,type:l.value,"onUpdate:counts":i},null,8,["search","type"]))]),y[2]||(y[2]=e.createElementVNode("div",{id:"pagination",class:"bg-gray-100"},null,-1))]))}});function I1(t){t.component("MapCustom",It)}ue.CartoCSS=b0,ue.Classifiers=D1,ue.MapSettings=Ch,ue.MapWidget=It,ue.Raster=Mf,ue.Register=$s,ue.Service=Cm,ue.default=It,ue.install=I1,ue.template1=An,ue.template2=Ln,ue.template3=Fn,ue.template4=Tn,ue.template5=Mn,Object.defineProperties(ue,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));