@opengis/gis 0.2.81 → 0.2.83

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.
@@ -160,5 +160,5 @@
160
160
  <dt>{{ ${L} }}</dt>`}).join(`
161
161
  `),N=(i.value??"").trimEnd();i.value=N?`${N}
162
162
  ${T}`:T}s.value=!1,u.value=[]}function d(){s.value=!1,u.value=[]}function m(){const h=a.value==="html"?"html":"list",f={card_mode:h};h==="html"?f.html=i.value:h==="list"&&(f.list=r.value),l("save","card",f)}const g=[{value:"all",label:"Всі"},{value:"list",label:"Список"},{value:"none",label:"Жодне"},{value:"html",label:"HTML"}];return(h,f)=>(e.openBlock(),e.createElementBlock("div",bp,[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(xp,{modelValue:a.value,"onUpdate:modelValue":f[0]||(f[0]=b=>a.value=b),options:g},null,8,["modelValue"]),e.createElementVNode("div",kp,[a.value==="list"?(e.openBlock(),e.createBlock(We,{key:0,modelValue:r.value,"onUpdate:modelValue":f[1]||(f[1]=b=>r.value=b),"columns-scheme":p,"form-scheme":k,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):a.value==="html"?(e.openBlock(),e.createBlock(zt,{key:1,modelValue:i.value,"onUpdate:modelValue":f[2]||(f[2]=b=>i.value=b),language:"html",theme:"vs-light",class:"flex-1 min-h-0"},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(lt,{visible:s.value,"onUpdate:visible":f[3]||(f[3]=b=>s.value=b),selection:u.value,"onUpdate:selection":f[4]||(f[4]=b=>u.value=b),fields:t.fields,title:"Імпорт полів для картки","id-prefix":"import-card",onConfirm:y,onCancel:d},null,8,["visible","selection","fields"])]))}}),_p={class:"flex flex-col flex-1 min-h-0"},Ep=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([]),u=[{key:"id",label:"Name"},{key:"label",label:"UA"}],p={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 k(){s.value=r.value.map(m=>m.name||m.id),i.value=!0}function c(){var f;const m=[...r.value],g=((f=o.fields)==null?void 0:f.filter(b=>s.value.includes(b.name)))||[],h=it(m,g,{selectedKeys:s.value,resolveKey:b=>Ye(b)});r.value=h,i.value=!1,s.value=[]}function y(){i.value=!1,s.value=[]}function d(){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",_p,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:k,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:d,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(We,{key:0,modelValue:r.value,"onUpdate:modelValue":g[0]||(g[0]=h=>r.value=h),"columns-scheme":u,"form-scheme":p,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0),e.createVNode(lt,{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:y},null,8,["visible","selection","fields"])]))}}),ir=Symbol.for("gis.settingsRef");function fn(){const t=e.getCurrentInstance();if(!t)return e.ref(null);const n=t.appContext.config.globalProperties;let o=n[ir];return o||(o=e.ref(n.$settings??null),Object.defineProperty(n,"$settings",{configurable:!0,enumerable:!0,get:()=>o.value,set:l=>{o.value=l}}),n[ir]=o),o}const Ot=e.defineComponent({__name:"MapView",setup(t,{expose:n}){const o=e.ref(null),l=e.ref(null),r=fn(),a=Ou({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},doubleClickZoom:!1},controls:{navigation:!0,scale:!0},settings:r});async function i(){var k;await e.nextTick();const p=(k=a.map)==null?void 0:k.value;p!=null&&p.resize&&p.resize()}function s(){typeof ResizeObserver>"u"||l.value||!o.value||(l.value=new ResizeObserver(()=>{i()}),l.value.observe(o.value))}function u(){var p;(p=l.value)==null||p.disconnect(),l.value=null}return e.onMounted(()=>{i(),s(),window.addEventListener("resize",i)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",i),u()}),n({ctx:a}),(p,k)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"el",ref:o,class:"w-full h-full rounded-xl overflow-hidden"},[e.renderSlot(p.$slots,"default")],512))}}),Np=e.defineComponent({__name:"MapDataLayer",props:{id:{},layer:{},styleSpec:{},autoCenter:{type:[Boolean,null]}},setup(t,{expose:n}){var m,g,h,f;const{map:o,flyTo:l,setZoom:r}=Le(),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 u=`${location.origin}/api/vtile/${i.id}/ua/{z}/{x}/{y}.vmt?all=1`,p=fe(s,{source:{type:"vector",tiles:[u],minzoom:0,maxzoom:14},popup:i.layer.popup,layer:{style:(h=i.layer)==null?void 0:h.style}});n({layerHandle:p}),(i.autoCenter??!0)&&l({center:i.layer.center||((f=a==null?void 0:a.map)==null?void 0:f.center)||[30,50],animate:!1});let k=null;function c(){if(!(p!=null&&p.setTiles))return;const b=u.includes("?")?"&":"?",E=`${u}${b}_=${Date.now()}`;p.setTiles([E])}function y(){k&&clearTimeout(k),k=setTimeout(()=>{k=null,d().catch(b=>console.error("Failed to update map layer",b))},300)}async function d(){o.value&&(c(),p.setStyle(i.styleSpec??null))}return e.watch(()=>i.styleSpec,y,{deep:!0}),e.onBeforeUnmount(()=>{p.remove()}),(b,E)=>null}}),Nt=e.ref(null);function Bp(){Nt.value=null}function Vp(t){const n=e.ref(!1),o=()=>typeof t=="string"?t:t.value;e.watch(Nt,i=>{i!==o()&&n.value&&(n.value=!1)});function l(){Nt.value=o(),n.value=!0}function r(){Nt.value===o()&&(Nt.value=null),n.value=!1}function a(){n.value?r():l()}return{isOpen:n,open:l,close:r,toggle:a}}const Cp={class:"map-filter"},$p={class:"map-filter__header"},vp={class:"map-filter__title"},Sp={"aria-hidden":"true"},gn="#map-filter-popover-host",Rt=ae(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}=Vp(r),u=e.reactive({top:0,left:0,transform:"translateX(-50%)"}),p=e.ref(null),k=e.ref(null);let c=null;const y=e.ref({}),d=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),f=e.computed(()=>{var w;return((w=o.layer)==null?void 0:w.name)??""}),b=e.computed(()=>g.value),E=e.ref(null),T=e.computed(()=>g.value.length),j=e.computed(()=>T.value<=2),N=e.computed(()=>j.value?"body":typeof window>"u"||E.value?gn:"body"),B=e.computed(()=>{if(!m.value||!j.value)return{};const w=typeof window<"u"?window.innerWidth:280,$=Math.max(280,w-16*2);return{position:"absolute",top:`${u.top}px`,left:`${u.left}px`,transform:u.transform,zIndex:1e3,width:"280px",maxWidth:`${$}px`}});function S(){i()}function L(w,D,$=8){const v=window.scrollY+$,R=window.scrollY+window.innerHeight-$;let K=w;return K+D>R&&(K=R-D),K<v&&(K=v),K}function M(){var Z,se,de;if(!p.value||!j.value)return;const w=p.value.getBoundingClientRect(),D=window.scrollX+8,$=window.scrollX+window.innerWidth-8,v=((Z=k.value)==null?void 0:Z.offsetWidth)||280,R=((se=k.value)==null?void 0:se.offsetHeight)||0;let K=0,X=0;if((de=o.catalogAnchor)!=null&&de.value){const q=o.catalogAnchor.value.getBoundingClientRect(),Y=q.top+window.scrollY;K=L(Y,R,8);const G=q.right+window.scrollX+12,ne=$-v,le=D;X=Math.min(Math.max(G,le),Math.max(le,ne))}else{const q=w.bottom+window.scrollY+8;K=L(q,R,8);let Y=w.left+window.scrollX;Y<D&&(Y=D),Y+v>$&&(Y=Math.max(D,$-v)),X=Y}u.left=X,u.top=K,u.transform="none"}function P(){j.value||C(),s(),a.value&&j.value&&e.nextTick(()=>{M(),F(),requestAnimationFrame(()=>M())})}function I(){o.disabled||P()}e.watch(m,w=>{w&&j.value?e.nextTick(()=>{M(),F(),requestAnimationFrame(()=>M())}):(x(),j.value||C())}),e.watch(b,()=>{!m.value||!j.value||e.nextTick(()=>M())},{deep:!0}),e.watch(j,w=>{m.value&&(w?e.nextTick(()=>{M(),F()}):(x(),C()))}),e.watch(()=>o.disabled,w=>{w&&(i(),y.value={})});function W(){!m.value||!j.value||M()}function z(w){const D=l.value;if(!D)return;const $=fe(D);if(!($!=null&&$.setFilter))return;y.value=w;const v=Object.entries(w).map(([R,K])=>`${R}=${K}`).join("|");$.setFilter(v)}function H(w){if(!o.disabled)return;const D=w.currentTarget;if(!D)return;const $=D.getBoundingClientRect();d.left=$.left+$.width/2+window.scrollX,d.top=$.bottom+8+window.scrollY,d.visible=!0}function A(){d.visible=!1}e.onMounted(()=>{C(),window.addEventListener("resize",W),window.addEventListener("scroll",W,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",W),window.removeEventListener("scroll",W,!0),x()});function F(){x(),!(!k.value||!j.value)&&(c=new ResizeObserver(()=>{!m.value||!j.value||M()}),c.observe(k.value))}function x(){c&&(c.disconnect(),c=null)}function C(){typeof window>"u"||typeof document>"u"||(E.value=document.querySelector(gn))}return(w,D)=>h.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mapLayer-filter",ref_key:"anchor",ref:p},[e.createElementVNode("a",{class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(I,["prevent","stop"]),onMouseenter:H,onMouseleave:A,onFocus:H,onBlur:A},[...D[2]||(D[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:N.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(B.value),ref_key:"panel",ref:k,onClick:D[1]||(D[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Cp,[e.createElementVNode("div",$p,[e.createElementVNode("h3",vp,e.toDisplayString(f.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:S},[e.createElementVNode("span",Sp,[e.createVNode(e.unref(yt),{class:"h-4 w-4"})]),D[3]||(D[3]=e.createElementVNode("span",{class:"sr-only"},"Закрити",-1))])]),e.createVNode(e.unref(n),{view:"inline",schema:b.value,value:y.value,limit:10,onChange:D[0]||(D[0]=$=>z($.data)),width:250},null,8,["schema","value"])])],6)],8,["to"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[d.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${d.top}px`,left:`${d.left}px`})},e.toDisplayString(d.text),5)):e.createCommentVNode("",!0)]))],512)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-cc1f0579"]]),Lp={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"},yn=ae(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",Lp,[e.createVNode(Rt,{layer:{filters:t.filters,id:t.layerId},count:t.filters.length},null,8,["layer","count"])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-98772410"]]),Ap={class:"flex flex-row gap-x-3 z-10 relative widget"},Tp=["onClick"],Mp=["src","alt"],Bt=e.defineComponent({__name:"BaseMaps",setup(t){var d,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,f){let b=h||`layers-${Object.keys(f).length}`,E=1;for(;f[b];)b=`${h}-${E}`,E+=1;return b}const a=e.getCurrentInstance(),i=(d=a==null?void 0:a.appContext.config.globalProperties)==null?void 0:d.$settings,s=i==null?void 0:i.map,u=e.computed(()=>{const h=Array.isArray(s==null?void 0:s.basemaps)?s==null?void 0:s.basemaps:[];if(!h.length)return{};const f={};return h.forEach((b,E)=>{const T=b.name??b.title??`basemap-${E}`,j=(b.id??T??`basemap-${E}`).toString().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),N=r(j||`basemap-${E}`,f),B=b.preview||(b.url?l(b.url):void 0);f[N]={url:b.url,preview:B,title:T}}),f}),p=e.computed(()=>{const h=u.value;return Object.keys(h).length?h:n}),k=e.ref(Object.keys(p.value)[0]??"gki"),c=fe("base",{source:{type:"raster",tiles:(m=p.value[k.value])!=null&&m.url?[(g=p.value[k.value])==null?void 0:g.url]:[]},beforeId:0});function y(h){if(!p.value[h])return;k.value=h;const f=p.value[h];if(!(f!=null&&f.url)){c.setVisible(!1);return}c.setVisible(!0),c.setTiles([f.url])}return e.watch(()=>p.value,h=>{h[k.value]||(k.value=Object.keys(h)[0]??k.value);const f=h[k.value];f!=null&&f.url?(c.setVisible(!0),c.setTiles([f.url])):c.setVisible(!1)},{immediate:!0}),(h,f)=>(e.openBlock(),e.createElementBlock("div",Ap,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,(b,E)=>(e.openBlock(),e.createElementBlock("div",{key:E,onClick:T=>y(E)},[E!=="none"&&b.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",k.value===E?"border-blue-500":"border-gray-200"])},[b.preview?(e.openBlock(),e.createElementBlock("img",{key:0,src:b.preview,alt:b.title,class:"object-cover rounded-lg lg:w-12 lg:h-12 w-8 h-8"},null,8,Mp)):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",k.value===E?"border-blue-500":"border-gray-200"])},[e.createVNode(e.unref(Hr),{class:"w-4 h-4 text-gray-500"})],2))],8,Tp))),128))]))}}),Fp={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%"}},Dp={class:"flex flex-col gap-1 p-5"},Ip={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},hn=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:l}=Le(),r=e.ref([]);let a=null;function i(k){return k?k.map((c,y)=>{var g;const d=(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 ${y+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:`${d}-${y}`,label:d,color:m}}):[]}function s(k){return k!=null&&k.layers?k.layers.filter(c=>{const y=c.paint||{};return y["fill-color"]||y["line-color"]||y["circle-color"]}).map((c,y)=>{var g;const d=c.paint||{},m=d["fill-color"]||d["line-color"]||d["circle-color"]||"#3388ff";return{id:c.id||`layer-${y}`,label:((g=c.metadata)==null?void 0:g.title)||c.id||`Layer ${y+1}`,color:m}}):[]}async function u(){var y;await l();const k=o.value;if(!k)return;const c=(y=k.getStyle)==null?void 0:y.call(k);r.value=s(c)}function p(){o.value&&(a==null||a())}return e.watch(()=>n.items,async k=>{k!=null?(r.value=i(k),a==null||a()):(await l(),p(),u())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await l(),p(),u())}),e.onBeforeUnmount(()=>{a==null||a(),a=null}),(k,c)=>r.value.length?(e.openBlock(),e.createElementBlock("div",Fp,[e.createElementVNode("div",Dp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,y=>(e.openBlock(),e.createElementBlock("div",{key:y.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:y.color})},null,4),e.createElementVNode("span",Ip,[e.createElementVNode("span",null,e.toDisplayString(y.label),1)])]))),128))])])):e.createCommentVNode("",!0)}});function jp(){const{map:t,ready:n}=Le(),o=e.ref(null),l=e.ref(null),r=e.ref(null),a=e.ref(null);let i=[];function s(){i.forEach(d=>d()),i=[]}const u=d=>{const m=(d==null?void 0:d.properties)||{};return!!(m.cluster||m.point_count||m.point_count_abbreviated)},p=d=>{var f,b;o.value=[d.point.x,d.point.y];const m=t.value.queryRenderedFeatures(d.point);if(!(m!=null&&m.length)){k();return}const g=m.find(E=>!u(E));if(!g){k();return}const h=fe(g.source)||fe((f=g.layer)==null?void 0:f.id);h!=null&&h.popup&&(l.value=((b=h.popup)==null?void 0:b.fields)||h.popup,a.value=g.properties)},k=()=>{l.value=null,a.value=null,o.value=null};async function c(){await n(),t.value&&(s(),t.value.on("mousemove",p),t.value.on("mouseleave",k))}function y(){s(),l.value=null,a.value=null,o.value=null}return n().then(c),{popupCoords:o,popupFields:l,popupValues:a,disable:y,title:r}}const zp={class:"min-w-[200px] max-w-[280px] rounded-lg border border-slate-200 bg-white/90 p-3 text-xs shadow-lg backdrop-blur"},Op={class:"space-y-1.5"},Rp={class:"font-bold text-slate-700"},Pp={class:"text-slate-700"},sr=e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,popupFields:o,popupValues:l,disable:r}=jp(),{map:a}=Le(),i=e.ref(null),s=e.ref({left:"-9999px",top:"-9999px"}),u=new Intl.NumberFormat("uk-UA",{maximumFractionDigits:2});function p(g,h){if(h==null||h==="")return h;if((g==null?void 0:g.type)==="number"){const f=typeof h=="number"?h:Number(h);if(Number.isFinite(f))return u.format(f)}return h}function k(g,h,f){const b=g.name||g.label||g.title||`field-${f}`,E=g.label||g.title||g.name||b,T=g.name?h[g.name]:void 0,N=(g.name?h[`${g.name}_text`]:void 0)??T??g.value??null;return{key:b,label:E,value:p(g,N)}}const c=e.computed(()=>{const g=o.value||[],h=l.value||{};return g.filter(f=>(f==null?void 0:f.meta)!=="title").map((f,b)=>k(f,h,b)).filter(f=>f.label)}),y=e.computed(()=>{const g=o.value||[],h=l.value||{},f=g.find(b=>(b==null?void 0:b.meta)==="title");return f?k(f,h,0):null}),d=e.computed(()=>{var h;const g=c.value;return(h=y.value)!=null&&h.value?[{...y.value,key:`${y.value.key}-title`,label:"Назва"},...g]:g});function m(){var x,C;if(!d.value.length||!n.value||!i.value){s.value={left:"-9999px",top:"-9999px"};return}const g=i.value,h=g.offsetParent||null,f=(h==null?void 0:h.getBoundingClientRect())??{left:0,top:0,width:window.innerWidth,height:window.innerHeight},b=((C=(x=a.value)==null?void 0:x.getContainer)==null?void 0:C.call(x))||void 0,E=(b==null?void 0:b.getBoundingClientRect())??f,T=E.left-f.left,j=E.top-f.top,N=g.offsetWidth||0,B=g.offsetHeight||0,S=12,L=8,[M,P]=n.value;let I=T+M+S,W=j+P+S;I+N+L>f.width&&(I=T+M-N-S),W+B+L>f.height&&(W=j+P-B-S);const z=L,H=L,A=Math.max(L,f.width-N-L),F=Math.max(L,f.height-B-L);I=Math.min(Math.max(I,z),A),W=Math.min(Math.max(W,H),F),s.value={left:`${I}px`,top:`${W}px`}}return e.watch([n,d],()=>{e.nextTick(()=>m())}),e.onMounted(()=>{window.addEventListener("resize",m)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",m),r()}),(g,h)=>d.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",zp,[e.createElementVNode("div",Op,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,f=>(e.openBlock(),e.createElementBlock("div",{key:f.key,class:"flex flex-col"},[e.createElementVNode("span",Rp,e.toDisplayString(f.label),1),e.createElementVNode("span",Pp,e.toDisplayString(f.value??"—"),1)]))),128))])])],4)):e.createCommentVNode("",!0)}});function Up(){const{map:t,ready:n}=Le(),o=be.useRoute(),l=be.useRouter(),r=e.ref(null),a=e.ref(null),i=e.ref(null),s=e.ref(!1),u=e.ref([]),p=e.ref(0),k=e.computed(()=>u.value.length),c=e.computed(()=>s.value||!!r.value||!!i.value);let y=null,d=!1;function m(){r.value=null,a.value=null,i.value=null,s.value=!1,u.value=[],p.value=0}function g(){if(y){try{y()}catch{}y=null}}async function h(){await n();const I=t.value;I&&(g(),m(),I.on("click",f),y=()=>I.off("click",f),P(S()))}function f(I){const W=t.value;if(!W)return;const z=(W.queryRenderedFeatures(I.point)||[]).filter(H=>{var A;return(A=H==null?void 0:H.properties)==null?void 0:A.id});if(!z.length){m(),M(null);return}u.value=z,p.value=0,b(p.value)}function b(I){const W=u.value[I];if(!W)return;p.value=I;const z=fe(W.source);j(W,z==null?void 0:z.card)}function E(){p.value>=u.value.length-1||b(p.value+1)}function T(){p.value<=0||b(p.value-1)}async function j(I,W){var A,F,x,C;if(!((A=I==null?void 0:I.properties)!=null&&A.id))return;const z=new URLSearchParams;z.set("layer",I.source),z.set("id",String((F=I.properties)==null?void 0:F.id));const H=Array.isArray(W)&&W.length>0;s.value=H,i.value=null,r.value=null,a.value=I||null;try{const w=await fetch(`/api/map-format?${z.toString()}`);if(!w.ok)throw new Error(`Failed (${w.status})`);const D=await w.json(),$=Array.isArray(D.columns)?D.columns:[],v=Array.isArray(W)?W:[];if(!$.length&&!v.length){console.error("Configure layer in admin"),N();return}r.value={rows:D.rows||{},fields:v,columns:$,html:D.html||null},d||M(a.value);const R=(x=D.rows)==null?void 0:x.geom;if(R){const K=typeof R=="string"?JSON.parse(R):R;K&&(a.value={...a.value,geometry:K,properties:{...((C=a.value)==null?void 0:C.properties)||{},geom:K,geom_4326:K}})}}catch(w){console.error("Failed to load feature card:",w),N()}finally{s.value=!1}}function N(){m(),M(null)}function B(){g(),m()}n().then(h),e.onBeforeUnmount(()=>B());function S(){const I=Array.isArray(o.query.info)?o.query.info[0]:o.query.info;return typeof I!="string"?null:I.trim()||null}function L(I){var A,F;const W=(I==null?void 0:I.source)??((A=I==null?void 0:I.layer)==null?void 0:A.id),z=(F=I==null?void 0:I.properties)==null?void 0:F.id;return!W||z===void 0||z===null?null:`${W},${z}`.trim()||null}function M(I){const W=L(I),z=S();if(W===z)return;const H={...o.query};W?H.info=W:delete H.info,l.push({query:H}).catch(()=>{})}async function P(I){if(!I){m();return}if(I===L(a.value))return;const[W,z]=I.split(","),H=W==null?void 0:W.trim(),A=z==null?void 0:z.trim();if(!H||!A){m(),M(null);return}d=!0;try{const F={source:H,properties:{id:A}};u.value=[F],p.value=0;const x=fe(H);await j(F,x==null?void 0:x.card)}finally{d=!1}}return e.watch(()=>S(),I=>{I!==L(a.value)&&(d=!0,P(I).finally(()=>{d=!1}))}),{card:r,cardFeature:a,cardError:i,cardLoading:s,isOpen:c,close:N,next:E,prev:T,count:k,index:p}}function qp(){const{map:t,ready:n}=Le(),o=e.ref([]),l=e.ref(0),r=e.ref(0),a=e.ref(!1),i=e.ref(null),s=e.ref({}),u=e.ref(null),p=e.ref([]),k=e.computed(()=>o.value[r.value]||null),c=e.computed(()=>o.value.length>0);let y=null;const d=()=>{y==null||y.remove(),y=null},m=S=>S?S.type==="FeatureCollection"?S:S.type==="Feature"?{type:"FeatureCollection",features:[S]}:S.type&&Array.isArray(S.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:S,properties:{}}]}:Array.isArray(S.features)?{type:"FeatureCollection",features:S.features}:S.geometry?m(S.geometry):null:null,g=()=>({type:"line",color:"#0a57ff",width:4,opacity:.95}),h=S=>Number(S.toFixed(5)),f=async S=>{if(await n(),!t.value)return;const L=m(S);L&&(d(),y=fe("feature-highlight",{source:{type:"geojson",data:L},style:g()},t))},b=async(S,L,M)=>{var W,z;const[P,I]=[h(S),h(L)];u.value={x:P,y:I},p.value=M,a.value=!0,i.value=null,o.value=[],s.value={},r.value=0;try{const H=M.map(async w=>{const D=`/api/map-info-point?x=${P}&y=${I}&layers=${w}`,$=await fetch(D);if(!$.ok)return null;const v=await $.json();if(!v.count)return null;const K=await(await fetch(`${D}&index=0`)).json();return{layerId:w,data:K,count:v.count}}),F=(await Promise.all(H)).filter(Boolean);if(F.length===0){l.value=0;return}o.value=F.map(w=>w.data);const[x]=o.value;l.value=F.reduce((w,D)=>w+(D.count||0),0),s.value[0]=x;const C=((W=x==null?void 0:x.data)==null?void 0:W.geom_4326)??((z=x==null?void 0:x.data)==null?void 0:z.geom);await f(C)}catch(H){i.value=H.message}finally{a.value=!1}},E=async S=>{if(!u.value||!p.value.length)return;if(s.value[S]){o.value[S]=s.value[S];return}const{x:L,y:M}=u.value,P=p.value.join(","),I=`/api/map-info-point?x=${L}&y=${M}&index=${S}&layers=${P}`;try{a.value=!0;const W=await fetch(I);if(!W.ok)throw new Error("Failed to fetch feature by index");const z=await W.json();o.value[S]=z,s.value[S]=z}catch(W){i.value=W.message}finally{a.value=!1}},T=async()=>{r.value<l.value-1&&(r.value+=1,s.value[r.value]||await E(r.value))},j=async()=>{r.value>0&&(r.value-=1,s.value[r.value]||await E(r.value))},N=()=>{o.value=[],l.value=0,r.value=0,s.value={},u.value=null,p.value=[],d()};e.watch(r,async()=>{var L,M;const S=k.value;if(S){const P=((L=S==null?void 0:S.data)==null?void 0:L.geom_4326)??((M=S==null?void 0:S.data)==null?void 0:M.geom);await f(P)}});let B=null;return e.onMounted(async()=>{await n(),t.value&&(B=async S=>{const{lng:L,lat:M}=S.lngLat,P=fe(),W=Object.entries(P).map(([z,H])=>{var A,F,x,C;return{id:z,service:((A=H==null?void 0:H.opts)==null?void 0:A.service)??((x=(F=H==null?void 0:H.opts)==null?void 0:F.source)==null?void 0:x.service)??null,count:((C=H==null?void 0:H.opts)==null?void 0:C.count)??null,visible:(()=>{var w;try{return((w=t.value)==null?void 0:w.getLayer(z))?t.value.getLayoutProperty(z,"visibility")!=="none":!0}catch{return!0}})()}}).filter(z=>z.service==="ogc"&&z.visible).map(z=>z.id);W.length>0&&await b(L,M,W)},t.value.on("dblclick",B))}),e.onBeforeUnmount(()=>{t.value&&B&&t.value.off("dblclick",B),d()}),{features:o,count:l,index:r,current:k,loading:a,error:i,active:c,next:T,prev:j,close:N}}const cr=e.defineComponent({__name:"LayerSwitcher",props:{title:{},url:{},id:{},buttonText:{}},emits:["activate"],setup(t,{emit:n}){const o=t,l=n;function r(p){const k=p.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(k)return k;const c=Array.from(p).map(y=>y.charCodeAt(0).toString(16)).join("").slice(0,8);return c?`layer-${c}`:"layer-temp"}const a=e.computed(()=>{var p;return((p=o.id)==null?void 0:p.trim())||r(o.title)}),i=e.computed(()=>o.buttonText||"Показати шар");function s(){return{id:a.value,title:o.title,url:o.url}}function u(){l("activate",s())}return(p,k)=>(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:u},[e.renderSlot(p.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(i.value),1)])]))}}),ze=e.ref([]);function Hp(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 xn(t){return t==null?"":String(t).trim()}function bn(t){var n,o;(o=(n=t==null?void 0:t.handle)==null?void 0:n.remove)==null||o.call(n)}function Wp(t){return t?typeof(t==null?void 0:t.value)<"u"?t.value:t:null}function Yp(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 kn(t){function n(a,i={},s,u){var b,E;const p=xn(a==null?void 0:a.id),k=((b=a==null?void 0:a.title)==null?void 0:b.trim())||p,c=((E=a==null?void 0:a.url)==null?void 0:E.trim())||"";if(!p||!c)return;const y=Hp(c,i);if(!y)return;const d=u??t;if(!d)return;const m=Wp(d);if(!m)return;const g=ze.value.findIndex(T=>T.id===p);g!==-1&&(bn(ze.value[g]),ze.value.splice(g,1));let h=null;const f=a.beforeId??Yp(m);try{h=fe(p,{source:{type:"raster",tiles:[y],tileSize:a.tileSize??256,minzoom:a.minzoom??0,maxzoom:a.maxzoom??19},layer:{id:p,type:"raster",source:p,paint:{"raster-opacity":a.opacity??.85}},beforeId:f},d)}catch(T){const j=(T==null?void 0:T.message)??"";if(!(typeof j=="string"&&j.includes("Map provider")))throw T;return}ze.value=[...ze.value,{id:p,title:k,originalUrl:c,resolvedUrl:y,owner:s??null,handle:h??null}]}function o(a,i){const s=xn(a);if(!s)return;const u=ze.value.findIndex(k=>k.id===s&&(!i||k.owner===i));if(u===-1)return;const[p]=ze.value.splice(u,1);bn(p)}function l(a){if(!ze.value.length)return;const i=[];ze.value.forEach(s=>{(a?s.owner===a:!0)?bn(s):i.push(s)}),ze.value=i}function r(a,i){const s=xn(a);return s?ze.value.some(u=>u.id===s&&(!i||u.owner===i)):!1}return{temporaryLayers:ze,activateTemporaryLayer:n,deactivateTemporaryLayer:o,clearTemporaryLayers:l,isTemporaryLayerActive:r}}const Zp={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"},Gp={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},Kp={class:"min-w-0 flex-1"},Xp={class:"text-base font-semibold text-slate-900 truncate"},Jp={key:0,class:"flex gap-1 mt-1"},Qp=["disabled"],em=["disabled"],tm={key:1,class:"flex gap-1 mt-1"},nm=["disabled"],om=["disabled"],rm={class:"flex-1 overflow-y-auto px-4 py-3 space-y-4 text-sm text-slate-700"},lm={key:0,class:"text-center text-xs text-slate-500"},am={key:1,class:"text-center text-xs text-red-500"},im={key:0,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},sm={class:"divide-y divide-gray-100 py-[5px]"},cm={class:"text-gray-900 font-normal"},dm={key:0,class:"flex gap-1 flex-wrap"},um={key:1,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},pm=["innerHTML"],mm=["innerHTML"],fm={key:2,class:"space-y-3 border-t border-slate-200 pt-3"},gm={key:3,class:"border-t border-slate-100 px-4 py-2 text-right text-xs text-slate-500"},ym={class:"text-xs tracking-[0.02em] leading-none"},hm={key:4,class:"space-y-3 border-t border-slate-200 pt-3"},xm={class:"space-y-1"},bm={class:"flex items-center cursor-pointer gap-2 flex-1"},km=["checked","onChange"],wm={class:"text-[13px] text-gray-600"},_m={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"},Nm="map:temporary-layer-request",dr="cardHideEmpty",Bm=14,ur=ae(e.defineComponent({__name:"MapCardWidget",props:{mapId:{}},setup(t){const n=t,o=Up(),l=qp(),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),u=e.computed(()=>{var _,V;return r.value?((_=l.current.value)==null?void 0:_.html)||null:((V=o.card.value)==null?void 0:V.html)||null}),p=Le(),k=fn(),c=e.computed(()=>{var _,V;return((V=(_=k.value)==null?void 0:_.map)==null?void 0:V.cardHideEmpty)??null}),y=be.useRoute(),{activateTemporaryLayer:d,deactivateTemporaryLayer:m,clearTemporaryLayers:g,isTemporaryLayerActive:h}=kn(p.map);function f(_){window.dispatchEvent(new CustomEvent(Nm,{detail:_}))}const b=e.computed(()=>{var _;return((_=o.cardFeature.value)==null?void 0:_.source)??null}),E=e.computed(()=>b.value?`map-card:${b.value}`:"map-card"),T=e.computed(()=>{var J,te;const _=o.cardFeature.value,V=(_==null?void 0:_.source)||((J=_==null?void 0:_.layer)==null?void 0:J.id),O=((te=_==null?void 0:_.properties)==null?void 0:te.id)??(_==null?void 0:_.id);return V&&O!=null?`${V}:${O}`:null}),j=e.ref(null),N=e.ref(null),B=e.ref(0),S=new Map;function L(){if(typeof window>"u")return null;const V=(window.location.pathname||"").match(/\/maps?\/([^/]+)/i);return V&&V[1]?V[1]:null}const M=e.computed(()=>{const _=typeof n.mapId=="string"?n.mapId.trim():"";if(_.length)return _;const V=typeof y.params.slug=="string"?y.params.slug.trim():"";if(V.length)return V;const O=typeof y.query.slug=="string"?y.query.slug.trim():"";return O.length?O:L()}),P=e.ref(null),I=e.ref(null),W=new Map;function z(_){const V=_.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(V)return V;const O=Array.from(_).map(J=>J.charCodeAt(0).toString(16)).join("").slice(0,8);return O?`layer-${O}`:`layer-${Math.random().toString(36).slice(2,8)}`}function H(_){if(typeof _!="string")return"";const V=_.trim();if(!V)return"";if(/^https?:\/\//i.test(V))return V;if(V.startsWith("//"))return typeof window>"u"?`https:${V}`:`${window.location.protocol}${V}`;const O=typeof window<"u"?window.location.origin:"";return V.startsWith("/")?O?`${O}${V}`:V:O?`${O}/${V}`:V}function A(_){if(_==null)return[];if(Array.isArray(_))return _.flatMap(V=>A(V));if(typeof _=="number")return Number.isFinite(_)?[_]:[];if(typeof _=="string"){const V=_.match(/-?\d+(?:\.\d+)?/g);return!V||!V.length?[]:V.map(O=>Number(O)).filter(O=>Number.isFinite(O))}return[]}function F(_){const V=A(_);if(V.length<4)return null;const[O,J,te,ce]=V;return[O,J,te,ce].every(ge=>Number.isFinite(ge))?[O,J,te,ce]:null}function x(_){if(!_)return null;const V=_.trim();if(!V.length)return null;try{const te=JSON.parse(V),ce=F(te);if(ce)return ce}catch{}const O=V.match(/-?\d+(?:\.\d+)?/g);if(!O||O.length<4)return null;const J=O.slice(0,4).map(te=>Number(te));return J.every(te=>Number.isFinite(te))?[J[0],J[1],J[2],J[3]]:null}function C(_){const V={},O=/([:@\w-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;let J;for(;(J=O.exec(_))!==null;){const te=J[1],ce=J[2]??J[3]??J[4]??"";te&&(V[te]=ce)}return V}function w(_,V){for(const O of V)if(_[O]!=null&&String(_[O]).trim().length)return String(_[O]).trim();return""}function D(_){if(!(_!=null&&_.length))return;const V=Number(_);return Number.isFinite(V)?V:void 0}function $(_){if(typeof _!="string"||!_.length)return[];const V=[],O=/<LayerSwitcher\b([^>]*)>([\s\S]*?)<\/LayerSwitcher>/gi;let J=0,te;const ce=new Set,ge=ye=>{let Ve=ye,Me=2;for(;ce.has(Ve);)Ve=`${ye}-${Me}`,Me+=1;return ce.add(Ve),Ve};for(;(te=O.exec(_))!==null;){const[ye,Ve="",Me=""]=te,_e=te.index;if(_e>J){const Tr=_.slice(J,_e);Tr.trim().length&&V.push({type:"html",content:Tr})}const Fe=C(Ve),je=w(Fe,["title"])||"Тимчасовий шар",Xe=H(w(Fe,["url"]));if(!Xe){V.push({type:"html",content:ye}),J=_e+ye.length;continue}const Lt=w(Fe,["id"]),vn=w(Fe,["button-text","buttonText","show","show-label","showLabel"]),Tx=D(w(Fe,["tile-size","tileSize"])),Mx=D(w(Fe,["minzoom","minZoom"])),Fx=D(w(Fe,["maxzoom","maxZoom"])),Dx=D(w(Fe,["opacity"])),Ix=x(w(Fe,["bounds","data-bounds","bbox"])),jx=Lt||z(`${je}-${Xe}`)||z(je),Lr=ge(jx||`layer-${V.length+1}`),Sn=Me.trim(),Ar=/<[^>]+>/.test(Sn),zx=Ar?Sn:null,Ln=Ar?null:Sn,Ox=vn&&vn.trim().length?vn.trim():Ln&&Ln.trim().length?Ln.trim():void 0;V.push({type:"layer",spec:{id:Lr,title:je,url:Xe,tileSize:Tx,minzoom:Mx,maxzoom:Fx,opacity:Dx,bounds:Ix},componentProps:{title:je,url:Xe,id:Lr,buttonText:Ox},slotText:zx}),J=_e+ye.length}if(J<_.length){const ye=_.slice(J);ye.trim().length&&V.push({type:"html",content:ye})}return!V.length&&_.trim().length&&V.push({type:"html",content:_}),V}function v(_){if(!_)return null;const V=typeof _.id=="string"?_.id.trim():"",O=typeof _.title=="string"?_.title.trim():"",J=H(typeof _.url=="string"?_.url:"");return!V||!J?null:{id:V,title:O||V,url:J,tileSize:_.tileSize,minzoom:_.minzoom,maxzoom:_.maxzoom,opacity:_.opacity,bounds:_.bounds}}const R=e.computed(()=>{if(r.value&&l.current.value)return l.current.value.data??{};const _=o.card.value;return(_==null?void 0:_.rows)??{}}),K=e.computed(()=>{if(r.value&&l.current.value)return l.current.value.fields??[];const _=o.card.value;if(!_)return[];const V=Array.isArray(_.columns)?_.columns:[];return V.length?V:Array.isArray(_.fields)?_.fields:[]}),X=e.computed(()=>{const _=K.value;if(!_.length)return[];const V=R.value;return _.map(O=>({key:O.name,label:O.ua||O.label||O.title||O.name,value:V[O.name]??"—",format:O.format||"text"}))}),Z=new Set(["—","-","–","−"]);function se(_){if(_==null)return!0;if(typeof _=="string"){const V=_.trim();return V.length?Z.has(V):!0}return!1}function de(_){if(!_)return[];if(Array.isArray(_))return _;if(typeof _=="string"){const V=_.trim();if(V.startsWith("{")&&V.endsWith("}")){const J=V.slice(1,-1).match(/"((?:[^"\\]|\\.)*)"/g);return J?J.map(te=>te.slice(1,-1).replace(/\\"/g,'"')):[]}}return[]}const q=e.ref(!1),Y=e.ref(!0),G=()=>{var _,V;return typeof window>"u"?null:((V=(_=window.localStorage)==null?void 0:_.getItem)==null?void 0:V.call(_,dr))??null},ne=e.ref(G()),le=_=>{const V=typeof _=="string"&&_.toLowerCase()==="true";q.value=V,Y.value=!V},me=_=>{ne.value=_};if(typeof window<"u"){const _=V=>{V.key===dr&&me(V.newValue)};window.addEventListener("storage",_),e.onBeforeUnmount(()=>{window.removeEventListener("storage",_)})}const ke=e.computed(()=>typeof ne.value=="string");e.watch(ne,_=>{le(typeof _=="string"?_:c.value)},{immediate:!0}),e.watch(c,_=>{ke.value||le(_)},{immediate:!0});const pe=e.computed(()=>X.value.filter(_=>se(_.value)).length),Re=e.computed(()=>q.value&&!Y.value?X.value.filter(_=>!se(_.value)):X.value);function U(_){const V=typeof _=="string"?_:"";if(!V.length)return{sanitized:"",hiddenCount:0};if(typeof DOMParser>"u")return{sanitized:V,hiddenCount:0};const J=new DOMParser().parseFromString(V,"text/html");let te=0;return J.querySelectorAll("dd").forEach(ce=>{var Ve;const ge=((Ve=ce.textContent)==null?void 0:Ve.trim())??"",ye=ce.closest("div");if(se(ge)){te+=1,ye?ye.remove():ce.remove();return}}),{sanitized:J.body.innerHTML,hiddenCount:te}}const Q=e.computed(()=>U(u.value)),ie=e.computed(()=>u.value?Q.value.hiddenCount:0),we=e.computed(()=>pe.value+ie.value),re=e.computed(()=>{var _;return q.value&&!Y.value&&!!((_=u.value)!=null&&_.trim())}),he=e.computed(()=>q.value&&we.value>0),Te=e.computed(()=>Y.value?"Приховати пусті значення":"Показати пусті значення"),ee=e.computed(()=>Y.value?Pr:Rr);function ve(){Y.value=!Y.value}const $e=e.computed(()=>{const _=re.value?Q.value.sanitized:u.value??"";return $(_)}),Oe=e.computed(()=>$e.value.filter(_=>_.type==="layer"));function tt(_){return Array.isArray(_)?_.map((V,O)=>{const J=H(typeof(V==null?void 0:V.url)=="string"?V.url:""),te=typeof(V==null?void 0:V.geohub)=="string"&&V.geohub.trim().length?`/api-hub/tms/${V.geohub.trim()}/ua/{z}/{x}/{y}.png`:"",ce=((V==null?void 0:V.name)||(V==null?void 0:V.title)||(V==null?void 0:V.label)||`Шар ${O+1}`).toString(),ge=(V==null?void 0:V.id)!=null?String(V.id):z(`${ce}-${O+1}`),ye=(V==null?void 0:V.buttonText)||(V==null?void 0:V.button_text)||null,Ve=(V==null?void 0:V.description)||(V==null?void 0:V.subtitle)||null,Me=J||H(te)||"";if(!Me)return null;const _e={id:ge,title:ce,url:Me,subtitle:Ve,buttonText:ye||void 0};typeof(V==null?void 0:V.tileSize)=="number"&&(_e.tileSize=V.tileSize),typeof(V==null?void 0:V.tile_size)=="number"&&(_e.tileSize=V.tile_size),typeof(V==null?void 0:V.minzoom)=="number"&&(_e.minzoom=V.minzoom),typeof(V==null?void 0:V.maxzoom)=="number"&&(_e.maxzoom=V.maxzoom),typeof(V==null?void 0:V.opacity)=="number"&&(_e.opacity=V.opacity);const Fe=F((V==null?void 0:V.bounds)??(V==null?void 0:V.bbox)??null);return Fe&&(_e.bounds=Fe),_e}).filter(Boolean):[]}const Ue=e.computed(()=>{var J,te;const _=o.card.value,V=l.current.value,O=[(J=_==null?void 0:_.rows)==null?void 0:J.layers,_==null?void 0:_.layers,(te=V==null?void 0:V.data)==null?void 0:te.layers,V==null?void 0:V.layers];for(const ce of O){const ge=tt(ce);if(ge.length)return ge}return[]}),nt=e.computed(()=>$e.value.length>0||X.value.length>0||Ue.value.length>0),Ke=e.computed(()=>!o.cardLoading.value&&!!o.card.value);function ot(){const _={},V=P.value;if(V&&typeof V=="object"&&Object.entries(V).forEach(([O,J])=>{typeof J=="string"&&(_[O]=J)}),b.value&&(_.layer=b.value),!_.geohub){const O=typeof(V==null?void 0:V.geohub)=="string"?V.geohub:null,J=typeof(V==null?void 0:V.geohub_key)=="string"?V.geohub_key:null,te=typeof(V==null?void 0:V.geohubId)=="string"?V.geohubId:null;_.geohub=O||J||te||_.layer||""}return _}async function vt(){const _=b.value;if(!_)return P.value=null,I.value=null,null;if(I.value===_&&P.value)return P.value;if(W.has(_)){const V=W.get(_);return P.value=V,I.value=_,V}try{const V=await fetch(`/api/gis-service/${encodeURIComponent(_)}`);if(!V.ok)return null;const O=await V.json();return W.set(_,O),P.value=O,I.value=_,O}catch{return null}}async function En(_){if(!(_!=null&&_.id))return;await vt();const V=ot(),O=Oe.value.find(ye=>ye.spec.id===_.id),J=Ue.value.find(ye=>ye.id===_.id),te=(O==null?void 0:O.spec)||v(J)||v(_),ce=(O==null?void 0:O.spec.bounds)??(J==null?void 0:J.bounds);if(!te||h(te.id,E.value))return;const ge=E.value||void 0;j.value=ge??null,d(te,V,ge),f({action:"activate",owner:ge,spec:te,context:V}),kx(ce)}async function kx(_){var ce;if(!(_!=null&&_.length))return;const[V,O,J,te]=_;[V,O,J,te].every(ge=>Number.isFinite(ge))&&typeof p.fitBounds=="function"&&(await((ce=p.ready)==null?void 0:ce.call(p)),p.fitBounds([[V,O],[J,te]],{padding:48,maxZoom:18}))}function wx(_){if(!_)return;const V=Nn()||void 0;m(_,V),f({action:"deactivate",owner:V,spec:{id:_}})}function _x(_){return h(_,Nn())}function Ex(_,V){const O=V.target;!!(O!=null&&O.checked)?En(_):wx(_.id)}function Nn(){return j.value||E.value||null}e.watch(b,(_,V)=>{_!==V&&(P.value=null,I.value=null)});const{next:_r,prev:Er,count:Bn,index:Ht}=l,Vn=e.computed(()=>o.count.value),Cn=e.computed(()=>o.index.value),Nr=e.computed(()=>Vn.value>1),Br=e.computed(()=>r.value?Bn.value:Vn.value),Vr=e.computed(()=>r.value?Ht.value:Cn.value),Cr=o.next,$r=o.prev;function rt(){const _=Nn();_&&(g(_),f({action:"clear",owner:_}),j.value=null)}function Nx(){o.close(),l.close(),rt()}e.watch(a,(_,V)=>{!_&&V&&(rt(),He())});function vr(){!o.isOpen.value&&!l.active.value&&rt()}e.watch(()=>o.isOpen.value,()=>{vr()}),e.watch(()=>l.active.value,()=>{vr()}),e.watch(b,(_,V)=>{_&&V&&_!==V&&rt()}),e.watch(Ht,(_,V)=>{_!==V&&rt()}),e.watch(T,(_,V)=>{_&&V&&_!==V&&rt()});function Bx(_){if(!_)return null;if(_.geometry)return _.geometry;const V=(_==null?void 0:_.data)??(_==null?void 0:_.properties);return V!=null&&V.geom_4326?V.geom_4326:V!=null&&V.geom?V.geom:null}function He(){var _,V;(V=(_=N.value)==null?void 0:_.remove)==null||V.call(_),N.value=null}function Vx(_){var O,J,te;const V=(_==null?void 0:_.type)||((te=(J=(O=_==null?void 0:_.features)==null?void 0:O[0])==null?void 0:J.geometry)==null?void 0:te.type)||"";return V.includes("Polygon")?{type:"fill",paint:{"fill-color":"#0a57ff","fill-opacity":.2,"fill-outline-color":"#0a57ff"}}:V.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 $n=null;function Sr(){const _=Array.isArray(y.query.info)?y.query.info[0]:y.query.info;return typeof _!="string"?null:_.trim()||null}function Cx(_){var te,ce;if(!_)return null;const V=(_==null?void 0:_.source)??((te=_==null?void 0:_.layer)==null?void 0:te.id),O=((ce=_==null?void 0:_.properties)==null?void 0:ce.id)??(_==null?void 0:_.id);return!V||O===void 0||O===null?null:`${V},${O}`.trim()||null}function Wt(_,V){if(_){if(Array.isArray(_)){if(_.length>=2&&typeof _[0]=="number"&&typeof _[1]=="number"){V.push([_[0],_[1]]);return}_.forEach(O=>Wt(O,V));return}typeof _=="object"&&(Array.isArray(_.coordinates)&&Wt(_.coordinates,V),Array.isArray(_.features)&&_.features.forEach(O=>Wt(O==null?void 0:O.geometry,V)))}}function $x(_){var ye,Ve;if(!_)return null;const V=_.type==="FeatureCollection"?(Ve=(ye=_.features)==null?void 0:ye[0])==null?void 0:Ve.geometry:_.type==="Feature"?_.geometry:_,O=[];if(Wt(V,O),!O.length)return null;let J=O[0][0],te=O[0][0],ce=O[0][1],ge=O[0][1];return O.forEach(([Me,_e])=>{Me<J&&(J=Me),Me>te&&(te=Me),_e<ce&&(ce=_e),_e>ge&&(ge=_e)}),[(J+te)/2,(ce+ge)/2]}async function vx(_,V){var ce;const O=Sr();if(!O)return;const J=Cx(_);if(!J||J!==O||$n===O)return;const te=$x(V);te&&(await((ce=p.ready)==null?void 0:ce.call(p)),p.flyTo({center:te,zoom:Bm}),$n=O)}function Sx(_){var te;if(!_){He();return}const V=(te=p.map)==null?void 0:te.value,O={type:"FeatureCollection",features:[{type:"Feature",geometry:_,properties:{}}]};He();const J=Vx(_);if(N.value=fe("feature-card-highlight",{source:{type:"geojson",data:O},layer:{id:"feature-card-highlight",type:J.type,source:"feature-card-highlight",paint:J.paint}},p.map),V!=null&&V.moveLayer){const ce=()=>{try{V.moveLayer("feature-card-highlight")}catch{}},ge=()=>{typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame(()=>{window.requestAnimationFrame(ce)}):setTimeout(ce,0)};ge();const ye=()=>ge();V.once("styledata",ye);const Ve=()=>{ge(),V.off("styledata",ye),V.off("idle",Ve)};V.on("idle",Ve)}}function Lx(_){var J,te;const V=(_==null?void 0:_.source)||((J=_==null?void 0:_.layer)==null?void 0:J.id)||"unknown",O=((te=_==null?void 0:_.properties)==null?void 0:te.id)??(_==null?void 0:_.id)??"unknown";return`${V}:${O}`}async function Ax(_){var ce,ge,ye,Ve,Me;if(!_)return null;const V=Bx(_);if(V)return V;const O=((ce=_==null?void 0:_.properties)==null?void 0:ce.id)??(_==null?void 0:_.id);if(!O)return null;const J=Lx(_);if(S.has(J))return S.get(J);const te=[M.value,_==null?void 0:_.source,(ge=_==null?void 0:_.layer)==null?void 0:ge.id].map(_e=>typeof _e=="string"?_e.trim():"").filter(Boolean);for(const _e of te)try{const Fe=await fetch(`/api/map-features/${encodeURIComponent(_e)}/${encodeURIComponent(String(O))}`);if(!Fe.ok)continue;const je=await Fe.json(),Xe=((ye=je==null?void 0:je.data)==null?void 0:ye.geom)||((Ve=je==null?void 0:je.data)==null?void 0:Ve.geometry)||((Me=je==null?void 0:je.data)==null?void 0:Me.geom_4326)||null,Lt=typeof Xe=="string"?JSON.parse(Xe):Xe;if(Lt)return S.set(J,Lt),Lt}catch{continue}return null}async function St(_){B.value+=1;const V=B.value;if(!_||r.value){He();return}if(!Ke.value){He();return}const O=await Ax(_);if(V===B.value){if(!O){He();return}Sx(O),vx(_,O)}}return e.watch(()=>o.cardFeature.value,_=>{St(_)},{immediate:!0}),e.watch(()=>o.index.value,()=>{r.value||St(o.cardFeature.value)}),e.watch(r,_=>{_?He():St(o.cardFeature.value)}),e.watch(M,()=>{!r.value&&o.cardFeature.value&&St(o.cardFeature.value)}),e.watch(Ke,_=>{_?St(o.cardFeature.value):He()}),e.watch(()=>Sr(),()=>{$n=null}),e.onBeforeUnmount(()=>{rt(),He()}),(_,V)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[a.value?(e.openBlock(),e.createElementBlock("div",Zp,[e.createElementVNode("div",Gp,[e.createElementVNode("div",Kp,[e.createElementVNode("p",Xp,[r.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString(Vr.value+1)+" / "+e.toDisplayString(Br.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[Nr.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Об’єкт "+e.toDisplayString(Vr.value+1)+" / "+e.toDisplayString(Br.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Інформація про об’єкт ")],64))],64))])]),r.value&&e.unref(Bn)>1?(e.openBlock(),e.createElementBlock("div",Jp,[e.createElementVNode("button",{onClick:V[0]||(V[0]=(...O)=>e.unref(Er)&&e.unref(Er)(...O)),disabled:e.unref(Ht)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(Mn),{class:"h-4 w-4"})],8,Qp),e.createElementVNode("button",{onClick:V[1]||(V[1]=(...O)=>e.unref(_r)&&e.unref(_r)(...O)),disabled:e.unref(Ht)===e.unref(Bn)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(Fn),{class:"h-4 w-4"})],8,em)])):!r.value&&Nr.value?(e.openBlock(),e.createElementBlock("div",tm,[e.createElementVNode("button",{onClick:V[2]||(V[2]=(...O)=>e.unref($r)&&e.unref($r)(...O)),disabled:Cn.value===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(Mn),{class:"h-4 w-4"})],8,nm),e.createElementVNode("button",{onClick:V[3]||(V[3]=(...O)=>e.unref(Cr)&&e.unref(Cr)(...O)),disabled:Cn.value===Vn.value-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(Fn),{class:"h-4 w-4"})],8,om)])):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:Nx}," ✕ ")]),e.createElementVNode("div",rm,[i.value?(e.openBlock(),e.createElementBlock("div",lm," Завантаження даних… ")):s.value?(e.openBlock(),e.createElementBlock("div",am,e.toDisplayString(s.value),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[X.value.length?(e.openBlock(),e.createElementBlock("div",im,[e.createElementVNode("dl",sm,[(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",cm,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":""])},[O.format==="tags"?(e.openBlock(),e.createElementBlock("div",dm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(de(O.value),(J,te)=>(e.openBlock(),e.createElementBlock("span",{key:te,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold text-foreground"},e.toDisplayString(J),1))),128))])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(O.value),1)],64))],2)]))),128))])])):$e.value.length?(e.openBlock(),e.createElementBlock("div",um,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($e.value,(O,J)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:J},[O.type==="html"?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:O.content},null,8,pm)):(e.openBlock(),e.createBlock(cr,{key:1,title:O.componentProps.title,url:O.componentProps.url,id:O.componentProps.id,"button-text":O.componentProps.buttonText,onActivate:En},e.createSlots({_:2},[O.slotText?{name:"default",fn:e.withCtx(()=>[e.createElementVNode("span",{innerHTML:O.slotText},null,8,mm)]),key:"0"}:void 0]),1032,["title","url","id","button-text"]))],64))),128))])):e.createCommentVNode("",!0),Oe.value.length?(e.openBlock(),e.createElementBlock("div",fm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Oe.value,O=>(e.openBlock(),e.createBlock(cr,{key:O.spec.id,title:O.componentProps.title,url:O.componentProps.url,id:O.spec.id,"button-text":O.componentProps.buttonText,onActivate:En},null,8,["title","url","id","button-text"]))),128))])):e.createCommentVNode("",!0),he.value?(e.openBlock(),e.createElementBlock("div",gm,[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:ve},[e.createElementVNode("span",ym,e.toDisplayString(Te.value),1),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(ee.value),{class:"h-3 w-3 stroke-[1.5px]"}))])])):e.createCommentVNode("",!0),Ue.value.length?(e.openBlock(),e.createElementBlock("div",hm,[V[5]||(V[5]=e.createElementVNode("p",{class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},"Шари",-1)),e.createElementVNode("div",xm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ue.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",bm,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:_x(O.id),onChange:J=>Ex(O,J)},null,40,km),V[4]||(V[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",wm,e.toDisplayString(O.title),1)]),O.subtitle?(e.openBlock(),e.createElementBlock("div",_m,e.toDisplayString(O.subtitle),1)):e.createCommentVNode("",!0)]))),128))])])):e.createCommentVNode("",!0),nt.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Em," Даних не знайдено. "))],64))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-b9b6f5d5"]]),pr=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var y,d;const n=t,o=((d=(y=e.getCurrentInstance())==null?void 0:y.appContext.config.globalProperties)==null?void 0:d.$settings)||null,{map:l,ready:r}=Le();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 u(m){var f,b,E;return{type:"line",color:"#8e4484",width:2,opacity:((((E=(b=(f=m==null?void 0:m.features)==null?void 0:f[0])==null?void 0:b.geometry)==null?void 0:E.type)||"").includes("Polygon"),.95)}}async function p(m){const g=await fetch(m);if(!g.ok)throw new Error(String(g.status));return g.json()}async function k(m,g){if(m){const h=/^https?:\/\//.test(m)?m:new URL(m,location.origin).toString(),f=await p(h).catch(()=>null),b=s(f);if(b)return b}if(g){const h=await p(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(g)}`).catch(()=>null),f=s(h);if(f)return f}return null}async function c(){var f,b,E,T;if(!n.layerId||!l.value){i();return}typeof r=="function"&&await r().catch(()=>{});const m=n.boundary??((f=n.settingsMap)==null?void 0:f.boundary)??((b=o==null?void 0:o.map)==null?void 0:b.boundary)??null,g=n.katottg??((E=n.settingsMap)==null?void 0:E.katottg)??((T=o==null?void 0:o.map)==null?void 0:T.katottg)??null;if(!m&&!g){i();return}const h=await k(m,g);if(!h){i();return}i(),a=fe(`${n.layerId}-boundary`,{source:{type:"geojson",data:h},style:u(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}}),Vm={class:"map-center-control"},Cm=["aria-label"],$m={class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},et=ae(e.defineComponent({name:"MapCenterControl",__name:"MapCenterControl",props:{center:{},zoom:{},targetCenter:{},targetZoom:{},targetLabel:{},targetAriaLabel:{}},setup(t){const n=t,{map:o,ready:l}=Le(),r=e.ref(null),a=e.ref(null),i=e.ref(null),s=e.ref(null),u=fn(),p=e.computed(()=>{var b;return((b=u.value)==null?void 0:b.map)??null});function k(b){if(Array.isArray(b)&&b.length>=2){const[E,T]=b.slice(0,2).map(j=>Number(j));return Number.isNaN(E)||Number.isNaN(T)?null:[E,T]}if(b&&typeof b=="object"){const E=b,T=E.lng??E.lon??E.long??E.x,j=E.lat??E.y;if(T!=null&&j!=null){const N=Number(T),B=Number(j);if(!Number.isNaN(N)&&!Number.isNaN(B))return[N,B]}}if(typeof b=="string"){const E=b.split(",").map(T=>Number(T.trim()));if(E.length>=2&&E.every(T=>!Number.isNaN(T)))return[E[0],E[1]]}return null}function c(b){const E=k(b);E&&(r.value=E)}function y(b){const E=Number(b);Number.isNaN(E)||(a.value=E)}e.watch(()=>n.center,b=>c(b),{immediate:!0}),e.watch(()=>n.zoom,b=>y(b),{immediate:!0}),e.watch(()=>n.targetCenter,b=>{i.value=k(b)},{immediate:!0}),e.watch(()=>n.targetZoom,b=>{const E=Number(b);s.value=Number.isNaN(E)?null:E},{immediate:!0}),e.watch(()=>{var b;return(b=p.value)==null?void 0:b.center},b=>{c(b)},{immediate:!0}),e.watch(()=>{var b;return(b=p.value)==null?void 0:b.zoom},b=>{y(b)},{immediate:!0});const d=e.computed(()=>{var b;return((b=n.targetLabel)==null?void 0:b.trim())||"Точка"}),m=e.computed(()=>n.targetAriaLabel||"Перейти до точки"),g=e.computed(()=>!!i.value);e.onMounted(async()=>{await(l==null?void 0:l());const b=o.value;if(b){if(!r.value){const E=b.getCenter();r.value=[E.lng,E.lat]}a.value==null&&(a.value=b.getZoom())}});function h(){const b=o.value;if(!b)return;const E=r.value||(()=>{const j=b.getCenter();return[j.lng,j.lat]})(),T=a.value??b.getZoom();b.flyTo({center:E,zoom:T})}function f(){const b=o.value;if(!b||!i.value)return;const E=s.value??a.value??b.getZoom();b.flyTo({center:i.value,zoom:E})}return(b,E)=>(e.openBlock(),e.createElementBlock("div",Vm,[g.value?e.createCommentVNode("",!0):(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(h,["stop"])},[E[0]||(E[0]=e.createElementVNode("span",{class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},"Центр мапи",-1)),e.createVNode(e.unref(Wr),{class:"w-4 h-4"})])),g.value?(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":m.value,onClick:e.withModifiers(f,["stop"])},[e.createElementVNode("span",$m,e.toDisplayString(d.value),1),e.createVNode(e.unref(Yr),{class:"w-4 h-4"})],8,Cm)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-03fa94f6"]]),vm={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},Sm={class:"flex-1 relative overflow-hidden"},Lm={class:"absolute top-0 left-0 w-full z-20"},Am={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},Tm={class:"flex items-center gap-3 h-[2.75rem]"},Mm={class:"font-semibold text-lg text-gray-800 line-clamp-1"},Fm={key:0,class:"text-xs text-gray-500 truncate"},Dm=["title"],Im={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]"},jm={class:"relative w-full h-full"},zm={style:{top:"17px",left:"230px",position:"absolute","z-index":"1"}},Om={class:"absolute top-4 left-4 z-20"},Rm={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},Pm={class:"absolute bottom-4 left-4 z-20"},Um={class:"w-[650px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},qm={class:"flex-1 flex flex-col h-full"},Hm={class:"px-3 pt-3 pb-2 border-b border-gray-100"},Wm={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"},Ym=["aria-selected","onClick"],Zm={class:"leading-none"},Gm={class:"flex flex-col flex-1 overflow-y-hidden p-3"},Km="OpenGIS",Xm=1e3,Jm=ae(e.defineComponent({__name:"service",props:{hideServiceKey:{type:Boolean,default:!1}},setup(t){var w,D;const n=t,o=e.toRef(n,"hideServiceKey"),l=be.useRoute(),r=be.useRouter(),{id:a}=l.params,i=e.ref(null),s=e.ref({}),u=e.ref(null),p=((D=(w=e.getCurrentInstance())==null?void 0:w.appContext.config.globalProperties)==null?void 0:D.$settings)||null;function k($){typeof document>"u"||(document.title=$?`${$} — Сервіс`:Km)}const c=e.ref(null),y=e.ref(""),d=e.ref([]),m=e.ref([]),g=e.ref([]),h=e.ref("list"),f=e.ref(""),b=e.ref([]);let E=null;const T=e.computed(()=>{var $,v;return(($=u.value)==null?void 0:$.id)??((v=u.value)==null?void 0:v.service_id)??null}),j=e.computed(()=>{const $=(p==null?void 0:p.map)||null,v=($==null?void 0:$.boundary)??null,R=($==null?void 0:$.katottg)??null;return!v&&!R?null:{boundary:v,katottg:R}}),N=e.computed(()=>{const $=u.value;if(!$)return"";const v=[];!o.value&&$.service_key&&v.push(`Сервіс: ${$.service_key}`),$.description&&v.push($.description);const R=$.group_name||$.group_id;return R&&v.push(`Група: ${R}`),typeof $.is_public<"u"&&v.push($.is_public?"Публічний":"Не публічний"),typeof $.is_active<"u"&&v.push($.is_active?"Активний":"Неактивний"),v.join(", ")}),B=[{key:"style",label:"Стиль",icon:tr},{key:"popup",label:"Попап",icon:$u},{key:"filter",label:"Фільтр",icon:Au},{key:"legend",label:"Легенда",icon:ku},{key:"card",label:"Картка",icon:Nu}],S=B.map($=>$.key),L=e.ref("style");e.onMounted(async()=>{const $=l.query.tab;$&&S.includes($)&&(L.value=$),await H()}),e.watch(L,$=>{l.query.tab!==$&&r.replace({query:{...l.query,tab:$}})}),e.watch(()=>l.query.tab,$=>{$&&S.includes($)&&L.value!==$&&(L.value=$)}),e.watch(()=>{var $;return($=u.value)==null?void 0:$.name},$=>k($),{immediate:!0});function M($){if(!$)return null;try{return JSON.parse(JSON.stringify($))}catch(v){return console.warn("Failed to clone style",v),null}}function P($){if(!$)return null;if(typeof $=="string")try{return cn(er.load($)||null)}catch(v){return console.warn("Failed to parse style yaml",v),null}return cn(M($))}function I($,v){try{return JSON.stringify($)===JSON.stringify(v)}catch{return!1}}function W(){var v;if(!u.value)return;const $=P(c.value);I($,((v=u.value)==null?void 0:v.style)??null)||(u.value={...u.value,style:$})}function z(){E&&clearTimeout(E),E=setTimeout(()=>{E=null,W()},Xm)}const H=async()=>{try{const $=await fetch(`/api/gis-service/${a}`);if(!$.ok)throw new Error(`${$.status}`);const v=await $.json();s.value=v||{},i.value=a;const R=P(v.style);u.value=v?{...v,style:M(R)}:null,c.value=R,y.value=typeof(v==null?void 0:v.style)=="string"?v.style:R?er.dump(R):"",m.value=(v==null?void 0:v.popup)||[],h.value=v.card_mode==="html"?"html":"list",g.value=v.card,f.value=v.html,d.value=(v==null?void 0:v.legend)||[],b.value=(v==null?void 0:v.filters)||[]}catch($){console.error("Failed to fetch map info",$)}};e.watch(()=>{var $;return($=u.value)==null?void 0:$.style},$=>{c.value=P($)},{deep:!0}),e.watch(()=>c.value,()=>{z()},{deep:!0}),e.onBeforeUnmount(()=>{E&&(clearTimeout(E),E=null)});async function A($,v){await x({[$]:v},$)}function F(){const $=M(c.value);u.value=u.value?{...u.value,style:$}:u.value}async function x($,v){if(u.value={...u.value||{},...$},typeof $.html<"u"&&(s.value={...s.value||{},html:$.html}),!!T.value)try{if(!(await fetch(`/api/gis-service/${T.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify($)})).ok)throw new Error("Save failed");ue.notify({type:"success",title:"Успіх",message:`${v} saved`}),await H()}catch(R){ue.notify({type:"error",title:"Помилка",message:`Failed to save ${v}`}),console.error(R)}}async function C($,v){if($!=="card"){await A($,v);return}const R=(v==null?void 0:v.card_mode)==="html"?"html":"list",K=R==="html"&&typeof(v==null?void 0:v.html)=="string"?v.html:"",X=(R==="html"?[]:null)||(Array.isArray(v==null?void 0:v.list)?v.list:[]);g.value=X,h.value=R,f.value=K;const Z={card_mode:R};R==="html"&&(Z.html=K),R==="list"&&(Z.card=X),await x(Z,"card")}return($,v)=>{var R,K,X;return e.openBlock(),e.createElementBlock("div",vm,[e.createElementVNode("div",Sm,[e.createElementVNode("div",Lm,[e.createElementVNode("div",Am,[e.createElementVNode("div",Tm,[e.createElementVNode("button",{onClick:v[0]||(v[0]=Z=>$.$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"},[...v[10]||(v[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",Mm,e.toDisplayString((R=u.value)==null?void 0:R.name),1),N.value?(e.openBlock(),e.createElementBlock("div",Fm,e.toDisplayString(N.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:"max-w-xl text-xs text-gray-600 truncate",title:(K=u.value)==null?void 0:K.description},e.toDisplayString((X=u.value)==null?void 0:X.description),9,Dm)])]),e.createElementVNode("div",Im,[e.createElementVNode("div",jm,[e.createVNode(Ot,null,{default:e.withCtx(()=>{var Z,se,de,q,Y,G,ne;return[(Z=u.value)!=null&&Z.service_id?(e.openBlock(),e.createBlock(Np,{key:0,id:(se=u.value)==null?void 0:se.service_id,layer:u.value,"style-spec":((de=u.value)==null?void 0:de.style)||null,autoCenter:!1},null,8,["id","layer","style-spec"])):e.createCommentVNode("",!0),T.value?(e.openBlock(),e.createBlock(pr,{key:1,"layer-id":T.value,boundary:((q=u.value)==null?void 0:q.boundary)||((Y=j.value)==null?void 0:Y.boundary)||null,katottg:((G=u.value)==null?void 0:G.katottg)||((ne=j.value)==null?void 0:ne.katottg)||null},null,8,["layer-id","boundary","katottg"])):e.createCommentVNode("",!0),e.createElementVNode("div",zm,[T.value?(e.openBlock(),e.createBlock(yn,{key:0,"layer-id":T.value,filters:b.value},null,8,["layer-id","filters"])):e.createCommentVNode("",!0)]),v[11]||(v[11]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createElementVNode("div",Om,[e.createVNode(Bt)]),e.createElementVNode("div",Rm,[e.createVNode(et),s.value.center?(e.openBlock(),e.createBlock(et,{key:0,targetCenter:s.value.center,targetLabel:"Ценр даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Pm,[e.createVNode(hn,{items:d.value||null},null,8,["items"])]),e.createVNode(sr),e.createVNode(ur,{html:s.value.html},null,8,["html"])]}),_:1})])])]),e.createElementVNode("div",Um,[e.createElementVNode("div",qm,[e.createElementVNode("div",Hm,[e.createElementVNode("div",Wm,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(B,Z=>e.createElementVNode("button",{key:Z.key,type:"button",role:"tab","aria-selected":L.value===Z.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",L.value===Z.key?"bg-white shadow-sm text-gray-700":""]),onClick:se=>L.value=Z.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(Z.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",Zm,e.toDisplayString(Z.label),1)],10,Ym)),64))])]),e.createElementVNode("div",Gm,[L.value==="style"?(e.openBlock(),e.createBlock(zu,{key:0,token:T.value,"style-text":y.value,"style-yaml":c.value,"onUpdate:styleYaml":v[1]||(v[1]=Z=>c.value=Z),"onUpdate:styleText":v[2]||(v[2]=Z=>y.value=Z),onUpdate:F},null,8,["token","style-text","style-yaml"])):L.value==="legend"?(e.openBlock(),e.createBlock(mp,{key:1,token:T.value,columns:d.value,"onUpdate:columns":v[3]||(v[3]=Z=>d.value=Z),onSave:v[4]||(v[4]=Z=>A("legend",Z))},null,8,["token","columns"])):L.value==="popup"?(e.openBlock(),e.createBlock(lp,{key:2,token:T.value,columns:m.value,fields:s.value.fields,"onUpdate:columns":v[5]||(v[5]=Z=>m.value=Z),onSave:v[6]||(v[6]=Z=>A("popup",Z))},null,8,["token","columns","fields"])):L.value==="card"?(e.openBlock(),e.createBlock(wp,{key:3,token:T.value,columns:g.value,fields:s.value.fields,"view-mode":h.value,html:f.value,"onUpdate:columns":v[7]||(v[7]=Z=>g.value=Z),onSave:C},null,8,["token","columns","fields","view-mode","html"])):L.value==="filter"?(e.openBlock(),e.createBlock(Ep,{key:4,token:T.value,fields:s.value.fields,columns:b.value,"onUpdate:columns":v[8]||(v[8]=Z=>b.value=Z),onSave:v[9]||(v[9]=Z=>A("filters",Z))},null,8,["token","fields","columns"])):e.createCommentVNode("",!0)])])])])}}}),[["__scopeId","data-v-5e9526e9"]]),Qm={class:"flex-1 overflow-y-auto p-4 sm:p-6"},ef={class:"space-y-3"},tf={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},nf={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2"},of={class:"text-xs text-gray-500 mb-1"},rf={key:0,class:"text-base text-md font-semibold text-gray-900"},lf={key:1,class:"text-base text-md font-semibold text-gray-900"},af={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},sf={class:"space-y-2"},cf={class:"bg-gradient-to-br from-blue-50 to-blue-100/30 p-4 rounded-lg border border-blue-200"},df={class:"text-sm font-semibold text-gray-900"},uf={class:"text-xs text-gray-600 mt-1"},pf={class:"grid grid-cols-2 gap-3"},mf={class:"text-xs text-gray-500 mb-1"},ff={class:"text-sm font-semibold text-gray-900"},gf={class:"bg-gray-50 p-4 rounded-lg"},yf={class:"grid grid-cols-2 gap-4"},hf={class:"text-xs text-gray-500 mb-1"},xf={class:"text-sm font-semibold text-gray-900"},bf=e.defineComponent({directives:{tooltip:ue.TooltipDirective},__name:"raster-info-tab",props:{details:{}},setup(t){return(n,o)=>{const l=e.resolveDirective("tooltip");return e.openBlock(),e.createElementBlock("div",Qm,[e.createElementVNode("div",ef,[e.createElementVNode("div",tf,[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",nf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.baseParams,r=>(e.openBlock(),e.createElementBlock("div",{key:r.label,class:"bg-gray-50 p-2 rounded-lg"},[e.createElementVNode("p",of,e.toDisplayString(r.label),1),r.tooltip?e.withDirectives((e.openBlock(),e.createElementBlock("p",rf,[e.createTextVNode(e.toDisplayString(r.value),1)])),[[l,r.tooltip]]):(e.openBlock(),e.createElementBlock("p",lf,e.toDisplayString(r.value),1))]))),128))])]),e.createElementVNode("div",af,[o[3]||(o[3]=e.createElementVNode("div",{class:"mb-2"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Просторова інформація")],-1)),e.createElementVNode("div",sf,[e.createElementVNode("div",null,[o[1]||(o[1]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Система координат",-1)),e.createElementVNode("div",cf,[e.createElementVNode("p",df,e.toDisplayString(t.details.spatial.crs.code),1),e.createElementVNode("p",uf,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",pf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.bounds,r=>(e.openBlock(),e.createElementBlock("div",{key:r.label,class:"bg-gray-50 p-2 rounded-lg border border-gray-200"},[e.createElementVNode("p",mf,e.toDisplayString(r.label),1),e.createElementVNode("p",ff,e.toDisplayString(r.value),1)]))),128))])]),e.createElementVNode("div",gf,[e.createElementVNode("div",yf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.resolution,r=>(e.openBlock(),e.createElementBlock("div",{key:r.label},[e.createElementVNode("p",hf,e.toDisplayString(r.label),1),e.createElementVNode("p",xf,e.toDisplayString(r.value),1)]))),128))])])])])])])}}}),kf={class:"flex-1 overflow-y-auto space-y-3 pr-1"},wf={class:"font-medium text-sm text-gray-800"},_f={class:"text-xs text-gray-500"},Ef=e.defineComponent({__name:"raster-files-tab",props:{files:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",kf,[(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",wf,e.toDisplayString(l.name),1),e.createElementVNode("p",_f,e.toDisplayString(l.resolution)+" • "+e.toDisplayString(l.size)+"MB",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))]))}}),Nf={},Bf={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 Vf(t,n){return e.openBlock(),e.createElementBlock("svg",Bf,[...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 Cf=ae(Nf,[["render",Vf]]),$f={},vf={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 Sf(t,n){return e.openBlock(),e.createElementBlock("svg",vf,[...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 Lf=ae($f,[["render",Sf]]),Af={class:"absolute top-[5.5rem] left-4 z-30 flex items-center gap-2 rounded-full bg-white/90 px-3 py-1 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},Tf=e.defineComponent({__name:"RasterLayer",props:{tileUrl:{},extent:{},layerId:{},beforeId:{}},setup(t){const n=t,o=n.layerId||"raster-preview-layer",l=`${o}-source`,r=n.extent&&n.extent.length===4?[...n.extent]:void 0,a=fe(o,{sourceId:l,source:{type:"raster",tiles:n.tileUrl?[n.tileUrl+"?nottl=1"]:[],tileSize:256,...r?{bounds:r}:{}},layer:{id:`${o}-raster`,type:"raster",paint:{"raster-opacity":.95}},beforeId:n.beforeId??null}),{fitBounds:i}=Le(),s=e.ref(.95);e.watch(()=>n.tileUrl,c=>{if(!c){a.setVisible(!1);return}a.setVisible(!0),a.setTiles([c])},{immediate:!0}),e.watch(()=>s.value,c=>{a.setOpacity(c)},{immediate:!0});let u=null,p=!1;e.watch(()=>n.extent,c=>{if(!c||c.length!==4)return;const y=c.join(",");if(y!==u){if(u=y,!p){p=!0;return}i==null||i([[c[0],c[1]],[c[2],c[3]]],{padding:40,maxZoom:17})}},{immediate:!0});const k=e.computed(()=>`${Math.round(s.value*100)}%`);return(c,y)=>(e.openBlock(),e.createElementBlock("div",Af,[y[1]||(y[1]=e.createElementVNode("span",null,"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"1",step:"0.01","onUpdate:modelValue":y[0]||(y[0]=d=>s.value=d),class:"h-1 w-28 cursor-pointer appearance-none rounded-full bg-slate-300 focus:outline-none",style:{"accent-color":"#3b82f6"}},null,512),[[e.vModelText,s.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(k.value),1)]))}}),Mf=["href"],Ff={key:0,class:"py-6 px-4 text-sm text-gray-500"},Df={key:1,class:"py-6 px-4 text-sm text-red-600"},If={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},jf=["disabled"],zf=["disabled"],Of=192,mr=8,Vt=8,fr=e.defineComponent({__name:"HeaderActions",props:{entityId:{},entityInfo:{},table:{},formEndpoint:{type:[String,Function]},saveEndpoint:{type:[String,Function]},entityLabel:{},editButtonText:{},saveMethod:{}},emits:["saved"],setup(t,{emit:n}){const o=t,l=n,r=e.defineAsyncComponent(()=>import("@opengis/core").then(v=>v.VsModal)),a=e.defineAsyncComponent(()=>import("@opengis/form")),i=e.ref(!1),s=e.ref(null),u=e.ref(null),p=e.ref(null),k=e.ref(null),c=e.computed(()=>k.value?{position:"fixed",top:`${k.value.top}px`,left:`${k.value.left}px`}:{});e.watch(i,v=>{v&&e.nextTick(F)});const y=e.ref(!1),d=e.ref(null),m=e.ref({}),g=e.ref(null),h=e.ref(""),f=e.ref(!1),b=e.ref(!1),E=e.ref(null),T=e.computed(()=>o.entityId||""),j=(v,R)=>v?typeof v=="function"?v(R):typeof v!="string"?"":v.includes(":id")?R?v.replace(":id",encodeURIComponent(R)):"":v:"",N=e.computed(()=>{var v;return(v=o.table)==null?void 0:v.trim()}),B=e.computed(()=>{if(o.formEndpoint)return o.formEndpoint;if(N.value)return v=>`/api/form/${N.value}/${v}`}),S=e.computed(()=>{if(o.saveEndpoint)return o.saveEndpoint;if(N.value)return v=>`/api/table/${v}`}),L=e.computed(()=>j(B.value,T.value)),M=e.computed(()=>o.saveEndpoint?j(o.saveEndpoint,T.value):E.value?`/api/table/${encodeURIComponent(E.value)}`:j(S.value,T.value)),P=e.computed(()=>j("/api/gis-clear-tiles?id=:id",T.value)),I=e.computed(()=>{var K,X,Z;const v=(X=(K=o.entityInfo)==null?void 0:K.name)==null?void 0:X.trim();if(v)return`Редагування ${v}`;const R=(Z=o.entityLabel)==null?void 0:Z.trim();return R?`Редагування ${R}`:"Редагування"}),W=e.computed(()=>o.editButtonText||"Редагувати"),z=e.computed(()=>(o.saveMethod||"POST").toUpperCase());function H(){i.value||F(),i.value=!i.value}function A(){i.value=!1}function F(){var G;if(typeof window>"u"||!u.value)return;const v=u.value.getBoundingClientRect(),R=window.innerWidth,K=window.innerHeight,X=v.left,Z=Math.max(R-Of-Vt,Vt),se=Math.min(Math.max(X,Vt),Z),de=((G=p.value)==null?void 0:G.offsetHeight)??0,q=v.bottom+mr;let Y=q;if(de&&q+de>K-Vt){const ne=v.top-mr-de;Y=Math.max(ne,Vt)}k.value={top:Y,left:se}}function x(v){var K,X;if(!s.value&&!p.value)return;const R=v.target;R&&((K=s.value)!=null&&K.contains(R)||(X=p.value)!=null&&X.contains(R))||(i.value=!1)}function C(){i.value&&F()}e.onMounted(()=>{window.addEventListener("click",x),window.addEventListener("resize",C),window.addEventListener("scroll",C,!0)}),e.onUnmounted(()=>{window.removeEventListener("click",x),window.removeEventListener("resize",C),window.removeEventListener("scroll",C,!0)});async function w(){var v,R,K;if(!(!T.value||!L.value)){A(),y.value=!0,f.value=!0,h.value="",d.value=null,m.value={},E.value=null;try{const X=await fetch(L.value);if(!X.ok)throw new Error(`Failed to load form: ${X.status}`);const Z=await X.json();m.value=(Z==null?void 0:Z.data)||{},d.value=(Z==null?void 0:Z.schema)||null;const se=typeof(Z==null?void 0:Z.token)=="string"&&Z.token||typeof((v=Z==null?void 0:Z.tokens)==null?void 0:v.edit)=="string"&&Z.tokens.edit||typeof((R=Z==null?void 0:Z.tokens)==null?void 0:R.edit_token)=="string"&&Z.tokens.edit_token||typeof((K=Z==null?void 0:Z.data)==null?void 0:K.token)=="string"&&Z.data.token||null;E.value=se,g.value=null}catch(X){console.error("Failed to load edit form",X),h.value="Не вдалося завантажити форму редагування"}finally{f.value=!1}}}function D(){y.value=!1,d.value=null,h.value="",E.value=null}async function $(){var v,R;if(!(!T.value||!M.value)){if(g.value){const K=(R=(v=g.value).validate)==null?void 0:R.call(v);if(K){ue.notify({type:"warning",title:"Validation",message:Object.entries(K).map(([X,Z])=>`${X}: ${Z}`).join(`
163
- `)});return}}b.value=!0;try{const K=await fetch(M.value,{method:z.value,headers:{"Content-Type":"application/json"},body:JSON.stringify(m.value)});if(!K.ok)throw new Error(`Failed to save: ${K.status}`);ue.notify({type:"success",title:"Збережено",message:"Зміни збережено"}),l("saved"),D()}catch(K){console.error("Failed to save edit form",K),ue.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти зміни"})}finally{b.value=!1}}}return(v,R)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:s,class:"relative flex items-center"},[e.createElementVNode("button",{ref_key:"triggerButton",ref:u,type:"button",onClick:e.withModifiers(H,["stop"]),class:"flex items-center justify-center w-9 h-9 hover:rounded-md hover:border hover:border-gray-200 bg-white text-gray-600 hover:bg-gray-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-sky-500","aria-label":"Дії"},[...R[3]||(R[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 5.5v.01M12 12v.01M12 18.5v.01"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[i.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuContainer",ref:p,style:e.normalizeStyle(c.value),class:"absolute top-0 left-0 mt-2 w-48 rounded-xl border border-gray-200 bg-white shadow-lg text-sm z-[1000]"},[P.value?(e.openBlock(),e.createElementBlock("a",{key:0,href:P.value,target:"_blank",rel:"noreferrer",class:"flex items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-t-xl",onClick:A},[e.createVNode(e.unref(zr),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),R[4]||(R[4]=e.createElementVNode("span",null,"Очистити тайли",-1))],8,Mf)):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"flex items-center gap-2 w-full px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-b-xl",onClick:w},[e.createVNode(e.unref(Gr),{size:16,class:"lucide lucide-pencil text-gray-500"}),e.createElementVNode("span",null,e.toDisplayString(W.value),1)])],4)):e.createCommentVNode("",!0)])),e.createVNode(e.unref(r),{teleport:"#modal",visible:y.value,"onUpdate:visible":R[2]||(R[2]=K=>y.value=K),title:I.value,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",If,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:D,disabled:b.value}," Скасувати ",8,jf),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:$,disabled:b.value},e.toDisplayString(b.value?"Зберігається…":"Зберегти"),9,zf)])]),default:e.withCtx(()=>[f.value?(e.openBlock(),e.createElementBlock("div",Ff," Завантаження форми редагування… ")):h.value?(e.openBlock(),e.createElementBlock("div",Df,e.toDisplayString(h.value),1)):(e.openBlock(),e.createBlock(e.unref(a),{key:2,values:m.value,"onUpdate:values":R[0]||(R[0]=K=>m.value=K),form:g.value,"onUpdate:form":R[1]||(R[1]=K=>g.value=K),schema:d.value},null,8,["values","form","schema"]))]),_:1},8,["visible","title"])],512))}}),Rf={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},Pf={class:"flex-1 relative overflow-hidden"},Uf={class:"absolute top-0 left-0 w-full z-20"},qf={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},Hf={class:"flex items-center gap-3 min-w-0"},Wf={class:"flex flex-col min-w-0"},Yf={class:"font-semibold text-lg text-gray-800 line-clamp-1"},Zf={key:0,class:"text-xs text-gray-500 truncate"},Gf={class:"flex items-center gap-4"},Kf={class:"flex-1 min-w-0"},Xf=["title"],Jf={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]"},Qf={class:"relative w-full h-full"},e0={class:"absolute top-4 left-4 z-20"},t0={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},n0={class:"w-[520px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},o0={class:"flex-1 flex flex-col h-full"},r0={class:"px-3 pt-3 pb-2 border-b border-gray-100"},l0={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"},a0=["aria-selected","onClick"],i0={class:"leading-none"},s0={class:"flex flex-col flex-1 overflow-y-hidden p-4"},c0={key:0,class:"mb-3 text-xs text-slate-500"},d0={key:1,class:"mb-3 text-xs text-rose-600"},u0="OpenGIS",p0=e.defineComponent({__name:"raster",setup(t){const n=[{cardClass:"bg-gradient-to-br from-green-50 to-green-100/30 border-green-200",titleClass:"text-green-900"},{cardClass:"bg-gradient-to-br from-blue-50 to-blue-100/30 border-blue-200",titleClass:"text-blue-900"},{cardClass:"bg-gradient-to-br from-purple-50 to-purple-100/30 border-purple-200",titleClass:"text-purple-900"},{cardClass:"bg-gradient-to-br from-gray-50 to-gray-100/30 border-gray-200",titleClass:"text-gray-900"}],o=be.useRouter(),l=be.useRoute(),r=e.computed(()=>{var C;const x=(C=l.params)==null?void 0:C.id;return typeof x=="string"?x:void 0}),a=e.ref(null),i=e.ref(!1),s=e.ref(null);function u(){var C;if(typeof document>"u")return;const x=(C=g.value)==null?void 0:C.name;document.title=x?`${x} — Растер`:u0}const p=e.computed(()=>{var C;const x=(C=a.value)==null?void 0:C.url;return x?/^https?:\/\//i.test(x)||typeof window>"u"||typeof location>"u"?x:`${location.origin}${x}`:""}),k=e.computed(()=>{var x;return((x=a.value)==null?void 0:x.extent)??null}),c=e.computed(()=>r.value?`raster-${r.value}`:void 0),y=e.computed(()=>{const x=c.value??"raster",C=k.value&&k.value.length===4?k.value.join(","):"no-extent";return`${x}-${C}`}),d=e.computed(()=>!!p.value),m=e.computed(()=>{const x=k.value;if(!x||x.length!==4)return null;const[C,w,D,$]=x;return[C,w,D,$].some(v=>typeof v!="number"||Number.isNaN(v))?null:[(C+D)/2,(w+$)/2]}),g=e.computed(()=>{var $,v;const x=a.value,C=x==null?void 0:x.extent;return{id:r.value??"—",name:(x==null?void 0:x.name)||((v=($=x==null?void 0:x.files)==null?void 0:$[0])==null?void 0:v.name),description:x!=null&&x.extension?`Формат ${x.extension.toUpperCase()}`:"Попередній перегляд растрового шару. Реальні метадані підвантажуються.",coverage:C&&C.length===4?`${F(C[0])}, ${F(C[1])} → ${F(C[2])}, ${F(C[3])}`:"Покриття уточнюється",crs:x!=null&&x.srid?`EPSG:${x.srid}`:"EPSG:4326",source:x!=null&&x.proj4?x.proj4:"Джерело: Mapnik",updatedAt:x!=null&&x.cache?"Дані кешовано":"Нові дані"}}),h=e.computed(()=>{const x=a.value;return x?[x.source_path,x.description,x.is_public?"Публічна":"Не публічна",x.is_active?"Архівна":"Активна"].filter(C=>C).join(", "):""}),f=[{key:"info",label:"Інформація",icon:Lf},{key:"files",label:"Файли",icon:Cf}],b=f.map(x=>x.key),E=e.ref(b.includes(l.query.tab)?l.query.tab:"info");e.watch(()=>l.query.tab,x=>{x&&b.includes(x)&&E.value!==x&&(E.value=x)}),e.watch(E,x=>{l.query.tab!==x&&o.replace({query:{...l.query,tab:x}})});const T=e.computed(()=>S(a.value)),j=e.computed(()=>M(a.value));e.watch(()=>a.value,()=>{u()},{immediate:!0}),e.watch(r,()=>{B()},{immediate:!0});function N(){B()}async function B(){const x=r.value;if(!x){a.value=null,s.value=null;return}i.value=!0,s.value=null;try{const C=await fetch(`/api/gis-raster/${encodeURIComponent(x)}`);if(!C.ok)throw new Error(`HTTP ${C.status}`);const w=await C.json();a.value=w}catch(C){console.error("Failed to load raster info",C),a.value=null,s.value=C instanceof Error?C.message:String(C)}finally{i.value=!1}}function S(x){var C;return(C=x==null?void 0:x.files)!=null&&C.length?x.files.map(w=>({name:w.name,resolution:L(w.name,x),size:w.size||"—",status:"Готово",statusClass:"bg-emerald-50 text-emerald-600 border border-emerald-100"})):[]}function L(x,C){const w=x.toLowerCase();return w.endsWith(".tfw")?"Georeference":w.endsWith(".xml")?"Опис":w.endsWith(".tif")||w.endsWith(".tiff")?C!=null&&C.resolution?C.resolution:"Растер":(C==null?void 0:C.resolution)??"Файл"}function M(x){return x?{baseParams:I(x),spatial:{crs:{code:x.srid?`EPSG:${x.srid}`:"EPSG:4326",description:x.proj4||"WGS 84 — World Geodetic System 1984"},bounds:W(x.extent),resolution:z(x)},statistics:H(x),technical:A(x)}:null}function P(x){return x!=null&&x.length?x.map(w=>{var $;if(!w)return"";const D=w.trim().split(/\s+/)[0];return(($=D==null?void 0:D[0])==null?void 0:$.toUpperCase())||""}).filter(Boolean).join(""):""}function I(x){var v,R;const C=x.bands_count??((v=x.bands)==null?void 0:v.length)??"—",w=P(x.bands),D=(x.bands??[]).map(K=>K.trim()).filter(K=>K.length>0),$=D.length?D.join(", "):void 0;return[{label:"Розмір растру, px",value:x.width&&x.height?`${x.width}×${x.height}`:"—"},{label:"Формат файлу",value:((R=x.extension)==null?void 0:R.toUpperCase())??"—"},{label:"Розмір файлу, mb",value:x.total_size?`${x.total_size}`:"—"},{label:"Кількість каналів",value:typeof C=="number"?`${C}${w?` (${w})`:""}`:`${C}${w?` (${w})`:""}`,tooltip:$},{label:"Глибина кольору",value:x.color_depth?`${x.color_depth} біт/канал`:"—"},{label:"Стиснення",value:x.compression||"—"}]}function W(x){return!x||x.length!==4?[]:[{label:"Північ",value:F(x[3],"N")},{label:"Схід",value:F(x[2],"E")},{label:"Південь",value:F(x[1],"S")},{label:"Захід",value:F(x[0],"W")}]}function z(x){const C=[{label:"Роздільна здатність",value:x.resolution||"—"}];return x.width&&x.height&&C.push({label:"Розмір пікселя",value:`${x.width} × ${x.height} px`}),C}function H(x){var C;return(C=x.bands)!=null&&C.length?x.bands.map((w,D)=>{const $=n[D%n.length];return{label:`Канал ${D+1}${w?` (${w})`:""}`,cardClass:$.cardClass,titleClass:$.titleClass,metrics:[{label:"Назва",value:w||`Канал ${D+1}`},{label:"Глибина",value:x.color_depth?`${x.color_depth} біт`:"—"},{label:"Статус",value:x.cache?"Кешовано":"Готово"}]}}):[]}function A(x){var C;return[{label:"Тип даних",value:x.color_depth?`Unsigned Integer ${x.color_depth}-bit`:"—"},{label:"Компресія",value:x.compression||"—"},{label:"Кольорова інтерпретація",value:((C=x.bands)==null?void 0:C.join(", "))||"—"},{label:"SRID",value:x.srid?`EPSG:${x.srid}`:"—"},{label:"Проекція (proj4)",value:x.proj4||"—"},{label:"URL тайла",value:x.url||"—"}]}function F(x,C){if(x==null||Number.isNaN(x))return"—";const w=`${x.toFixed(5)}°`;return C?`${w} ${C}`:w}return(x,C)=>(e.openBlock(),e.createElementBlock("div",Rf,[e.createElementVNode("div",Pf,[e.createElementVNode("div",Uf,[e.createElementVNode("div",qf,[e.createElementVNode("div",Hf,[e.createElementVNode("button",{type:"button",onClick:C[0]||(C[0]=w=>e.unref(o).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"},[...C[1]||(C[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",Wf,[e.createElementVNode("div",Yf,e.toDisplayString(g.value.name),1),h.value?(e.openBlock(),e.createElementBlock("div",Zf,e.toDisplayString(h.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Gf,[e.createElementVNode("div",Kf,[e.createElementVNode("div",{class:"w-full text-xs text-gray-600 truncate",title:g.value.description},e.toDisplayString(g.value.description),9,Xf)]),e.createVNode(fr,{"entity-id":r.value||"","entity-info":{name:g.value.name},table:"gis.rasters.table","entity-label":"Растер","save-method":"put","edit-button-text":"Редагувати",onSaved:N},null,8,["entity-id","entity-info"])])])]),e.createElementVNode("div",Jf,[e.createElementVNode("div",Qf,[e.createVNode(Ot,null,{default:e.withCtx(()=>[d.value?(e.openBlock(),e.createBlock(Tf,{key:y.value,"tile-url":p.value,extent:k.value,"layer-id":c.value},null,8,["tile-url","extent","layer-id"])):e.createCommentVNode("",!0),e.createElementVNode("div",e0,[e.createVNode(Bt)]),e.createElementVNode("div",t0,[e.createVNode(et),m.value?(e.openBlock(),e.createBlock(et,{key:0,targetCenter:m.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)])]),_:1})])])]),e.createElementVNode("div",n0,[e.createElementVNode("div",o0,[e.createElementVNode("div",r0,[e.createElementVNode("div",l0,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(f,w=>e.createElementVNode("button",{key:w.key,type:"button",role:"tab","aria-selected":E.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",E.value===w.key?"bg-white shadow-sm text-gray-700":""]),onClick:D=>E.value=w.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(w.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",i0,e.toDisplayString(w.label),1)],10,a0)),64))])]),e.createElementVNode("div",s0,[i.value?(e.openBlock(),e.createElementBlock("div",c0," Завантаження метаданих растру… ")):s.value?(e.openBlock(),e.createElementBlock("div",d0," Не вдалося отримати дані: "+e.toDisplayString(s.value),1)):e.createCommentVNode("",!0),E.value==="files"?(e.openBlock(),e.createBlock(Ef,{key:2,files:T.value},null,8,["files"])):j.value?(e.openBlock(),e.createBlock(bf,{key:3,details:j.value},null,8,["details"])):e.createCommentVNode("",!0)])])])]))}}),m0={},f0={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 g0(t,n){return e.openBlock(),e.createElementBlock("svg",f0,[...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 y0=ae(m0,[["render",g0]]),h0={class:"flex flex-col h-full"},x0={class:"flex justify-end mb-3 gap-2"},b0=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",h0,[e.createElementVNode("div",x0,[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(zt,{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"])]))}}),k0={class:"flex flex-col flex-1 min-h-0"},w0={class:"flex justify-between mb-3 gap-2"},_0={class:"text-left"},E0={class:"font-medium text-gray-900"},N0={class:"text-xs text-gray-500"},B0={class:"flex justify-center gap-2"},V0=["checked","onChange"],C0={class:"text-sm font-medium text-gray-900"},$0=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:"Min Зум",slot:"zoomCell",width:"140px"}],l=e.defineAsyncComponent(()=>import("@opengis/core").then(m=>m.VsModal)),r=e.defineAsyncComponent(()=>import("@opengis/form")),a=e.useModel(t,"modelValue"),i=n,s=e.ref(!1),u=e.ref({table:"",query:"",srid:"",key:"",columns:"",minzoom:"",maxzoom:"",proj4text:"",active:!0}),p={table:{type:"text",label:"Таблиця",validators:["required"]},key:{type:"text",label:"Ключ",validators:["required"]},query:{type:"text",label:"Query"},columns:{type:"text",label:"Колонки"},srid:{type:"number",label:"SRID"},proj4text:{type:"text",label:"PROJ4"},active:{type:"switcher",label:"Активна"},minzoom:{type:"number",label:"Min Зум",col:6},maxzoom:{type:"number",label:"Max Зум",col:6}};function k(){u.value={table:"",query:"",srid:"",key:"",columns:"",minzoom:"",maxzoom:"",proj4text:"",active:!0},s.value=!0}function c(){s.value=!1}function y(){var h,f;const m=(h=u.value.table)==null?void 0:h.trim(),g=(f=u.value.key)==null?void 0:f.trim();if(!m||!g){ue.notify({type:"warning",title:"Перевірка",message:"Вкажіть таблицю та підпис"});return}a.value=[...Array.isArray(a.value)?a.value:[],{...u.value,table:m,key:g}],s.value=!1}function d(m,g){var f;const h=((f=g==null?void 0:g.target)==null?void 0:f.checked)??!1;m.active=h,a.value=Array.isArray(a.value)?[...a.value]:[]}return(m,g)=>(e.openBlock(),e.createElementBlock("div",k0,[e.createElementVNode("div",w0,[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:k}," Додати таблицю "),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:g[0]||(g[0]=h=>i("save"))}," Зберегти ")]),e.createVNode(We,{modelValue:a.value,"onUpdate:modelValue":g[1]||(g[1]=h=>a.value=h),"columns-scheme":o,"form-scheme":p,"add-button":!1,"main-col-width":"260px"},{datasetCell:e.withCtx(({row:h})=>[e.createElementVNode("div",_0,[e.createElementVNode("div",E0,e.toDisplayString(h.table),1),e.createElementVNode("div",N0,e.toDisplayString(h.key),1)])]),activeCell:e.withCtx(({row:h})=>[e.createElementVNode("label",B0,[e.createElementVNode("input",{type:"checkbox",class:"h-4 w-4 text-sky-500 border-gray-300 rounded focus:ring-sky-300",checked:h.active,onChange:f=>d(h,f)},null,40,V0)])]),zoomCell:e.withCtx(({row:h})=>[e.createElementVNode("div",C0,e.toDisplayString(h.zoom),1)]),_:1},8,["modelValue"]),e.createVNode(e.unref(l),{teleport:"#modal",visible:s.value,"onUpdate:visible":g[3]||(g[3]=h=>s.value=h),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:c}," Скасувати "),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:y}," Додати ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(r),{values:u.value,"onUpdate:values":g[2]||(g[2]=h=>u.value=h),schema:p},null,8,["values"])]),_:1},8,["visible"])]))}}),v0=e.defineComponent({__name:"CartocssLayerLoader",props:{layerId:{type:String,required:!0},tileUrl:{type:String,default:""},title:{type:String,default:""},active:{type:Boolean,default:!1},owner:{type:String,default:""},opacity:{type:Number,default:.85}},setup(t){const n=t,o=Le(),{activateTemporaryLayer:l,deactivateTemporaryLayer:r}=kn(o.map),a=e.computed(()=>{var k;const p=`${(k=n==null?void 0:n.tileUrl)==null?void 0:k.trim()}`;return p?typeof window>"u"||typeof location>"u"||/^https?:\/\//i.test(p)?p:p.startsWith("//")?`${window.location.protocol}${p}`:p.startsWith("/")?`${location.origin}${p}`:`${location.origin}/${p}`:""});let i="",s="";function u(){const p=n.active&&!!a.value;i&&(!p||i!==n.layerId)&&(r(i,s||void 0),i="",s=""),p&&(l({id:n.layerId,title:n.title||n.layerId,url:a.value,opacity:n.opacity},{},n.owner),i=n.layerId,s=n.owner||"")}return e.watch(()=>[n.layerId,a.value,n.active,n.owner],u,{immediate:!0}),e.onUnmounted(()=>{i&&(r(i,s||void 0),i="",s="")}),()=>{}}}),S0={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},L0={class:"flex-1 relative overflow-hidden"},A0={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"},M0={class:"flex items-center gap-3 min-w-0"},F0={class:"flex flex-col min-w-0"},D0={class:"font-semibold text-lg text-gray-800 line-clamp-1"},I0={key:0,class:"text-xs text-gray-500 truncate"},j0={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]"},z0={class:"relative w-full h-full"},O0={class:"absolute top-4 left-4 z-20"},R0={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},P0={key:0,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"},q0={class:"px-3 pt-3 pb-2 border-b border-gray-100"},H0={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"},W0=["aria-selected","onClick"],Y0={class:"leading-none"},Z0={class:"flex flex-col flex-1 overflow-y-hidden p-4"},G0={key:0,class:"flex-1 flex items-center justify-center text-sm text-gray-500"},K0="cartocss-demo-001",X0="OpenGIS",J0=e.defineComponent({__name:"cartocss",setup(t){const n=be.useRouter(),o=be.useRoute(),l=[{key:"css",label:"CSS",icon:tr},{key:"data",label:"Дані",icon:y0}],r=l.map(M=>M.key),a=e.ref(r.includes(o.query.tab)?o.query.tab:"css"),i=e.computed(()=>o.params.id||K0),s=e.ref({id:i.value,name:"",description:""});function u(M){typeof document>"u"||(document.title=M?`${M} — CartoCSS`:X0)}const p=e.ref("");e.ref("");const k=e.ref([]),c=e.ref(!1),y=e.ref(!1),d=e.ref(""),m=e.ref(0),g=e.ref(!1),h=e.computed(()=>`cartocss-layer-${i.value}`),f=e.ref(null),b=e.computed(()=>{var z;const M=(z=d.value)==null?void 0:z.trim();if(!M)return"";const P=M.includes("?")?"&":"?",I=`${M}${P}nottl=1`,W=m.value;return W?`${M}${P}ts=${W}&nocache=1`:I}),E=e.computed(()=>{var H;const M=(H=f.value)==null?void 0:H.bounds;if(!Array.isArray(M)||M.length<4)return null;const[P,I,W,z]=M;return[P,I,W,z].some(A=>typeof A!="number"||Number.isNaN(A))?null:[(P+W)/2,(I+z)/2]}),T=e.computed(()=>{const M=f.value;return M?(k.value.map(I=>I==null?void 0:I.table).filter(Boolean),[M.description,M.group_id?`Група: ${M.group_id}`:null,M.source_path?`Шлях: ${M.source_path}`:null,M.is_public===!0?"Публічний":"Не публічний",M.enabled===!0?"Активний":"Неактивний"].filter(Boolean).join(", ")):""});e.watch(i,M=>{M&&S(M)},{immediate:!0}),e.watch(()=>{var M;return(M=s.value)==null?void 0:M.name},M=>u(M),{immediate:!0}),e.watch(()=>o.query.tab,M=>{M&&r.includes(M)&&a.value!==M&&(a.value=M)}),e.watch(a,M=>{o.query.tab!==M&&n.replace({query:{...o.query,tab:M}})});function j(){i.value&&S(i.value,{bustCache:!0})}function N(M){if(!M)return null;if(typeof M=="string")try{return JSON.parse(M)}catch(P){return console.warn("Failed to parse CartoCSS config",P),null}return typeof M=="object"?M:null}function B(M){const P=Array.isArray(M)?M:M==null?void 0:M.datasets;return Array.isArray(P)?P.map((I,W)=>({table:(I==null?void 0:I.table)||(I==null?void 0:I.id)||`dataset_${W+1}`,query:(I==null?void 0:I.query)||"",srid:(I==null?void 0:I.srid)||"",key:(I==null?void 0:I.key)||(I==null?void 0:I.label)||"Без підпису",active:typeof(I==null?void 0:I.active)=="boolean"?I.active:!0,minzoom:typeof(I==null?void 0:I.zoom)>"u"?"":String(I.zoom),maxzoom:typeof(I==null?void 0:I.maxzoom)>"u"?"":String(I.maxzoom),columns:(I==null?void 0:I.columns)||"",proj4text:(I==null?void 0:I.proj4text)||""})):[]}async function S(M,P){c.value=!0;try{const I=await fetch(`/api/gis-css/${M}`);if(!I.ok)throw new Error(`Failed to load cartocss: ${I.status}`);const W=await I.json(),z=(W==null?void 0:W.message)||W||{};f.value=z,s.value={id:z.cartocss_key||M,name:z.name||s.value.name,description:z.description||s.value.description},p.value=typeof z.style=="string"?z.style:"";const H=N(z.config??[]);k.value=B(H);const A=typeof z.url=="string"?z.url:"";d.value=A,g.value=!!(A&&z.enabled!==!1),m.value=P!=null&&P.bustCache?Date.now():0}catch(I){console.error("Failed to fetch CartoCSS",I),g.value=!1,d.value="",m.value=0,f.value=null}finally{c.value=!1}}async function L(){if(i.value){y.value=!0;try{const M={style:p.value||"",config:k.value},P=await fetch(`/api/gis-css/${i.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(M)});if(!P.ok)throw new Error(`Failed to save cartocss: ${P.status}`);ue.notify({type:"success",title:"Збережено",message:"CartoCSS оновлено"}),await S(i.value,{bustCache:!0})}catch(M){console.error("Failed to save CartoCSS",M),ue.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти CartoCSS"})}finally{y.value=!1}}}return(M,P)=>(e.openBlock(),e.createElementBlock("div",S0,[e.createElementVNode("div",L0,[e.createElementVNode("div",A0,[e.createElementVNode("div",T0,[e.createElementVNode("div",M0,[e.createElementVNode("button",{type:"button",onClick:P[0]||(P[0]=I=>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[3]||(P[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",F0,[e.createElementVNode("div",D0,e.toDisplayString(s.value.name),1),T.value?(e.openBlock(),e.createElementBlock("div",I0,e.toDisplayString(T.value),1)):e.createCommentVNode("",!0)])]),e.createVNode(fr,{"entity-id":i.value,"entity-info":s.value,"form-endpoint":I=>`/api/form/gis.cartocss.table/${I}`,"save-endpoint":I=>`/api/gis-css/${I}`,"entity-label":"CartoCSS","save-method":"post",onSaved:j},null,8,["entity-id","entity-info","form-endpoint","save-endpoint"])])]),e.createElementVNode("div",j0,[e.createElementVNode("div",z0,[e.createVNode(Ot,null,{default:e.withCtx(()=>[e.createElementVNode("div",O0,[e.createVNode(Bt)]),e.createElementVNode("div",R0,[e.createVNode(et),E.value?(e.openBlock(),e.createBlock(et,{key:0,targetCenter:E.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),b.value?(e.openBlock(),e.createBlock(v0,{key:0,"layer-id":h.value,"tile-url":b.value,active:g.value,title:s.value.name,owner:i.value},null,8,["layer-id","tile-url","active","title","owner"])):e.createCommentVNode("",!0)]),_:1})])])]),f.value&&!f.value.source_path?(e.openBlock(),e.createElementBlock("div",P0,[e.createElementVNode("div",U0,[e.createElementVNode("div",q0,[e.createElementVNode("div",H0,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,I=>e.createElementVNode("button",{key:I.key,type:"button",role:"tab","aria-selected":a.value===I.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",a.value===I.key?"bg-white shadow-sm text-gray-700":""]),onClick:W=>a.value=I.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(I.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",Y0,e.toDisplayString(I.label),1)],10,W0)),64))])]),e.createElementVNode("div",Z0,[c.value?(e.openBlock(),e.createElementBlock("div",G0," Завантаження стилю… ")):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[a.value==="css"?(e.openBlock(),e.createBlock(b0,{key:0,modelValue:p.value,"onUpdate:modelValue":P[1]||(P[1]=I=>p.value=I),class:"flex-1 min-h-0",onSave:L},null,8,["modelValue"])):(e.openBlock(),e.createBlock($0,{key:1,modelValue:k.value,"onUpdate:modelValue":P[2]||(P[2]=I=>k.value=I),class:"flex-1 min-h-0 flex flex-col",onSave:L},null,8,["modelValue"]))],64))])])])):e.createCommentVNode("",!0)]))}}),Q0={class:"w-full mb-6"},eg={class:"flex items-center w-full h-10 max-w-md p-1 bg-white border border-gray-200 rounded-md"},tg=["onClick"],ng=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",Q0,[e.createElementVNode("div",eg,[(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,tg))),128))])]))}}),og={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},rg=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,u)=>(e.openBlock(),e.createElementBlock("section",og,[u[2]||(u[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":u[0]||(u[0]=p=>a.value=p),form:i.value,"onUpdate:form":u[1]||(u[1]=p=>i.value=p)},null,8,["schema","values","form"]))]))}}),lg={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},ag=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",lg,[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(An.VsInputArraySelect),{options:t.options,modelValue:r.value,"onUpdate:modelValue":i[0]||(i[0]=s=>r.value=s),placeholder:"Шари"},null,8,["options","modelValue"])]))}}),ig={class:"mapLayer-info__inner"},sg={class:"mapLayer-info__item-label"},wn=ae(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 u(g){if(l.open){y();return}const h=g.currentTarget,f=h==null?void 0:h.closest(".mapLayer-info");if(!f){y();return}r.value=f,l.open=!0,e.nextTick(()=>{p(),d(),requestAnimationFrame(()=>{p()})})}function p(){if(!l.open||!r.value||!a.value)return;const g=r.value.getBoundingClientRect(),h=12,f=window.scrollX+h,b=window.scrollX+window.innerWidth-h,E=window.scrollY+h,T=window.scrollY+window.innerHeight-h,j=a.value.offsetWidth||Math.min(300,window.innerWidth-24),N=a.value.offsetHeight||0;let B=g.left+window.scrollX+(g.width-j)/2;B<f&&(B=f),B+j>b&&(B=Math.max(f,b-j)),l.left=B;let S=g.bottom+window.scrollY+h;S+N>T&&(S=g.top+window.scrollY-N-h,S<E&&(S=Math.max(E,T-N))),S<E&&(S=E),S+N>T&&(S=Math.max(E,T-N)),l.top=S,l.transform="none"}function k(g){var f,b;if(!l.open)return;const h=g.target;(f=r.value)!=null&&f.contains(h)||(b=a.value)!=null&&b.contains(h)||y()}function c(g){g.key==="Escape"&&y()}function y(){m(),l.open=!1,r.value=null,a.value=null}function d(){m(),a.value&&(i=new ResizeObserver(()=>{p()}),i.observe(a.value))}function m(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",k,!0),document.addEventListener("keydown",c),window.addEventListener("scroll",p,!0),window.addEventListener("resize",p)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k,!0),document.removeEventListener("keydown",c),window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p),m()}),e.watch(()=>o.items,()=>{l.open&&e.nextTick(()=>p())},{deep:!0}),n({close:y}),(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(u,["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",ig,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,f=>(e.openBlock(),e.createElementBlock("div",{key:f.label,class:"mapLayer-info__item"},[e.createElementVNode("div",sg,e.toDisplayString(f.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":f.breakLine}])},e.toDisplayString(f.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-cc1cc7bf"]]),cg={key:0,class:"map-info__title"},dg={class:"map-info__actions"},ug={key:0,class:"map-info__menu"},pg=["href"],mg=["innerHTML"],gr=ae(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});be.useRouter();const s=e.ref(!0),u=e.ref(!1),p=e.computed(()=>Array.isArray(n.links)?n.links.filter(T=>(T==null?void 0:T.name)&&(T==null?void 0:T.slug)):[]),k=e.computed(()=>({top:`${i.value.top}px`,left:`${i.value.left}px`})),c=e.computed(()=>{const T=[];return n.mapName&&T.push({label:"Назва карти",value:n.mapName}),n.mapDescription&&T.push({label:"Опис",value:n.mapDescription,breakLine:!0}),T});function y(T){return T==null?!1:T.replace(/<[^>]*>/g,"").trim().length>0}const d=e.computed(()=>y(n.content)),m=e.computed(()=>d.value);function g(T){T.stopPropagation(),l.value=!l.value}function h(){const T=r.value;if(!T||!a.value)return;const j=T.getBoundingClientRect(),N=12,B=8,S=window.scrollX+N,L=window.scrollX+window.innerWidth-N,M=window.scrollY+N,P=window.scrollY+window.innerHeight-N,I=a.value.offsetWidth||160,W=a.value.offsetHeight||0;let z=j.bottom+window.scrollY+B,H=j.left+window.scrollX;H+I>L&&(H=j.right+window.scrollX-I,H<S&&(H=S)),H<S&&(H=S),z+W>P&&(z=j.top+window.scrollY-W-B,z<M&&(z=Math.max(M,P-W))),z<M&&(z=M),z+W>P&&(z=Math.max(M,P-W)),i.value={top:z,left:H}}function f(T){if(!l.value)return;const j=o.value;if(!j){l.value=!1;return}j.contains(T.target)||(l.value=!1)}e.watch(l,T=>{T?e.nextTick(()=>{h(),requestAnimationFrame(()=>{h()}),window.addEventListener("scroll",h,!0),window.addEventListener("resize",h)}):(window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h))});function b(){s.value=!s.value}function E(){u.value=window.innerWidth<=768}return e.onMounted(()=>{document.addEventListener("click",f,!0),E(),m.value?u.value&&(s.value=!1):s.value=!1,window.addEventListener("resize",E)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",f,!0),window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h),window.removeEventListener("resize",E)}),(T,j)=>(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||p.value.length||c.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"map-info__header",style:e.normalizeStyle([d.value?"":"padding-bottom: 20px"])},[t.title?(e.openBlock(),e.createElementBlock("h2",cg,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",dg,[p.value.length?(e.openBlock(),e.createElementBlock("div",ug,[e.createElementVNode("button",{ref_key:"menuButton",ref:r,type:"button",class:"map-info__menu-button",onClick:g,"aria-label":"Показати посилання"},[...j[1]||(j[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(k.value),onClick:j[0]||(j[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,N=>(e.openBlock(),e.createElementBlock("a",{key:N.slug||N.name,href:`/maps/${N.slug}`,class:"map-info__popover-link"},e.toDisplayString(N.name),9,pg))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),c.value.length?(e.openBlock(),e.createBlock(wn,{key:1,items:c.value},null,8,["items"])):e.createCommentVNode("",!0),m.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"map-info__toggle-button",onClick:b,"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":s.value})},[...j[2]||(j[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),d.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["map-info__content",{"map-info__content--collapsed":!s.value}]),innerHTML:t.content},null,10,mg)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-813e24fb"]]),fg={class:"opacity-popover__content"},gg={class:"opacity-popover__value"},yr=ae(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 y=c.getBoundingClientRect(),d=260,m=r.value.offsetHeight||60,g=8,h=12,f=window.innerWidth,b=window.innerHeight;let E=y.bottom+g+window.scrollY,T=y.left+window.scrollX;T+d>f-h&&(T=f-d-h+window.scrollX),T<h+window.scrollX&&(T=h+window.scrollX),E+m>b+window.scrollY-h&&(E=y.top-m-g+window.scrollY,E<h+window.scrollY&&(E=b-m-h+window.scrollY)),i.top=E,i.left=T}function u(){o.value=!o.value,o.value&&e.nextTick(s)}function p(){var m;const c=fe(n.layerId),y=(l.value??100)/100;if(c!=null&&c.setOpacity){c.setOpacity(y);return}const d=(m=c==null?void 0:c.getLayer)==null?void 0:m.call(c);if(d)switch(d.type){case"raster":c.updatePaint({"raster-opacity":y});break;case"fill":c.updatePaint({"fill-opacity":y});break;case"line":c.updatePaint({"line-opacity":y});break;case"circle":c.updatePaint({"circle-opacity":y});break;case"symbol":c.updatePaint({"icon-opacity":y});break}}function k(c){var d,m;if(!o.value)return;const y=c.target;(d=r.value)!=null&&d.contains(y)||(m=a.value)!=null&&m.contains(y)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",k),window.addEventListener("scroll",s,!0),window.addEventListener("resize",s)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k),window.removeEventListener("scroll",s,!0),window.removeEventListener("resize",s)}),(c,y)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:a},[e.renderSlot(c.$slots,"trigger",{toggle:u,opacity:l.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(u,["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",fg,[y[1]||(y[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":y[0]||(y[0]=d=>l.value=d),class:"opacity-popover__range",onInput:p},null,544),[[e.vModelText,l.value]]),e.createElementVNode("span",gg,e.toDisplayString(l.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-b278347a"]]),yg={class:"layers-panel"},hg={class:"layers-panel__header"},xg={class:"layers-panel__heading"},bg={class:"layers-panel__heading-title"},kg={class:"layers-panel__title"},wg={class:"layers-panel__count"},_g={key:0,class:"layers-panel__description"},Eg={class:"layers-panel__header-actions"},Ng={class:"layers-panel__bulk-actions"},Bg={class:"layers-panel__header-controls"},Vg={class:"layers-panel__label"},Cg={class:"layers-panel__label-row"},$g=["checked","onChange"],vg={class:"layers-panel__title-block"},Sg={class:"layers-panel__name"},Lg={class:"layers-panel__meta text-slate-500"},Ag=["onClick"],Tg={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},Mg={key:0,class:"layers-panel__actions"},Fg=["innerHTML","onClick"],hr="map:temporary-layer-request",Dg="#94a3b8",xr=ae(e.defineComponent({__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,l=e.ref({}),r=e.ref(!0),a=e.ref(!1),i=Le(),{temporaryLayers:s,activateTemporaryLayer:u,deactivateTemporaryLayer:p,clearTemporaryLayers:k}=kn(i.map),c=e.computed(()=>{const w=o.layers.map($=>({...$,isTemporary:!1,owner:null,visible:$.visible!==!1})),D=s.value.map($=>({id:$.id,name:$.title,visible:l.value[$.id]??!0,actions:[],filters:null,isTemporary:!0,owner:$.owner??null,handle:$.handle??null,card:$.card??null,popup:$.popup??null,style:$.style??null,group_name:null,count:null,holder:null}));return[...w,...D]}),y=e.computed(()=>c.value.length),d=e.computed(()=>c.value.filter(w=>T(w.id)).length),m=e.computed(()=>y.value>0&&d.value===y.value),g=e.computed(()=>s.value.length>0),h=n;function f(){var w;for(let D=0;D<o.layers.length;D++){const $=o.layers[D],v=b($);if(!v)continue;const R=fe($.id,v),K=$.visible!==!1;l.value[$.id]=K,K||(w=R==null?void 0:R.setVisible)==null||w.call(R,!1)}}function b(w){const D=w.id;if(!D)return null;const $=(w.service||w.service_type||w.type||"").toString().toLowerCase(),v=w.service_url||w.url||null;if(!!v&&($==="tms"||$==="wmts"||$==="wms"||$==="ogc")){const X=E(v);return X?{sourceId:D,source:{type:"raster",tiles:[X],tileSize:w.tileSize||256,minzoom:w.minzoom??0,maxzoom:w.maxzoom??22,scheme:w.scheme||"xyz"},layer:{id:D,type:"raster",source:D},card:w.card,popup:w.popup}:null}if($==="cartocss"){const X=w.url?E(w.url):`${location.origin}/api/gis-rtile/${D}/{z}/{x}/{y}.png`;return X?{sourceId:D,source:{type:"raster",tiles:[X],tileSize:w.tileSize||256,minzoom:w.minzoom??0,maxzoom:w.maxzoom??22},layer:{id:D,type:"raster",source:D},card:w.card,popup:w.popup}:null}const K=`${location.origin}/api/vtile/${D}/ua/{z}/{x}/{y}.vmt`;return{sourceId:D,source:{type:"vector",tiles:[K],minZoom:4,maxZoom:14},layer:{id:D,source:D,"source-layer":D,style:w.style},card:w.card,popup:w.popup}}function E(w){return w?/^https?:\/\//i.test(w)?w:w.startsWith("//")?`${window.location.protocol}${w}`:w.startsWith("/")?`${location.origin}${w}`:`${location.origin}/${w}`:null}function T(w){const D=l.value[w];return D??!0}function j(w){var v,R;if(!(w!=null&&w.id))return null;const D=(v=w.title)==null?void 0:v.trim(),$=(R=w.url)==null?void 0:R.trim();return!D||!$?null:{id:w.id,title:D,url:$,tileSize:w.tileSize,minzoom:w.minzoom,maxzoom:w.maxzoom,opacity:w.opacity}}function N(w){if(!w)return;const D=w.owner;if(w.action==="clear"){const v=s.value.filter(R=>!D||R.owner===D).map(R=>R.id);k(D),v.forEach(R=>{R in l.value&&delete l.value[R]});return}const $=j(w.spec);if($){if(w.action==="activate"){u($,w.context||{},D),l.value[$.id]=!0;return}w.action==="deactivate"&&(p($.id,D),delete l.value[$.id])}}function B(w){w instanceof CustomEvent&&N(w.detail)}e.watch(()=>s.value.map(w=>w.id),(w,D)=>{const $=new Set(D||[]),v=new Set(w);w.forEach(R=>{R in l.value||(l.value[R]=!0)}),$.forEach(R=>{v.has(R)||delete l.value[R]})},{immediate:!0});function S(w,D){var v,R,K;if(w.isTemporary){if(!D){p(w.id,w.owner||void 0),delete l.value[w.id];return}l.value[w.id]=!0;const X=w.handle||((v=s.value.find(Z=>Z.id===w.id))==null?void 0:v.handle);(R=X==null?void 0:X.setVisible)==null||R.call(X,!0);return}l.value[w.id]=D;const $=fe(w.id);(K=$==null?void 0:$.setVisible)==null||K.call($,D)}function L(w,D){const $=D.target;S(w,$.checked)}function M(w){c.value.forEach(D=>S(D,w))}function P(){M(!m.value)}function I(w){return w.isTemporary?[{label:"Назва",value:w.name??null},{label:"Тип",value:"Тимчасовий шар"},w.owner?{label:"Джерело",value:w.owner}:null].filter(Boolean):[{label:"Назва",value:w.name??null},{label:"Назва групи",value:w.group_name||null},{label:"Кількість",value:w.count??null},{label:"Балансоутримувач",value:w.holder??null}]}function W(w){const D=w.trim();return D?!!(/^#[\da-fA-F]{3,8}$/.test(D)||/^rgb\s*\(/.test(D)||/^rgba\s*\(/.test(D)||/^hsl\s*\(/.test(D)||/^hsla\s*\(/.test(D)||/^[a-zA-Z]+$/.test(D)&&D.length<25):!1}function z(w){var D,$,v,R,K,X;if(!w)return null;if(typeof w=="string"){const Z=w.trim();return!Z||!W(Z)?null:Z}if(Array.isArray(w)){for(const Z of w){const se=z(Z);if(se)return se}return null}if(typeof w=="object"){const Z=w;return z(Z.color??Z.fill??Z.stroke??Z.lineColor??Z.fillColor??((D=Z.paint)==null?void 0:D["fill-color"])??(($=Z.paint)==null?void 0:$["line-color"])??((v=Z.paint)==null?void 0:v["circle-color"])??((R=Z.paint)==null?void 0:R.color)??((K=Z.paint)==null?void 0:K.lineColor)??((X=Z.paint)==null?void 0:X.fillColor)??Z.paint??Z.value)}return null}function H(w){const D=Array.isArray(w==null?void 0:w.legend)?w.legend[0]:w==null?void 0:w.legend,$=z(D);return $||z(w==null?void 0:w.style)||Dg}function A(w){return{"--layers-panel-checkbox-color":H(w)}}function F(){if(!s.value.length)return;const w=s.value.map(D=>D.id);k(),w.forEach(D=>delete l.value[D])}function x(){r.value=!r.value}function C(){a.value=window.innerWidth<=768}return e.onMounted(()=>{f(),window.addEventListener(hr,B),C(),a.value&&(r.value=!1),window.addEventListener("resize",C)}),e.watch(()=>{var w;return((w=o.layers)==null?void 0:w.length)??0},(w,D)=>{w>0&&D===0&&f()}),e.onBeforeUnmount(()=>{window.removeEventListener(hr,B),window.removeEventListener("resize",C)}),(w,D)=>{var $,v;return e.openBlock(),e.createElementBlock("div",yg,[e.createElementVNode("div",hg,[e.createElementVNode("div",xg,[e.createElementVNode("div",bg,[e.createElementVNode("h2",kg,e.toDisplayString((($=t.config)==null?void 0:$.title)||"Шари"),1),e.createElementVNode("span",wg," ("+e.toDisplayString(d.value)+" з "+e.toDisplayString(y.value)+") ",1)]),(v=t.config)!=null&&v.description?(e.openBlock(),e.createElementBlock("div",_g,[e.createElementVNode("p",null,e.toDisplayString(t.config.description),1)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Eg,[e.createElementVNode("div",Ng,[c.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__header-link",onClick:P},e.toDisplayString(m.value?"Вимкнути всі":"Увімкнути всі"),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Bg,[c.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__toggle-button",onClick:x,"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})},[...D[0]||(D[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),g.value?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"layers-panel__clear",onClick:F}," Очистити тимчасові шари ")):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",{class:e.normalizeClass(["layers-panel__content",{"layers-panel__content--collapsed":!r.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,R=>{var K;return e.openBlock(),e.createElementBlock("div",{key:R.id,class:"layers-panel__item"},[e.createElementVNode("label",Vg,[e.createElementVNode("div",Cg,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:T(R.id),style:e.normalizeStyle(A(R)),onChange:X=>L(R,X)},null,44,$g),e.createElementVNode("div",vg,[e.createElementVNode("span",Sg,e.toDisplayString(R.name),1)]),e.createElementVNode("div",Lg,[T(R.id)&&!R.isTemporary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(yr,{"layer-id":R.id,class:"flex"},{trigger:e.withCtx(({toggle:X})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(X,["prevent","stop"])},[e.createElementVNode("div",Tg,[e.createVNode(e.unref(qr))])],8,Ag)]),_:1},8,["layer-id"]),e.createVNode(Rt,{count:Array.isArray(R.filters)?R.filters.length:0,layer:R},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(wn,{items:I(R)},null,8,["items"])])])]),(K=R.actions)!=null&&K.length?(e.openBlock(),e.createElementBlock("div",Mg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(R.actions,X=>(e.openBlock(),e.createElementBlock("button",{key:X.widget||X.id||X.icon,type:"button",class:"layers-panel__action",innerHTML:X.icon,onClick:Z=>h("action",{layerId:X.widget})},null,8,Fg))),128))])):e.createCommentVNode("",!0)])}),128))],2)])}}}),[["__scopeId","data-v-2e11e481"]]),Ig={class:"catalog-tab__search relative mt-[10px]"},jg={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%)"}},zg={class:"catalog-tab__list flex-1 overflow-y-auto mt-2"},Og={key:0,class:"text-sm text-gray-400 text-center mt-6"},Rg=["onClick"],Pg={class:"flex items-center gap-x-3"},Ug={class:"max-w-[260px] text-[14px] text-[#4b5563]"},qg={class:"text-xs opacity-60 text-[#4b5563]"},Hg={class:"flex items-center cursor-pointer gap-2 flex-1"},Wg=["checked","onChange"],Yg={class:"text-[13px] text-gray-600 max-w-[260px]"},Zg={class:"flex items-center gap-2"},Gg=ae(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 f=g?h.layers.filter(b=>(typeof b.name=="string"?b.name:"").toLowerCase().includes(g)):h.layers;return{...h,layers:f}}).filter(h=>h.layers.length>0)}),u=e.computed({get:()=>o.search,set:g=>l("update:search",g)});function p(g){r[g]=!r[g],Bp()}function k(g){return!!r[g]}function c(g,h){if(o.selected.includes(h)){i.visible=!1,i.layerId=null;return}const f=g.currentTarget;if(!f)return;const b=f.getBoundingClientRect(),E=typeof window<"u"?window.scrollX:0,T=typeof window<"u"?window.scrollY:0;i.left=b.left+b.width/2+E,i.top=b.bottom+8+T,i.layerId=h,i.visible=!0}function y(){i.visible=!1,i.layerId=null}function d(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",Ig,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[0]||(h[0]=f=>u.value=f),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,u.value]]),(e.openBlock(),e.createElementBlock("svg",jg,[...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",zg,[s.value.length===0?(e.openBlock(),e.createElementBlock("div",Og," Нічого не знайдено ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,f=>(e.openBlock(),e.createElementBlock("div",{key:f.id,class:"mt-2"},[e.createElementVNode("div",{class:"hover:bg-gray-100 cursor-pointer p-[8px] rounded-lg flex justify-between items-center",onClick:b=>p(f.id)},[e.createElementVNode("div",Pg,[(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",k(f.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",Ug,e.toDisplayString(f.name),1)]),e.createElementVNode("div",qg,e.toDisplayString(f.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(f.layers,b=>(e.openBlock(),e.createElementBlock("div",{key:b.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",Hg,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:t.selected.includes(b.id),onChange:E=>g.$emit("toggle-layer",b.id,E.target.checked,b)},null,40,Wg),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",Yg,e.toDisplayString(b.name),1)]),e.createElementVNode("div",Zg,[Array.isArray(b.filters)&&b.filters.length?(e.openBlock(),e.createBlock(Rt,{key:0,count:b.filters.length,layer:b,disabled:!t.selected.includes(b.id),onMouseenter:E=>c(E,b.id),onMouseleave:y,onFocus:E=>c(E,b.id),onBlur:y},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(wn,{items:d(b)},null,8,["items"])])]))),128))],512),[[e.vShow,k(f.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"]]),Kg={class:"flex flex-col gap-0"},Xg={class:"text-xs text-slate-600 font-semibold"},Jg=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 u(){if(l.open){y();return}if(!r.value){y();return}l.open=!0,e.nextTick(()=>{p(),d(),requestAnimationFrame(()=>{p()})})}function p(){if(!l.open||!r.value||!a.value)return;const g=r.value.getBoundingClientRect(),h=12,f=window.scrollX+h,b=window.scrollX+window.innerWidth-h,E=window.scrollY+h,T=window.scrollY+window.innerHeight-h,j=a.value.offsetWidth||Math.min(460,window.innerWidth-24),N=a.value.offsetHeight||0;let B=g.left+window.scrollX+(g.width-j)/2;B<f&&(B=f),B+j>b&&(B=Math.max(f,b-j)),l.left=B;let S=g.bottom+window.scrollY+h;S+N>T&&(S=g.top+window.scrollY-N-h,S<E&&(S=Math.max(E,T-N))),S<E&&(S=E),S+N>T&&(S=Math.max(E,T-N)),l.top=S,l.transform="none"}function k(g){var f,b;if(!l.open)return;const h=g.target;(f=r.value)!=null&&f.contains(h)||(b=a.value)!=null&&b.contains(h)||y()}function c(g){g.key==="Escape"&&y()}function y(){m(),l.open=!1,r.value=null,a.value=null}function d(){m(),a.value&&(i=new ResizeObserver(()=>{p()}),i.observe(a.value))}function m(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",k,!0),document.addEventListener("keydown",c),window.addEventListener("scroll",p,!0),window.addEventListener("resize",p)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k,!0),document.removeEventListener("keydown",c),window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p),m()}),e.watch(()=>o.items,()=>{l.open&&e.nextTick(()=>p())},{deep:!0}),n({close:y}),(g,h)=>(e.openBlock(),e.createElementBlock("div",{class:"inline-flex relative",ref_key:"anchorEl",ref:r},[e.createElementVNode("div",{onClick:e.withModifiers(u,["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",Kg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,f=>(e.openBlock(),e.createElementBlock("div",{key:f.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",Xg,e.toDisplayString(f.label),1),e.createElementVNode("div",{class:e.normalizeClass(["text-sm text-gray-800",{"break-all":f.breakLine}])},e.toDisplayString(f.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),Qg={class:"selected-tab"},ey={class:"selected-tab__actions"},ty={key:0,class:"selected-tab__scroll"},ny=["onDragstart","onDragover","onDrop"],oy={class:"selected-tab__item-header"},ry={class:"selected-tab__item-info"},ly=["checked","onChange"],ay={class:"selected-tab__item-name"},iy={class:"selected-tab__item-controls"},sy=["onClick"],cy={class:"selected-tab__menu-inner"},dy=ae(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,u=e.reactive({top:0,left:0}),p=e.ref(null),k=e.reactive({top:0,left:0}),c=e.ref(null),y=new Map,d=e.reactive({});function m(x){var C;for(const w of((C=o.catalog)==null?void 0:C.groups)??[]){const D=w.layers.find($=>$.id===x);if(D)return D}return null}e.watch(()=>o.selected,x=>{x.forEach(C=>{r[C]==null&&(r[C]=100)})},{immediate:!0});function g(){if(!a.value)return;const x=s.get(a.value);if(!x)return;const C=x.getBoundingClientRect();u.top=C.bottom+8+window.scrollY,u.left=C.left+window.scrollX}e.watch(()=>o.selected,x=>{x.forEach(C=>{d[C]==null&&(d[C]=!0)})},{immediate:!0});function h(x,C){d[x]=C;const w=fe(x);w&&w.setVisible(C)}function f(x,C){C?y.set(x,C):y.delete(x)}function b(x){p.value=p.value===x?null:x,p.value&&e.nextTick(()=>{E(x),requestAnimationFrame(()=>{E(x)})})}function E(x){const C=y.get(x);if(!C||!c.value)return;const w=C.getBoundingClientRect(),D=12,$=6,v=window.scrollX+D,R=window.scrollX+window.innerWidth-D,K=window.scrollY+D,X=window.scrollY+window.innerHeight-D,Z=c.value.offsetWidth||190,se=c.value.offsetHeight||0;let de=w.bottom+window.scrollY+$,q=w.left+window.scrollX;q+Z>R&&(q=w.right+window.scrollX-Z,q<v&&(q=v)),q<v&&(q=v),de+se>X&&(de=w.top+window.scrollY-se-$,de<K&&(de=Math.max(K,X-se))),de<K&&(de=K),de+se>X&&(de=Math.max(K,X-se)),k.top=de,k.left=q}function T(x){const C=fe(x);C&&C.remove(),l("remove",x),p.value=null}function j(x){const C=x.target,w=a.value,D=p.value;if(w){const $=i.value,v=s.get(w);if($&&$.contains(C)||v&&v.contains(C))return;a.value=null}if(D){const $=c.value,v=y.get(D);if($&&$.contains(C)||v&&v.contains(C))return;p.value=null}}function N(){a.value&&g(),p.value&&E(p.value)}e.onMounted(()=>{document.addEventListener("click",j),window.addEventListener("resize",N),window.addEventListener("scroll",N,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",j),window.removeEventListener("resize",N),window.removeEventListener("scroll",N,!0)});const{map:B}=Le();function S(x){var $,v,R;if(!x)return;const C=fe(x),w=m(x);if(!C&&!w)return;if((($=w==null?void 0:w.extent)==null?void 0:$.length)===4&&((v=B.value)!=null&&v.fitBounds)){const K=w.extent.map(X=>Number(X));if(K.every(X=>Number.isFinite(X))){const[X,Z,se,de]=K;B.value.fitBounds([[X,Z],[se,de]],{padding:40}),p.value=null;return}}(R=C==null?void 0:C.getSource)!=null&&R.call(C)&&(p.value=null)}const L=e.ref(null),M=e.ref(null);function P(x,C){L.value=C,M.value=C,x.dataTransfer&&(x.dataTransfer.effectAllowed="move",x.dataTransfer.setData("text/plain",String(C)))}function I(x){M.value=x}function W(x,C){if(x.preventDefault(),L.value===null||L.value===C){L.value=null,M.value=null;return}const w=[...o.selected],[D]=w.splice(L.value,1);w.splice(C,0,D),l("reorder",w),L.value=null,M.value=null}function z(){L.value=null,M.value=null}function H(x){return x==null||x===""?null:String(x)}function A(x,C){return!Array.isArray(x)||x.length===0?null:`${x.length} ${C}`}function F(x){var de,q,Y,G,ne,le;const C=fe(x),w=m(x);if(!C&&!w)return[];const D=(w==null?void 0:w.name)||((q=(de=C==null?void 0:C.opts)==null?void 0:de.layer)==null?void 0:q.name)||null,$=(w==null?void 0:w.service)||((Y=C==null?void 0:C.opts)==null?void 0:Y.service)||null,v=(G=C==null?void 0:C.getSource)==null?void 0:G.call(C),R=v&&"tiles"in v?(ne=v.tiles)==null?void 0:ne[0]:(w==null?void 0:w.url)||null,K=(w==null?void 0:w.source_path)||null,X=(C==null?void 0:C.popup)||(w==null?void 0:w.popup),Z=(C==null?void 0:C.card)||(w==null?void 0:w.card),se=(w==null?void 0:w.filters)||((le=C==null?void 0:C.opts)==null?void 0:le.filters);return[{label:"Назва",value:H(D)},{label:"Сервіс",value:H($)},{label:"Посилання",value:H(R),breakLine:!0},{label:"Джерело",value:H(K),breakLine:!0},{label:"Popup",value:A(X,"полів")},{label:"Картка",value:A(Z,"полів")},{label:"Фільтри",value:A(se,"фільтрів")}]}return(x,C)=>(e.openBlock(),e.createElementBlock("div",Qg,[e.createElementVNode("div",ey,[e.createElementVNode("button",{class:"selected-tab__add",onClick:C[0]||(C[0]=w=>l("select-layer"))},[...C[3]||(C[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",ty,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.selected,(w,D)=>{var $;return e.openBlock(),e.createElementBlock("div",{key:w,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":L.value===D,"selected-tab__item--over":M.value===D}]),draggable:"true",onDragstart:v=>P(v,D),onDragover:e.withModifiers(v=>I(D),["prevent"]),onDrop:v=>W(v,D),onDragend:z},[e.createElementVNode("div",oy,[e.createElementVNode("div",ry,[C[4]||(C[4]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox",checked:d[w]??!0,onChange:v=>h(w,v.target.checked)},null,40,ly),e.createElementVNode("span",ay,e.toDisplayString((($=m(w))==null?void 0:$.name)||"Шар"),1)]),e.createElementVNode("div",iy,[e.createVNode(yr,{"layer-id":w},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:v=>f(w,v),onClick:e.withModifiers(v=>b(w),["stop"])},[...C[5]||(C[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,sy)])])],42,ny)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[p.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:c,class:"selected-tab__menu",style:e.normalizeStyle({top:k.top+"px",left:k.left+"px"})},[e.createElementVNode("div",cy,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:C[1]||(C[1]=w=>S(p.value))},[...C[6]||(C[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(Jg,{items:F(p.value)},{default:e.withCtx(()=>[...C[7]||(C[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"]),C[9]||(C[9]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:C[2]||(C[2]=w=>T(p.value))},[...C[8]||(C[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"]]),uy={class:"filter-tab"},py={key:0,class:"filter-tab__header"},my={class:"filter-tab__title"},fy={key:1,class:"filter-tab__content rounded-md"},gy={class:"filter-tab__scroll"},yy={key:2,class:"filter-tab__empty"},hy=ae(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 u;return((u=l.layer)==null?void 0:u.filters)??[]}),i=e.computed(()=>a.value.length>0);function s(u){r("change",u.data)}return(u,p)=>(e.openBlock(),e.createElementBlock("div",uy,[t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",py,[e.createElementVNode("div",null,[e.createElementVNode("p",my,e.toDisplayString(t.layer.name),1)])])):e.createCommentVNode("",!0),t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",fy,[e.createElementVNode("div",gy,[e.createVNode(e.unref(o),{view:"vertical",schema:a.value,value:t.value,limit:5,class:"rounded-md pb-0",onChange:p[0]||(p[0]=k=>s(k))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",yy,[...p[1]||(p[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),xy={class:"flex items-center justify-between mb-1"},by={class:"flex items-center gap-2"},ky={class:"text-lg font-semibold text-gray-800"},wy={key:0},_y={key:1,class:"block text-sm font-normal text-gray-500"},Ey={class:"flex items-center gap-2"},Ny={class:"flex mb-4 border-b border-gray-200"},By={class:"map-catalog-widget__body"},br=ae(e.defineComponent({__name:"MapCatalogWidget",setup(t){const n=be.useRoute(),o=be.useRouter();function l(){const A=n.query["catalog-tab"];return(Array.isArray(A)?A[0]:A)==="selected"?"selected":"catalog"}const r=e.ref(l()),a=e.ref({groups:[]}),i=e.ref([]),s=e.ref(""),{map:u}=Le(),p=e.reactive({}),k=e.ref(null),c=e.ref(!0),y=e.ref(!1);function d(A){return a.value.groups.map(F=>F.layers.find(x=>x.id===A)).find(Boolean)||null}function m(){const A=k.value;if(!A)return;delete p[A];const F=fe(A);F!=null&&F.setFilter&&F.setFilter("")}function g(A,F){const x=fe(A);if(p[A]={...F},!(x!=null&&x.setFilter))return;const C=Object.entries(F).filter(([,w])=>w!=null&&w!=="").map(([w,D])=>`${w}=${D}`);x.setFilter(C.join("|"))}function h(A){const F=k.value;F&&g(F,A)}function f(A){const F=A.url;let x=null;if(F&&(x=F.startsWith("http")?F:`${window.location.origin}${F}`),!x)return null;const C=(A.service||"").toString().toLowerCase(),w=A.count??null;return C&&C!=="vtile"?{service:C,count:w,source:{type:"raster",tiles:[x],tileSize:256,minzoom:0,maxzoom:20}}:{service:C,count:w,source:{type:"vector",tiles:[x],minzoom:0,maxzoom:14},layer:{style:A.style},card:A.card,popup:A.popup}}function b(A,F,x){var $;const C=x??d(A);if(!C)return;const w=f(C);if(!w)return;const D=fe(C.id,w,u);if(D)if(D.setVisible(F),F){if(!i.value.includes(A)&&(i.value.push(A),($=u.value)!=null&&$.getLayer(A)))try{u.value.moveLayer(A)}catch(v){console.warn("Cannot move new layer",A,v)}}else i.value=i.value.filter(v=>v!==A),k.value===A&&(m(),k.value=null)}function E(){i.value.forEach(A=>{const F=fe(A);F&&F.setVisible(!1)}),i.value=[]}function T(A){i.value=[...A],e.nextTick(()=>{var w;if(!u.value)return;const F=((w=u.value.getStyle())==null?void 0:w.layers)??[];let x;const C=D=>F.filter($=>{var v,R;return($==null?void 0:$.source)===D||($==null?void 0:$.id)===D||((R=(v=$==null?void 0:$.id)==null?void 0:v.startsWith)==null?void 0:R.call(v,`${D}`))}).map($=>$.id);for(let D=A.length-1;D>=0;D-=1){const $=A[D],v=C($);v.length&&(v.forEach(R=>{var K;if((K=u.value)!=null&&K.getLayer(R))try{u.value.moveLayer(R,x)}catch(X){console.warn("Cannot move layer",R,X)}}),x=v[0])}})}function j(A){!A||!Array.isArray(A.filters)||A.filters.length===0||i.value.includes(A.id)&&(k.value=A.id,p[A.id]||(p[A.id]={}),r.value="filter")}function N(){r.value="catalog"}const B=e.computed(()=>k.value?d(k.value):null),S=e.computed(()=>{const A=k.value;return A?p[A]??{}:{}}),L=e.computed(()=>a.value.groups.reduce((A,F)=>A+F.layers.length,0)),M=e.computed(()=>r.value==="selected"?"Вибрані шари":r.value==="filter"?"Фільтр шарів":"Каталог"),P=e.computed(()=>r.value==="selected"?i.value.length:r.value==="catalog"?L.value:null),I=e.computed(()=>{var A;return r.value==="filter"?((A=B.value)==null?void 0:A.name)??"":""});async function W(){const F=await(await fetch("/api/gis-layer-list")).json(),x=new Map;F.forEach(D=>{const $=D.group_id??"other";x.has($)||x.set($,{id:$,name:D.group_name||"Інші шари",layers:[]}),x.get($).layers.push(D)}),a.value={groups:Array.from(x.values())};const C=n.query.layers;if(!C)return;const w=Array.isArray(C)?C[0]:C;typeof w=="string"&&w.split(",").forEach(D=>{const $=D.trim();if(!$)return;const v=d($);v&&b($,!0,v)})}e.watch(k,A=>{!A&&r.value==="filter"&&(r.value="catalog")}),e.watch(B,A=>{!A&&k.value&&(k.value=null)}),e.watch(i,A=>{const F={...n.query};A.length?F.layers=A.join(","):delete F.layers,o.replace({query:F}).catch(()=>{})},{deep:!0});function z(){c.value=!c.value}function H(){y.value=window.innerWidth<=768}return e.onMounted(()=>{W(),H(),y.value&&(c.value=!1),window.addEventListener("resize",H)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",H)}),(A,F)=>(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",P.value>1?"min-h-[250px]":"min-h-[0px]"])},[e.createElementVNode("div",xy,[e.createElementVNode("div",by,[F[5]||(F[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",ky,[e.createTextVNode(e.toDisplayString(M.value)+" ",1),P.value!==null?(e.openBlock(),e.createElementBlock("span",wy,"("+e.toDisplayString(P.value)+")",1)):e.createCommentVNode("",!0),I.value?(e.openBlock(),e.createElementBlock("span",_y,e.toDisplayString(I.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Ey,[e.createElementVNode("button",{onClick:E,class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers"},[...F[6]||(F[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-0023ade8><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-0023ade8></path><path d="M21 3v5h-5" data-v-0023ade8></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-0023ade8></path><path d="M8 16H3v5" data-v-0023ade8></path></svg>',1)])]),e.createElementVNode("button",{type:"button",class:"map-catalog-widget__toggle-button",onClick:z,"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":c.value})},[...F[7]||(F[7]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])])]),e.createElementVNode("div",{class:e.normalizeClass(["map-catalog-widget__content",{"map-catalog-widget__content--collapsed":!c.value}])},[e.createElementVNode("div",Ny,[e.createElementVNode("button",{onClick:F[0]||(F[0]=x=>r.value="catalog"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",r.value==="catalog"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Каталог ",2),e.createElementVNode("button",{onClick:F[1]||(F[1]=x=>r.value="selected"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",r.value==="selected"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Вибрані шари ",2)]),e.createElementVNode("div",By,[r.value==="catalog"?(e.openBlock(),e.createBlock(Gg,{key:0,class:"map-catalog-widget__scroll",catalog:a.value,selected:i.value,search:s.value,"onUpdate:search":F[2]||(F[2]=x=>s.value=x),onToggleLayer:b,onOpenFilter:j},null,8,["catalog","selected","search"])):r.value==="selected"?(e.openBlock(),e.createBlock(dy,{key:1,catalog:a.value,selected:i.value,onToggleLayer:b,onSelectLayer:F[3]||(F[3]=x=>r.value="catalog"),onReorder:T,onRemove:F[4]||(F[4]=x=>i.value=i.value.filter(C=>C!==x))},null,8,["catalog","selected"])):(e.openBlock(),e.createBlock(hy,{key:2,layer:B.value,value:S.value,onChange:h,onClose:N},null,8,["layer","value"]))])],2)],2))}}),[["__scopeId","data-v-0023ade8"]]),Vy={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},Cy={class:"flex items-start justify-between gap-3 p-5 pb-3"},$y={class:"inline-block text-xl font-semibold text-gray-800"},vy={key:0,class:"mt-1 text-sm text-gray-500"},Sy={class:"flex items-center gap-[6px]"},Ly={class:"px-5 pb-5 space-y-6"},Ay={key:0,class:"space-y-2"},Ty={class:"flex flex-wrap gap-4"},My=["value"],Fy={key:1,class:"text-sm text-gray-500"},Dy={key:2,class:"text-sm text-gray-500"},Iy={class:"text-4xl font-medium text-gray-800"},jy={class:"space-y-[14px]"},zy={class:"flex items-center gap-[10px] text-gray-600"},Oy={class:"font-medium text-gray-700"},Ry={class:"flex items-center justify-end text-end gap-3"},Py={class:"font-medium text-gray-800"},Uy={class:"min-w-[40px] font-medium text-[#3C3C4399]"},kr=ae(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),u=e.ref(null),p=e.ref(null),k=e.ref(null),c=e.ref({}),y=e.ref(null);function d(A){return A&&JSON.parse(JSON.stringify(A))}const m=e.computed(()=>{const A=o.config.layer;if(typeof A!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const F=A.trim();if(!F)throw new Error("MapAttributeWidget: `layer` must be non-empty");return F}),g=e.computed(()=>{const{list:A,attribute:F}=o.config;if(Array.isArray(A)&&A.length)return A.map(x=>({id:(x==null?void 0:x.id)!=null?String(x.id).trim():"",text:(x==null?void 0:x.text)!=null&&String(x.text).trim()||null})).filter(x=>x.id.length);if(Array.isArray(F))return F.map(x=>x!=null?String(x).trim():"").filter(x=>x.length).map(x=>({id:x,text:null}));if(typeof F=="string"){const x=F.trim();if(!x)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:x,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),h=e.computed(()=>g.value.map(A=>({id:A.id,label:A.text||c.value[A.id]||A.id})));e.watch(g,A=>{if(!A.length){y.value=null,a.value=[];return}(!y.value||!A.some(F=>F.id===y.value))&&(y.value=A[0].id)},{immediate:!0});const f=e.computed(()=>{var A;return y.value||((A=g.value[0])==null?void 0:A.id)||null});e.watch(m,()=>{var A,F;(F=(A=s.value)==null?void 0:A.remove)==null||F.call(A),s.value=null,u.value=null,p.value=null,k.value=null,c.value={}});const b=e.computed(()=>{var A;return(A=p.value)!=null&&A.length?{id:m.value,name:u.value,filters:p.value}:null}),E=e.computed(()=>{var A,F;return((F=(A=b.value)==null?void 0:A.filters)==null?void 0:F.length)||0});async function T(A){var C;const F=await fetch(`/api/gis-service/${encodeURIComponent(A)}`);if(!F.ok){let w="Не вдалося завантажити налаштування шару";try{const D=await F.json();w=((C=D==null?void 0:D.message)==null?void 0:C.error)||(D==null?void 0:D.message)||w}catch{}throw new Error(w)}const x=await F.json();return u.value=(x==null?void 0:x.name)||null,p.value=Array.isArray(x==null?void 0:x.filters)?x.filters:null,k.value=d((x==null?void 0:x.style)||{}),c.value=((x==null?void 0:x.attributes)||[]).reduce((w,D)=>{const $=typeof(D==null?void 0:D.name)=="string"?D.name.trim():"",v=typeof(D==null?void 0:D.ua)=="string"?D.ua.trim():"";return $&&(w[$]=v||$),w},{}),x}function j(A,F){let x=fe(A);if(!x){const C=`${location.origin}/api/vtile/${A}/ua/{z}/{x}/{y}.vmt`;x=fe(A,{source:{type:"vector",tiles:[C],minzoom:0,maxzoom:14},layer:{id:A,source:A,"source-layer":A,style:(F==null?void 0:F.style)||{}},card:F==null?void 0:F.card,popup:F==null?void 0:F.popup})}return s.value=x,x}async function N(A,F){var w;const x=`/api/gis-service/${encodeURIComponent(A)}/${encodeURIComponent(F)}`,C=await fetch(x);if(!C.ok){let D="Не вдалося отримати статистику";try{const $=await C.json();D=((w=$==null?void 0:$.message)==null?void 0:w.error)||($==null?void 0:$.message)||D}catch{}throw new Error(D)}return C.json()}function B(A){const F=new Map;return A&&(A.rules||[]).forEach(C=>{const w=(C==null?void 0:C.value)??(C==null?void 0:C.id);w!=null&&F.set(String(w),C)}),F}function S(A,F,x,C,w){if(typeof(F==null?void 0:F.color)=="string"&&F.color.trim())return F.color.trim();const D=o.config.colors||{};if(D[A])return D[A];const v=B(x==null?void 0:x.style).get(A);return typeof(v==null?void 0:v.color)=="string"&&v.color.trim()?v.color.trim():n[w%n.length]}function L(A,F,x,C){var w;return(F==null?void 0:F.text)||(F==null?void 0:F.label)||(F==null?void 0:F.name)||(F==null?void 0:F[`${C}_text`])||((w=B(x==null?void 0:x.style).get(A))==null?void 0:w.label)||A}function M(A,F,x,C){if(!A)return;const w=d((F==null?void 0:F.style)||k.value)||{},D=C.trim();if(!D)return;const $={...w.colors||{},...o.config.colors||{}};D===C&&x.forEach(v=>{v.color.trim()&&($[v.id]=v.color)}),A.setStyle({...w,type:w.type||"polygon",colorAttr:D,opacity:.8,colors:$})}async function P(){var D,$;a.value=[],i.value=null;const A=m.value,F=f.value;if(!F)return;r.value=!0;const x=await T(A);j(A,x);const C=await N(A,F),w=Array.isArray(C==null?void 0:C.rows)?C.rows.map((v,R)=>{const K=(v==null?void 0:v.id)??(v==null?void 0:v.value),X=K!=null?String(K):"";if(!X)return null;const Z=L(X,v,x,F),se=Number((v==null?void 0:v.count)??0)||0,de=S(X,v,x,F,R);return{id:X,label:Z,count:se,color:de}}).filter(Boolean):[];a.value=w,i.value=((D=C==null?void 0:C.field)==null?void 0:D.label)||(($=C==null?void 0:C.field)==null?void 0:$.name)||null,M(s.value,x,w,F),r.value=!1}e.watch(()=>[m.value,f.value],()=>{P()},{immediate:!0});const I=e.computed(()=>"Набори даних"),W=e.computed(()=>a.value.reduce((A,F)=>A+F.count,0)),z=e.computed(()=>{var x;const A=f.value;return((x=h.value.find(C=>C.id===A))==null?void 0:x.label)||null||i.value||A||null});function H(A){return W.value?`${(A/W.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var A,F;(F=(A=s.value)==null?void 0:A.remove)==null||F.call(A)}),(A,F)=>l.value?(e.openBlock(),e.createElementBlock("div",Vy,[e.createElementVNode("div",Cy,[e.createElementVNode("div",null,[e.createElementVNode("h2",$y,e.toDisplayString(I.value),1),z.value&&h.value.length===1?(e.openBlock(),e.createElementBlock("p",vy,e.toDisplayString(z.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Sy,[b.value?(e.openBlock(),e.createBlock(Rt,{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:E.value,layer:b.value},null,8,["count","layer"])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",onClick:F[1]||(F[1]=x=>l.value=!1)},[...F[3]||(F[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",Ly,[h.value.length>1?(e.openBlock(),e.createElementBlock("div",Ay,[e.createElementVNode("div",Ty,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,x=>(e.openBlock(),e.createElementBlock("label",{key:x.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:x.id,"onUpdate:modelValue":F[2]||(F[2]=C=>y.value=C)},null,8,My),[[e.vModelRadio,y.value]]),e.createElementVNode("span",null,e.toDisplayString(x.label),1)]))),128))])])):e.createCommentVNode("",!0),r.value?(e.openBlock(),e.createElementBlock("div",Fy,"Завантаження…")):a.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",Iy,e.toDisplayString(W.value),1),e.createElementVNode("ul",jy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,x=>(e.openBlock(),e.createElementBlock("li",{key:x.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",zy,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:x.color})},null,4),e.createElementVNode("span",Oy,e.toDisplayString(x.label),1)]),e.createElementVNode("div",Ry,[e.createElementVNode("span",Py,e.toDisplayString(x.count),1),e.createElementVNode("span",Uy,e.toDisplayString(H(x.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",Dy,"Дані відсутні"))])])):(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:F[0]||(F[0]=x=>l.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-9686ce7b"]]),qy={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]"},Hy=["title"],Wy={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"},Yy=["onClick"],Zy=["placeholder"],Gy={class:"absolute inset-y-0 right-2 flex items-center gap-1"},Ky={class:"divide-y divide-gray-100"},Xy=["onClick"],Ct="search-geom-source",$t="search-geom-layer-fill",Pt="search-geom-layer-line",Jy=30,Qy=8,eh="https://data.softpro.ua/api-user/gis-url-proxy",th="https://geo.rv.ua/api-user/dzk.api",nh="https://nominatim.openstreetmap.org/search",wr=ae(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n=t,o=Le(),l=e.getCurrentInstance();function r(){return typeof globalThis<"u"&&globalThis.proxy?globalThis.proxy:typeof window<"u"&&window.proxy?window.proxy:null}function a(){var ne,le,me;const q=(ne=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:ne.$settings,Y=(le=q==null?void 0:q.map)==null?void 0:le.searchViewbox;if(Y)return Y;const G=r();return(me=G==null?void 0:G.map)==null?void 0:me.searchViewbox}const s=!!a()?["xy","parcel","address"]:["xy","parcel"],u=e.computed(()=>{var Y,G;const q=(G=(Y=n.config)==null?void 0:Y.tools)==null?void 0:G.filter(ne=>s.includes(ne));return q&&q.length?q:s}),p=e.computed(()=>{var q,Y;return((Y=(q=n.config)==null?void 0:q.placeholder)==null?void 0:Y.trim())||"Пошук…"}),k=e.ref(u.value[0]);e.watch(u,q=>{q.includes(k.value)||(k.value=q[0])});const c=e.ref(""),y=e.ref(!1),d=e.ref(null),m=e.ref(null),g=e.ref([]),h=e.ref(null),f=e.computed(()=>k.value==="address"&&g.value.length>0),b=e.computed(()=>{var q;return((q=n.config)==null?void 0:q.addressDebounceMs)??1e3});let E=null;const T=e.ref(!1);let j=null;function N(){j&&(j.remove(),j=null)}function B(){var Y;const q=(Y=o.map)==null?void 0:Y.value;q&&(q.getLayer($t)&&q.removeLayer($t),q.getLayer(Pt)&&q.removeLayer(Pt),q.getSource(Ct)&&q.removeSource(Ct))}function S(q){var le,me,ke,pe;if(!((le=n.config)!=null&&le.showMarker)||!q)return;const Y=(me=o.map)==null?void 0:me.value;if(!Y)return;B(),M();const G={type:"Feature",geometry:q,properties:{}};Y.addSource(Ct,{type:"geojson",data:G});const ne=((ke=n.config)==null?void 0:ke.geometryColor)||((pe=n.config)==null?void 0:pe.markerColor)||"#3B82F6";Y.addLayer({id:$t,type:"fill",source:Ct,paint:{"fill-color":ne,"fill-opacity":.3}}),Y.addLayer({id:Pt,type:"line",source:Ct,paint:{"line-color":ne,"line-width":1,"line-opacity":1}}),P(Y)}let L=null;function M(){L&&(cancelAnimationFrame(L),L=null)}function P(q){const G=performance.now();function ne(le){if(!q.getLayer($t))return;const ke=(le-G)%1200/1200,pe=Math.sin(ke*Math.PI),Re=.2+pe*.3,U=1+pe*1;q.setPaintProperty($t,"fill-opacity",Re),q.setPaintProperty(Pt,"line-width",U),L=requestAnimationFrame(ne)}L=requestAnimationFrame(ne)}function I(q,Y){var le,me,ke;if(!((le=n.config)!=null&&le.showMarker))return;N(),B();const G=(me=o.map)==null?void 0:me.value;if(!G)return;if(Y){S(Y);return}const ne=((ke=n.config)==null?void 0:ke.markerColor)||"#3B82F6";j=new maplibregl.Marker({color:ne}).setLngLat([q.lng,q.lat]).addTo(G)}const W=e.reactive({position:"absolute",left:"0px",top:"0px",width:"100%",display:"none"});function z(){if(!m.value)return;const q=m.value.getBoundingClientRect(),Y=q.width+Jy,G=q.left+window.scrollX,ne=q.bottom+window.scrollY+Qy;W.left=`${G}px`,W.top=`${ne}px`,W.width=`${Y}px`,W.display="block"}const H=()=>{f.value&&z()};function A(){E&&(clearTimeout(E),E=null)}e.watch(k,()=>{c.value="",y.value=!1,g.value=[],A(),T.value=!1,N(),B()}),e.watch(f,q=>{q?e.nextTick(()=>{z()}):W.display="none"}),e.watch(c,q=>{if(k.value!=="address"){g.value=[],A();return}if(!q.trim()){g.value=[],A();return}A(),E=window.setTimeout(()=>{K(q).catch(Y=>{const G=(Y==null?void 0:Y.message)||"Помилка пошуку адреси";ue.notify({type:"error",title:"Пошук адреси",message:G})})},b.value)});function F(q){k.value=q}function x(){c.value="",g.value=[],T.value=!1,N(),B()}function C(q){const Y=q.target;if(y.value){const G=d.value;G&&!G.contains(Y)&&(y.value=!1)}if(f.value){const G=h.value;G&&!G.contains(Y)&&(g.value=[])}}e.onMounted(()=>{window.addEventListener("click",C,!0),window.addEventListener("scroll",H,!0),window.addEventListener("resize",H)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",C,!0),window.removeEventListener("scroll",H,!0),window.removeEventListener("resize",H),A(),N(),B()});function w(q){return q==="xy"?"Координати":q==="parcel"?"Кадастр":"Адреси"}function D(q){const Y=q.replace(/[,]+/g," ").trim();if(!Y)return null;const G=Y.split(/\s+/).filter(Boolean);if(G.length<2)return null;const ne=G.slice(0,2).map(Number);if(!ne.every(Q=>Number.isFinite(Q)))return null;let[le,me]=ne,ke=le,pe=me;const Re=Q=>Math.abs(Q)<=90,U=Q=>Math.abs(Q)<=180;if(!Re(ke)||!U(pe))if(Re(pe)&&U(ke))ke=me,pe=le;else return null;return{lat:ke,lng:pe}}function $(q){return((q==null?void 0:q.items)||[]).map((G,ne)=>{var le,me,ke;return{id:String((G==null?void 0:G.id)??ne),title:(G==null?void 0:G.title)||((le=G==null?void 0:G.address)==null?void 0:le.label)||"Знайдений обʼєкт",lat:Number((me=G==null?void 0:G.position)==null?void 0:me.lat),lng:Number((ke=G==null?void 0:G.position)==null?void 0:ke.lng)}})}function v(q){const Y=(q==null?void 0:q.result)||(q==null?void 0:q.data)||q;if(!Y)return[];const G=Y.geom_centroid;if(!G||!Array.isArray(G.coordinates))return[];const[ne,le]=G.coordinates;return!Number.isFinite(le)||!Number.isFinite(ne)?[]:[{id:"parcel",title:Y.cadnum||Y.cad_num||"Земельна ділянка",lat:le,lng:ne,geom:Y.geom||null}]}function R(q){return(Array.isArray(q==null?void 0:q.features)?q.features:[]).map((G,ne)=>{var Q,ie,we;const le=(Q=G==null?void 0:G.geometry)==null?void 0:Q.coordinates,me=Number(le==null?void 0:le[0]),ke=Number(le==null?void 0:le[1]);if(!Number.isFinite(ke)||!Number.isFinite(me))return null;const pe=(G==null?void 0:G.properties)||{},Re=((ie=pe==null?void 0:pe.geocoding)==null?void 0:ie.label)||(pe==null?void 0:pe.display_name)||(pe==null?void 0:pe.label)||"Адреса";return{id:String(((we=pe==null?void 0:pe.geocoding)==null?void 0:we.place_id)||(pe==null?void 0:pe.place_id)||ne),title:Re,lat:ke,lng:me}}).filter(G=>!!G)}async function K(q){g.value=[],A();const Y=new URL(nh);Y.searchParams.set("format","geojson"),Y.searchParams.set("q",q),Y.searchParams.set("addressdetails","1"),Y.searchParams.set("bounded","1");const G=a();G&&Y.searchParams.set("viewbox",G);const ne=await fetch(Y.toString());if(!ne.ok)throw new Error(`HTTP ${ne.status}`);const le=await ne.json(),me=R(le);if(!me.length){ue.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}g.value=me}function X(q){se(q),g.value=[],c.value=q.title}function Z(q){const G=q.replace(/\s+/g,"").split(":");if(console.log(G),G.length!==4)return!1;const ne=[10,2,3,4];return G.every((le,me)=>le.length===ne[me]&&/^\d+$/.test(le))}function se(q){var G,ne;const Y=((G=n.config)==null?void 0:G.zoom)??17;(ne=o.flyTo)==null||ne.call(o,{center:[q.lng,q.lat],zoom:Y}),I(q,q.geom),T.value=!0}async function de(){const q=c.value.trim();if(q){if(k.value==="xy"){const Y=D(q);if(!Y){ue.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}se(Y);return}if(k.value==="address"){try{await K(q)}catch(Y){const G=(Y==null?void 0:Y.message)||"Помилка пошуку адреси";ue.notify({type:"error",title:"Пошук адреси",message:G})}return}try{const Y=new URL(k.value==="here"?eh:th);if(k.value==="here")Y.searchParams.set("searchtext",q);else{if(!Z(q)){ue.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}Y.searchParams.set("cad_num",q)}const G=await fetch(Y.toString());if(!G.ok)throw new Error(`HTTP ${G.status}`);const ne=await G.json(),le=k.value==="here"?$(ne):v(ne);if(!le.length)ue.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const me=le[0];se(me)}}catch(Y){const G=(Y==null?void 0:Y.message)||"Помилка пошуку";ue.notify({type:"error",title:"Пошук",message:G})}}}return(q,Y)=>(e.openBlock(),e.createElementBlock("div",qy,[e.createElementVNode("form",{class:"flex gap-2",onSubmit:e.withModifiers(de,["prevent"])},[u.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:d,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:Y[0]||(Y[0]=G=>y.value=!y.value)},[e.createElementVNode("span",{class:"block w-full truncate",title:w(k.value)},e.toDisplayString(w(k.value)),9,Hy),(e.openBlock(),e.createElementBlock("svg",{class:e.normalizeClass(["w-4 h-4 text-gray-500 transition-transform",{"rotate-180":y.value}]),viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[...Y[3]||(Y[3]=[e.createElementVNode("path",{d:"M6 9l6 6 6-6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))]),y.value?(e.openBlock(),e.createElementBlock("div",Wy,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,G=>(e.openBlock(),e.createElementBlock("li",{key:G,class:"px-3 py-2 cursor-pointer hover:bg-gray-100 text-gray-900",onClick:ne=>F(G)},e.toDisplayString(w(G)),9,Yy))),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"searchWrapperRef",ref:m,class:"relative flex-1 min-w-[140px]"},[k.value==="parcel"?(e.openBlock(),e.createBlock(e.unref(An.VsInputMask),{key:0,modelValue:c.value,"onUpdate:modelValue":Y[1]||(Y[1]=G=>c.value=G),mask:"0000000000:00:000:0000",class:e.normalizeClass(["vs-input !h-[34px] transition-all border block w-full border-gray-200 rounded-md focus:border-blue-100 border-solid py-1.5 pl-3 text-sm",T.value?"!pr-14":"!pr-8"])},null,8,["modelValue","class"])):e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:1,"onUpdate:modelValue":Y[2]||(Y[2]=G=>c.value=G),placeholder:p.value,type:"text",class:e.normalizeClass(["vs-input transition-all border block w-full border-gray-200 rounded-md focus:border-blue-100 border-solid py-1.5 pl-3 text-sm",T.value?"!pr-14":"!pr-8"])},null,10,Zy)),[[e.vModelText,c.value,void 0,{trim:!0}]]),e.createElementVNode("div",Gy,[T.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"flex items-center text-gray-400 hover:text-gray-600","aria-label":"Очистити",onClick:x},[...Y[4]||(Y[4]=[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:"M6 18L18 6M6 6l12 12"})],-1)])])):e.createCommentVNode("",!0),Y[5]||(Y[5]=e.createElementVNode("button",{type:"submit",class:"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))]),f.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(W)},[e.createElementVNode("ul",Ky,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,G=>(e.openBlock(),e.createElementBlock("li",{key:G.id,class:"px-3 py-2 cursor-pointer hover:bg-gray-50",onClick:ne=>X(G)},e.toDisplayString(G.title),9,Xy))),128))])],4)])):e.createCommentVNode("",!0)],512)],32)]))}}),[["__scopeId","data-v-d773179e"]]),oh="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",rh="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",lh=ae(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:l,removeControl:r}=Le(),a=e.ref(null),i=e.ref(null),s=e.ref(null),u=e.ref(null);let p=null;function k(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function c(N){if(Array.from(document.styleSheets).some(L=>{var M;return(M=L==null?void 0:L.href)==null?void 0:M.includes(N)}))return;const S=document.createElement("link");S.rel="stylesheet",S.href=N,document.head.appendChild(S)}function y(N){return new Promise((B,S)=>{const L=Array.from(document.scripts).find(P=>P.src===N);if(L){if(L._loaded)return B();L.addEventListener("load",()=>B()),L.addEventListener("error",()=>S(new Error(`Failed ${N}`)));return}const M=document.createElement("script");M.src=N,M.async=!0,M.onload=()=>{M._loaded=!0,B()},M.onerror=()=>S(new Error(`Failed ${N}`)),document.head.appendChild(M)})}function d(){var B,S,L;const N=window;return N.MapboxExportControl||((B=N.mapboxgl)==null?void 0:B.MapboxExportControl)||((S=N.mapboxglExport)==null?void 0:S.MapboxExportControl)||((L=N.mapboxglExport)==null?void 0:L.default)||null}function m(){const N=document.createElementNS("http://www.w3.org/2000/svg","svg");return N.setAttribute("xmlns","http://www.w3.org/2000/svg"),N.setAttribute("viewBox","0 0 24 24"),N.setAttribute("width","18"),N.setAttribute("height","18"),N.setAttribute("fill","none"),N.setAttribute("stroke","currentColor"),N.setAttribute("stroke-width","2"),N.setAttribute("stroke-linecap","round"),N.setAttribute("stroke-linejoin","round"),N.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((S,L)=>{const M=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries(S).forEach(([P,I])=>{M.setAttribute(P,I)}),N.appendChild(M)}),N}function g(){const N=document.createElement("button");N.id="print-btn",N.type="button",N.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(" "),N.setAttribute("aria-label","Друк карти");const B=m(),S=document.createElement("span");return S.className=["absolute right-full mr-3 px-1.5 py-0.5","bg-gray-700 text-white text-[0.75rem] 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(" "),S.textContent="Друк карти",S.setAttribute("aria-hidden","true"),N.appendChild(B),N.appendChild(S),N.addEventListener("click",L=>{L.stopPropagation(),h()}),u.value=N,N}function h(){if(!s.value)return;s.value.style.display==="block"?b():f()}function f(){var N,B,S;s.value&&(s.value.style.display="block",(N=u.value)==null||N.classList.add("scale-105","shadow-xl"),(B=i.value)==null||B.toggleCrosshair(!0),(S=i.value)==null||S.togglePrintableArea(!0),document.addEventListener("click",E))}function b(){var N,B,S;s.value&&(s.value.style.display="none",(N=u.value)==null||N.classList.remove("scale-105","shadow-xl"),(B=i.value)==null||B.toggleCrosshair(!1),(S=i.value)==null||S.togglePrintableArea(!1),document.removeEventListener("click",E))}function E(N){const B=a.value;B&&(N.target&&B.contains(N.target)||b())}function T(N){const B={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};N.querySelectorAll("label, option").forEach(L=>{var P;const M=(P=L.textContent)==null?void 0:P.trim();M&&B[M]&&(L.textContent=B[M])});const S=N.querySelector("button");S&&(S.textContent="Друкувати")}function j(N){const B=N.querySelector(".mapboxgl-export-list");if(!B||!a.value)return;s.value=B;const S=N.querySelector("button");if(S&&(S.style.display="none"),N.style.display="none",!u.value){const M=g();a.value.appendChild(M)}B.style.display="none";const L="_printControlBound";if(!B[L]){const M=P=>P.stopPropagation();B.addEventListener("click",M),B.addEventListener("mousedown",M),B[L]=!0}a.value.appendChild(B),T(B)}return e.onMounted(async()=>{await(o==null?void 0:o());const N=n.value;if(!N)return;c(oh),k();try{await y(rh)}catch(L){console.warn("[MapPrintControl] load error",L);return}const B=d();if(!B)return;const S=new B({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(i.value=S,typeof S.onAdd=="function"){const L=S.onAdd.bind(S);S.onAdd=M=>{const P=L(M);return setTimeout(()=>P&&j(P),50),P}}l?l(S,"top-right"):N.addControl(S,"top-right"),p=L=>{L.key==="Escape"&&b()},document.addEventListener("keyup",p)}),e.onBeforeUnmount(()=>{b(),p&&(document.removeEventListener("keyup",p),p=null);const N=n.value;if(i.value)try{r?r(i.value):N==null||N.removeControl(i.value)}catch{}i.value=null}),(N,B)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:a,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-4fae7635"]]),ah={class:"cursor-coordinates"},ih={class:"cursor-coordinates__text"},sh=ae(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",ah,[e.createElementVNode("span",ih,e.toDisplayString(t.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),ch={class:"minimap__wrapper"},Ut="minimap-viewport",dh="minimap-viewport-layer",uh=ae(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var E,T,j,N;const n=t,o=((T=(E=e.getCurrentInstance())==null?void 0:E.appContext.config.globalProperties)==null?void 0:T.$settings)||null,l=Qe((j=o==null?void 0:o.map)==null?void 0:j.center)||[30,50],r=e.ref(null),a=e.shallowRef(null),i=(N=n.options)==null?void 0:N.active,s=e.ref(i===void 0?!1:!!i);function u(B,S){return typeof B=="number"&&Number.isFinite(B)?B:S}const p=e.computed(()=>{var P,I;const B=(P=n.options)==null?void 0:P.width,S=(I=n.options)==null?void 0:I.height,L=u(n.width??B,210),M=u(n.height??S,150);return{width:`${L}px`,height:`${M}px`}});function k(){var S,L;const B=(L=(S=n.mapContext)==null?void 0:S.map)==null?void 0:L.value;if(!B||typeof B.getStyle!="function")return null;try{const M=B.getStyle();return M?JSON.parse(JSON.stringify(M)):null}catch{return null}}let c=null;function y(){var P;if(typeof window>"u"||a.value||!r.value)return;const B=k(),S=l,L={container:r.value,style:B??{version:8,sources:{voyager:{type:"raster",tiles:["https://tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"voyager",type:"raster",source:"voyager"}]},center:S,zoom:((P=n.options)==null?void 0:P.zoom)??3,interactive:!1,attributionControl:!1},M={...L,...n.options??{}};M.container=L.container,a.value=new maplibregl.Map(M),a.value.on("load",()=>{m(),h()})}function d(){if(!a.value)return;const B=k();B&&(a.value.once("styledata",()=>{m(),h()}),a.value.setStyle(B))}function m(){if(a.value){if(typeof a.value.isStyleLoaded=="function"&&!a.value.isStyleLoaded()){a.value.once("styledata",()=>{m(),h()});return}a.value.getSource(Ut)||(a.value.addSource(Ut,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),a.value.addLayer({id:dh,type:"fill",source:Ut,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function g(){s.value=!s.value,s.value&&e.nextTick(()=>{var B;return(B=a.value)==null?void 0:B.resize()})}function h(){var W,z;const B=(z=(W=n.mapContext)==null?void 0:W.map)==null?void 0:z.value;if(!a.value||!B||!B.getBounds)return;if(typeof a.value.isStyleLoaded=="function"&&!a.value.isStyleLoaded()){a.value.once("styledata",()=>{h()});return}const S=B.getBounds();if(!S)return;const L=S.getNorthEast(),M=S.getSouthWest();if(!L||!M)return;const P=[[M.lng,L.lat],[L.lng,L.lat],[L.lng,M.lat],[M.lng,M.lat],[M.lng,L.lat]],I=a.value.getSource(Ut);if(!I){m();return}I.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[P]},properties:{}})}function f(){var L;const B=n.mapContext,S=(L=B==null?void 0:B.map)==null?void 0:L.value;!(B!=null&&B.on)||!S||(c==null||c(),c=B.on("move",h),h())}async function b(){const B=n.mapContext;if(B){if(typeof B.ready=="function")try{await B.ready()}catch{return}f()}}return e.onMounted(()=>{y(),b()}),e.watch(()=>n.mapContext,()=>{b(),h()}),e.watch(()=>{var B,S;return(S=(B=n.mapContext)==null?void 0:B.map)==null?void 0:S.value},()=>{a.value&&(d(),b())}),e.watch(p,()=>{a.value&&e.nextTick(()=>{var B;return(B=a.value)==null?void 0:B.resize()})}),e.watch(()=>n.options,()=>{var S;c==null||c(),c=null,a.value&&(a.value.remove(),a.value=null);const B=(S=n.options)==null?void 0:S.active;typeof B=="boolean"&&(s.value=B),e.nextTick(()=>{y(),b()})},{deep:!0}),e.onBeforeUnmount(()=>{c==null||c(),c=null,a.value&&(a.value.remove(),a.value=null)}),(B,S)=>(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(jr))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",ch,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:r,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(p.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,s.value]])]),_:1})],2))}}),[["__scopeId","data-v-bc754c89"]]),ph={key:1,class:"absolute bottom-4 right-4 z-[80] flex items-end gap-2"},mh={class:"absolute top-[103px] right-[6.5px] z-[80] flex flex-col items-end gap-1"},fh={class:"map-widget__overlay-grid"},gh={key:0,id:"map-filter-popover-host",class:"map-widget__filter-host"},yh={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},hh={class:"map-widget__stack"},xh={key:2,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom xl:mb-5 mb-2"},bh={class:"map-widget__stack map-widget__stack--bottom"},kh={key:0,class:"map-widget__state"},wh={key:1,class:"map-widget__state map-widget__state--error"},qt=ae(e.defineComponent({__name:"MapWidget",props:{id:{},height:{},minZoom:{},maxZoom:{},data:{}},setup(t){var me,ke,pe,Re;const n=t,o=be.useRoute(),l=be.useRouter(),r=e.ref(null),a=e.ref({}),i=e.ref(null),s=e.ref(!1),u=e.ref(null),p=e.ref(!1),k=e.ref([]),c=e.computed(()=>n.id||"main"),y=e.computed(()=>{var U,Q;return{height:((U=n.height)==null?void 0:U.trim())||((Q=a.value)==null?void 0:Q.height)||"calc(100vh - 65px)"}}),d=e.computed(()=>{var U;return((U=a.value)==null?void 0:U.name)??null}),m=e.computed(()=>{var U;return((U=a.value)==null?void 0:U.description)??null}),g=e.computed(()=>{var U;return W((U=a.value)==null?void 0:U.maps)}),h=e.computed(()=>{var Q,ie;const U=((Q=a.value)==null?void 0:Q.minZoom)??((ie=a.value)==null?void 0:ie.minzoom)??null;return typeof U=="number"?U:null}),f=e.computed(()=>{var Q,ie;const U=((Q=a.value)==null?void 0:Q.maxZoom)??((ie=a.value)==null?void 0:ie.maxzoom)??null;return typeof U=="number"?U:typeof n.maxZoom=="number"?n.maxZoom:20}),b=e.ref(null),E=e.computed(()=>{if(!b.value)return null;const{lng:U,lat:Q}=b.value;return`${Q.toFixed(6)}, ${U.toFixed(6)}`}),T=e.computed(()=>{var U;return((U=r.value)==null?void 0:U.ctx)??null}),j=e.computed(()=>{var U;return((U=a.value)==null?void 0:U.minimap)??null});function N(U){if(!U||typeof U!="object")return U;const Q=Qe(U.center);return Q?{...U,center:Q}:U}const B=((ke=(me=e.getCurrentInstance())==null?void 0:me.appContext.config.globalProperties)==null?void 0:ke.$settings)||null;function S(U){if(U==null)return null;const Q=Number(typeof U=="string"?U.trim():U);return Number.isFinite(Q)?Q:null}const L=Qe((pe=B==null?void 0:B.map)==null?void 0:pe.center),M=S((Re=B==null?void 0:B.map)==null?void 0:Re.zoom),P=e.computed(()=>{const U=(B==null?void 0:B.map)||null,Q=(U==null?void 0:U.boundary)??null,ie=(U==null?void 0:U.katottg)??null;return!Q&&!ie?null:{boundary:Q,katottg:ie}});function I(U){return typeof U=="string"&&U.trim()?U.trim().toLowerCase():"top-left"}function W(U){return Array.isArray(U)?U:U&&typeof U=="object"?Object.values(U).filter(Boolean):[]}const z=e.computed(()=>{var U;return W((U=a.value)==null?void 0:U.widgets)}),H=["left","right"],A=e.computed(()=>{const U={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},Q={"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 z.value.forEach(ie=>{const we=I(ie.position),re=Q[we]??{side:"left",align:"top"};U[re.side][re.align].push(ie)}),U});function F(U){return Array.isArray(U)?U[0]??null:typeof U=="string"?U:null}async function x(){var Q;await e.nextTick();const U=(Q=r.value)==null?void 0:Q.ctx;return U?(U.ready&&await U.ready(),U):null}function C(){var U,Q,ie;return((ie=(Q=(U=r.value)==null?void 0:U.ctx)==null?void 0:Q.map)==null?void 0:ie.value)??null}function w(){const U=C();if(!U)return null;const Q=U.getCenter();return{z:U.getZoom().toFixed(2),x:Q.lng.toFixed(5),y:Q.lat.toFixed(5)}}async function D(){var ie;const U=await x(),Q=(ie=U==null?void 0:U.map)==null?void 0:ie.value;Q&&(typeof h.value=="number"&&Q.setMinZoom(h.value),typeof f.value=="number"&&Q.setMaxZoom(f.value))}async function $(){var re;if(i.value)return;const U=await x(),Q=(re=U==null?void 0:U.map)==null?void 0:re.value;if(!Q)return;const ie=Q.getCenter(),we=Q.getZoom();i.value={center:[ie.lng,ie.lat],zoom:we}}function v(){const U=w();if(!U)return;const Q=F(o.query.x),ie=F(o.query.y),we=F(o.query.z);Q===U.x&&ie===U.y&&we===U.z||l.replace({query:{...o.query,...U}}).catch(()=>{})}function R(U,Q,ie=1e-6){return Math.abs(U-Q)<=ie}async function K(){var $e;const U=await x(),Q=($e=U==null?void 0:U.map)==null?void 0:$e.value;if(!U||!Q)return;const ie=parseFloat(F(o.query.x)??""),we=parseFloat(F(o.query.y)??""),re=parseFloat(F(o.query.z)??""),he=!Number.isNaN(ie),Te=!Number.isNaN(we),ee=!Number.isNaN(re);let ve=!1;if(he&&Te){const Oe=Q.getCenter();(!R(Oe.lng,ie)||!R(Oe.lat,we))&&(Q.setCenter([ie,we]),ve=!0)}ee&&Q.setZoom(re),(!he||!Te||!ee||ve)&&v()}let X=null,Z=null;function se(U){const Q=U==null?void 0:U.lngLat;Q&&(b.value={lng:Q.lng,lat:Q.lat})}async function de(){const U=await x();U!=null&&U.on&&(X==null||X(),X=U.on("moveend",v),Z==null||Z(),Z=U.on("mousemove",se))}e.onUnmounted(()=>{X==null||X(),X=null,Z==null||Z(),Z=null});async function q(U=!1){var ie,we;p.value=!1,u.value=null,b.value=null;const Q=U||!n.data;s.value=Q;try{const re=Q?await(async()=>{const $e=await fetch(`/api/gis-map/${encodeURIComponent(c.value)}`);if(!$e.ok)throw new Error(`Помилка завантаження (${$e.status})`);return $e.json()})():n.data;Q||(p.value=!0);const he=Qe(re.center)??L,Te=W(re.layers).map($e=>N($e)),ee=S(re.zoom)??M;a.value={...re,center:he??null,zoom:ee??re.zoom??null,layers:Te,widgets:re.widgets},k.value=re.tools||["home","print"];const ve=await x();ve&&(he&&((ie=ve.setCenter)==null||ie.call(ve,he)),ee!=null&&((we=ve.setZoom)==null||we.call(ve,ee)),i.value||await $()),await D(),await K(),await de(),p.value=!0}catch(re){u.value=(re==null?void 0:re.message)||"Не вдалося завантажити карту"}finally{Q&&(s.value=!1)}}const Y=e.computed(()=>{var we;const U=new Map;return W((we=a.value)==null?void 0:we.layers).forEach(re=>{if(!(re!=null&&re.id))return;const he=N(re)||re;U.set(re.id,{...he})}),z.value.filter(re=>(re==null?void 0:re.type)==="layers").flatMap(re=>{var he;return W((he=re==null?void 0:re.config)==null?void 0:he.layers)}).forEach(re=>{if(!(re!=null&&re.id))return;const he=U.get(re.id)||{},Te=N(re)||re;U.set(re.id,{...he,...Te,actions:re.actions||he.actions||null,name:he.name||re.name||re.title||he.title||re.id,title:he.title||re.title||he.name||null,visible:he.visible??re.visible??!0})}),Array.from(U.values())}),G=e.ref([]);function ne(U){G.value.includes(U)?G.value=G.value.filter(Q=>Q!==U):G.value.push(U)}const le=e.computed(()=>U=>G.value.includes(U.id));return e.watch([h,f],()=>{D()},{immediate:!0}),e.watch(c,()=>{q(!0)}),e.watch(()=>n.data,U=>{U&&q()}),e.onMounted(()=>{q()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{K()}),(U,Q)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(y.value)},[Q[2]||(Q[2]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createVNode(Ot,{ref_key:"mapViewRef",ref:r,class:"map-widget__view"},{default:e.withCtx(()=>{var ie,we,re,he;return[P.value?(e.openBlock(),e.createBlock(pr,{key:0,"layer-id":"app-boundary",boundary:P.value.boundary,katottg:P.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),T.value?(e.openBlock(),e.createElementBlock("div",ph,[E.value?(e.openBlock(),e.createBlock(sh,{key:0,coordinates:E.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(uh,{"map-context":T.value,options:j.value},null,8,["map-context","options"])])):e.createCommentVNode("",!0),e.createElementVNode("div",mh,[k.value.includes("home")?(e.openBlock(),e.createBlock(et,{key:0,center:((ie=a.value)==null?void 0:ie.center)||((we=i.value)==null?void 0:we.center)||null,zoom:((re=a.value)==null?void 0:re.zoom)??((he=i.value)==null?void 0:he.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),k.value.includes("print")?(e.openBlock(),e.createBlock(lh,{key:1})):e.createCommentVNode("",!0)]),p.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("div",fh,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(H,Te=>e.createElementVNode("div",{key:Te,class:e.normalizeClass(["map-widget__side",`map-widget__side--${Te}`])},[Te==="left"?(e.openBlock(),e.createElementBlock("div",gh)):e.createCommentVNode("",!0),A.value[Te].top.length?(e.openBlock(),e.createElementBlock("div",yh,[e.createElementVNode("div",hh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.value[Te].top,ee=>{var ve,$e,Oe,tt,Ue,nt,Ke,ot;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:ee.id||ee.type,class:"map-overlay__item"},[ee.type==="info"?(e.openBlock(),e.createBlock(gr,{key:0,title:((ve=ee.config)==null?void 0:ve.title)||ee.title||null,content:(($e=ee.config)==null?void 0:$e.content)||"",links:g.value,"map-name":d.value,"map-description":m.value},null,8,["title","content","links","map-name","map-description"])):ee.type==="catalog"?(e.openBlock(),e.createBlock(br,{key:1,api:((Oe=ee.config)==null?void 0:Oe.api)||null},null,8,["api"])):ee.type==="layers"?(e.openBlock(),e.createBlock(xr,{key:2,layers:Y.value,onAction:Q[0]||(Q[0]=vt=>ne(vt.layerId)),config:ee.config},null,8,["layers","config"])):ee.type==="basemaps"?(e.openBlock(),e.createBlock(Bt,{key:3,layers:((tt=ee.config)==null?void 0:tt.layers)||null,"default-layer":((Ue=ee.config)==null?void 0:Ue.default)||null,title:ee.title||((nt=ee.config)==null?void 0:nt.title)||null},null,8,["layers","default-layer","title"])):ee.type==="legend"?(e.openBlock(),e.createBlock(hn,{key:4,items:((Ke=ee.config)==null?void 0:Ke.items)||[]},null,8,["items"])):ee.type==="filters"&&le.value(ee)?(e.openBlock(),e.createBlock(yn,{key:5,"layer-id":(ot=ee.config)==null?void 0:ot.layer,onClose:ne},null,8,["layer-id"])):ee.type==="dataset"||ee.type==="attribute"?(e.openBlock(),e.createBlock(kr,{key:6,config:ee.config},null,8,["config"])):ee.type==="search"?(e.openBlock(),e.createBlock(wr,{key:7,config:ee.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,ee.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),A.value[Te].bottom.length?(e.openBlock(),e.createElementBlock("div",xh,[e.createElementVNode("div",bh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.value[Te].bottom,ee=>{var ve,$e,Oe,tt,Ue,nt,Ke,ot;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:ee.id||ee.type,class:"map-overlay__item"},[ee.type==="info"?(e.openBlock(),e.createBlock(gr,{key:0,title:((ve=ee.config)==null?void 0:ve.title)||ee.title||null,content:(($e=ee.config)==null?void 0:$e.content)||"",links:g.value,"map-name":d.value,"map-description":m.value},null,8,["title","content","links","map-name","map-description"])):ee.type==="catalog"?(e.openBlock(),e.createBlock(br,{key:1,api:((Oe=ee.config)==null?void 0:Oe.api)||null},null,8,["api"])):ee.type==="layers"?(e.openBlock(),e.createBlock(xr,{key:2,layers:Y.value,onAction:Q[1]||(Q[1]=vt=>ne(vt.layerId)),config:ee.config},null,8,["layers","config"])):ee.type==="basemaps"?(e.openBlock(),e.createBlock(Bt,{key:3,layers:((tt=ee.config)==null?void 0:tt.layers)||null,"default-layer":((Ue=ee.config)==null?void 0:Ue.default)||null,title:ee.title||((nt=ee.config)==null?void 0:nt.title)||null},null,8,["layers","default-layer","title"])):ee.type==="legend"?(e.openBlock(),e.createBlock(hn,{key:4,items:((Ke=ee.config)==null?void 0:Ke.items)||[]},null,8,["items"])):ee.type==="filters"&&le.value(ee)?(e.openBlock(),e.createBlock(yn,{key:5,"layer-id":(ot=ee.config)==null?void 0:ot.layer,onClose:ne},null,8,["layer-id"])):ee.type==="dataset"||ee.type==="attribute"?(e.openBlock(),e.createBlock(kr,{key:6,config:ee.config},null,8,["config"])):ee.type==="search"?(e.openBlock(),e.createBlock(wr,{key:7,config:ee.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,ee.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(sr),e.createVNode(ur,{"map-id":c.value},null,8,["map-id"])],64)):e.createCommentVNode("",!0)]}),_:1},512),s.value?(e.openBlock(),e.createElementBlock("div",kh,"Завантаження карти…")):u.value?(e.openBlock(),e.createElementBlock("div",wh,e.toDisplayString(u.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-73d647f9"]]),_h={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},Eh={class:"rounded-xl border border-gray-200 overflow-hidden bg-white"},Nh=e.defineComponent({__name:"MapPreview",props:{id:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("section",_h,[o[0]||(o[0]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Попередній перегляд карти ",-1)),e.createElementVNode("div",Eh,[e.createVNode(qt,{class:"w-full h-[360px]",id:t.id},null,8,["id"])])]))}}),Bh={class:"bg-white rounded-lg shadow-xl w-full max-w-4xl flex flex-col h-[80vh] m-4"},Vh={class:"flex items-center justify-between px-6 py-4 border-b border-gray-200"},Ch={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"},$h={class:"flex-1 overflow-hidden relative bg-[#fffffe]"},vh={class:"px-6 py-4 border-t border-gray-200 flex justify-end gap-3"},Sh=["disabled"],Lh=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,u=>{if(u){try{r.value=JSON.stringify(u,null,2)}catch{r.value="{}"}a.value=null}},{immediate:!0}),e.watch(r,u=>{if(!u.trim()){a.value=null;return}try{JSON.parse(u),a.value=null}catch(p){a.value=p.message}}),e.watch(()=>o.modelValue,()=>{setTimeout(()=>{const{monaco:u}=window;if(u&&u.editor){const p=u.editor.getEditors();p.length>0&&p[p.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 u=JSON.parse(r.value);l("save",u),i()}catch(u){console.error("Failed to parse JSON",u)}}return(u,p)=>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",Bh,[e.createElementVNode("div",Vh,[p[1]||(p[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(yt),{size:20})])]),a.value?(e.openBlock(),e.createElementBlock("div",Ch," Помилка JSON: "+e.toDisplayString(a.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",$h,[e.createVNode(zt,{modelValue:r.value,"onUpdate:modelValue":p[0]||(p[0]=k=>r.value=k),language:"json",theme:"vs-light",class:"w-full h-full"},null,8,["modelValue"])]),e.createElementVNode("div",vh,[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,Sh)])])])):e.createCommentVNode("",!0)}}),Ah={key:0,class:"text-center py-8 text-gray-500 border rounded-lg bg-gray-50"},Th={key:1,class:"rounded-lg border border-gray-200 overflow-hidden"},Mh={class:"w-full text-sm"},Fh={class:"divide-y divide-gray-200"},Dh={class:"px-4 py-3"},Ih=["onUpdate:modelValue","onChange"],jh=["value"],zh={class:"px-4 py-3"},Oh=["onUpdate:modelValue","onChange"],Rh=["value"],Ph={class:"px-4 py-3 text-center"},Uh=["checked","onChange"],qh={class:"px-4 py-3"},Hh={key:0,class:"flex items-center gap-2"},Wh=["onClick"],Yh=["onClick"],Zh={key:1},Gh=["onClick"],Kh={class:"px-4 py-3 text-right"},Xh=["onClick"],Jh=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),u=e.computed(()=>o.modelValue||[]);function p(){const f=[...u.value,{type:"info",position:"top-left",visible:!0,config:{}}];l("update:modelValue",f)}function k(f){ue.confirm({title:"Видалити віджет?",message:"Ви впевнені, що хочете видалити цей віджет?",type:"warning",onConfirm:()=>{const b=u.value.filter((E,T)=>T!==f);l("update:modelValue",b)}})}function c(f,b,E){const T=[...u.value];T[f]={...T[f],[b]:E},l("update:modelValue",T)}function y(f){return!!f&&Object.keys(f).length>0}function d(f,b){s.value=f,i.value=b||{}}function m(f){d(f,{})}function g(f){ue.confirm({title:"Видалити конфігурацію?",message:"Ви впевнені, що хочете видалити конфігурацію цього віджета?",type:"warning",onConfirm:()=>{c(f,"config",void 0)}})}function h(f){s.value>-1&&c(s.value,"config",f),i.value=null,s.value=-1}return(f,b)=>{var E;return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",{class:"flex items-center justify-between mb-4"},[b[1]||(b[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800"},"Віджети",-1)),e.createElementVNode("button",{onClick:p,class:"px-3 py-1.5 text-sm bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors"}," + Додати віджет ")]),(E=u.value)!=null&&E.length?(e.openBlock(),e.createElementBlock("div",Th,[e.createElementVNode("table",Mh,[b[2]||(b[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",Fh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,(T,j)=>(e.openBlock(),e.createElementBlock("tr",{key:j,class:"hover:bg-gray-50"},[e.createElementVNode("td",Dh,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":N=>T.type=N,onChange:N=>c(j,"type",T.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,N=>e.createElementVNode("option",{key:N,value:N},e.toDisplayString(N),9,jh)),64))],40,Ih),[[e.vModelSelect,T.type]])]),e.createElementVNode("td",zh,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":N=>T.position=N,onChange:N=>c(j,"position",T.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,N=>e.createElementVNode("option",{key:N,value:N},e.toDisplayString(N),9,Rh)),64))],40,Oh),[[e.vModelSelect,T.position]])]),e.createElementVNode("td",Ph,[e.createElementVNode("input",{type:"checkbox",checked:T.visible!==!1,onChange:N=>c(j,"visible",N.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"},null,40,Uh)]),e.createElementVNode("td",qh,[y(T.config)?(e.openBlock(),e.createElementBlock("div",Hh,[e.createElementVNode("button",{onClick:N=>d(j,T.config),class:"p-1 text-blue-600 hover:text-blue-800 hover:bg-blue-50 rounded transition-colors",title:"Редагувати конфігурацію"},[e.createVNode(e.unref(Zr),{size:16})],8,Wh),e.createElementVNode("button",{onClick:N=>g(j),class:"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors",title:"Видалити конфігурацію"},[e.createVNode(e.unref(yt),{size:16})],8,Yh)])):(e.openBlock(),e.createElementBlock("div",Zh,[e.createElementVNode("button",{onClick:N=>m(j),class:"p-1 text-green-600 hover:text-green-800 hover:bg-green-50 rounded transition-colors",title:"Додати конфігурацію"},[e.createVNode(e.unref(Yt),{size:16})],8,Gh)]))]),e.createElementVNode("td",Kh,[e.createElementVNode("button",{onClick:N=>k(j),class:"p-1 text-gray-400 hover:text-red-500 transition-colors",title:"Видалити віджет"},[e.createVNode(e.unref(zn),{size:16})],8,Xh)])]))),128))])])])):(e.openBlock(),e.createElementBlock("div",Ah," Немає віджетів. Додайте перший віджет. ")),e.createVNode(Lh,{teleport:"#modal",modelValue:i.value,"onUpdate:modelValue":b[0]||(b[0]=T=>i.value=T),onSave:h},null,8,["modelValue"])])}}}),Qh={class:"relative min-h-svh flex-1 flex-col flex gap-4 bg-white p-8 overflow-y-auto"},e1={class:"max-w-6xl mx-auto w-full"},t1={class:"flex items-center justify-between mb-6"},n1={class:"mb-2 text-2xl font-semibold text-gray-900"},o1={class:"flex items-center gap-2"},r1=["disabled"],l1={key:0,class:"text-center py-12"},a1={class:"space-y-6"},i1={class:"space-y-6"},s1={class:"space-y-6"},c1=ae(e.defineComponent({__name:"MapSettings",setup(t){const n=be.useRouter(),o=be.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"}],u=s.map(N=>N.id),p=N=>N?Array.isArray(N)?N[0]:N:null,k=(()=>{const N=p(o.query.tab);return N&&u.includes(N)?N:"general"})(),c=e.ref(k);e.watch(()=>o.query.tab,N=>{const B=p(N);B&&u.includes(B)&&c.value!==B&&(c.value=B)}),e.watch(c,N=>{o.query.tab!==N&&n.replace({query:{...o.query,tab:N}})});const y=e.ref({name:"",map_key:"",description:"",holder:"",image:"",keywords:[],center:null,zoom:11,widgets:[],layers:[]}),d=e.computed({get:()=>(y.value.layers||[]).map(N=>N.id||N),set:N=>{y.value.layers=N}}),m=e.computed(()=>a.value.map(N=>({id:N.id,text:N.name||N.id}))),g=e.computed({get:()=>d.value.map(N=>{const B=m.value.find(S=>S.id===N);return B?B.text:N}),set:N=>{const B=N.map(S=>{const L=m.value.find(M=>M.text===S);return L?L.id:null}).filter(S=>S!==null);d.value=B}}),h=e.computed(()=>{const N=y.value.center;if(!Array.isArray(N)||N.length<2)return"Не задано";const[B,S]=N;return B===void 0||S===void 0||B===null||S===null||Number.isNaN(Number(B))||Number.isNaN(Number(S))?"Не задано":`Lng ${Number(B).toFixed(6)}, Lat ${Number(S).toFixed(6)}`}),f=e.computed(()=>{const N=y.value.zoom;if(N==null||N==="")return"Не задано";const B=Number(N);return Number.isNaN(B)?"Не задано":B.toFixed(2)}),b=[{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 E(){try{const N=await fetch("/api/gis-layer-list");N.ok&&(a.value=await N.json())}catch(N){console.error("Failed to load available layers:",N)}}async function T(){try{const B=await(await fetch(`/api/gis-map/${o.params.id}?original=1`)).json();y.value={...B,keywords:B.keywords||[],center:B.center??null,widgets:Array.isArray(B.widgets)?B.widgets:[],layers:(B.layers||[]).map(S=>S.id||S)}}catch(N){console.error("Failed to load map:",N),ue.notify({type:"error",title:"Помилка",message:"Не вдалося завантажити карту"})}finally{l.value=!1}}async function j(){var B,S;const N=(S=(B=i.value)==null?void 0:B.validate)==null?void 0:S.call(B);if(N){ue.notify({type:"warning",title:"Валідація",message:Object.entries(N).map(([L,M])=>`${L}: ${M}`).join(`
163
+ `)});return}}b.value=!0;try{const K=await fetch(M.value,{method:z.value,headers:{"Content-Type":"application/json"},body:JSON.stringify(m.value)});if(!K.ok)throw new Error(`Failed to save: ${K.status}`);ue.notify({type:"success",title:"Збережено",message:"Зміни збережено"}),l("saved"),D()}catch(K){console.error("Failed to save edit form",K),ue.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти зміни"})}finally{b.value=!1}}}return(v,R)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:s,class:"relative flex items-center"},[e.createElementVNode("button",{ref_key:"triggerButton",ref:u,type:"button",onClick:e.withModifiers(H,["stop"]),class:"flex items-center justify-center w-9 h-9 hover:rounded-md hover:border hover:border-gray-200 bg-white text-gray-600 hover:bg-gray-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-sky-500","aria-label":"Дії"},[...R[3]||(R[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 5.5v.01M12 12v.01M12 18.5v.01"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[i.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuContainer",ref:p,style:e.normalizeStyle(c.value),class:"absolute top-0 left-0 mt-2 w-48 rounded-xl border border-gray-200 bg-white shadow-lg text-sm z-[1000]"},[P.value?(e.openBlock(),e.createElementBlock("a",{key:0,href:P.value,target:"_blank",rel:"noreferrer",class:"flex items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-t-xl",onClick:A},[e.createVNode(e.unref(zr),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),R[4]||(R[4]=e.createElementVNode("span",null,"Очистити тайли",-1))],8,Mf)):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"flex items-center gap-2 w-full px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-b-xl",onClick:w},[e.createVNode(e.unref(Gr),{size:16,class:"lucide lucide-pencil text-gray-500"}),e.createElementVNode("span",null,e.toDisplayString(W.value),1)])],4)):e.createCommentVNode("",!0)])),e.createVNode(e.unref(r),{teleport:"#modal",visible:y.value,"onUpdate:visible":R[2]||(R[2]=K=>y.value=K),title:I.value,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",If,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:D,disabled:b.value}," Скасувати ",8,jf),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:$,disabled:b.value},e.toDisplayString(b.value?"Зберігається…":"Зберегти"),9,zf)])]),default:e.withCtx(()=>[f.value?(e.openBlock(),e.createElementBlock("div",Ff," Завантаження форми редагування… ")):h.value?(e.openBlock(),e.createElementBlock("div",Df,e.toDisplayString(h.value),1)):(e.openBlock(),e.createBlock(e.unref(a),{key:2,values:m.value,"onUpdate:values":R[0]||(R[0]=K=>m.value=K),form:g.value,"onUpdate:form":R[1]||(R[1]=K=>g.value=K),schema:d.value},null,8,["values","form","schema"]))]),_:1},8,["visible","title"])],512))}}),Rf={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},Pf={class:"flex-1 relative overflow-hidden"},Uf={class:"absolute top-0 left-0 w-full z-20"},qf={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},Hf={class:"flex items-center gap-3 min-w-0"},Wf={class:"flex flex-col min-w-0"},Yf={class:"font-semibold text-lg text-gray-800 line-clamp-1"},Zf={key:0,class:"text-xs text-gray-500 truncate"},Gf={class:"flex items-center gap-4"},Kf={class:"flex-1 min-w-0"},Xf=["title"],Jf={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]"},Qf={class:"relative w-full h-full"},e0={class:"absolute top-4 left-4 z-20"},t0={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},n0={class:"w-[520px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},o0={class:"flex-1 flex flex-col h-full"},r0={class:"px-3 pt-3 pb-2 border-b border-gray-100"},l0={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"},a0=["aria-selected","onClick"],i0={class:"leading-none"},s0={class:"flex flex-col flex-1 overflow-y-hidden p-4"},c0={key:0,class:"mb-3 text-xs text-slate-500"},d0={key:1,class:"mb-3 text-xs text-rose-600"},u0="OpenGIS",p0=e.defineComponent({__name:"raster",setup(t){const n=[{cardClass:"bg-gradient-to-br from-green-50 to-green-100/30 border-green-200",titleClass:"text-green-900"},{cardClass:"bg-gradient-to-br from-blue-50 to-blue-100/30 border-blue-200",titleClass:"text-blue-900"},{cardClass:"bg-gradient-to-br from-purple-50 to-purple-100/30 border-purple-200",titleClass:"text-purple-900"},{cardClass:"bg-gradient-to-br from-gray-50 to-gray-100/30 border-gray-200",titleClass:"text-gray-900"}],o=be.useRouter(),l=be.useRoute(),r=e.computed(()=>{var C;const x=(C=l.params)==null?void 0:C.id;return typeof x=="string"?x:void 0}),a=e.ref(null),i=e.ref(!1),s=e.ref(null);function u(){var C;if(typeof document>"u")return;const x=(C=g.value)==null?void 0:C.name;document.title=x?`${x} — Растер`:u0}const p=e.computed(()=>{var C;const x=(C=a.value)==null?void 0:C.url;return x?/^https?:\/\//i.test(x)||typeof window>"u"||typeof location>"u"?x:`${location.origin}${x}`:""}),k=e.computed(()=>{var x;return((x=a.value)==null?void 0:x.extent)??null}),c=e.computed(()=>r.value?`raster-${r.value}`:void 0),y=e.computed(()=>{const x=c.value??"raster",C=k.value&&k.value.length===4?k.value.join(","):"no-extent";return`${x}-${C}`}),d=e.computed(()=>!!p.value),m=e.computed(()=>{const x=k.value;if(!x||x.length!==4)return null;const[C,w,D,$]=x;return[C,w,D,$].some(v=>typeof v!="number"||Number.isNaN(v))?null:[(C+D)/2,(w+$)/2]}),g=e.computed(()=>{var $,v;const x=a.value,C=x==null?void 0:x.extent;return{id:r.value??"—",name:(x==null?void 0:x.name)||((v=($=x==null?void 0:x.files)==null?void 0:$[0])==null?void 0:v.name),description:x!=null&&x.extension?`Формат ${x.extension.toUpperCase()}`:"Попередній перегляд растрового шару. Реальні метадані підвантажуються.",coverage:C&&C.length===4?`${F(C[0])}, ${F(C[1])} → ${F(C[2])}, ${F(C[3])}`:"Покриття уточнюється",crs:x!=null&&x.srid?`EPSG:${x.srid}`:"EPSG:4326",source:x!=null&&x.proj4?x.proj4:"Джерело: Mapnik",updatedAt:x!=null&&x.cache?"Дані кешовано":"Нові дані"}}),h=e.computed(()=>{const x=a.value;return x?[x.source_path,x.description,x.is_public?"Публічна":"Не публічна",x.is_active?"Архівна":"Активна"].filter(C=>C).join(", "):""}),f=[{key:"info",label:"Інформація",icon:Lf},{key:"files",label:"Файли",icon:Cf}],b=f.map(x=>x.key),E=e.ref(b.includes(l.query.tab)?l.query.tab:"info");e.watch(()=>l.query.tab,x=>{x&&b.includes(x)&&E.value!==x&&(E.value=x)}),e.watch(E,x=>{l.query.tab!==x&&o.replace({query:{...l.query,tab:x}})});const T=e.computed(()=>S(a.value)),j=e.computed(()=>M(a.value));e.watch(()=>a.value,()=>{u()},{immediate:!0}),e.watch(r,()=>{B()},{immediate:!0});function N(){B()}async function B(){const x=r.value;if(!x){a.value=null,s.value=null;return}i.value=!0,s.value=null;try{const C=await fetch(`/api/gis-raster/${encodeURIComponent(x)}`);if(!C.ok)throw new Error(`HTTP ${C.status}`);const w=await C.json();a.value=w}catch(C){console.error("Failed to load raster info",C),a.value=null,s.value=C instanceof Error?C.message:String(C)}finally{i.value=!1}}function S(x){var C;return(C=x==null?void 0:x.files)!=null&&C.length?x.files.map(w=>({name:w.name,resolution:L(w.name,x),size:w.size||"—",status:"Готово",statusClass:"bg-emerald-50 text-emerald-600 border border-emerald-100"})):[]}function L(x,C){const w=x.toLowerCase();return w.endsWith(".tfw")?"Georeference":w.endsWith(".xml")?"Опис":w.endsWith(".tif")||w.endsWith(".tiff")?C!=null&&C.resolution?C.resolution:"Растер":(C==null?void 0:C.resolution)??"Файл"}function M(x){return x?{baseParams:I(x),spatial:{crs:{code:x.srid?`EPSG:${x.srid}`:"EPSG:4326",description:x.proj4||"WGS 84 — World Geodetic System 1984"},bounds:W(x.extent),resolution:z(x)},statistics:H(x),technical:A(x)}:null}function P(x){return x!=null&&x.length?x.map(w=>{var $;if(!w)return"";const D=w.trim().split(/\s+/)[0];return(($=D==null?void 0:D[0])==null?void 0:$.toUpperCase())||""}).filter(Boolean).join(""):""}function I(x){var v,R;const C=x.bands_count??((v=x.bands)==null?void 0:v.length)??"—",w=P(x.bands),D=(x.bands??[]).map(K=>K.trim()).filter(K=>K.length>0),$=D.length?D.join(", "):void 0;return[{label:"Розмір растру, px",value:x.width&&x.height?`${x.width}×${x.height}`:"—"},{label:"Формат файлу",value:((R=x.extension)==null?void 0:R.toUpperCase())??"—"},{label:"Розмір файлу, mb",value:x.total_size?`${x.total_size}`:"—"},{label:"Кількість каналів",value:typeof C=="number"?`${C}${w?` (${w})`:""}`:`${C}${w?` (${w})`:""}`,tooltip:$},{label:"Глибина кольору",value:x.color_depth?`${x.color_depth} біт/канал`:"—"},{label:"Стиснення",value:x.compression||"—"}]}function W(x){return!x||x.length!==4?[]:[{label:"Північ",value:F(x[3],"N")},{label:"Схід",value:F(x[2],"E")},{label:"Південь",value:F(x[1],"S")},{label:"Захід",value:F(x[0],"W")}]}function z(x){const C=[{label:"Роздільна здатність",value:x.resolution||"—"}];return x.width&&x.height&&C.push({label:"Розмір пікселя",value:`${x.width} × ${x.height} px`}),C}function H(x){var C;return(C=x.bands)!=null&&C.length?x.bands.map((w,D)=>{const $=n[D%n.length];return{label:`Канал ${D+1}${w?` (${w})`:""}`,cardClass:$.cardClass,titleClass:$.titleClass,metrics:[{label:"Назва",value:w||`Канал ${D+1}`},{label:"Глибина",value:x.color_depth?`${x.color_depth} біт`:"—"},{label:"Статус",value:x.cache?"Кешовано":"Готово"}]}}):[]}function A(x){var C;return[{label:"Тип даних",value:x.color_depth?`Unsigned Integer ${x.color_depth}-bit`:"—"},{label:"Компресія",value:x.compression||"—"},{label:"Кольорова інтерпретація",value:((C=x.bands)==null?void 0:C.join(", "))||"—"},{label:"SRID",value:x.srid?`EPSG:${x.srid}`:"—"},{label:"Проекція (proj4)",value:x.proj4||"—"},{label:"URL тайла",value:x.url||"—"}]}function F(x,C){if(x==null||Number.isNaN(x))return"—";const w=`${x.toFixed(5)}°`;return C?`${w} ${C}`:w}return(x,C)=>(e.openBlock(),e.createElementBlock("div",Rf,[e.createElementVNode("div",Pf,[e.createElementVNode("div",Uf,[e.createElementVNode("div",qf,[e.createElementVNode("div",Hf,[e.createElementVNode("button",{type:"button",onClick:C[0]||(C[0]=w=>e.unref(o).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"},[...C[1]||(C[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",Wf,[e.createElementVNode("div",Yf,e.toDisplayString(g.value.name),1),h.value?(e.openBlock(),e.createElementBlock("div",Zf,e.toDisplayString(h.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Gf,[e.createElementVNode("div",Kf,[e.createElementVNode("div",{class:"w-full text-xs text-gray-600 truncate",title:g.value.description},e.toDisplayString(g.value.description),9,Xf)]),e.createVNode(fr,{"entity-id":r.value||"","entity-info":{name:g.value.name},table:"gis.rasters.table","entity-label":"Растер","save-method":"put","edit-button-text":"Редагувати",onSaved:N},null,8,["entity-id","entity-info"])])])]),e.createElementVNode("div",Jf,[e.createElementVNode("div",Qf,[e.createVNode(Ot,null,{default:e.withCtx(()=>[d.value?(e.openBlock(),e.createBlock(Tf,{key:y.value,"tile-url":p.value,extent:k.value,"layer-id":c.value},null,8,["tile-url","extent","layer-id"])):e.createCommentVNode("",!0),e.createElementVNode("div",e0,[e.createVNode(Bt)]),e.createElementVNode("div",t0,[e.createVNode(et),m.value?(e.openBlock(),e.createBlock(et,{key:0,targetCenter:m.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)])]),_:1})])])]),e.createElementVNode("div",n0,[e.createElementVNode("div",o0,[e.createElementVNode("div",r0,[e.createElementVNode("div",l0,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(f,w=>e.createElementVNode("button",{key:w.key,type:"button",role:"tab","aria-selected":E.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",E.value===w.key?"bg-white shadow-sm text-gray-700":""]),onClick:D=>E.value=w.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(w.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",i0,e.toDisplayString(w.label),1)],10,a0)),64))])]),e.createElementVNode("div",s0,[i.value?(e.openBlock(),e.createElementBlock("div",c0," Завантаження метаданих растру… ")):s.value?(e.openBlock(),e.createElementBlock("div",d0," Не вдалося отримати дані: "+e.toDisplayString(s.value),1)):e.createCommentVNode("",!0),E.value==="files"?(e.openBlock(),e.createBlock(Ef,{key:2,files:T.value},null,8,["files"])):j.value?(e.openBlock(),e.createBlock(bf,{key:3,details:j.value},null,8,["details"])):e.createCommentVNode("",!0)])])])]))}}),m0={},f0={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 g0(t,n){return e.openBlock(),e.createElementBlock("svg",f0,[...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 y0=ae(m0,[["render",g0]]),h0={class:"flex flex-col h-full"},x0={class:"flex justify-end mb-3 gap-2"},b0=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",h0,[e.createElementVNode("div",x0,[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(zt,{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"])]))}}),k0={class:"flex flex-col flex-1 min-h-0"},w0={class:"flex justify-between mb-3 gap-2"},_0={class:"text-left"},E0={class:"font-medium text-gray-900"},N0={class:"text-xs text-gray-500"},B0={class:"flex justify-center gap-2"},V0=["checked","onChange"],C0={class:"text-sm font-medium text-gray-900"},$0=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:"Min Зум",slot:"zoomCell",width:"140px"}],l=e.defineAsyncComponent(()=>import("@opengis/core").then(m=>m.VsModal)),r=e.defineAsyncComponent(()=>import("@opengis/form")),a=e.useModel(t,"modelValue"),i=n,s=e.ref(!1),u=e.ref({table:"",query:"",srid:"",key:"",columns:"",minzoom:"",maxzoom:"",proj4text:"",active:!0}),p={table:{type:"text",label:"Таблиця",validators:["required"]},key:{type:"text",label:"Ключ",validators:["required"]},query:{type:"text",label:"Query"},columns:{type:"text",label:"Колонки"},srid:{type:"number",label:"SRID"},proj4text:{type:"text",label:"PROJ4"},active:{type:"switcher",label:"Активна"},minzoom:{type:"number",label:"Min Зум",col:6},maxzoom:{type:"number",label:"Max Зум",col:6}};function k(){u.value={table:"",query:"",srid:"",key:"",columns:"",minzoom:"",maxzoom:"",proj4text:"",active:!0},s.value=!0}function c(){s.value=!1}function y(){var h,f;const m=(h=u.value.table)==null?void 0:h.trim(),g=(f=u.value.key)==null?void 0:f.trim();if(!m||!g){ue.notify({type:"warning",title:"Перевірка",message:"Вкажіть таблицю та підпис"});return}a.value=[...Array.isArray(a.value)?a.value:[],{...u.value,table:m,key:g}],s.value=!1}function d(m,g){var f;const h=((f=g==null?void 0:g.target)==null?void 0:f.checked)??!1;m.active=h,a.value=Array.isArray(a.value)?[...a.value]:[]}return(m,g)=>(e.openBlock(),e.createElementBlock("div",k0,[e.createElementVNode("div",w0,[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:k}," Додати таблицю "),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:g[0]||(g[0]=h=>i("save"))}," Зберегти ")]),e.createVNode(We,{modelValue:a.value,"onUpdate:modelValue":g[1]||(g[1]=h=>a.value=h),"columns-scheme":o,"form-scheme":p,"add-button":!1,"main-col-width":"260px"},{datasetCell:e.withCtx(({row:h})=>[e.createElementVNode("div",_0,[e.createElementVNode("div",E0,e.toDisplayString(h.table),1),e.createElementVNode("div",N0,e.toDisplayString(h.key),1)])]),activeCell:e.withCtx(({row:h})=>[e.createElementVNode("label",B0,[e.createElementVNode("input",{type:"checkbox",class:"h-4 w-4 text-sky-500 border-gray-300 rounded focus:ring-sky-300",checked:h.active,onChange:f=>d(h,f)},null,40,V0)])]),zoomCell:e.withCtx(({row:h})=>[e.createElementVNode("div",C0,e.toDisplayString(h.zoom),1)]),_:1},8,["modelValue"]),e.createVNode(e.unref(l),{teleport:"#modal",visible:s.value,"onUpdate:visible":g[3]||(g[3]=h=>s.value=h),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:c}," Скасувати "),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:y}," Додати ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(r),{values:u.value,"onUpdate:values":g[2]||(g[2]=h=>u.value=h),schema:p},null,8,["values"])]),_:1},8,["visible"])]))}}),v0=e.defineComponent({__name:"CartocssLayerLoader",props:{layerId:{type:String,required:!0},tileUrl:{type:String,default:""},title:{type:String,default:""},active:{type:Boolean,default:!1},owner:{type:String,default:""},opacity:{type:Number,default:.85}},setup(t){const n=t,o=Le(),{activateTemporaryLayer:l,deactivateTemporaryLayer:r}=kn(o.map),a=e.computed(()=>{var k;const p=`${(k=n==null?void 0:n.tileUrl)==null?void 0:k.trim()}`;return p?typeof window>"u"||typeof location>"u"||/^https?:\/\//i.test(p)?p:p.startsWith("//")?`${window.location.protocol}${p}`:p.startsWith("/")?`${location.origin}${p}`:`${location.origin}/${p}`:""});let i="",s="";function u(){const p=n.active&&!!a.value;i&&(!p||i!==n.layerId)&&(r(i,s||void 0),i="",s=""),p&&(l({id:n.layerId,title:n.title||n.layerId,url:a.value,opacity:n.opacity},{},n.owner),i=n.layerId,s=n.owner||"")}return e.watch(()=>[n.layerId,a.value,n.active,n.owner],u,{immediate:!0}),e.onUnmounted(()=>{i&&(r(i,s||void 0),i="",s="")}),()=>{}}}),S0={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},L0={class:"flex-1 relative overflow-hidden"},A0={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"},M0={class:"flex items-center gap-3 min-w-0"},F0={class:"flex flex-col min-w-0"},D0={class:"font-semibold text-lg text-gray-800 line-clamp-1"},I0={key:0,class:"text-xs text-gray-500 truncate"},j0={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]"},z0={class:"relative w-full h-full"},O0={class:"absolute top-4 left-4 z-20"},R0={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},P0={key:0,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"},q0={class:"px-3 pt-3 pb-2 border-b border-gray-100"},H0={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"},W0=["aria-selected","onClick"],Y0={class:"leading-none"},Z0={class:"flex flex-col flex-1 overflow-y-hidden p-4"},G0={key:0,class:"flex-1 flex items-center justify-center text-sm text-gray-500"},K0="cartocss-demo-001",X0="OpenGIS",J0=e.defineComponent({__name:"cartocss",setup(t){const n=be.useRouter(),o=be.useRoute(),l=[{key:"css",label:"CSS",icon:tr},{key:"data",label:"Дані",icon:y0}],r=l.map(M=>M.key),a=e.ref(r.includes(o.query.tab)?o.query.tab:"css"),i=e.computed(()=>o.params.id||K0),s=e.ref({id:i.value,name:"",description:""});function u(M){typeof document>"u"||(document.title=M?`${M} — CartoCSS`:X0)}const p=e.ref("");e.ref("");const k=e.ref([]),c=e.ref(!1),y=e.ref(!1),d=e.ref(""),m=e.ref(0),g=e.ref(!1),h=e.computed(()=>`cartocss-layer-${i.value}`),f=e.ref(null),b=e.computed(()=>{var z;const M=(z=d.value)==null?void 0:z.trim();if(!M)return"";const P=M.includes("?")?"&":"?",I=`${M}${P}nottl=1`,W=m.value;return W?`${M}${P}ts=${W}&nocache=1`:I}),E=e.computed(()=>{var H;const M=(H=f.value)==null?void 0:H.bounds;if(!Array.isArray(M)||M.length<4)return null;const[P,I,W,z]=M;return[P,I,W,z].some(A=>typeof A!="number"||Number.isNaN(A))?null:[(P+W)/2,(I+z)/2]}),T=e.computed(()=>{const M=f.value;return M?(k.value.map(I=>I==null?void 0:I.table).filter(Boolean),[M.description,M.group_id?`Група: ${M.group_id}`:null,M.source_path?`Шлях: ${M.source_path}`:null,M.is_public===!0?"Публічний":"Не публічний",M.enabled===!0?"Активний":"Неактивний"].filter(Boolean).join(", ")):""});e.watch(i,M=>{M&&S(M)},{immediate:!0}),e.watch(()=>{var M;return(M=s.value)==null?void 0:M.name},M=>u(M),{immediate:!0}),e.watch(()=>o.query.tab,M=>{M&&r.includes(M)&&a.value!==M&&(a.value=M)}),e.watch(a,M=>{o.query.tab!==M&&n.replace({query:{...o.query,tab:M}})});function j(){i.value&&S(i.value,{bustCache:!0})}function N(M){if(!M)return null;if(typeof M=="string")try{return JSON.parse(M)}catch(P){return console.warn("Failed to parse CartoCSS config",P),null}return typeof M=="object"?M:null}function B(M){const P=Array.isArray(M)?M:M==null?void 0:M.datasets;return Array.isArray(P)?P.map((I,W)=>({table:(I==null?void 0:I.table)||(I==null?void 0:I.id)||`dataset_${W+1}`,query:(I==null?void 0:I.query)||"",srid:(I==null?void 0:I.srid)||"",key:(I==null?void 0:I.key)||(I==null?void 0:I.label)||"Без підпису",active:typeof(I==null?void 0:I.active)=="boolean"?I.active:!0,minzoom:typeof(I==null?void 0:I.zoom)>"u"?"":String(I.zoom),maxzoom:typeof(I==null?void 0:I.maxzoom)>"u"?"":String(I.maxzoom),columns:(I==null?void 0:I.columns)||"",proj4text:(I==null?void 0:I.proj4text)||""})):[]}async function S(M,P){c.value=!0;try{const I=await fetch(`/api/gis-css/${M}`);if(!I.ok)throw new Error(`Failed to load cartocss: ${I.status}`);const W=await I.json(),z=(W==null?void 0:W.message)||W||{};f.value=z,s.value={id:z.cartocss_key||M,name:z.name||s.value.name,description:z.description||s.value.description},p.value=typeof z.style=="string"?z.style:"";const H=N(z.config??[]);k.value=B(H);const A=typeof z.url=="string"?z.url:"";d.value=A,g.value=!!(A&&z.enabled!==!1),m.value=P!=null&&P.bustCache?Date.now():0}catch(I){console.error("Failed to fetch CartoCSS",I),g.value=!1,d.value="",m.value=0,f.value=null}finally{c.value=!1}}async function L(){if(i.value){y.value=!0;try{const M={style:p.value||"",config:k.value},P=await fetch(`/api/gis-css/${i.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(M)});if(!P.ok)throw new Error(`Failed to save cartocss: ${P.status}`);ue.notify({type:"success",title:"Збережено",message:"CartoCSS оновлено"}),await S(i.value,{bustCache:!0})}catch(M){console.error("Failed to save CartoCSS",M),ue.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти CartoCSS"})}finally{y.value=!1}}}return(M,P)=>(e.openBlock(),e.createElementBlock("div",S0,[e.createElementVNode("div",L0,[e.createElementVNode("div",A0,[e.createElementVNode("div",T0,[e.createElementVNode("div",M0,[e.createElementVNode("button",{type:"button",onClick:P[0]||(P[0]=I=>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[3]||(P[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",F0,[e.createElementVNode("div",D0,e.toDisplayString(s.value.name),1),T.value?(e.openBlock(),e.createElementBlock("div",I0,e.toDisplayString(T.value),1)):e.createCommentVNode("",!0)])]),e.createVNode(fr,{"entity-id":i.value,"entity-info":s.value,"form-endpoint":I=>`/api/form/gis.cartocss.table/${I}`,"save-endpoint":I=>`/api/gis-css/${I}`,"entity-label":"CartoCSS","save-method":"post",onSaved:j},null,8,["entity-id","entity-info","form-endpoint","save-endpoint"])])]),e.createElementVNode("div",j0,[e.createElementVNode("div",z0,[e.createVNode(Ot,null,{default:e.withCtx(()=>[e.createElementVNode("div",O0,[e.createVNode(Bt)]),e.createElementVNode("div",R0,[e.createVNode(et),E.value?(e.openBlock(),e.createBlock(et,{key:0,targetCenter:E.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),b.value?(e.openBlock(),e.createBlock(v0,{key:0,"layer-id":h.value,"tile-url":b.value,active:g.value,title:s.value.name,owner:i.value},null,8,["layer-id","tile-url","active","title","owner"])):e.createCommentVNode("",!0)]),_:1})])])]),f.value&&!f.value.source_path?(e.openBlock(),e.createElementBlock("div",P0,[e.createElementVNode("div",U0,[e.createElementVNode("div",q0,[e.createElementVNode("div",H0,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,I=>e.createElementVNode("button",{key:I.key,type:"button",role:"tab","aria-selected":a.value===I.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",a.value===I.key?"bg-white shadow-sm text-gray-700":""]),onClick:W=>a.value=I.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(I.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",Y0,e.toDisplayString(I.label),1)],10,W0)),64))])]),e.createElementVNode("div",Z0,[c.value?(e.openBlock(),e.createElementBlock("div",G0," Завантаження стилю… ")):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[a.value==="css"?(e.openBlock(),e.createBlock(b0,{key:0,modelValue:p.value,"onUpdate:modelValue":P[1]||(P[1]=I=>p.value=I),class:"flex-1 min-h-0",onSave:L},null,8,["modelValue"])):(e.openBlock(),e.createBlock($0,{key:1,modelValue:k.value,"onUpdate:modelValue":P[2]||(P[2]=I=>k.value=I),class:"flex-1 min-h-0 flex flex-col",onSave:L},null,8,["modelValue"]))],64))])])])):e.createCommentVNode("",!0)]))}}),Q0={class:"w-full mb-6"},eg={class:"flex items-center w-full h-10 max-w-md p-1 bg-white border border-gray-200 rounded-md"},tg=["onClick"],ng=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",Q0,[e.createElementVNode("div",eg,[(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,tg))),128))])]))}}),og={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},rg=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,u)=>(e.openBlock(),e.createElementBlock("section",og,[u[2]||(u[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":u[0]||(u[0]=p=>a.value=p),form:i.value,"onUpdate:form":u[1]||(u[1]=p=>i.value=p)},null,8,["schema","values","form"]))]))}}),lg={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},ag=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",lg,[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(An.VsInputArraySelect),{options:t.options,modelValue:r.value,"onUpdate:modelValue":i[0]||(i[0]=s=>r.value=s),placeholder:"Шари"},null,8,["options","modelValue"])]))}}),ig={class:"mapLayer-info__inner"},sg={class:"mapLayer-info__item-label"},wn=ae(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 u(g){if(l.open){y();return}const h=g.currentTarget,f=h==null?void 0:h.closest(".mapLayer-info");if(!f){y();return}r.value=f,l.open=!0,e.nextTick(()=>{p(),d(),requestAnimationFrame(()=>{p()})})}function p(){if(!l.open||!r.value||!a.value)return;const g=r.value.getBoundingClientRect(),h=12,f=window.scrollX+h,b=window.scrollX+window.innerWidth-h,E=window.scrollY+h,T=window.scrollY+window.innerHeight-h,j=a.value.offsetWidth||Math.min(300,window.innerWidth-24),N=a.value.offsetHeight||0;let B=g.left+window.scrollX+(g.width-j)/2;B<f&&(B=f),B+j>b&&(B=Math.max(f,b-j)),l.left=B;let S=g.bottom+window.scrollY+h;S+N>T&&(S=g.top+window.scrollY-N-h,S<E&&(S=Math.max(E,T-N))),S<E&&(S=E),S+N>T&&(S=Math.max(E,T-N)),l.top=S,l.transform="none"}function k(g){var f,b;if(!l.open)return;const h=g.target;(f=r.value)!=null&&f.contains(h)||(b=a.value)!=null&&b.contains(h)||y()}function c(g){g.key==="Escape"&&y()}function y(){m(),l.open=!1,r.value=null,a.value=null}function d(){m(),a.value&&(i=new ResizeObserver(()=>{p()}),i.observe(a.value))}function m(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",k,!0),document.addEventListener("keydown",c),window.addEventListener("scroll",p,!0),window.addEventListener("resize",p)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k,!0),document.removeEventListener("keydown",c),window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p),m()}),e.watch(()=>o.items,()=>{l.open&&e.nextTick(()=>p())},{deep:!0}),n({close:y}),(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(u,["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",ig,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,f=>(e.openBlock(),e.createElementBlock("div",{key:f.label,class:"mapLayer-info__item"},[e.createElementVNode("div",sg,e.toDisplayString(f.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":f.breakLine}])},e.toDisplayString(f.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-cc1cc7bf"]]),cg={key:0,class:"map-info__title"},dg={class:"map-info__actions"},ug={key:0,class:"map-info__menu"},pg=["href"],mg=["innerHTML"],gr=ae(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});be.useRouter();const s=e.ref(!0),u=e.ref(!1),p=e.computed(()=>Array.isArray(n.links)?n.links.filter(T=>(T==null?void 0:T.name)&&(T==null?void 0:T.slug)):[]),k=e.computed(()=>({top:`${i.value.top}px`,left:`${i.value.left}px`})),c=e.computed(()=>{const T=[];return n.mapName&&T.push({label:"Назва карти",value:n.mapName}),n.mapDescription&&T.push({label:"Опис",value:n.mapDescription,breakLine:!0}),T});function y(T){return T==null?!1:T.replace(/<[^>]*>/g,"").trim().length>0}const d=e.computed(()=>y(n.content)),m=e.computed(()=>d.value);function g(T){T.stopPropagation(),l.value=!l.value}function h(){const T=r.value;if(!T||!a.value)return;const j=T.getBoundingClientRect(),N=12,B=8,S=window.scrollX+N,L=window.scrollX+window.innerWidth-N,M=window.scrollY+N,P=window.scrollY+window.innerHeight-N,I=a.value.offsetWidth||160,W=a.value.offsetHeight||0;let z=j.bottom+window.scrollY+B,H=j.left+window.scrollX;H+I>L&&(H=j.right+window.scrollX-I,H<S&&(H=S)),H<S&&(H=S),z+W>P&&(z=j.top+window.scrollY-W-B,z<M&&(z=Math.max(M,P-W))),z<M&&(z=M),z+W>P&&(z=Math.max(M,P-W)),i.value={top:z,left:H}}function f(T){if(!l.value)return;const j=o.value;if(!j){l.value=!1;return}j.contains(T.target)||(l.value=!1)}e.watch(l,T=>{T?e.nextTick(()=>{h(),requestAnimationFrame(()=>{h()}),window.addEventListener("scroll",h,!0),window.addEventListener("resize",h)}):(window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h))});function b(){s.value=!s.value}function E(){u.value=window.innerWidth<=768}return e.onMounted(()=>{document.addEventListener("click",f,!0),E(),m.value?u.value&&(s.value=!1):s.value=!1,window.addEventListener("resize",E)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",f,!0),window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h),window.removeEventListener("resize",E)}),(T,j)=>(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||p.value.length||c.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"map-info__header",style:e.normalizeStyle([d.value?"":"padding-bottom: 20px"])},[t.title?(e.openBlock(),e.createElementBlock("h2",cg,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",dg,[p.value.length?(e.openBlock(),e.createElementBlock("div",ug,[e.createElementVNode("button",{ref_key:"menuButton",ref:r,type:"button",class:"map-info__menu-button",onClick:g,"aria-label":"Показати посилання"},[...j[1]||(j[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(k.value),onClick:j[0]||(j[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,N=>(e.openBlock(),e.createElementBlock("a",{key:N.slug||N.name,href:`/maps/${N.slug}`,class:"map-info__popover-link"},e.toDisplayString(N.name),9,pg))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),c.value.length?(e.openBlock(),e.createBlock(wn,{key:1,items:c.value},null,8,["items"])):e.createCommentVNode("",!0),m.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"map-info__toggle-button",onClick:b,"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":s.value})},[...j[2]||(j[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),d.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["map-info__content",{"map-info__content--collapsed":!s.value}]),innerHTML:t.content},null,10,mg)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-813e24fb"]]),fg={class:"opacity-popover__content"},gg={class:"opacity-popover__value"},yr=ae(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 y=c.getBoundingClientRect(),d=260,m=r.value.offsetHeight||60,g=8,h=12,f=window.innerWidth,b=window.innerHeight;let E=y.bottom+g+window.scrollY,T=y.left+window.scrollX;T+d>f-h&&(T=f-d-h+window.scrollX),T<h+window.scrollX&&(T=h+window.scrollX),E+m>b+window.scrollY-h&&(E=y.top-m-g+window.scrollY,E<h+window.scrollY&&(E=b-m-h+window.scrollY)),i.top=E,i.left=T}function u(){o.value=!o.value,o.value&&e.nextTick(s)}function p(){var m;const c=fe(n.layerId),y=(l.value??100)/100;if(c!=null&&c.setOpacity){c.setOpacity(y);return}const d=(m=c==null?void 0:c.getLayer)==null?void 0:m.call(c);if(d)switch(d.type){case"raster":c.updatePaint({"raster-opacity":y});break;case"fill":c.updatePaint({"fill-opacity":y});break;case"line":c.updatePaint({"line-opacity":y});break;case"circle":c.updatePaint({"circle-opacity":y});break;case"symbol":c.updatePaint({"icon-opacity":y});break}}function k(c){var d,m;if(!o.value)return;const y=c.target;(d=r.value)!=null&&d.contains(y)||(m=a.value)!=null&&m.contains(y)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",k),window.addEventListener("scroll",s,!0),window.addEventListener("resize",s)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k),window.removeEventListener("scroll",s,!0),window.removeEventListener("resize",s)}),(c,y)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:a},[e.renderSlot(c.$slots,"trigger",{toggle:u,opacity:l.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(u,["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",fg,[y[1]||(y[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":y[0]||(y[0]=d=>l.value=d),class:"opacity-popover__range",onInput:p},null,544),[[e.vModelText,l.value]]),e.createElementVNode("span",gg,e.toDisplayString(l.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-b278347a"]]),yg={class:"layers-panel"},hg={class:"layers-panel__header"},xg={class:"layers-panel__heading"},bg={class:"layers-panel__heading-title"},kg={class:"layers-panel__title"},wg={class:"layers-panel__count"},_g={key:0,class:"layers-panel__description"},Eg={class:"layers-panel__header-actions"},Ng={class:"layers-panel__bulk-actions"},Bg={class:"layers-panel__header-controls"},Vg={class:"layers-panel__label"},Cg={class:"layers-panel__label-row"},$g=["checked","onChange"],vg={class:"layers-panel__title-block"},Sg={class:"layers-panel__name"},Lg={class:"layers-panel__meta text-slate-500"},Ag=["onClick"],Tg={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},Mg={key:0,class:"layers-panel__actions"},Fg=["innerHTML","onClick"],hr="map:temporary-layer-request",Dg="#5763ba",xr=ae(e.defineComponent({__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,l=e.ref({}),r=e.ref(!0),a=e.ref(!1),i=Le(),{temporaryLayers:s,activateTemporaryLayer:u,deactivateTemporaryLayer:p,clearTemporaryLayers:k}=kn(i.map),c=e.computed(()=>{const w=o.layers.map($=>({...$,isTemporary:!1,owner:null,visible:$.visible!==!1})),D=s.value.map($=>({id:$.id,name:$.title,visible:l.value[$.id]??!0,actions:[],filters:null,isTemporary:!0,owner:$.owner??null,handle:$.handle??null,card:$.card??null,popup:$.popup??null,style:$.style??null,group_name:null,count:null,holder:null}));return[...w,...D]}),y=e.computed(()=>c.value.length),d=e.computed(()=>c.value.filter(w=>T(w.id)).length),m=e.computed(()=>y.value>0&&d.value===y.value),g=e.computed(()=>s.value.length>0),h=n;function f(){var w;for(let D=0;D<o.layers.length;D++){const $=o.layers[D],v=b($);if(!v)continue;const R=fe($.id,v),K=$.visible!==!1;l.value[$.id]=K,K||(w=R==null?void 0:R.setVisible)==null||w.call(R,!1)}}function b(w){const D=w.id;if(!D)return null;const $=(w.type||w.service_type||w.service||"").toString().toLowerCase(),v=w.service_url||w.url||null;if(!!v&&($==="tms"||$==="wmts"||$==="wms"||$==="ogc")){const X=E(v);return X?{sourceId:D,source:{type:"raster",tiles:[X],tileSize:w.tileSize||256,minzoom:w.minzoom??0,maxzoom:w.maxzoom??22,scheme:w.scheme||"xyz"},layer:{id:D,type:"raster",source:D},card:w.card,popup:w.popup}:null}if($==="cartocss"){const X=w.url?E(w.url):`${location.origin}/api/gis-rtile/${D}/{z}/{x}/{y}.png`;return X?{sourceId:D,source:{type:"raster",tiles:[X],tileSize:w.tileSize||256,minzoom:w.minzoom??0,maxzoom:w.maxzoom??22},layer:{id:D,type:"raster",source:D},card:w.card,popup:w.popup}:null}const K=`${location.origin}/api/vtile/${D}/ua/{z}/{x}/{y}.vmt`;return{sourceId:D,source:{type:"vector",tiles:[K],minZoom:4,maxZoom:14},layer:{id:D,source:D,"source-layer":D,style:w.style},card:w.card,popup:w.popup}}function E(w){return w?/^https?:\/\//i.test(w)?w:w.startsWith("//")?`${window.location.protocol}${w}`:w.startsWith("/")?`${location.origin}${w}`:`${location.origin}/${w}`:null}function T(w){const D=l.value[w];return D??!0}function j(w){var v,R;if(!(w!=null&&w.id))return null;const D=(v=w.title)==null?void 0:v.trim(),$=(R=w.url)==null?void 0:R.trim();return!D||!$?null:{id:w.id,title:D,url:$,tileSize:w.tileSize,minzoom:w.minzoom,maxzoom:w.maxzoom,opacity:w.opacity}}function N(w){if(!w)return;const D=w.owner;if(w.action==="clear"){const v=s.value.filter(R=>!D||R.owner===D).map(R=>R.id);k(D),v.forEach(R=>{R in l.value&&delete l.value[R]});return}const $=j(w.spec);if($){if(w.action==="activate"){u($,w.context||{},D),l.value[$.id]=!0;return}w.action==="deactivate"&&(p($.id,D),delete l.value[$.id])}}function B(w){w instanceof CustomEvent&&N(w.detail)}e.watch(()=>s.value.map(w=>w.id),(w,D)=>{const $=new Set(D||[]),v=new Set(w);w.forEach(R=>{R in l.value||(l.value[R]=!0)}),$.forEach(R=>{v.has(R)||delete l.value[R]})},{immediate:!0});function S(w,D){var v,R,K;if(w.isTemporary){if(!D){p(w.id,w.owner||void 0),delete l.value[w.id];return}l.value[w.id]=!0;const X=w.handle||((v=s.value.find(Z=>Z.id===w.id))==null?void 0:v.handle);(R=X==null?void 0:X.setVisible)==null||R.call(X,!0);return}l.value[w.id]=D;const $=fe(w.id);(K=$==null?void 0:$.setVisible)==null||K.call($,D)}function L(w,D){const $=D.target;S(w,$.checked)}function M(w){c.value.forEach(D=>S(D,w))}function P(){M(!m.value)}function I(w){return w.isTemporary?[{label:"Назва",value:w.name??null},{label:"Тип",value:"Тимчасовий шар"},w.owner?{label:"Джерело",value:w.owner}:null].filter(Boolean):[{label:"Назва",value:w.name??null},{label:"Назва групи",value:w.group_name||null},{label:"Кількість",value:w.count??null},{label:"Балансоутримувач",value:w.holder??null}]}function W(w){const D=w.trim();return D?!!(/^#[\da-fA-F]{3,8}$/.test(D)||/^rgb\s*\(/.test(D)||/^rgba\s*\(/.test(D)||/^hsl\s*\(/.test(D)||/^hsla\s*\(/.test(D)||/^[a-zA-Z]+$/.test(D)&&D.length<25):!1}function z(w){var D,$,v,R,K,X;if(!w)return null;if(typeof w=="string"){const Z=w.trim();return!Z||!W(Z)?null:Z}if(Array.isArray(w)){for(const Z of w){const se=z(Z);if(se)return se}return null}if(typeof w=="object"){const Z=w;return z(Z.color??Z.fill??Z.stroke??Z.lineColor??Z.fillColor??((D=Z.paint)==null?void 0:D["fill-color"])??(($=Z.paint)==null?void 0:$["line-color"])??((v=Z.paint)==null?void 0:v["circle-color"])??((R=Z.paint)==null?void 0:R.color)??((K=Z.paint)==null?void 0:K.lineColor)??((X=Z.paint)==null?void 0:X.fillColor)??Z.paint??Z.value)}return null}function H(w){const D=Array.isArray(w==null?void 0:w.legend)?w.legend[0]:w==null?void 0:w.legend,$=z(D);return $||z(w==null?void 0:w.style)||Dg}function A(w){return{"--layers-panel-checkbox-color":H(w)}}function F(){if(!s.value.length)return;const w=s.value.map(D=>D.id);k(),w.forEach(D=>delete l.value[D])}function x(){r.value=!r.value}function C(){a.value=window.innerWidth<=768}return e.onMounted(()=>{f(),window.addEventListener(hr,B),C(),a.value&&(r.value=!1),window.addEventListener("resize",C)}),e.watch(()=>{var w;return((w=o.layers)==null?void 0:w.length)??0},(w,D)=>{w>0&&D===0&&f()}),e.onBeforeUnmount(()=>{window.removeEventListener(hr,B),window.removeEventListener("resize",C)}),(w,D)=>{var $,v;return e.openBlock(),e.createElementBlock("div",yg,[e.createElementVNode("div",hg,[e.createElementVNode("div",xg,[e.createElementVNode("div",bg,[e.createElementVNode("h2",kg,e.toDisplayString((($=t.config)==null?void 0:$.title)||"Шари"),1),e.createElementVNode("span",wg," ("+e.toDisplayString(d.value)+" з "+e.toDisplayString(y.value)+") ",1)]),(v=t.config)!=null&&v.description?(e.openBlock(),e.createElementBlock("div",_g,[e.createElementVNode("p",null,e.toDisplayString(t.config.description),1)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Eg,[e.createElementVNode("div",Ng,[c.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__header-link",onClick:P},e.toDisplayString(m.value?"Вимкнути всі":"Увімкнути всі"),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Bg,[c.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__toggle-button",onClick:x,"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})},[...D[0]||(D[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),g.value?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"layers-panel__clear",onClick:F}," Очистити тимчасові шари ")):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",{class:e.normalizeClass(["layers-panel__content",{"layers-panel__content--collapsed":!r.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,R=>{var K;return e.openBlock(),e.createElementBlock("div",{key:R.id,class:"layers-panel__item"},[e.createElementVNode("label",Vg,[e.createElementVNode("div",Cg,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:T(R.id),style:e.normalizeStyle(A(R)),onChange:X=>L(R,X)},null,44,$g),e.createElementVNode("div",vg,[e.createElementVNode("span",Sg,e.toDisplayString(R.name),1)]),e.createElementVNode("div",Lg,[T(R.id)&&!R.isTemporary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(yr,{"layer-id":R.id,class:"flex"},{trigger:e.withCtx(({toggle:X})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(X,["prevent","stop"])},[e.createElementVNode("div",Tg,[e.createVNode(e.unref(qr))])],8,Ag)]),_:1},8,["layer-id"]),e.createVNode(Rt,{count:Array.isArray(R.filters)?R.filters.length:0,layer:R},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(wn,{items:I(R)},null,8,["items"])])])]),(K=R.actions)!=null&&K.length?(e.openBlock(),e.createElementBlock("div",Mg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(R.actions,X=>(e.openBlock(),e.createElementBlock("button",{key:X.widget||X.id||X.icon,type:"button",class:"layers-panel__action",innerHTML:X.icon,onClick:Z=>h("action",{layerId:X.widget})},null,8,Fg))),128))])):e.createCommentVNode("",!0)])}),128))],2)])}}}),[["__scopeId","data-v-9b1b17e7"]]),Ig={class:"catalog-tab__search relative mt-[10px]"},jg={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%)"}},zg={class:"catalog-tab__list flex-1 overflow-y-auto mt-2"},Og={key:0,class:"text-sm text-gray-400 text-center mt-6"},Rg=["onClick"],Pg={class:"flex items-center gap-x-3"},Ug={class:"max-w-[260px] text-[14px] text-[#4b5563]"},qg={class:"text-xs opacity-60 text-[#4b5563]"},Hg={class:"flex items-center cursor-pointer gap-2 flex-1"},Wg=["checked","onChange"],Yg={class:"text-[13px] text-gray-600 max-w-[260px]"},Zg={class:"flex items-center gap-2"},Gg=ae(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 f=g?h.layers.filter(b=>(typeof b.name=="string"?b.name:"").toLowerCase().includes(g)):h.layers;return{...h,layers:f}}).filter(h=>h.layers.length>0)}),u=e.computed({get:()=>o.search,set:g=>l("update:search",g)});function p(g){r[g]=!r[g],Bp()}function k(g){return!!r[g]}function c(g,h){if(o.selected.includes(h)){i.visible=!1,i.layerId=null;return}const f=g.currentTarget;if(!f)return;const b=f.getBoundingClientRect(),E=typeof window<"u"?window.scrollX:0,T=typeof window<"u"?window.scrollY:0;i.left=b.left+b.width/2+E,i.top=b.bottom+8+T,i.layerId=h,i.visible=!0}function y(){i.visible=!1,i.layerId=null}function d(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",Ig,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[0]||(h[0]=f=>u.value=f),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,u.value]]),(e.openBlock(),e.createElementBlock("svg",jg,[...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",zg,[s.value.length===0?(e.openBlock(),e.createElementBlock("div",Og," Нічого не знайдено ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,f=>(e.openBlock(),e.createElementBlock("div",{key:f.id,class:"mt-2"},[e.createElementVNode("div",{class:"hover:bg-gray-100 cursor-pointer p-[8px] rounded-lg flex justify-between items-center",onClick:b=>p(f.id)},[e.createElementVNode("div",Pg,[(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",k(f.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",Ug,e.toDisplayString(f.name),1)]),e.createElementVNode("div",qg,e.toDisplayString(f.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(f.layers,b=>(e.openBlock(),e.createElementBlock("div",{key:b.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",Hg,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:t.selected.includes(b.id),onChange:E=>g.$emit("toggle-layer",b.id,E.target.checked,b)},null,40,Wg),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",Yg,e.toDisplayString(b.name),1)]),e.createElementVNode("div",Zg,[Array.isArray(b.filters)&&b.filters.length?(e.openBlock(),e.createBlock(Rt,{key:0,count:b.filters.length,layer:b,disabled:!t.selected.includes(b.id),onMouseenter:E=>c(E,b.id),onMouseleave:y,onFocus:E=>c(E,b.id),onBlur:y},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(wn,{items:d(b)},null,8,["items"])])]))),128))],512),[[e.vShow,k(f.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"]]),Kg={class:"flex flex-col gap-0"},Xg={class:"text-xs text-slate-600 font-semibold"},Jg=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 u(){if(l.open){y();return}if(!r.value){y();return}l.open=!0,e.nextTick(()=>{p(),d(),requestAnimationFrame(()=>{p()})})}function p(){if(!l.open||!r.value||!a.value)return;const g=r.value.getBoundingClientRect(),h=12,f=window.scrollX+h,b=window.scrollX+window.innerWidth-h,E=window.scrollY+h,T=window.scrollY+window.innerHeight-h,j=a.value.offsetWidth||Math.min(460,window.innerWidth-24),N=a.value.offsetHeight||0;let B=g.left+window.scrollX+(g.width-j)/2;B<f&&(B=f),B+j>b&&(B=Math.max(f,b-j)),l.left=B;let S=g.bottom+window.scrollY+h;S+N>T&&(S=g.top+window.scrollY-N-h,S<E&&(S=Math.max(E,T-N))),S<E&&(S=E),S+N>T&&(S=Math.max(E,T-N)),l.top=S,l.transform="none"}function k(g){var f,b;if(!l.open)return;const h=g.target;(f=r.value)!=null&&f.contains(h)||(b=a.value)!=null&&b.contains(h)||y()}function c(g){g.key==="Escape"&&y()}function y(){m(),l.open=!1,r.value=null,a.value=null}function d(){m(),a.value&&(i=new ResizeObserver(()=>{p()}),i.observe(a.value))}function m(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",k,!0),document.addEventListener("keydown",c),window.addEventListener("scroll",p,!0),window.addEventListener("resize",p)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k,!0),document.removeEventListener("keydown",c),window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p),m()}),e.watch(()=>o.items,()=>{l.open&&e.nextTick(()=>p())},{deep:!0}),n({close:y}),(g,h)=>(e.openBlock(),e.createElementBlock("div",{class:"inline-flex relative",ref_key:"anchorEl",ref:r},[e.createElementVNode("div",{onClick:e.withModifiers(u,["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",Kg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,f=>(e.openBlock(),e.createElementBlock("div",{key:f.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",Xg,e.toDisplayString(f.label),1),e.createElementVNode("div",{class:e.normalizeClass(["text-sm text-gray-800",{"break-all":f.breakLine}])},e.toDisplayString(f.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),Qg={class:"selected-tab"},ey={class:"selected-tab__actions"},ty={key:0,class:"selected-tab__scroll"},ny=["onDragstart","onDragover","onDrop"],oy={class:"selected-tab__item-header"},ry={class:"selected-tab__item-info"},ly=["checked","onChange"],ay={class:"selected-tab__item-name"},iy={class:"selected-tab__item-controls"},sy=["onClick"],cy={class:"selected-tab__menu-inner"},dy=ae(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,u=e.reactive({top:0,left:0}),p=e.ref(null),k=e.reactive({top:0,left:0}),c=e.ref(null),y=new Map,d=e.reactive({});function m(x){var C;for(const w of((C=o.catalog)==null?void 0:C.groups)??[]){const D=w.layers.find($=>$.id===x);if(D)return D}return null}e.watch(()=>o.selected,x=>{x.forEach(C=>{r[C]==null&&(r[C]=100)})},{immediate:!0});function g(){if(!a.value)return;const x=s.get(a.value);if(!x)return;const C=x.getBoundingClientRect();u.top=C.bottom+8+window.scrollY,u.left=C.left+window.scrollX}e.watch(()=>o.selected,x=>{x.forEach(C=>{d[C]==null&&(d[C]=!0)})},{immediate:!0});function h(x,C){d[x]=C;const w=fe(x);w&&w.setVisible(C)}function f(x,C){C?y.set(x,C):y.delete(x)}function b(x){p.value=p.value===x?null:x,p.value&&e.nextTick(()=>{E(x),requestAnimationFrame(()=>{E(x)})})}function E(x){const C=y.get(x);if(!C||!c.value)return;const w=C.getBoundingClientRect(),D=12,$=6,v=window.scrollX+D,R=window.scrollX+window.innerWidth-D,K=window.scrollY+D,X=window.scrollY+window.innerHeight-D,Z=c.value.offsetWidth||190,se=c.value.offsetHeight||0;let de=w.bottom+window.scrollY+$,q=w.left+window.scrollX;q+Z>R&&(q=w.right+window.scrollX-Z,q<v&&(q=v)),q<v&&(q=v),de+se>X&&(de=w.top+window.scrollY-se-$,de<K&&(de=Math.max(K,X-se))),de<K&&(de=K),de+se>X&&(de=Math.max(K,X-se)),k.top=de,k.left=q}function T(x){const C=fe(x);C&&C.remove(),l("remove",x),p.value=null}function j(x){const C=x.target,w=a.value,D=p.value;if(w){const $=i.value,v=s.get(w);if($&&$.contains(C)||v&&v.contains(C))return;a.value=null}if(D){const $=c.value,v=y.get(D);if($&&$.contains(C)||v&&v.contains(C))return;p.value=null}}function N(){a.value&&g(),p.value&&E(p.value)}e.onMounted(()=>{document.addEventListener("click",j),window.addEventListener("resize",N),window.addEventListener("scroll",N,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",j),window.removeEventListener("resize",N),window.removeEventListener("scroll",N,!0)});const{map:B}=Le();function S(x){var $,v,R;if(!x)return;const C=fe(x),w=m(x);if(!C&&!w)return;if((($=w==null?void 0:w.extent)==null?void 0:$.length)===4&&((v=B.value)!=null&&v.fitBounds)){const K=w.extent.map(X=>Number(X));if(K.every(X=>Number.isFinite(X))){const[X,Z,se,de]=K;B.value.fitBounds([[X,Z],[se,de]],{padding:40}),p.value=null;return}}(R=C==null?void 0:C.getSource)!=null&&R.call(C)&&(p.value=null)}const L=e.ref(null),M=e.ref(null);function P(x,C){L.value=C,M.value=C,x.dataTransfer&&(x.dataTransfer.effectAllowed="move",x.dataTransfer.setData("text/plain",String(C)))}function I(x){M.value=x}function W(x,C){if(x.preventDefault(),L.value===null||L.value===C){L.value=null,M.value=null;return}const w=[...o.selected],[D]=w.splice(L.value,1);w.splice(C,0,D),l("reorder",w),L.value=null,M.value=null}function z(){L.value=null,M.value=null}function H(x){return x==null||x===""?null:String(x)}function A(x,C){return!Array.isArray(x)||x.length===0?null:`${x.length} ${C}`}function F(x){var de,q,Y,G,ne,le;const C=fe(x),w=m(x);if(!C&&!w)return[];const D=(w==null?void 0:w.name)||((q=(de=C==null?void 0:C.opts)==null?void 0:de.layer)==null?void 0:q.name)||null,$=(w==null?void 0:w.service)||((Y=C==null?void 0:C.opts)==null?void 0:Y.service)||null,v=(G=C==null?void 0:C.getSource)==null?void 0:G.call(C),R=v&&"tiles"in v?(ne=v.tiles)==null?void 0:ne[0]:(w==null?void 0:w.url)||null,K=(w==null?void 0:w.source_path)||null,X=(C==null?void 0:C.popup)||(w==null?void 0:w.popup),Z=(C==null?void 0:C.card)||(w==null?void 0:w.card),se=(w==null?void 0:w.filters)||((le=C==null?void 0:C.opts)==null?void 0:le.filters);return[{label:"Назва",value:H(D)},{label:"Сервіс",value:H($)},{label:"Посилання",value:H(R),breakLine:!0},{label:"Джерело",value:H(K),breakLine:!0},{label:"Popup",value:A(X,"полів")},{label:"Картка",value:A(Z,"полів")},{label:"Фільтри",value:A(se,"фільтрів")}]}return(x,C)=>(e.openBlock(),e.createElementBlock("div",Qg,[e.createElementVNode("div",ey,[e.createElementVNode("button",{class:"selected-tab__add",onClick:C[0]||(C[0]=w=>l("select-layer"))},[...C[3]||(C[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",ty,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.selected,(w,D)=>{var $;return e.openBlock(),e.createElementBlock("div",{key:w,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":L.value===D,"selected-tab__item--over":M.value===D}]),draggable:"true",onDragstart:v=>P(v,D),onDragover:e.withModifiers(v=>I(D),["prevent"]),onDrop:v=>W(v,D),onDragend:z},[e.createElementVNode("div",oy,[e.createElementVNode("div",ry,[C[4]||(C[4]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox",checked:d[w]??!0,onChange:v=>h(w,v.target.checked)},null,40,ly),e.createElementVNode("span",ay,e.toDisplayString((($=m(w))==null?void 0:$.name)||"Шар"),1)]),e.createElementVNode("div",iy,[e.createVNode(yr,{"layer-id":w},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:v=>f(w,v),onClick:e.withModifiers(v=>b(w),["stop"])},[...C[5]||(C[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,sy)])])],42,ny)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[p.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:c,class:"selected-tab__menu",style:e.normalizeStyle({top:k.top+"px",left:k.left+"px"})},[e.createElementVNode("div",cy,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:C[1]||(C[1]=w=>S(p.value))},[...C[6]||(C[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(Jg,{items:F(p.value)},{default:e.withCtx(()=>[...C[7]||(C[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"]),C[9]||(C[9]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:C[2]||(C[2]=w=>T(p.value))},[...C[8]||(C[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"]]),uy={class:"filter-tab"},py={key:0,class:"filter-tab__header"},my={class:"filter-tab__title"},fy={key:1,class:"filter-tab__content rounded-md"},gy={class:"filter-tab__scroll"},yy={key:2,class:"filter-tab__empty"},hy=ae(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 u;return((u=l.layer)==null?void 0:u.filters)??[]}),i=e.computed(()=>a.value.length>0);function s(u){r("change",u.data)}return(u,p)=>(e.openBlock(),e.createElementBlock("div",uy,[t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",py,[e.createElementVNode("div",null,[e.createElementVNode("p",my,e.toDisplayString(t.layer.name),1)])])):e.createCommentVNode("",!0),t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",fy,[e.createElementVNode("div",gy,[e.createVNode(e.unref(o),{view:"vertical",schema:a.value,value:t.value,limit:5,class:"rounded-md pb-0",onChange:p[0]||(p[0]=k=>s(k))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",yy,[...p[1]||(p[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),xy={class:"flex items-center justify-between mb-1"},by={class:"flex items-center gap-2"},ky={class:"text-lg font-semibold text-gray-800"},wy={key:0},_y={key:1,class:"block text-sm font-normal text-gray-500"},Ey={class:"flex items-center gap-2"},Ny={class:"flex mb-4 border-b border-gray-200"},By={class:"map-catalog-widget__body"},br=ae(e.defineComponent({__name:"MapCatalogWidget",setup(t){const n=be.useRoute(),o=be.useRouter();function l(){const A=n.query["catalog-tab"];return(Array.isArray(A)?A[0]:A)==="selected"?"selected":"catalog"}const r=e.ref(l()),a=e.ref({groups:[]}),i=e.ref([]),s=e.ref(""),{map:u}=Le(),p=e.reactive({}),k=e.ref(null),c=e.ref(!0),y=e.ref(!1);function d(A){return a.value.groups.map(F=>F.layers.find(x=>x.id===A)).find(Boolean)||null}function m(){const A=k.value;if(!A)return;delete p[A];const F=fe(A);F!=null&&F.setFilter&&F.setFilter("")}function g(A,F){const x=fe(A);if(p[A]={...F},!(x!=null&&x.setFilter))return;const C=Object.entries(F).filter(([,w])=>w!=null&&w!=="").map(([w,D])=>`${w}=${D}`);x.setFilter(C.join("|"))}function h(A){const F=k.value;F&&g(F,A)}function f(A){const F=A.url;let x=null;if(F&&(x=F.startsWith("http")?F:`${window.location.origin}${F}`),!x)return null;const C=(A.service||"").toString().toLowerCase(),w=A.count??null;return C&&C!=="vtile"?{service:C,count:w,source:{type:"raster",tiles:[x],tileSize:256,minzoom:0,maxzoom:20}}:{service:C,count:w,source:{type:"vector",tiles:[x],minzoom:0,maxzoom:14},layer:{style:A.style},card:A.card,popup:A.popup}}function b(A,F,x){var $;const C=x??d(A);if(!C)return;const w=f(C);if(!w)return;const D=fe(C.id,w,u);if(D)if(D.setVisible(F),F){if(!i.value.includes(A)&&(i.value.push(A),($=u.value)!=null&&$.getLayer(A)))try{u.value.moveLayer(A)}catch(v){console.warn("Cannot move new layer",A,v)}}else i.value=i.value.filter(v=>v!==A),k.value===A&&(m(),k.value=null)}function E(){i.value.forEach(A=>{const F=fe(A);F&&F.setVisible(!1)}),i.value=[]}function T(A){i.value=[...A],e.nextTick(()=>{var w;if(!u.value)return;const F=((w=u.value.getStyle())==null?void 0:w.layers)??[];let x;const C=D=>F.filter($=>{var v,R;return($==null?void 0:$.source)===D||($==null?void 0:$.id)===D||((R=(v=$==null?void 0:$.id)==null?void 0:v.startsWith)==null?void 0:R.call(v,`${D}`))}).map($=>$.id);for(let D=A.length-1;D>=0;D-=1){const $=A[D],v=C($);v.length&&(v.forEach(R=>{var K;if((K=u.value)!=null&&K.getLayer(R))try{u.value.moveLayer(R,x)}catch(X){console.warn("Cannot move layer",R,X)}}),x=v[0])}})}function j(A){!A||!Array.isArray(A.filters)||A.filters.length===0||i.value.includes(A.id)&&(k.value=A.id,p[A.id]||(p[A.id]={}),r.value="filter")}function N(){r.value="catalog"}const B=e.computed(()=>k.value?d(k.value):null),S=e.computed(()=>{const A=k.value;return A?p[A]??{}:{}}),L=e.computed(()=>a.value.groups.reduce((A,F)=>A+F.layers.length,0)),M=e.computed(()=>r.value==="selected"?"Вибрані шари":r.value==="filter"?"Фільтр шарів":"Каталог"),P=e.computed(()=>r.value==="selected"?i.value.length:r.value==="catalog"?L.value:null),I=e.computed(()=>{var A;return r.value==="filter"?((A=B.value)==null?void 0:A.name)??"":""});async function W(){const F=await(await fetch("/api/gis-layer-list")).json(),x=new Map;F.forEach(D=>{const $=D.group_id??"other";x.has($)||x.set($,{id:$,name:D.group_name||"Інші шари",layers:[]}),x.get($).layers.push(D)}),a.value={groups:Array.from(x.values())};const C=n.query.layers;if(!C)return;const w=Array.isArray(C)?C[0]:C;typeof w=="string"&&w.split(",").forEach(D=>{const $=D.trim();if(!$)return;const v=d($);v&&b($,!0,v)})}e.watch(k,A=>{!A&&r.value==="filter"&&(r.value="catalog")}),e.watch(B,A=>{!A&&k.value&&(k.value=null)}),e.watch(i,A=>{const F={...n.query};A.length?F.layers=A.join(","):delete F.layers,o.replace({query:F}).catch(()=>{})},{deep:!0});function z(){c.value=!c.value}function H(){y.value=window.innerWidth<=768}return e.onMounted(()=>{W(),H(),y.value&&(c.value=!1),window.addEventListener("resize",H)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",H)}),(A,F)=>(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",P.value>1?"min-h-[250px]":"min-h-[0px]"])},[e.createElementVNode("div",xy,[e.createElementVNode("div",by,[F[5]||(F[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",ky,[e.createTextVNode(e.toDisplayString(M.value)+" ",1),P.value!==null?(e.openBlock(),e.createElementBlock("span",wy,"("+e.toDisplayString(P.value)+")",1)):e.createCommentVNode("",!0),I.value?(e.openBlock(),e.createElementBlock("span",_y,e.toDisplayString(I.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Ey,[e.createElementVNode("button",{onClick:E,class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers"},[...F[6]||(F[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-0023ade8><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-0023ade8></path><path d="M21 3v5h-5" data-v-0023ade8></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-0023ade8></path><path d="M8 16H3v5" data-v-0023ade8></path></svg>',1)])]),e.createElementVNode("button",{type:"button",class:"map-catalog-widget__toggle-button",onClick:z,"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":c.value})},[...F[7]||(F[7]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])])]),e.createElementVNode("div",{class:e.normalizeClass(["map-catalog-widget__content",{"map-catalog-widget__content--collapsed":!c.value}])},[e.createElementVNode("div",Ny,[e.createElementVNode("button",{onClick:F[0]||(F[0]=x=>r.value="catalog"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",r.value==="catalog"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Каталог ",2),e.createElementVNode("button",{onClick:F[1]||(F[1]=x=>r.value="selected"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",r.value==="selected"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Вибрані шари ",2)]),e.createElementVNode("div",By,[r.value==="catalog"?(e.openBlock(),e.createBlock(Gg,{key:0,class:"map-catalog-widget__scroll",catalog:a.value,selected:i.value,search:s.value,"onUpdate:search":F[2]||(F[2]=x=>s.value=x),onToggleLayer:b,onOpenFilter:j},null,8,["catalog","selected","search"])):r.value==="selected"?(e.openBlock(),e.createBlock(dy,{key:1,catalog:a.value,selected:i.value,onToggleLayer:b,onSelectLayer:F[3]||(F[3]=x=>r.value="catalog"),onReorder:T,onRemove:F[4]||(F[4]=x=>i.value=i.value.filter(C=>C!==x))},null,8,["catalog","selected"])):(e.openBlock(),e.createBlock(hy,{key:2,layer:B.value,value:S.value,onChange:h,onClose:N},null,8,["layer","value"]))])],2)],2))}}),[["__scopeId","data-v-0023ade8"]]),Vy={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},Cy={class:"flex items-start justify-between gap-3 p-5 pb-3"},$y={class:"inline-block text-xl font-semibold text-gray-800"},vy={key:0,class:"mt-1 text-sm text-gray-500"},Sy={class:"flex items-center gap-[6px]"},Ly={class:"px-5 pb-5 space-y-6"},Ay={key:0,class:"space-y-2"},Ty={class:"flex flex-wrap gap-4"},My=["value"],Fy={key:1,class:"text-sm text-gray-500"},Dy={key:2,class:"text-sm text-gray-500"},Iy={class:"text-4xl font-medium text-gray-800"},jy={class:"space-y-[14px]"},zy={class:"flex items-center gap-[10px] text-gray-600"},Oy={class:"font-medium text-gray-700"},Ry={class:"flex items-center justify-end text-end gap-3"},Py={class:"font-medium text-gray-800"},Uy={class:"min-w-[40px] font-medium text-[#3C3C4399]"},kr=ae(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),u=e.ref(null),p=e.ref(null),k=e.ref(null),c=e.ref({}),y=e.ref(null);function d(A){return A&&JSON.parse(JSON.stringify(A))}const m=e.computed(()=>{const A=o.config.layer;if(typeof A!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const F=A.trim();if(!F)throw new Error("MapAttributeWidget: `layer` must be non-empty");return F}),g=e.computed(()=>{const{list:A,attribute:F}=o.config;if(Array.isArray(A)&&A.length)return A.map(x=>({id:(x==null?void 0:x.id)!=null?String(x.id).trim():"",text:(x==null?void 0:x.text)!=null&&String(x.text).trim()||null})).filter(x=>x.id.length);if(Array.isArray(F))return F.map(x=>x!=null?String(x).trim():"").filter(x=>x.length).map(x=>({id:x,text:null}));if(typeof F=="string"){const x=F.trim();if(!x)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:x,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),h=e.computed(()=>g.value.map(A=>({id:A.id,label:A.text||c.value[A.id]||A.id})));e.watch(g,A=>{if(!A.length){y.value=null,a.value=[];return}(!y.value||!A.some(F=>F.id===y.value))&&(y.value=A[0].id)},{immediate:!0});const f=e.computed(()=>{var A;return y.value||((A=g.value[0])==null?void 0:A.id)||null});e.watch(m,()=>{var A,F;(F=(A=s.value)==null?void 0:A.remove)==null||F.call(A),s.value=null,u.value=null,p.value=null,k.value=null,c.value={}});const b=e.computed(()=>{var A;return(A=p.value)!=null&&A.length?{id:m.value,name:u.value,filters:p.value}:null}),E=e.computed(()=>{var A,F;return((F=(A=b.value)==null?void 0:A.filters)==null?void 0:F.length)||0});async function T(A){var C;const F=await fetch(`/api/gis-service/${encodeURIComponent(A)}`);if(!F.ok){let w="Не вдалося завантажити налаштування шару";try{const D=await F.json();w=((C=D==null?void 0:D.message)==null?void 0:C.error)||(D==null?void 0:D.message)||w}catch{}throw new Error(w)}const x=await F.json();return u.value=(x==null?void 0:x.name)||null,p.value=Array.isArray(x==null?void 0:x.filters)?x.filters:null,k.value=d((x==null?void 0:x.style)||{}),c.value=((x==null?void 0:x.attributes)||[]).reduce((w,D)=>{const $=typeof(D==null?void 0:D.name)=="string"?D.name.trim():"",v=typeof(D==null?void 0:D.ua)=="string"?D.ua.trim():"";return $&&(w[$]=v||$),w},{}),x}function j(A,F){let x=fe(A);if(!x){const C=`${location.origin}/api/vtile/${A}/ua/{z}/{x}/{y}.vmt`;x=fe(A,{source:{type:"vector",tiles:[C],minzoom:0,maxzoom:14},layer:{id:A,source:A,"source-layer":A,style:(F==null?void 0:F.style)||{}},card:F==null?void 0:F.card,popup:F==null?void 0:F.popup})}return s.value=x,x}async function N(A,F){var w;const x=`/api/gis-service/${encodeURIComponent(A)}/${encodeURIComponent(F)}`,C=await fetch(x);if(!C.ok){let D="Не вдалося отримати статистику";try{const $=await C.json();D=((w=$==null?void 0:$.message)==null?void 0:w.error)||($==null?void 0:$.message)||D}catch{}throw new Error(D)}return C.json()}function B(A){const F=new Map;return A&&(A.rules||[]).forEach(C=>{const w=(C==null?void 0:C.value)??(C==null?void 0:C.id);w!=null&&F.set(String(w),C)}),F}function S(A,F,x,C,w){if(typeof(F==null?void 0:F.color)=="string"&&F.color.trim())return F.color.trim();const D=o.config.colors||{};if(D[A])return D[A];const v=B(x==null?void 0:x.style).get(A);return typeof(v==null?void 0:v.color)=="string"&&v.color.trim()?v.color.trim():n[w%n.length]}function L(A,F,x,C){var w;return(F==null?void 0:F.text)||(F==null?void 0:F.label)||(F==null?void 0:F.name)||(F==null?void 0:F[`${C}_text`])||((w=B(x==null?void 0:x.style).get(A))==null?void 0:w.label)||A}function M(A,F,x,C){if(!A)return;const w=d((F==null?void 0:F.style)||k.value)||{},D=C.trim();if(!D)return;const $={...w.colors||{},...o.config.colors||{}};D===C&&x.forEach(v=>{v.color.trim()&&($[v.id]=v.color)}),A.setStyle({...w,type:w.type||"polygon",colorAttr:D,opacity:.8,colors:$})}async function P(){var D,$;a.value=[],i.value=null;const A=m.value,F=f.value;if(!F)return;r.value=!0;const x=await T(A);j(A,x);const C=await N(A,F),w=Array.isArray(C==null?void 0:C.rows)?C.rows.map((v,R)=>{const K=(v==null?void 0:v.id)??(v==null?void 0:v.value),X=K!=null?String(K):"";if(!X)return null;const Z=L(X,v,x,F),se=Number((v==null?void 0:v.count)??0)||0,de=S(X,v,x,F,R);return{id:X,label:Z,count:se,color:de}}).filter(Boolean):[];a.value=w,i.value=((D=C==null?void 0:C.field)==null?void 0:D.label)||(($=C==null?void 0:C.field)==null?void 0:$.name)||null,M(s.value,x,w,F),r.value=!1}e.watch(()=>[m.value,f.value],()=>{P()},{immediate:!0});const I=e.computed(()=>"Набори даних"),W=e.computed(()=>a.value.reduce((A,F)=>A+F.count,0)),z=e.computed(()=>{var x;const A=f.value;return((x=h.value.find(C=>C.id===A))==null?void 0:x.label)||null||i.value||A||null});function H(A){return W.value?`${(A/W.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var A,F;(F=(A=s.value)==null?void 0:A.remove)==null||F.call(A)}),(A,F)=>l.value?(e.openBlock(),e.createElementBlock("div",Vy,[e.createElementVNode("div",Cy,[e.createElementVNode("div",null,[e.createElementVNode("h2",$y,e.toDisplayString(I.value),1),z.value&&h.value.length===1?(e.openBlock(),e.createElementBlock("p",vy,e.toDisplayString(z.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Sy,[b.value?(e.openBlock(),e.createBlock(Rt,{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:E.value,layer:b.value},null,8,["count","layer"])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",onClick:F[1]||(F[1]=x=>l.value=!1)},[...F[3]||(F[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",Ly,[h.value.length>1?(e.openBlock(),e.createElementBlock("div",Ay,[e.createElementVNode("div",Ty,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,x=>(e.openBlock(),e.createElementBlock("label",{key:x.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:x.id,"onUpdate:modelValue":F[2]||(F[2]=C=>y.value=C)},null,8,My),[[e.vModelRadio,y.value]]),e.createElementVNode("span",null,e.toDisplayString(x.label),1)]))),128))])])):e.createCommentVNode("",!0),r.value?(e.openBlock(),e.createElementBlock("div",Fy,"Завантаження…")):a.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",Iy,e.toDisplayString(W.value),1),e.createElementVNode("ul",jy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,x=>(e.openBlock(),e.createElementBlock("li",{key:x.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",zy,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:x.color})},null,4),e.createElementVNode("span",Oy,e.toDisplayString(x.label),1)]),e.createElementVNode("div",Ry,[e.createElementVNode("span",Py,e.toDisplayString(x.count),1),e.createElementVNode("span",Uy,e.toDisplayString(H(x.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",Dy,"Дані відсутні"))])])):(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:F[0]||(F[0]=x=>l.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-9686ce7b"]]),qy={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]"},Hy=["title"],Wy={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"},Yy=["onClick"],Zy=["placeholder"],Gy={class:"absolute inset-y-0 right-2 flex items-center gap-1"},Ky={class:"divide-y divide-gray-100"},Xy=["onClick"],Ct="search-geom-source",$t="search-geom-layer-fill",Pt="search-geom-layer-line",Jy=30,Qy=8,eh="https://data.softpro.ua/api-user/gis-url-proxy",th="https://geo.rv.ua/api-user/dzk.api",nh="https://nominatim.openstreetmap.org/search",wr=ae(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n=t,o=Le(),l=e.getCurrentInstance();function r(){return typeof globalThis<"u"&&globalThis.proxy?globalThis.proxy:typeof window<"u"&&window.proxy?window.proxy:null}function a(){var ne,le,me;const q=(ne=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:ne.$settings,Y=(le=q==null?void 0:q.map)==null?void 0:le.searchViewbox;if(Y)return Y;const G=r();return(me=G==null?void 0:G.map)==null?void 0:me.searchViewbox}const s=!!a()?["xy","parcel","address"]:["xy","parcel"],u=e.computed(()=>{var Y,G;const q=(G=(Y=n.config)==null?void 0:Y.tools)==null?void 0:G.filter(ne=>s.includes(ne));return q&&q.length?q:s}),p=e.computed(()=>{var q,Y;return((Y=(q=n.config)==null?void 0:q.placeholder)==null?void 0:Y.trim())||"Пошук…"}),k=e.ref(u.value[0]);e.watch(u,q=>{q.includes(k.value)||(k.value=q[0])});const c=e.ref(""),y=e.ref(!1),d=e.ref(null),m=e.ref(null),g=e.ref([]),h=e.ref(null),f=e.computed(()=>k.value==="address"&&g.value.length>0),b=e.computed(()=>{var q;return((q=n.config)==null?void 0:q.addressDebounceMs)??1e3});let E=null;const T=e.ref(!1);let j=null;function N(){j&&(j.remove(),j=null)}function B(){var Y;const q=(Y=o.map)==null?void 0:Y.value;q&&(q.getLayer($t)&&q.removeLayer($t),q.getLayer(Pt)&&q.removeLayer(Pt),q.getSource(Ct)&&q.removeSource(Ct))}function S(q){var le,me,ke,pe;if(!((le=n.config)!=null&&le.showMarker)||!q)return;const Y=(me=o.map)==null?void 0:me.value;if(!Y)return;B(),M();const G={type:"Feature",geometry:q,properties:{}};Y.addSource(Ct,{type:"geojson",data:G});const ne=((ke=n.config)==null?void 0:ke.geometryColor)||((pe=n.config)==null?void 0:pe.markerColor)||"#3B82F6";Y.addLayer({id:$t,type:"fill",source:Ct,paint:{"fill-color":ne,"fill-opacity":.3}}),Y.addLayer({id:Pt,type:"line",source:Ct,paint:{"line-color":ne,"line-width":1,"line-opacity":1}}),P(Y)}let L=null;function M(){L&&(cancelAnimationFrame(L),L=null)}function P(q){const G=performance.now();function ne(le){if(!q.getLayer($t))return;const ke=(le-G)%1200/1200,pe=Math.sin(ke*Math.PI),Re=.2+pe*.3,U=1+pe*1;q.setPaintProperty($t,"fill-opacity",Re),q.setPaintProperty(Pt,"line-width",U),L=requestAnimationFrame(ne)}L=requestAnimationFrame(ne)}function I(q,Y){var le,me,ke;if(!((le=n.config)!=null&&le.showMarker))return;N(),B();const G=(me=o.map)==null?void 0:me.value;if(!G)return;if(Y){S(Y);return}const ne=((ke=n.config)==null?void 0:ke.markerColor)||"#3B82F6";j=new maplibregl.Marker({color:ne}).setLngLat([q.lng,q.lat]).addTo(G)}const W=e.reactive({position:"absolute",left:"0px",top:"0px",width:"100%",display:"none"});function z(){if(!m.value)return;const q=m.value.getBoundingClientRect(),Y=q.width+Jy,G=q.left+window.scrollX,ne=q.bottom+window.scrollY+Qy;W.left=`${G}px`,W.top=`${ne}px`,W.width=`${Y}px`,W.display="block"}const H=()=>{f.value&&z()};function A(){E&&(clearTimeout(E),E=null)}e.watch(k,()=>{c.value="",y.value=!1,g.value=[],A(),T.value=!1,N(),B()}),e.watch(f,q=>{q?e.nextTick(()=>{z()}):W.display="none"}),e.watch(c,q=>{if(k.value!=="address"){g.value=[],A();return}if(!q.trim()){g.value=[],A();return}A(),E=window.setTimeout(()=>{K(q).catch(Y=>{const G=(Y==null?void 0:Y.message)||"Помилка пошуку адреси";ue.notify({type:"error",title:"Пошук адреси",message:G})})},b.value)});function F(q){k.value=q}function x(){c.value="",g.value=[],T.value=!1,N(),B()}function C(q){const Y=q.target;if(y.value){const G=d.value;G&&!G.contains(Y)&&(y.value=!1)}if(f.value){const G=h.value;G&&!G.contains(Y)&&(g.value=[])}}e.onMounted(()=>{window.addEventListener("click",C,!0),window.addEventListener("scroll",H,!0),window.addEventListener("resize",H)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",C,!0),window.removeEventListener("scroll",H,!0),window.removeEventListener("resize",H),A(),N(),B()});function w(q){return q==="xy"?"Координати":q==="parcel"?"Кадастр":"Адреси"}function D(q){const Y=q.replace(/[,]+/g," ").trim();if(!Y)return null;const G=Y.split(/\s+/).filter(Boolean);if(G.length<2)return null;const ne=G.slice(0,2).map(Number);if(!ne.every(Q=>Number.isFinite(Q)))return null;let[le,me]=ne,ke=le,pe=me;const Re=Q=>Math.abs(Q)<=90,U=Q=>Math.abs(Q)<=180;if(!Re(ke)||!U(pe))if(Re(pe)&&U(ke))ke=me,pe=le;else return null;return{lat:ke,lng:pe}}function $(q){return((q==null?void 0:q.items)||[]).map((G,ne)=>{var le,me,ke;return{id:String((G==null?void 0:G.id)??ne),title:(G==null?void 0:G.title)||((le=G==null?void 0:G.address)==null?void 0:le.label)||"Знайдений обʼєкт",lat:Number((me=G==null?void 0:G.position)==null?void 0:me.lat),lng:Number((ke=G==null?void 0:G.position)==null?void 0:ke.lng)}})}function v(q){const Y=(q==null?void 0:q.result)||(q==null?void 0:q.data)||q;if(!Y)return[];const G=Y.geom_centroid;if(!G||!Array.isArray(G.coordinates))return[];const[ne,le]=G.coordinates;return!Number.isFinite(le)||!Number.isFinite(ne)?[]:[{id:"parcel",title:Y.cadnum||Y.cad_num||"Земельна ділянка",lat:le,lng:ne,geom:Y.geom||null}]}function R(q){return(Array.isArray(q==null?void 0:q.features)?q.features:[]).map((G,ne)=>{var Q,ie,we;const le=(Q=G==null?void 0:G.geometry)==null?void 0:Q.coordinates,me=Number(le==null?void 0:le[0]),ke=Number(le==null?void 0:le[1]);if(!Number.isFinite(ke)||!Number.isFinite(me))return null;const pe=(G==null?void 0:G.properties)||{},Re=((ie=pe==null?void 0:pe.geocoding)==null?void 0:ie.label)||(pe==null?void 0:pe.display_name)||(pe==null?void 0:pe.label)||"Адреса";return{id:String(((we=pe==null?void 0:pe.geocoding)==null?void 0:we.place_id)||(pe==null?void 0:pe.place_id)||ne),title:Re,lat:ke,lng:me}}).filter(G=>!!G)}async function K(q){g.value=[],A();const Y=new URL(nh);Y.searchParams.set("format","geojson"),Y.searchParams.set("q",q),Y.searchParams.set("addressdetails","1"),Y.searchParams.set("bounded","1");const G=a();G&&Y.searchParams.set("viewbox",G);const ne=await fetch(Y.toString());if(!ne.ok)throw new Error(`HTTP ${ne.status}`);const le=await ne.json(),me=R(le);if(!me.length){ue.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}g.value=me}function X(q){se(q),g.value=[],c.value=q.title}function Z(q){const G=q.replace(/\s+/g,"").split(":");if(console.log(G),G.length!==4)return!1;const ne=[10,2,3,4];return G.every((le,me)=>le.length===ne[me]&&/^\d+$/.test(le))}function se(q){var G,ne;const Y=((G=n.config)==null?void 0:G.zoom)??17;(ne=o.flyTo)==null||ne.call(o,{center:[q.lng,q.lat],zoom:Y}),I(q,q.geom),T.value=!0}async function de(){const q=c.value.trim();if(q){if(k.value==="xy"){const Y=D(q);if(!Y){ue.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}se(Y);return}if(k.value==="address"){try{await K(q)}catch(Y){const G=(Y==null?void 0:Y.message)||"Помилка пошуку адреси";ue.notify({type:"error",title:"Пошук адреси",message:G})}return}try{const Y=new URL(k.value==="here"?eh:th);if(k.value==="here")Y.searchParams.set("searchtext",q);else{if(!Z(q)){ue.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}Y.searchParams.set("cad_num",q)}const G=await fetch(Y.toString());if(!G.ok)throw new Error(`HTTP ${G.status}`);const ne=await G.json(),le=k.value==="here"?$(ne):v(ne);if(!le.length)ue.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const me=le[0];se(me)}}catch(Y){const G=(Y==null?void 0:Y.message)||"Помилка пошуку";ue.notify({type:"error",title:"Пошук",message:G})}}}return(q,Y)=>(e.openBlock(),e.createElementBlock("div",qy,[e.createElementVNode("form",{class:"flex gap-2",onSubmit:e.withModifiers(de,["prevent"])},[u.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:d,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:Y[0]||(Y[0]=G=>y.value=!y.value)},[e.createElementVNode("span",{class:"block w-full truncate",title:w(k.value)},e.toDisplayString(w(k.value)),9,Hy),(e.openBlock(),e.createElementBlock("svg",{class:e.normalizeClass(["w-4 h-4 text-gray-500 transition-transform",{"rotate-180":y.value}]),viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[...Y[3]||(Y[3]=[e.createElementVNode("path",{d:"M6 9l6 6 6-6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))]),y.value?(e.openBlock(),e.createElementBlock("div",Wy,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,G=>(e.openBlock(),e.createElementBlock("li",{key:G,class:"px-3 py-2 cursor-pointer hover:bg-gray-100 text-gray-900",onClick:ne=>F(G)},e.toDisplayString(w(G)),9,Yy))),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"searchWrapperRef",ref:m,class:"relative flex-1 min-w-[140px]"},[k.value==="parcel"?(e.openBlock(),e.createBlock(e.unref(An.VsInputMask),{key:0,modelValue:c.value,"onUpdate:modelValue":Y[1]||(Y[1]=G=>c.value=G),mask:"0000000000:00:000:0000",class:e.normalizeClass(["vs-input !h-[34px] transition-all border block w-full border-gray-200 rounded-md focus:border-blue-100 border-solid py-1.5 pl-3 text-sm",T.value?"!pr-14":"!pr-8"])},null,8,["modelValue","class"])):e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:1,"onUpdate:modelValue":Y[2]||(Y[2]=G=>c.value=G),placeholder:p.value,type:"text",class:e.normalizeClass(["vs-input transition-all border block w-full border-gray-200 rounded-md focus:border-blue-100 border-solid py-1.5 pl-3 text-sm",T.value?"!pr-14":"!pr-8"])},null,10,Zy)),[[e.vModelText,c.value,void 0,{trim:!0}]]),e.createElementVNode("div",Gy,[T.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"flex items-center text-gray-400 hover:text-gray-600","aria-label":"Очистити",onClick:x},[...Y[4]||(Y[4]=[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:"M6 18L18 6M6 6l12 12"})],-1)])])):e.createCommentVNode("",!0),Y[5]||(Y[5]=e.createElementVNode("button",{type:"submit",class:"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))]),f.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(W)},[e.createElementVNode("ul",Ky,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,G=>(e.openBlock(),e.createElementBlock("li",{key:G.id,class:"px-3 py-2 cursor-pointer hover:bg-gray-50",onClick:ne=>X(G)},e.toDisplayString(G.title),9,Xy))),128))])],4)])):e.createCommentVNode("",!0)],512)],32)]))}}),[["__scopeId","data-v-d773179e"]]),oh="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",rh="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",lh=ae(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:l,removeControl:r}=Le(),a=e.ref(null),i=e.ref(null),s=e.ref(null),u=e.ref(null);let p=null;function k(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function c(N){if(Array.from(document.styleSheets).some(L=>{var M;return(M=L==null?void 0:L.href)==null?void 0:M.includes(N)}))return;const S=document.createElement("link");S.rel="stylesheet",S.href=N,document.head.appendChild(S)}function y(N){return new Promise((B,S)=>{const L=Array.from(document.scripts).find(P=>P.src===N);if(L){if(L._loaded)return B();L.addEventListener("load",()=>B()),L.addEventListener("error",()=>S(new Error(`Failed ${N}`)));return}const M=document.createElement("script");M.src=N,M.async=!0,M.onload=()=>{M._loaded=!0,B()},M.onerror=()=>S(new Error(`Failed ${N}`)),document.head.appendChild(M)})}function d(){var B,S,L;const N=window;return N.MapboxExportControl||((B=N.mapboxgl)==null?void 0:B.MapboxExportControl)||((S=N.mapboxglExport)==null?void 0:S.MapboxExportControl)||((L=N.mapboxglExport)==null?void 0:L.default)||null}function m(){const N=document.createElementNS("http://www.w3.org/2000/svg","svg");return N.setAttribute("xmlns","http://www.w3.org/2000/svg"),N.setAttribute("viewBox","0 0 24 24"),N.setAttribute("width","18"),N.setAttribute("height","18"),N.setAttribute("fill","none"),N.setAttribute("stroke","currentColor"),N.setAttribute("stroke-width","2"),N.setAttribute("stroke-linecap","round"),N.setAttribute("stroke-linejoin","round"),N.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((S,L)=>{const M=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries(S).forEach(([P,I])=>{M.setAttribute(P,I)}),N.appendChild(M)}),N}function g(){const N=document.createElement("button");N.id="print-btn",N.type="button",N.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(" "),N.setAttribute("aria-label","Друк карти");const B=m(),S=document.createElement("span");return S.className=["absolute right-full mr-3 px-1.5 py-0.5","bg-gray-700 text-white text-[0.75rem] 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(" "),S.textContent="Друк карти",S.setAttribute("aria-hidden","true"),N.appendChild(B),N.appendChild(S),N.addEventListener("click",L=>{L.stopPropagation(),h()}),u.value=N,N}function h(){if(!s.value)return;s.value.style.display==="block"?b():f()}function f(){var N,B,S;s.value&&(s.value.style.display="block",(N=u.value)==null||N.classList.add("scale-105","shadow-xl"),(B=i.value)==null||B.toggleCrosshair(!0),(S=i.value)==null||S.togglePrintableArea(!0),document.addEventListener("click",E))}function b(){var N,B,S;s.value&&(s.value.style.display="none",(N=u.value)==null||N.classList.remove("scale-105","shadow-xl"),(B=i.value)==null||B.toggleCrosshair(!1),(S=i.value)==null||S.togglePrintableArea(!1),document.removeEventListener("click",E))}function E(N){const B=a.value;B&&(N.target&&B.contains(N.target)||b())}function T(N){const B={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};N.querySelectorAll("label, option").forEach(L=>{var P;const M=(P=L.textContent)==null?void 0:P.trim();M&&B[M]&&(L.textContent=B[M])});const S=N.querySelector("button");S&&(S.textContent="Друкувати")}function j(N){const B=N.querySelector(".mapboxgl-export-list");if(!B||!a.value)return;s.value=B;const S=N.querySelector("button");if(S&&(S.style.display="none"),N.style.display="none",!u.value){const M=g();a.value.appendChild(M)}B.style.display="none";const L="_printControlBound";if(!B[L]){const M=P=>P.stopPropagation();B.addEventListener("click",M),B.addEventListener("mousedown",M),B[L]=!0}a.value.appendChild(B),T(B)}return e.onMounted(async()=>{await(o==null?void 0:o());const N=n.value;if(!N)return;c(oh),k();try{await y(rh)}catch(L){console.warn("[MapPrintControl] load error",L);return}const B=d();if(!B)return;const S=new B({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(i.value=S,typeof S.onAdd=="function"){const L=S.onAdd.bind(S);S.onAdd=M=>{const P=L(M);return setTimeout(()=>P&&j(P),50),P}}l?l(S,"top-right"):N.addControl(S,"top-right"),p=L=>{L.key==="Escape"&&b()},document.addEventListener("keyup",p)}),e.onBeforeUnmount(()=>{b(),p&&(document.removeEventListener("keyup",p),p=null);const N=n.value;if(i.value)try{r?r(i.value):N==null||N.removeControl(i.value)}catch{}i.value=null}),(N,B)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:a,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-4fae7635"]]),ah={class:"cursor-coordinates"},ih={class:"cursor-coordinates__text"},sh=ae(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",ah,[e.createElementVNode("span",ih,e.toDisplayString(t.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),ch={class:"minimap__wrapper"},Ut="minimap-viewport",dh="minimap-viewport-layer",uh=ae(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var E,T,j,N;const n=t,o=((T=(E=e.getCurrentInstance())==null?void 0:E.appContext.config.globalProperties)==null?void 0:T.$settings)||null,l=Qe((j=o==null?void 0:o.map)==null?void 0:j.center)||[30,50],r=e.ref(null),a=e.shallowRef(null),i=(N=n.options)==null?void 0:N.active,s=e.ref(i===void 0?!1:!!i);function u(B,S){return typeof B=="number"&&Number.isFinite(B)?B:S}const p=e.computed(()=>{var P,I;const B=(P=n.options)==null?void 0:P.width,S=(I=n.options)==null?void 0:I.height,L=u(n.width??B,210),M=u(n.height??S,150);return{width:`${L}px`,height:`${M}px`}});function k(){var S,L;const B=(L=(S=n.mapContext)==null?void 0:S.map)==null?void 0:L.value;if(!B||typeof B.getStyle!="function")return null;try{const M=B.getStyle();return M?JSON.parse(JSON.stringify(M)):null}catch{return null}}let c=null;function y(){var P;if(typeof window>"u"||a.value||!r.value)return;const B=k(),S=l,L={container:r.value,style:B??{version:8,sources:{voyager:{type:"raster",tiles:["https://tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"voyager",type:"raster",source:"voyager"}]},center:S,zoom:((P=n.options)==null?void 0:P.zoom)??3,interactive:!1,attributionControl:!1},M={...L,...n.options??{}};M.container=L.container,a.value=new maplibregl.Map(M),a.value.on("load",()=>{m(),h()})}function d(){if(!a.value)return;const B=k();B&&(a.value.once("styledata",()=>{m(),h()}),a.value.setStyle(B))}function m(){if(a.value){if(typeof a.value.isStyleLoaded=="function"&&!a.value.isStyleLoaded()){a.value.once("styledata",()=>{m(),h()});return}a.value.getSource(Ut)||(a.value.addSource(Ut,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),a.value.addLayer({id:dh,type:"fill",source:Ut,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function g(){s.value=!s.value,s.value&&e.nextTick(()=>{var B;return(B=a.value)==null?void 0:B.resize()})}function h(){var W,z;const B=(z=(W=n.mapContext)==null?void 0:W.map)==null?void 0:z.value;if(!a.value||!B||!B.getBounds)return;if(typeof a.value.isStyleLoaded=="function"&&!a.value.isStyleLoaded()){a.value.once("styledata",()=>{h()});return}const S=B.getBounds();if(!S)return;const L=S.getNorthEast(),M=S.getSouthWest();if(!L||!M)return;const P=[[M.lng,L.lat],[L.lng,L.lat],[L.lng,M.lat],[M.lng,M.lat],[M.lng,L.lat]],I=a.value.getSource(Ut);if(!I){m();return}I.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[P]},properties:{}})}function f(){var L;const B=n.mapContext,S=(L=B==null?void 0:B.map)==null?void 0:L.value;!(B!=null&&B.on)||!S||(c==null||c(),c=B.on("move",h),h())}async function b(){const B=n.mapContext;if(B){if(typeof B.ready=="function")try{await B.ready()}catch{return}f()}}return e.onMounted(()=>{y(),b()}),e.watch(()=>n.mapContext,()=>{b(),h()}),e.watch(()=>{var B,S;return(S=(B=n.mapContext)==null?void 0:B.map)==null?void 0:S.value},()=>{a.value&&(d(),b())}),e.watch(p,()=>{a.value&&e.nextTick(()=>{var B;return(B=a.value)==null?void 0:B.resize()})}),e.watch(()=>n.options,()=>{var S;c==null||c(),c=null,a.value&&(a.value.remove(),a.value=null);const B=(S=n.options)==null?void 0:S.active;typeof B=="boolean"&&(s.value=B),e.nextTick(()=>{y(),b()})},{deep:!0}),e.onBeforeUnmount(()=>{c==null||c(),c=null,a.value&&(a.value.remove(),a.value=null)}),(B,S)=>(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(jr))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",ch,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:r,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(p.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,s.value]])]),_:1})],2))}}),[["__scopeId","data-v-bc754c89"]]),ph={key:1,class:"absolute bottom-4 right-4 z-[80] flex items-end gap-2"},mh={class:"absolute top-[103px] right-[6.5px] z-[80] flex flex-col items-end gap-1"},fh={class:"map-widget__overlay-grid"},gh={key:0,id:"map-filter-popover-host",class:"map-widget__filter-host"},yh={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},hh={class:"map-widget__stack"},xh={key:2,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom xl:mb-5 mb-2"},bh={class:"map-widget__stack map-widget__stack--bottom"},kh={key:0,class:"map-widget__state"},wh={key:1,class:"map-widget__state map-widget__state--error"},qt=ae(e.defineComponent({__name:"MapWidget",props:{id:{},height:{},minZoom:{},maxZoom:{},data:{}},setup(t){var me,ke,pe,Re;const n=t,o=be.useRoute(),l=be.useRouter(),r=e.ref(null),a=e.ref({}),i=e.ref(null),s=e.ref(!1),u=e.ref(null),p=e.ref(!1),k=e.ref([]),c=e.computed(()=>n.id||"main"),y=e.computed(()=>{var U,Q;return{height:((U=n.height)==null?void 0:U.trim())||((Q=a.value)==null?void 0:Q.height)||"calc(100vh - 65px)"}}),d=e.computed(()=>{var U;return((U=a.value)==null?void 0:U.name)??null}),m=e.computed(()=>{var U;return((U=a.value)==null?void 0:U.description)??null}),g=e.computed(()=>{var U;return W((U=a.value)==null?void 0:U.maps)}),h=e.computed(()=>{var Q,ie;const U=((Q=a.value)==null?void 0:Q.minZoom)??((ie=a.value)==null?void 0:ie.minzoom)??null;return typeof U=="number"?U:null}),f=e.computed(()=>{var Q,ie;const U=((Q=a.value)==null?void 0:Q.maxZoom)??((ie=a.value)==null?void 0:ie.maxzoom)??null;return typeof U=="number"?U:typeof n.maxZoom=="number"?n.maxZoom:20}),b=e.ref(null),E=e.computed(()=>{if(!b.value)return null;const{lng:U,lat:Q}=b.value;return`${Q.toFixed(6)}, ${U.toFixed(6)}`}),T=e.computed(()=>{var U;return((U=r.value)==null?void 0:U.ctx)??null}),j=e.computed(()=>{var U;return((U=a.value)==null?void 0:U.minimap)??null});function N(U){if(!U||typeof U!="object")return U;const Q=Qe(U.center);return Q?{...U,center:Q}:U}const B=((ke=(me=e.getCurrentInstance())==null?void 0:me.appContext.config.globalProperties)==null?void 0:ke.$settings)||null;function S(U){if(U==null)return null;const Q=Number(typeof U=="string"?U.trim():U);return Number.isFinite(Q)?Q:null}const L=Qe((pe=B==null?void 0:B.map)==null?void 0:pe.center),M=S((Re=B==null?void 0:B.map)==null?void 0:Re.zoom),P=e.computed(()=>{const U=(B==null?void 0:B.map)||null,Q=(U==null?void 0:U.boundary)??null,ie=(U==null?void 0:U.katottg)??null;return!Q&&!ie?null:{boundary:Q,katottg:ie}});function I(U){return typeof U=="string"&&U.trim()?U.trim().toLowerCase():"top-left"}function W(U){return Array.isArray(U)?U:U&&typeof U=="object"?Object.values(U).filter(Boolean):[]}const z=e.computed(()=>{var U;return W((U=a.value)==null?void 0:U.widgets)}),H=["left","right"],A=e.computed(()=>{const U={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},Q={"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 z.value.forEach(ie=>{const we=I(ie.position),re=Q[we]??{side:"left",align:"top"};U[re.side][re.align].push(ie)}),U});function F(U){return Array.isArray(U)?U[0]??null:typeof U=="string"?U:null}async function x(){var Q;await e.nextTick();const U=(Q=r.value)==null?void 0:Q.ctx;return U?(U.ready&&await U.ready(),U):null}function C(){var U,Q,ie;return((ie=(Q=(U=r.value)==null?void 0:U.ctx)==null?void 0:Q.map)==null?void 0:ie.value)??null}function w(){const U=C();if(!U)return null;const Q=U.getCenter();return{z:U.getZoom().toFixed(2),x:Q.lng.toFixed(5),y:Q.lat.toFixed(5)}}async function D(){var ie;const U=await x(),Q=(ie=U==null?void 0:U.map)==null?void 0:ie.value;Q&&(typeof h.value=="number"&&Q.setMinZoom(h.value),typeof f.value=="number"&&Q.setMaxZoom(f.value))}async function $(){var re;if(i.value)return;const U=await x(),Q=(re=U==null?void 0:U.map)==null?void 0:re.value;if(!Q)return;const ie=Q.getCenter(),we=Q.getZoom();i.value={center:[ie.lng,ie.lat],zoom:we}}function v(){const U=w();if(!U)return;const Q=F(o.query.x),ie=F(o.query.y),we=F(o.query.z);Q===U.x&&ie===U.y&&we===U.z||l.replace({query:{...o.query,...U}}).catch(()=>{})}function R(U,Q,ie=1e-6){return Math.abs(U-Q)<=ie}async function K(){var $e;const U=await x(),Q=($e=U==null?void 0:U.map)==null?void 0:$e.value;if(!U||!Q)return;const ie=parseFloat(F(o.query.x)??""),we=parseFloat(F(o.query.y)??""),re=parseFloat(F(o.query.z)??""),he=!Number.isNaN(ie),Te=!Number.isNaN(we),ee=!Number.isNaN(re);let ve=!1;if(he&&Te){const Oe=Q.getCenter();(!R(Oe.lng,ie)||!R(Oe.lat,we))&&(Q.setCenter([ie,we]),ve=!0)}ee&&Q.setZoom(re),(!he||!Te||!ee||ve)&&v()}let X=null,Z=null;function se(U){const Q=U==null?void 0:U.lngLat;Q&&(b.value={lng:Q.lng,lat:Q.lat})}async function de(){const U=await x();U!=null&&U.on&&(X==null||X(),X=U.on("moveend",v),Z==null||Z(),Z=U.on("mousemove",se))}e.onUnmounted(()=>{X==null||X(),X=null,Z==null||Z(),Z=null});async function q(U=!1){var ie,we;p.value=!1,u.value=null,b.value=null;const Q=U||!n.data;s.value=Q;try{const re=Q?await(async()=>{const $e=await fetch(`/api/gis-map/${encodeURIComponent(c.value)}`);if(!$e.ok)throw new Error(`Помилка завантаження (${$e.status})`);return $e.json()})():n.data;Q||(p.value=!0);const he=Qe(re.center)??L,Te=W(re.layers).map($e=>N($e)),ee=S(re.zoom)??M;a.value={...re,center:he??null,zoom:ee??re.zoom??null,layers:Te,widgets:re.widgets},k.value=re.tools||["home","print"];const ve=await x();ve&&(he&&((ie=ve.setCenter)==null||ie.call(ve,he)),ee!=null&&((we=ve.setZoom)==null||we.call(ve,ee)),i.value||await $()),await D(),await K(),await de(),p.value=!0}catch(re){u.value=(re==null?void 0:re.message)||"Не вдалося завантажити карту"}finally{Q&&(s.value=!1)}}const Y=e.computed(()=>{var we;const U=new Map;return W((we=a.value)==null?void 0:we.layers).forEach(re=>{if(!(re!=null&&re.id))return;const he=N(re)||re;U.set(re.id,{...he})}),z.value.filter(re=>(re==null?void 0:re.type)==="layers").flatMap(re=>{var he;return W((he=re==null?void 0:re.config)==null?void 0:he.layers)}).forEach(re=>{if(!(re!=null&&re.id))return;const he=U.get(re.id)||{},Te=N(re)||re;U.set(re.id,{...he,...Te,actions:re.actions||he.actions||null,name:he.name||re.name||re.title||he.title||re.id,title:he.title||re.title||he.name||null,visible:he.visible??re.visible??!0})}),Array.from(U.values())}),G=e.ref([]);function ne(U){G.value.includes(U)?G.value=G.value.filter(Q=>Q!==U):G.value.push(U)}const le=e.computed(()=>U=>G.value.includes(U.id));return e.watch([h,f],()=>{D()},{immediate:!0}),e.watch(c,()=>{q(!0)}),e.watch(()=>n.data,U=>{U&&q()}),e.onMounted(()=>{q()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{K()}),(U,Q)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(y.value)},[Q[2]||(Q[2]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createVNode(Ot,{ref_key:"mapViewRef",ref:r,class:"map-widget__view"},{default:e.withCtx(()=>{var ie,we,re,he;return[P.value?(e.openBlock(),e.createBlock(pr,{key:0,"layer-id":"app-boundary",boundary:P.value.boundary,katottg:P.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),T.value?(e.openBlock(),e.createElementBlock("div",ph,[E.value?(e.openBlock(),e.createBlock(sh,{key:0,coordinates:E.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(uh,{"map-context":T.value,options:j.value},null,8,["map-context","options"])])):e.createCommentVNode("",!0),e.createElementVNode("div",mh,[k.value.includes("home")?(e.openBlock(),e.createBlock(et,{key:0,center:((ie=a.value)==null?void 0:ie.center)||((we=i.value)==null?void 0:we.center)||null,zoom:((re=a.value)==null?void 0:re.zoom)??((he=i.value)==null?void 0:he.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),k.value.includes("print")?(e.openBlock(),e.createBlock(lh,{key:1})):e.createCommentVNode("",!0)]),p.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createElementVNode("div",fh,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(H,Te=>e.createElementVNode("div",{key:Te,class:e.normalizeClass(["map-widget__side",`map-widget__side--${Te}`])},[Te==="left"?(e.openBlock(),e.createElementBlock("div",gh)):e.createCommentVNode("",!0),A.value[Te].top.length?(e.openBlock(),e.createElementBlock("div",yh,[e.createElementVNode("div",hh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.value[Te].top,ee=>{var ve,$e,Oe,tt,Ue,nt,Ke,ot;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:ee.id||ee.type,class:"map-overlay__item"},[ee.type==="info"?(e.openBlock(),e.createBlock(gr,{key:0,title:((ve=ee.config)==null?void 0:ve.title)||ee.title||null,content:(($e=ee.config)==null?void 0:$e.content)||"",links:g.value,"map-name":d.value,"map-description":m.value},null,8,["title","content","links","map-name","map-description"])):ee.type==="catalog"?(e.openBlock(),e.createBlock(br,{key:1,api:((Oe=ee.config)==null?void 0:Oe.api)||null},null,8,["api"])):ee.type==="layers"?(e.openBlock(),e.createBlock(xr,{key:2,layers:Y.value,onAction:Q[0]||(Q[0]=vt=>ne(vt.layerId)),config:ee.config},null,8,["layers","config"])):ee.type==="basemaps"?(e.openBlock(),e.createBlock(Bt,{key:3,layers:((tt=ee.config)==null?void 0:tt.layers)||null,"default-layer":((Ue=ee.config)==null?void 0:Ue.default)||null,title:ee.title||((nt=ee.config)==null?void 0:nt.title)||null},null,8,["layers","default-layer","title"])):ee.type==="legend"?(e.openBlock(),e.createBlock(hn,{key:4,items:((Ke=ee.config)==null?void 0:Ke.items)||[]},null,8,["items"])):ee.type==="filters"&&le.value(ee)?(e.openBlock(),e.createBlock(yn,{key:5,"layer-id":(ot=ee.config)==null?void 0:ot.layer,onClose:ne},null,8,["layer-id"])):ee.type==="dataset"||ee.type==="attribute"?(e.openBlock(),e.createBlock(kr,{key:6,config:ee.config},null,8,["config"])):ee.type==="search"?(e.openBlock(),e.createBlock(wr,{key:7,config:ee.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,ee.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),A.value[Te].bottom.length?(e.openBlock(),e.createElementBlock("div",xh,[e.createElementVNode("div",bh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.value[Te].bottom,ee=>{var ve,$e,Oe,tt,Ue,nt,Ke,ot;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:ee.id||ee.type,class:"map-overlay__item"},[ee.type==="info"?(e.openBlock(),e.createBlock(gr,{key:0,title:((ve=ee.config)==null?void 0:ve.title)||ee.title||null,content:(($e=ee.config)==null?void 0:$e.content)||"",links:g.value,"map-name":d.value,"map-description":m.value},null,8,["title","content","links","map-name","map-description"])):ee.type==="catalog"?(e.openBlock(),e.createBlock(br,{key:1,api:((Oe=ee.config)==null?void 0:Oe.api)||null},null,8,["api"])):ee.type==="layers"?(e.openBlock(),e.createBlock(xr,{key:2,layers:Y.value,onAction:Q[1]||(Q[1]=vt=>ne(vt.layerId)),config:ee.config},null,8,["layers","config"])):ee.type==="basemaps"?(e.openBlock(),e.createBlock(Bt,{key:3,layers:((tt=ee.config)==null?void 0:tt.layers)||null,"default-layer":((Ue=ee.config)==null?void 0:Ue.default)||null,title:ee.title||((nt=ee.config)==null?void 0:nt.title)||null},null,8,["layers","default-layer","title"])):ee.type==="legend"?(e.openBlock(),e.createBlock(hn,{key:4,items:((Ke=ee.config)==null?void 0:Ke.items)||[]},null,8,["items"])):ee.type==="filters"&&le.value(ee)?(e.openBlock(),e.createBlock(yn,{key:5,"layer-id":(ot=ee.config)==null?void 0:ot.layer,onClose:ne},null,8,["layer-id"])):ee.type==="dataset"||ee.type==="attribute"?(e.openBlock(),e.createBlock(kr,{key:6,config:ee.config},null,8,["config"])):ee.type==="search"?(e.openBlock(),e.createBlock(wr,{key:7,config:ee.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,ee.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(sr),e.createVNode(ur,{"map-id":c.value},null,8,["map-id"])],64)):e.createCommentVNode("",!0)]}),_:1},512),s.value?(e.openBlock(),e.createElementBlock("div",kh,"Завантаження карти…")):u.value?(e.openBlock(),e.createElementBlock("div",wh,e.toDisplayString(u.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-73d647f9"]]),_h={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},Eh={class:"rounded-xl border border-gray-200 overflow-hidden bg-white"},Nh=e.defineComponent({__name:"MapPreview",props:{id:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("section",_h,[o[0]||(o[0]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Попередній перегляд карти ",-1)),e.createElementVNode("div",Eh,[e.createVNode(qt,{class:"w-full h-[360px]",id:t.id},null,8,["id"])])]))}}),Bh={class:"bg-white rounded-lg shadow-xl w-full max-w-4xl flex flex-col h-[80vh] m-4"},Vh={class:"flex items-center justify-between px-6 py-4 border-b border-gray-200"},Ch={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"},$h={class:"flex-1 overflow-hidden relative bg-[#fffffe]"},vh={class:"px-6 py-4 border-t border-gray-200 flex justify-end gap-3"},Sh=["disabled"],Lh=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,u=>{if(u){try{r.value=JSON.stringify(u,null,2)}catch{r.value="{}"}a.value=null}},{immediate:!0}),e.watch(r,u=>{if(!u.trim()){a.value=null;return}try{JSON.parse(u),a.value=null}catch(p){a.value=p.message}}),e.watch(()=>o.modelValue,()=>{setTimeout(()=>{const{monaco:u}=window;if(u&&u.editor){const p=u.editor.getEditors();p.length>0&&p[p.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 u=JSON.parse(r.value);l("save",u),i()}catch(u){console.error("Failed to parse JSON",u)}}return(u,p)=>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",Bh,[e.createElementVNode("div",Vh,[p[1]||(p[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(yt),{size:20})])]),a.value?(e.openBlock(),e.createElementBlock("div",Ch," Помилка JSON: "+e.toDisplayString(a.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",$h,[e.createVNode(zt,{modelValue:r.value,"onUpdate:modelValue":p[0]||(p[0]=k=>r.value=k),language:"json",theme:"vs-light",class:"w-full h-full"},null,8,["modelValue"])]),e.createElementVNode("div",vh,[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,Sh)])])])):e.createCommentVNode("",!0)}}),Ah={key:0,class:"text-center py-8 text-gray-500 border rounded-lg bg-gray-50"},Th={key:1,class:"rounded-lg border border-gray-200 overflow-hidden"},Mh={class:"w-full text-sm"},Fh={class:"divide-y divide-gray-200"},Dh={class:"px-4 py-3"},Ih=["onUpdate:modelValue","onChange"],jh=["value"],zh={class:"px-4 py-3"},Oh=["onUpdate:modelValue","onChange"],Rh=["value"],Ph={class:"px-4 py-3 text-center"},Uh=["checked","onChange"],qh={class:"px-4 py-3"},Hh={key:0,class:"flex items-center gap-2"},Wh=["onClick"],Yh=["onClick"],Zh={key:1},Gh=["onClick"],Kh={class:"px-4 py-3 text-right"},Xh=["onClick"],Jh=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),u=e.computed(()=>o.modelValue||[]);function p(){const f=[...u.value,{type:"info",position:"top-left",visible:!0,config:{}}];l("update:modelValue",f)}function k(f){ue.confirm({title:"Видалити віджет?",message:"Ви впевнені, що хочете видалити цей віджет?",type:"warning",onConfirm:()=>{const b=u.value.filter((E,T)=>T!==f);l("update:modelValue",b)}})}function c(f,b,E){const T=[...u.value];T[f]={...T[f],[b]:E},l("update:modelValue",T)}function y(f){return!!f&&Object.keys(f).length>0}function d(f,b){s.value=f,i.value=b||{}}function m(f){d(f,{})}function g(f){ue.confirm({title:"Видалити конфігурацію?",message:"Ви впевнені, що хочете видалити конфігурацію цього віджета?",type:"warning",onConfirm:()=>{c(f,"config",void 0)}})}function h(f){s.value>-1&&c(s.value,"config",f),i.value=null,s.value=-1}return(f,b)=>{var E;return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",{class:"flex items-center justify-between mb-4"},[b[1]||(b[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800"},"Віджети",-1)),e.createElementVNode("button",{onClick:p,class:"px-3 py-1.5 text-sm bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors"}," + Додати віджет ")]),(E=u.value)!=null&&E.length?(e.openBlock(),e.createElementBlock("div",Th,[e.createElementVNode("table",Mh,[b[2]||(b[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",Fh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,(T,j)=>(e.openBlock(),e.createElementBlock("tr",{key:j,class:"hover:bg-gray-50"},[e.createElementVNode("td",Dh,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":N=>T.type=N,onChange:N=>c(j,"type",T.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,N=>e.createElementVNode("option",{key:N,value:N},e.toDisplayString(N),9,jh)),64))],40,Ih),[[e.vModelSelect,T.type]])]),e.createElementVNode("td",zh,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":N=>T.position=N,onChange:N=>c(j,"position",T.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,N=>e.createElementVNode("option",{key:N,value:N},e.toDisplayString(N),9,Rh)),64))],40,Oh),[[e.vModelSelect,T.position]])]),e.createElementVNode("td",Ph,[e.createElementVNode("input",{type:"checkbox",checked:T.visible!==!1,onChange:N=>c(j,"visible",N.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"},null,40,Uh)]),e.createElementVNode("td",qh,[y(T.config)?(e.openBlock(),e.createElementBlock("div",Hh,[e.createElementVNode("button",{onClick:N=>d(j,T.config),class:"p-1 text-blue-600 hover:text-blue-800 hover:bg-blue-50 rounded transition-colors",title:"Редагувати конфігурацію"},[e.createVNode(e.unref(Zr),{size:16})],8,Wh),e.createElementVNode("button",{onClick:N=>g(j),class:"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors",title:"Видалити конфігурацію"},[e.createVNode(e.unref(yt),{size:16})],8,Yh)])):(e.openBlock(),e.createElementBlock("div",Zh,[e.createElementVNode("button",{onClick:N=>m(j),class:"p-1 text-green-600 hover:text-green-800 hover:bg-green-50 rounded transition-colors",title:"Додати конфігурацію"},[e.createVNode(e.unref(Yt),{size:16})],8,Gh)]))]),e.createElementVNode("td",Kh,[e.createElementVNode("button",{onClick:N=>k(j),class:"p-1 text-gray-400 hover:text-red-500 transition-colors",title:"Видалити віджет"},[e.createVNode(e.unref(zn),{size:16})],8,Xh)])]))),128))])])])):(e.openBlock(),e.createElementBlock("div",Ah," Немає віджетів. Додайте перший віджет. ")),e.createVNode(Lh,{teleport:"#modal",modelValue:i.value,"onUpdate:modelValue":b[0]||(b[0]=T=>i.value=T),onSave:h},null,8,["modelValue"])])}}}),Qh={class:"relative min-h-svh flex-1 flex-col flex gap-4 bg-white p-8 overflow-y-auto"},e1={class:"max-w-6xl mx-auto w-full"},t1={class:"flex items-center justify-between mb-6"},n1={class:"mb-2 text-2xl font-semibold text-gray-900"},o1={class:"flex items-center gap-2"},r1=["disabled"],l1={key:0,class:"text-center py-12"},a1={class:"space-y-6"},i1={class:"space-y-6"},s1={class:"space-y-6"},c1=ae(e.defineComponent({__name:"MapSettings",setup(t){const n=be.useRouter(),o=be.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"}],u=s.map(N=>N.id),p=N=>N?Array.isArray(N)?N[0]:N:null,k=(()=>{const N=p(o.query.tab);return N&&u.includes(N)?N:"general"})(),c=e.ref(k);e.watch(()=>o.query.tab,N=>{const B=p(N);B&&u.includes(B)&&c.value!==B&&(c.value=B)}),e.watch(c,N=>{o.query.tab!==N&&n.replace({query:{...o.query,tab:N}})});const y=e.ref({name:"",map_key:"",description:"",holder:"",image:"",keywords:[],center:null,zoom:11,widgets:[],layers:[]}),d=e.computed({get:()=>(y.value.layers||[]).map(N=>N.id||N),set:N=>{y.value.layers=N}}),m=e.computed(()=>a.value.map(N=>({id:N.id,text:N.name||N.id}))),g=e.computed({get:()=>d.value.map(N=>{const B=m.value.find(S=>S.id===N);return B?B.text:N}),set:N=>{const B=N.map(S=>{const L=m.value.find(M=>M.text===S);return L?L.id:null}).filter(S=>S!==null);d.value=B}}),h=e.computed(()=>{const N=y.value.center;if(!Array.isArray(N)||N.length<2)return"Не задано";const[B,S]=N;return B===void 0||S===void 0||B===null||S===null||Number.isNaN(Number(B))||Number.isNaN(Number(S))?"Не задано":`Lng ${Number(B).toFixed(6)}, Lat ${Number(S).toFixed(6)}`}),f=e.computed(()=>{const N=y.value.zoom;if(N==null||N==="")return"Не задано";const B=Number(N);return Number.isNaN(B)?"Не задано":B.toFixed(2)}),b=[{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 E(){try{const N=await fetch("/api/gis-layer-list");N.ok&&(a.value=await N.json())}catch(N){console.error("Failed to load available layers:",N)}}async function T(){try{const B=await(await fetch(`/api/gis-map/${o.params.id}?original=1`)).json();y.value={...B,keywords:B.keywords||[],center:B.center??null,widgets:Array.isArray(B.widgets)?B.widgets:[],layers:(B.layers||[]).map(S=>S.id||S)}}catch(N){console.error("Failed to load map:",N),ue.notify({type:"error",title:"Помилка",message:"Не вдалося завантажити карту"})}finally{l.value=!1}}async function j(){var B,S;const N=(S=(B=i.value)==null?void 0:B.validate)==null?void 0:S.call(B);if(N){ue.notify({type:"warning",title:"Валідація",message:Object.entries(N).map(([L,M])=>`${L}: ${M}`).join(`
164
164
  `)});return}r.value=!0;try{const L=JSON.parse(JSON.stringify(y.value));if(L.zoom=Number(L.zoom),Array.isArray(L.center)&&(L.center.every(I=>I==null||I===""||I===0)||L.center.length===0)&&(L.center=null),delete L.created_at,delete L.updated_at,delete L.created_by,delete L.updated_by,delete L.history,delete L.maps,!(await fetch(`/api/gis-map/${o.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(L)})).ok)throw new Error("Save failed");ue.notify({type:"success",title:"Успіх",message:"Збережено!"})}catch(L){console.error("Save error:",L),ue.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти"})}finally{r.value=!1}}return e.onMounted(async()=>{await E(),T()}),(N,B)=>(e.openBlock(),e.createElementBlock("main",Qh,[e.createElementVNode("div",e1,[e.createElementVNode("div",t1,[e.createElementVNode("div",null,[e.createElementVNode("h1",n1,e.toDisplayString(y.value.name||"Налаштування карти"),1),B[7]||(B[7]=e.createElementVNode("p",{class:"text-gray-600"},"Редагування параметрів карти",-1))]),e.createElementVNode("div",o1,[e.createElementVNode("a",{onClick:B[0]||(B[0]=S=>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,r1)])]),l.value?(e.openBlock(),e.createElementBlock("div",l1,[...B[8]||(B[8]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(ng,{tabs:s,activeTab:c.value,"onUpdate:activeTab":B[1]||(B[1]=S=>c.value=S)},null,8,["activeTab"]),e.withDirectives(e.createElementVNode("div",a1,[e.createVNode(rg,{schema:b,loading:l.value,modelValue:y.value,"onUpdate:modelValue":B[2]||(B[2]=S=>y.value=S),form:i.value,"onUpdate:form":B[3]||(B[3]=S=>i.value=S)},null,8,["loading","modelValue","form"])],512),[[e.vShow,c.value==="general"]]),e.withDirectives(e.createElementVNode("div",i1,[e.createVNode(ag,{options:m.value,layerIDs:d.value,"onUpdate:layerIDs":B[4]||(B[4]=S=>d.value=S),layerNames:g.value,"onUpdate:layerNames":B[5]||(B[5]=S=>g.value=S)},null,8,["options","layerIDs","layerNames"])],512),[[e.vShow,c.value==="layers"]]),e.withDirectives(e.createVNode(Jh,{modelValue:y.value.widgets,"onUpdate:modelValue":B[6]||(B[6]=S=>y.value.widgets=S)},null,8,["modelValue"]),[[e.vShow,c.value==="widgets"]]),e.withDirectives(e.createElementVNode("div",s1,[e.createVNode(Nh,{"center-display":h.value,"zoom-display":f.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"]]),d1={class:"flex-1 overflow-y-auto p-0"},u1={class:"pt-0 mt-0"},p1={key:0,class:"flex items-center justify-center py-12"},m1={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm"},f1={key:2,class:"text-center py-12 text-gray-500"},g1={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)]"},y1=["onClick"],h1={class:"flex items-start justify-between"},x1={class:"flex-1"},b1={class:"text-base font-semibold text-gray-900 mb-1"},k1={class:"flex items-center gap-2 mb-3"},w1=["onClick"],_1={class:"relative"},E1=["onClick"],N1={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"},B1={class:"flex items-center gap-2"},V1={class:"text-xs text-gray-500"},C1=["onClick"],$1={class:"px-6 py-3 border-t border-gray-200 custom-pagination bg-gray-100"},_n=12,v1=ae(e.defineComponent({__name:"DictionariesGrid",props:{search:{},type:{}},emits:["update:counts"],setup(t,{expose:n,emit:o}){const l=t,r=o,a=be.useRouter(),i=be.useRoute(),s=e.ref(Number(i.query.page)||1),u=e.ref(!1),p=e.ref(0),k=e.ref([]),c=e.computed(()=>{const L=(s.value-1)*_n,M=L+_n;return k.value.slice(L,M)}),y=e.ref(!0),d=e.ref(null),m=e.ref(null),g=e.ref(null);let h=null,f=null;const b=(L="",M="")=>{const P=new URLSearchParams,I=L.trim();I&&P.set("search",I);const W=(M||"").trim();W&&P.set("type",W);const z=P.toString();return z?`/api/user-cls?${z}`:"/api/user-cls"},E=async(L="",M="")=>{try{y.value=!0,d.value=null;const P=b(L,M),I=await fetch(P);if(!I.ok)throw new Error(`HTTP error: ${I.status}`);const W=await I.json();if(k.value=W.data,!L.trim())p.value=W.data.length;else if(p.value===0){const z=await fetch(b("",M));if(z.ok){const H=await z.json();p.value=H.data.length}}r("update:counts",{filtered:k.value.length,total:p.value})}catch(P){d.value=P instanceof Error?P.message:"Failed to load classifiers",console.error("Error fetching classifiers:",P)}finally{y.value=!1}};e.onMounted(()=>{u.value=!0,E(l.search,l.type??"")}),e.watch(()=>[l.search,l.type],([L,M])=>{h&&clearTimeout(h),h=setTimeout(()=>{E(L,M??""),s.value=1},300)});const T=L=>{a.push({name:"classifier-detail",params:{name:L.name}})},j=L=>{m.value={name:L.name,description:L.description,alias:L.alias}},N=()=>{E(l.search,l.type??"")},B=async L=>{try{await navigator.clipboard.writeText(L),g.value=L,f&&clearTimeout(f),f=setTimeout(()=>{g.value=null},500)}catch(M){console.error("Failed to copy text: ",M)}};n({refetch:N});const S=L=>{s.value=L,a.replace({query:{...i.query,page:String(L)}})};return(L,M)=>(e.openBlock(),e.createElementBlock("main",d1,[e.createElementVNode("div",u1,[y.value?(e.openBlock(),e.createElementBlock("div",p1,[e.createVNode(e.unref(Dn),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):d.value?(e.openBlock(),e.createElementBlock("div",m1,e.toDisplayString(d.value),1)):k.value.length===0?(e.openBlock(),e.createElementBlock("div",f1," Нічого не знайдено ")):e.createCommentVNode("",!0),k.value.length>0?(e.openBlock(),e.createElementBlock("div",g1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(P,I)=>(e.openBlock(),e.createElementBlock("div",{key:I,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:W=>T(P)},[e.createElementVNode("div",h1,[e.createElementVNode("div",x1,[e.createElementVNode("h3",b1,e.toDisplayString(P.description),1),e.createElementVNode("div",k1,[e.createElementVNode("p",{onClick:e.withModifiers(W=>B(P.name),["stop"]),class:"text-sm text-gray-600 mb-0 hover:border-b hover:border-gray-300"},e.toDisplayString(P.name),9,w1),e.createElementVNode("div",_1,[e.createElementVNode("button",{onClick:e.withModifiers(W=>B(P.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(Ur),{width:14,height:14,"stroke-width":2})],8,E1),g.value===P.name?(e.openBlock(),e.createElementBlock("div",N1," Copied ")):e.createCommentVNode("",!0)])]),e.createElementVNode("div",B1,[e.createElementVNode("div",V1,e.toDisplayString(P.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(W=>j(P),["stop"])}," Редагувати ",8,C1)]),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:M[0]||(M[0]=e.withModifiers(()=>{},["stop"]))},[e.createVNode(e.unref(zn),{width:16,height:16,"stroke-width":2,class:""})])],8,y1))),128))])):e.createCommentVNode("",!0)]),u.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:"#pagination"},[e.createElementVNode("div",$1,[e.createVNode(e.unref(ue.VsPagination),{total:k.value.length,page:s.value,"page-size":_n,showPageSizes:!1,pageRange:10,view:"button",color:"gray","onUpdate:page":S,onPageChange:S},null,8,["total","page"])])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-6f5da01d"]]),S1={class:"flex flex-col 2xl:flex-row 2xl:items-center 2xl:justify-between"},L1={class:""},A1={class:"text-2xl font-bold mb-2 flex items-center gap-2"},T1={key:0,class:"text-sm font-normal text-gray-500 mt-2 ml-1"},M1={class:"flex flex-col gap-3 mt-4 lg:mt-5 lg:flex-row lg:items-center"},F1={class:"w-full md:w-auto"},D1=["value"],I1={class:"relative w-full lg:w-[16rem]"},j1={class:"bg-white focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-lg"},z1={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},O1=["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",S1,[e.createElementVNode("div",L1,[e.createElementVNode("h1",A1,[s[3]||(s[3]=e.createTextVNode(" Довідники ",-1)),t.counts&&t.counts.total>0?(e.openBlock(),e.createElementBlock("span",T1,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",M1,[e.createElementVNode("div",F1,[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,D1)]),e.createElementVNode("div",I1,[e.createElementVNode("div",j1,[e.createElementVNode("div",z1,[e.createVNode(e.unref(In),{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]=u=>i.$emit("update:modelValue",u.target.value))},null,40,O1),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]=u=>i.$emit("update:modelValue",""))},[e.createVNode(e.unref(yt),{width:14,height:14,"stroke-width":2})])):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{onClick:s[2]||(s[2]=u=>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(Yt),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),s[7]||(s[7]=e.createTextVNode(" Додати ",-1))])])]))}}),P1={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-x-auto"},U1={key:0,class:"flex items-center justify-center py-12"},q1={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm m-4"},H1={key:2,class:"text-center py-12 text-gray-500"},W1={key:3,class:"w-full min-w-[640px] divide-y divide-gray-200"},Y1={class:"bg-gray-50 border-b border-gray-200"},Z1={class:"divide-y divide-gray-200"},G1={class:"px-4 py-3 w-1/12"},K1={class:"px-4 py-3 text-sm font-medium text-gray-900 w-2/12"},X1={class:"px-4 py-3 text-sm text-gray-600 font-mono"},J1=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 k=o.search.toLowerCase().trim();return r.value.filter(y=>{var d,m;return((d=y.text)==null?void 0:d.toLowerCase().includes(k))||((m=y.id)==null?void 0:m.toLowerCase().includes(k))})}),u=async k=>{try{a.value=!0,i.value=null;const c=await fetch(`/api/suggest/${encodeURIComponent(k)}`);if(!c.ok)throw new Error(`HTTP error: ${c.status}`);const y=await c.json();r.value=y.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&&u(o.classifierName)}),e.watch(()=>o.classifierName,k=>{k&&u(k)}),n({refetch:()=>{u(o.classifierName)}}),(k,c)=>(e.openBlock(),e.createElementBlock("div",P1,[a.value?(e.openBlock(),e.createElementBlock("div",U1,[e.createVNode(e.unref(Dn),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):i.value?(e.openBlock(),e.createElementBlock("div",q1,e.toDisplayString(i.value),1)):r.value.length===0?(e.openBlock(),e.createElementBlock("div",H1," Записи відсутні ")):(e.openBlock(),e.createElementBlock("table",W1,[e.createElementVNode("thead",Y1,[e.createElementVNode("tr",null,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,y=>e.createElementVNode("th",{key:y.key,class:e.normalizeClass(["px-4 py-3 text-xs font-semibold text-gray-900",[y.width,y.align]])},e.toDisplayString(y.label),3)),64))])]),e.createElementVNode("tbody",Z1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,y=>(e.openBlock(),e.createElementBlock("tr",{key:y.id,class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",G1,[e.createElementVNode("div",{class:"w-6 h-6 rounded border border-gray-300",style:e.normalizeStyle({backgroundColor:y.color})},null,4)]),e.createElementVNode("td",K1,e.toDisplayString(y.text),1),e.createElementVNode("td",X1,e.toDisplayString(y.id),1)]))),128))])]))]))}}),Q1={class:"space-y-6 flex-1 overflow-y-auto p-0"},ex={class:"flex items-center gap-2 text-sm text-gray-600 mb-4"},tx={class:"text-gray-900"},nx={class:"flex items-start justify-between mb-6"},ox={class:"flex-1 mr-4"},rx={key:0,class:"flex items-center gap-2 group"},lx={class:"text-2xl font-bold text-gray-900"},ax={key:1,class:"flex items-center gap-2"},ix=["disabled"],sx=["disabled"],cx={class:"text-sm text-gray-500 mt-1"},dx={class:"flex items-center gap-3"},ux={class:"bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-4"},px={class:"relative max-w-md"},mx={class:"vs-form-text relative w-full border-transparent text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-sm"},fx={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},gx=e.defineComponent({__name:"DictionaryDetails",setup(t){const n=be.useRouter(),o=be.useRoute(),l=e.computed(()=>o.params.name),r=e.ref(!1),a=e.ref(null),i=e.ref(null),s=e.ref(""),u=e.ref(""),p=e.ref(""),k=e.ref(!1),c=e.ref(!1),y=e.ref(null),d=async()=>{var E;try{const T=await fetch(`/api/user-cls?name=${encodeURIComponent(l.value)}`);if(!T.ok)return;const N=(E=(await T.json()).data)==null?void 0:E[0];N&&(u.value=N.description||"")}catch(T){console.error("Error fetching classifier details:",T)}},m=()=>{p.value=u.value,k.value=!0,e.nextTick(()=>{var E;(E=y.value)==null||E.focus()})},g=()=>{k.value=!1,p.value=""},h=async()=>{try{c.value=!0;const j=(await(await fetch(`/api/suggest/${encodeURIComponent(l.value)}`)).json()).data||[],N={name:l.value,description:p.value.trim()||null,data:j},B=await fetch(`/api/user-cls/${encodeURIComponent(l.value)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(N)});if(!B.ok)throw new Error(`HTTP error: ${B.status}`);u.value=p.value,k.value=!1}catch(E){console.error("Error saving description:",E)}finally{c.value=!1}};e.onMounted(()=>{d()}),e.watch(l,()=>{d()});const f=()=>{a.value=null,r.value=!0},b=E=>{a.value=E,r.value=!0};return(E,T)=>(e.openBlock(),e.createElementBlock("div",Q1,[e.createElementVNode("div",null,[e.createElementVNode("div",ex,[e.createElementVNode("button",{onClick:T[0]||(T[0]=j=>e.unref(n).back()),class:"text-sky-600 hover:text-sky-500 transition-colors"}," Довідники "),T[4]||(T[4]=e.createElementVNode("span",{class:"text-gray-400"},"/",-1)),e.createElementVNode("span",tx,e.toDisplayString(l.value),1)]),e.createElementVNode("div",nx,[e.createElementVNode("div",ox,[k.value?(e.openBlock(),e.createElementBlock("div",ax,[e.withDirectives(e.createElementVNode("input",{ref_key:"editInputRef",ref:y,"onUpdate:modelValue":T[1]||(T[1]=j=>p.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,p.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(Or),{width:20,height:20,"stroke-width":2})],8,ix),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(yt),{width:20,height:20,"stroke-width":2})],8,sx)])):(e.openBlock(),e.createElementBlock("div",rx,[e.createElementVNode("h1",lx,e.toDisplayString(u.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(jn),{width:18,height:18,"stroke-width":2})])])),e.createElementVNode("p",cx,e.toDisplayString(l.value),1)]),e.createElementVNode("div",dx,[e.createElementVNode("button",{onClick:f,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(Yt),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),T[5]||(T[5]=e.createTextVNode(" Додати запис ",-1))]),e.createElementVNode("button",{onClick:T[2]||(T[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",ux,[e.createElementVNode("div",px,[e.createElementVNode("div",mx,[e.createElementVNode("div",fx,[e.createVNode(e.unref(In),{width:18,height:18,"stroke-width":2,class:"stroke-gray-400 transition-all"})]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":T[3]||(T[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(J1,{ref_key:"detailsTableRef",ref:i,"classifier-name":l.value,search:s.value,onEdit:b},null,8,["classifier-name","search"])]))}}),yx={class:"flex-col justify-between h-full"},hx={class:"classifiers-component space-y-6 p-8 pt-2 max-w-[90%] mx-auto h-[calc(100vh-95px)]"},xx=e.defineComponent({__name:"index",setup(t){const n=be.useRoute(),o=e.ref(""),l=e.ref(""),r=e.ref(null),a=e.ref({filtered:0,total:0}),i=u=>{a.value=u},s=()=>{var u;(u=r.value)==null||u.refetch()};return(u,p)=>(e.openBlock(),e.createElementBlock("div",yx,[e.createElementVNode("div",hx,[e.unref(n).params.name?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(R1,{key:0,modelValue:o.value,"onUpdate:modelValue":p[0]||(p[0]=k=>o.value=k),filter:l.value,"onUpdate:filter":p[1]||(p[1]=k=>l.value=k),counts:a.value,onRefresh:s},null,8,["modelValue","filter","counts"])),e.unref(n).params.name?(e.openBlock(),e.createBlock(gx,{key:2})):(e.openBlock(),e.createBlock(v1,{key:1,ref_key:"gridRef",ref:r,search:o.value,type:l.value,"onUpdate:counts":i},null,8,["search","type"]))]),p[2]||(p[2]=e.createElementVNode("div",{id:"pagination",class:"bg-gray-100"},null,-1))]))}});function bx(t){t.component("MapCustom",qt)}xe.CartoCSS=J0,xe.Classifiers=xx,xe.MapSettings=c1,xe.MapWidget=qt,xe.Raster=p0,xe.Register=Ks,xe.Service=Jm,xe.default=qt,xe.install=bx,xe.template1=Un,xe.template2=qn,xe.template3=Hn,xe.template4=Wn,xe.template5=Yn,Object.defineProperties(xe,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));