@opengis/gis 0.2.164 → 0.2.165

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.
@@ -1,5 +1,5 @@
1
1
  (function(Ze,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("vue-router"),require("lucide-vue-next"),require("@opengis/core"),require("@opengis/filter"),require("@opengis/form")):typeof define=="function"&&define.amd?define(["exports","vue","vue-router","lucide-vue-next","@opengis/core","@opengis/filter","@opengis/form"],e):(Ze=typeof globalThis<"u"?globalThis:Ze||self,e(Ze.MapCustom={},Ze.Vue,Ze.vueRouter,Ze.lucide,Ze.openGIScore,Ze.openGISfilter,Ze.openGISform))})(this,(function(Ze,e,Oe,ye,Ee,Gn,ol){"use strict";var V$=Object.defineProperty;var $=(Ze,e,Oe)=>e in Ze?V$(Ze,e,{enumerable:!0,configurable:!0,writable:!0,value:Oe}):Ze[e]=Oe;var lt=(Ze,e,Oe)=>$(Ze,typeof e!="symbol"?e+"":e,Oe);const yn=e.defineComponent({__name:"BaseEntityWrapper",props:{components:{},createParam:{default:"new"},editAction:{default:"edit"},entityKey:{default:""},entityBasePath:{default:""},columnsConfig:{default:()=>[]}},setup(t){const n=t,o=Oe.useRoute(),r=e.useSlots(),l=e.computed(()=>{const s=String(o.params.id??""),i=String(o.params.action??"");return s?i===n.editAction?n.components.edit:s===n.createParam?n.components.create:n.components.card:n.components.table});return(s,i)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l.value),{"entity-key":n.entityKey,"entity-base-path":n.entityBasePath,"columns-config":n.columnsConfig},e.createSlots({_:2},[e.renderList(e.unref(r),(c,u)=>({name:u,fn:e.withCtx(d=>[e.renderSlot(s.$slots,u,e.normalizeProps(e.guardReactiveProps(d)))])}))]),1032,["entity-key","entity-base-path","columns-config"]))}}),Za="registers",Xa="/gis.registers",Ja=e.defineComponent({__name:"RegistersWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>bo)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Vn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>$n)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>G1)),s={table:n,create:o,edit:r,card:l},i=[{ua:"Назва",name:"name",meta:"title",width:320},{ua:"Ключ",name:"register_key",format:"text",width:240},{ua:"Публічний",name:"is_public",edit:!0,format:"boolean",width:120},{ua:"Активний",name:"is_active",edit:!0,format:"boolean",width:120}];return(c,u)=>(e.openBlock(),e.createBlock(yn,{components:s,"entity-key":Za,"entity-base-path":Xa,"columns-config":i,"create-param":"new","edit-action":"edit"}))}}),Qa="services",es="/gis.datasets",ts=e.defineComponent({__name:"DatasetsWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>bo)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Vn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>$n)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>KE)),s={table:n,create:o,edit:r,card:l},i=[{ua:"Назва",name:"name",meta:"title",width:320},{ua:"Опис",name:"description",format:"text",width:360},{ua:"Група",name:"group_id",format:"badge",width:220},{ua:"Публічний",name:"is_public",edit:!0,format:"boolean",width:120},{ua:"Активний",name:"is_active",edit:!0,format:"boolean",width:120}];function c(u){const d=String((u==null?void 0:u.text)||u||"").toLowerCase();return d.includes("error")||d.includes("inactive")?"bg-red-100 text-red-800":d.includes("warning")||d.includes("pending")?"bg-yellow-100 text-yellow-800":"bg-green-100 text-green-800"}return(u,d)=>(e.openBlock(),e.createBlock(yn,{components:s,"entity-key":Qa,"entity-base-path":es,"columns-config":i,"create-param":"new","edit-action":"edit"},{badge:e.withCtx(({value:y})=>[e.createElementVNode("span",{class:e.normalizeClass(["inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium",c(y)])},e.toDisplayString((y==null?void 0:y.text)||y||"-"),3)]),_:1}))}}),ns="rasters",os="/gis.rasters",rs=e.defineComponent({__name:"RastersWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>uC)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Vn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>$n)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>CN)),s={table:n,create:o,edit:r,card:l},i=[{ua:"Назва",name:"name",meta:"title",width:320},{ua:"Опис",name:"description",format:"text",width:360},{ua:"Джерело",name:"source_path",format:"text",width:240},{ua:"Публічний",name:"is_public",edit:!0,format:"boolean",width:120},{ua:"Активний",name:"is_active",edit:!0,format:"boolean",width:120}];return(c,u)=>(e.openBlock(),e.createBlock(yn,{components:s,"entity-key":ns,"entity-base-path":os,"columns-config":i,"create-param":"new","edit-action":"edit"}))}}),ls="cartocss",as="/gis.cartocss",ss=e.defineComponent({__name:"CartocssWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>bo)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Vn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>$n)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>$V)),s={table:n,create:o,edit:r,card:l},i=[{ua:"Назва",name:"name",meta:"title",width:280},{ua:"Опис",name:"description",format:"text",width:320},{ua:"Група",name:"group_id",format:"badge",width:220},{ua:"Джерело",name:"source_path",format:"text",width:240},{ua:"Публічний",name:"is_public",edit:!0,format:"boolean",width:120},{ua:"Активний",name:"enabled",edit:!0,format:"boolean",width:120}];function c(u){const d=String((u==null?void 0:u.text)||u||"").toLowerCase();return d.includes("error")||d.includes("inactive")?"bg-red-100 text-red-800":d.includes("warning")||d.includes("pending")?"bg-yellow-100 text-yellow-800":"bg-green-100 text-green-800"}return(u,d)=>(e.openBlock(),e.createBlock(yn,{components:s,"entity-key":ls,"entity-base-path":as,"columns-config":i,"create-param":"new","edit-action":"edit"},{badge:e.withCtx(({value:y})=>[e.createElementVNode("span",{class:e.normalizeClass(["inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium",c(y)])},e.toDisplayString((y==null?void 0:y.text)||y||"-"),3)]),_:1}))}}),Ae=(t,n)=>{const o=t.__vccOpts||t;for(const[r,l]of n)o[r]=l;return o},is={},cs={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 ds(t,n){return e.openBlock(),e.createElementBlock("svg",cs,[...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 Kn=Ae(is,[["render",ds]]),us={class:"gap-2 inline-flex"},fs=["href"],ms="maps",rl="/gis.maps",ps=Ae(e.defineComponent({__name:"MapsWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>bo)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Vn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>$n)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>h$)),s={table:n,create:o,edit:r,card:l},i=[{ua:"Назва",name:"name",meta:"title",link:"/gis.maps/{id}",width:320},{ua:"Опис",name:"description",format:"text",width:360},{ua:"Публічний",name:"is_public",edit:!0,format:"boolean",width:120},{ua:"Активний",name:"is_active",edit:!0,format:"boolean",width:120},{ua:"Карта",name:"id",format:"link",link:"/maps/{id}",getCellData:()=>"",width:80,align:"center"}];return(c,u)=>(e.openBlock(),e.createBlock(yn,{components:s,"entity-key":ms,"entity-base-path":rl,"columns-config":i,"create-param":"new","edit-action":"edit"},{action:e.withCtx(({row:d})=>[e.createElementVNode("div",us,[e.createElementVNode("a",{href:`${rl}/${d.id}/edit`,class:"inline-flex items-center justify-center bg-white border rounded-md size-7 gap-x-2 hover:bg-gray-100",title:"Редагувати","aria-label":"Редагувати"},[e.createVNode(Kn)],8,fs)])]),_:1}))}}),[["__scopeId","data-v-d576dfc7"]]),gs={class:"flex-1 overflow-y-auto p-0 overflow-x-hidden max-h-[70%] lg:max-h-[80%] xl:max-h-[83%] 2xl:max-h-[95%]"},ys={class:"pt-0 mt-0"},hs={key:0,class:"flex items-center justify-center py-12"},bs={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm"},xs={key:2,class:"text-center py-12 text-gray-500"},ks={key:3,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-6"},ws=["onClick"],_s={class:"flex items-start justify-between"},Es={class:"flex items-start gap-3"},Cs={class:"flex-1 min-w-0"},Ns={class:"flex items-center gap-2 mb-[-0.2rem] -mt-1"},Vs=["onClick"],$s={class:"relative"},Bs=["onClick"],Ss={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"},vs={class:"text-xs text-gray-600 line-clamp-2"},Ls={class:"flex items-center gap-2 shrink-0"},Ts={key:0,class:"text-xs text-gray-500 whitespace-nowrap"},As={class:"px-6 py-3 border-t border-gray-200 custom-pagination bg-gray-100"},Ro=30,Ms=Ae(e.defineComponent({__name:"DictionariesGrid",props:{search:{},type:{}},emits:["update:counts"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=Oe.useRouter(),i=Oe.useRoute(),c=e.ref(Number(i.query.page)||1),u=e.ref(!1),d=e.ref(0),y=e.ref([]),a=e.computed(()=>{const _=(c.value-1)*Ro,N=_+Ro;return y.value.slice(_,N)}),m=e.ref(!0),f=e.ref(null),p=e.ref(null);let k=null,h=null;const g=(_="",N="")=>{const T=new URLSearchParams,Y=_.trim();Y&&T.set("search",Y);const ee=(N||"").trim();ee&&T.set("type",ee);const R=T.toString();return R?`/api/user-cls?${R}`:"/api/user-cls"},b=async(_="",N="")=>{try{m.value=!0,f.value=null;const T=g(_,N),Y=await fetch(T);if(!Y.ok)throw new Error(`HTTP error: ${Y.status}`);const ee=await Y.json();if(y.value=ee.data,!_.trim())d.value=ee.data.length;else if(d.value===0){const R=await fetch(g("",N));if(R.ok){const ae=await R.json();d.value=ae.data.length}}l("update:counts",{filtered:y.value.length,total:d.value})}catch(T){f.value=T instanceof Error?T.message:"Failed to load classifiers",console.error("Error fetching classifiers:",T)}finally{m.value=!1}};e.onMounted(()=>{u.value=!0,b(r.search,r.type??"")}),e.watch(()=>[r.search,r.type],([_,N])=>{k&&clearTimeout(k),k=setTimeout(()=>{b(_,N??""),c.value=1},300)});const x=_=>{s.push({name:"classifier-detail",params:{name:_.name}})},C=()=>{b(r.search,r.type??"")},V=async _=>{try{await navigator.clipboard.writeText(_),p.value=_,h&&clearTimeout(h),h=setTimeout(()=>{p.value=null},500)}catch(N){console.error("Failed to copy text: ",N)}};n({refetch:C});const E=_=>{c.value=_,s.replace({query:{...i.query,page:String(_)}})};return(_,N)=>(e.openBlock(),e.createElementBlock("div",gs,[e.createElementVNode("div",ys,[m.value?(e.openBlock(),e.createElementBlock("div",hs,[e.createVNode(e.unref(ye.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):f.value?(e.openBlock(),e.createElementBlock("div",bs,e.toDisplayString(f.value),1)):y.value.length===0?(e.openBlock(),e.createElementBlock("div",xs," Нічого не знайдено ")):e.createCommentVNode("",!0),y.value.length>0?(e.openBlock(),e.createElementBlock("div",ks,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,(T,Y)=>(e.openBlock(),e.createElementBlock("div",{key:Y,class:"w-full border border-gray-200 bg-white rounded-lg p-4 text-left hover:shadow-md transition-all hover:border-gray-300 cursor-pointer",onClick:ee=>x(T)},[e.createElementVNode("div",_s,[e.createElementVNode("div",Es,[T.type==="sql"?(e.openBlock(),e.createBlock(e.unref(ye.Layers),{key:0,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})):(e.openBlock(),e.createBlock(e.unref(ye.Code),{key:1,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})),e.createElementVNode("div",Cs,[e.createElementVNode("div",Ns,[e.createElementVNode("h4",{onClick:e.withModifiers(ee=>V(T.name),["stop"]),class:"text-sm font-semibold text-gray-800 mb-0 hover:border-b hover:border-gray-300 cursor-pointer"},e.toDisplayString(T.name),9,Vs),e.createElementVNode("div",$s,[e.createElementVNode("button",{onClick:e.withModifiers(ee=>V(T.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(ye.ClipboardCopy),{width:14,height:14,"stroke-width":2})],8,Bs),p.value===T.name?(e.openBlock(),e.createElementBlock("div",Ss," Copied ")):e.createCommentVNode("",!0)])]),e.createElementVNode("p",vs,e.toDisplayString(T.description||"Опис відсутній"),1)])]),e.createElementVNode("div",Ls,[T.type!="sql"?(e.openBlock(),e.createElementBlock("span",Ts,e.toDisplayString(T.count)+" записів ",1)):e.createCommentVNode("",!0),e.createVNode(e.unref(ye.ChevronRight),{width:16,height:16,"stroke-width":2,class:"w-4 h-4 text-gray-400"})])])],8,ws))),128))])):e.createCommentVNode("",!0)]),u.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:"#pagination"},[e.createElementVNode("div",As,[e.createVNode(e.unref(Ee.VsPagination),{total:y.value.length,page:c.value,"page-size":Ro,showPageSizes:!1,pageRange:10,view:"button",color:"gray","onUpdate:page":E,onPageChange:E},null,8,["total","page"])])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-3556f06d"]]),Fs={class:"bg-white rounded-lg shadow-xl max-w-md w-full overflow-hidden"},Ds={class:"sticky top-0 bg-white border-b border-gray-200 px-6 py-4 flex items-center justify-between"},Ps={class:"text-lg font-semibold text-gray-900"},zs={key:0,class:"p-6 flex items-center justify-center"},Is={key:1,class:"p-6"},js={key:0,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-3 text-sm mt-4"},Rs={class:"flex items-center gap-3 mt-6 pt-6 border-t border-gray-200"},Os=["disabled"],Us=["disabled"],qs=e.defineComponent({__name:"DictModale",props:{editData:{}},emits:["close","created"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/form")),r=t,l=n,s=e.computed(()=>!!r.editData),i=e.ref(null),c=e.ref({name:"",description:"",alias:[]}),u=e.computed(()=>[{name:"name",type:"text",label:"Назва (унікальна)",placeholder:"Назва класифікатора",validators:["required"],disabled:s.value,hint:"Використовується як ідентифікатор в API"},{name:"description",type:"textarea",label:"Опис",placeholder:"Опис довідника"},{name:"alias",type:"tags",label:"Аліас",placeholder:"Аліас",addButtonText:"Додати аліас"}]),d=e.ref([]),y=e.ref(!1),a=e.ref(!1),m=e.ref(null),f=async h=>{try{a.value=!0;const g=await fetch(`/api/suggest/${encodeURIComponent(h)}`);if(!g.ok)throw new Error(`HTTP error: ${g.status}`);const b=await g.json();d.value=b.data||[]}catch(g){console.error("Error fetching suggest data:",g),d.value=[]}finally{a.value=!1}};e.onMounted(async()=>{r.editData&&(c.value={name:r.editData.name,description:r.editData.description||"",alias:r.editData.alias||[]},await f(r.editData.name))});const p=async()=>{var g,b;const h=(b=(g=i.value)==null?void 0:g.validate)==null?void 0:b.call(g);if(h){Ee.notify({type:"warning",title:"Валідація",message:Object.entries(h).map(([x,C])=>`${x}: ${C}`).join(`
2
- `)});return}if(c.value.name.trim())try{y.value=!0,m.value=null;const x={name:c.value.name.trim(),description:c.value.description.trim()||null,alias:c.value.alias.length>0?c.value.alias:null,data:d.value.length>0?d.value:[]},C=s.value?`/api/user-cls/${encodeURIComponent(c.value.name.trim())}`:"/api/user-cls",V=await fetch(C,{method:s.value?"PUT":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(x)});if(!V.ok){const E=await V.json().catch(()=>({}));throw new Error(E.message||`HTTP error: ${V.status}`)}l("created"),l("close")}catch(x){let C="Помилка створення довідника";x instanceof Error?C=x.message:s.value&&(C="Помилка оновлення довідника"),Ee.notify({type:"error",title:"Помилка",message:C}),console.error("Error saving classifier:",x)}finally{y.value=!1}},k=()=>{const h=document.createElement("input");h.type="file",h.accept=".json",h.onchange=g=>{var V;const b=(V=g.target.files)==null?void 0:V[0];if(!b)return;const x=b.name.replace(/\.json$/i,"").trim(),C=new FileReader;C.onload=async E=>{try{const _=JSON.parse(E.target.result);if(!Array.isArray(_))throw new Error("Файл повинен містити масив обʼєктів");y.value=!0,m.value=null;const T=await fetch("/api/user-cls",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:x,description:null,alias:null,data:_})});if(!T.ok){const Y=await T.json().catch(()=>({}));throw new Error(Y.message||`HTTP error: ${T.status}`)}Ee.notify({title:"Імпорт успішний",type:"success",message:`Створено класифікатор "${x}" з ${_.length} записами`}),l("created"),l("close")}catch(_){Ee.notify({title:"Помилка імпорту",type:"error",message:_.message||"Некоректний формат файлу"})}finally{y.value=!1}},C.readAsText(b)},h.click()};return(h,g)=>(e.openBlock(),e.createElementBlock("div",{onClick:g[3]||(g[3]=e.withModifiers(b=>l("close"),["self"])),class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4"},[e.createElementVNode("div",Fs,[e.createElementVNode("div",Ds,[e.createElementVNode("h3",Ps,e.toDisplayString(s.value?"Редагувати довідник":"Створити довідник"),1),e.createElementVNode("button",{onClick:g[0]||(g[0]=b=>l("close")),class:"text-gray-400 hover:text-gray-600 transition-colors"},[e.createVNode(e.unref(ye.X),{width:20,height:20,"stroke-width":2,class:"lucide lucide-x-icon lucide-x"})])]),a.value?(e.openBlock(),e.createElementBlock("div",zs,[e.createVNode(e.unref(ye.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):(e.openBlock(),e.createElementBlock("div",Is,[e.createVNode(e.unref(o),{ref_key:"formRef",ref:i,schema:u.value,values:c.value,"onUpdate:values":g[1]||(g[1]=b=>c.value=b)},null,8,["schema","values"]),m.value?(e.openBlock(),e.createElementBlock("div",js,e.toDisplayString(m.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Rs,[e.createElementVNode("button",{type:"button",onClick:p,disabled:y.value,class:"flex-1 px-4 py-2.5 bg-sky-600 text-white rounded-lg hover:bg-sky-700 transition-colors text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2"},[y.value?(e.openBlock(),e.createBlock(e.unref(ye.Loader2),{key:0,width:16,height:16,"stroke-width":2,class:"animate-spin"})):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(y.value?"Збереження...":"Зберегти"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(y.value?"Створення...":"Створити"),1)],64))],8,Os),e.createElementVNode("button",{type:"button",onClick:k,class:"flex-1 px-4 py-2.5 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium disabled:opacity-50"}," Імпорт "),e.createElementVNode("button",{type:"button",onClick:g[2]||(g[2]=b=>l("close")),disabled:y.value,class:"flex-1 px-4 py-2.5 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium disabled:opacity-50"}," Скасувати ",8,Us)])]))])]))}}),Hs={class:"flex flex-col 2xl:flex-row 2xl:items-center 2xl:justify-between"},Ws={class:""},Ys={class:"text-2xl font-bold mb-2 flex items-center gap-2"},Gs={key:0,class:"text-sm font-normal text-gray-500 mt-2 ml-1"},Ks={class:"flex flex-col gap-3 mt-4 lg:mt-5 lg:flex-row lg:items-center"},Zs={class:"w-full md:w-auto"},Xs=["value"],Js={class:"relative w-full lg:w-[16rem]"},Qs={class:"bg-white focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-lg"},ei={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},ti=["value"],ni=e.defineComponent({__name:"DictionariesHeader",props:{modelValue:{},filter:{default:""},counts:{}},emits:["update:modelValue","update:filter","refresh"],setup(t,{emit:n}){const o=t,r=n,l=c=>{const u=c.target.value;r("update:filter",u)},s=e.ref(!1),i=()=>{r("refresh")};return(c,u)=>(e.openBlock(),e.createElementBlock("div",Hs,[e.createElementVNode("div",Ws,[e.createElementVNode("h1",Ys,[u[4]||(u[4]=e.createTextVNode(" Довідники ",-1)),t.counts&&t.counts.total>0?(e.openBlock(),e.createElementBlock("span",Gs,e.toDisplayString(t.counts.filtered)+" / "+e.toDisplayString(t.counts.total),1)):e.createCommentVNode("",!0)]),u[5]||(u[5]=e.createElementVNode("p",{class:"text-sm opacity-60"}," Редагуйте довідники класифікаторів, що використовуються у вашій системі ",-1))]),e.createElementVNode("div",Ks,[e.createElementVNode("div",Zs,[u[7]||(u[7]=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:l},[...u[6]||(u[6]=[e.createElementVNode("option",{value:""},"Всі",-1),e.createElementVNode("option",{value:"cls"},"Довідники",-1),e.createElementVNode("option",{value:"select"},"Вибірки з БД",-1)])],40,Xs)]),e.createElementVNode("div",Js,[e.createElementVNode("div",Qs,[e.createElementVNode("div",ei,[e.createVNode(e.unref(ye.Search),{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:u[0]||(u[0]=d=>c.$emit("update:modelValue",d.target.value))},null,40,ti),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:u[1]||(u[1]=d=>c.$emit("update:modelValue",""))},[e.createVNode(e.unref(ye.X),{width:14,height:14,"stroke-width":2})])):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{onClick:u[2]||(u[2]=d=>s.value=!0),class:"w-full md:w-auto flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-200 transform hover:scale-105 text-sm font-medium"},[e.createVNode(e.unref(ye.Plus),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),u[8]||(u[8]=e.createTextVNode(" Додати ",-1))]),s.value?(e.openBlock(),e.createBlock(qs,{key:0,onClose:u[3]||(u[3]=d=>s.value=!1),onCreated:i})):e.createCommentVNode("",!0)])]))}}),oi={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-x-auto"},ri={key:0,class:"flex items-center justify-center py-12"},li={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm m-4"},ai={key:2,class:"text-center py-12 text-gray-500"},si={key:3,class:"w-full min-w-[640px] divide-y divide-gray-200"},ii={class:"bg-gray-50 border-b border-gray-200"},ci={class:"divide-y divide-gray-200"},di={class:"px-4 py-3 w-1/12"},ui={class:"px-4 py-3 text-sm font-medium text-gray-900 w-2/12"},fi={class:"px-4 py-3 text-sm text-gray-600 font-mono"},mi={class:"px-4 py-3 w-1/12"},pi={class:"flex gap-1"},gi=["onClick"],yi=["onClick"],hi=e.defineComponent({__name:"DetailsTable",props:{classifierName:{},search:{}},emits:["edit"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=p=>{l("edit",p)},i=[{key:"color",label:"Колір",width:"w-2/12",align:"text-left"},{key:"text",label:"Назва",width:"w-5/12",align:"text-left"},{key:"id",label:"Код",width:"w-4/12",align:"text-left"},{key:"actions",label:"Дії",width:"w-1/12",align:"text-left"}],c=e.ref([]),u=e.ref(!0),d=e.ref(null),y=e.computed(()=>{var k;if(!((k=r.search)!=null&&k.trim()))return c.value;const p=r.search.toLowerCase().trim();return c.value.filter(h=>{var g,b;return((g=h.text)==null?void 0:g.toLowerCase().includes(p))||((b=h.id)==null?void 0:b.toLowerCase().includes(p))})}),a=async p=>{try{u.value=!0,d.value=null;const k=await fetch(`/api/suggest/${encodeURIComponent(p)}`);if(!k.ok)throw new Error(`HTTP error: ${k.status}`);const h=await k.json();c.value=h.data}catch(k){d.value=k instanceof Error?k.message:"Failed to load items",console.error("Error fetching suggest items:",k)}finally{u.value=!1}},m=async(p,k)=>{Ee.confirm({title:"Підтвердіть дію",type:"error",message:"Ви впевнені, що хочете видалити даний обʼєкт?",onConfirm:async()=>{const h=await fetch(`/api/user-cls/${p}/${k}`,{method:"DELETE"});if(!h.ok){Ee.notify({type:"error",title:"Помилка",message:(await h.json()).error||"Something went wrong"});return}Ee.notify({title:"Видалено",type:"success",message:"Обʼєкт успішно видалено"}),a(p)}})};return e.onMounted(()=>{r.classifierName&&a(r.classifierName)}),e.watch(()=>r.classifierName,p=>{p&&a(p)}),n({refetch:()=>{a(r.classifierName)}}),(p,k)=>(e.openBlock(),e.createElementBlock("div",oi,[u.value?(e.openBlock(),e.createElementBlock("div",ri,[e.createVNode(e.unref(ye.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):d.value?(e.openBlock(),e.createElementBlock("div",li,e.toDisplayString(d.value),1)):c.value.length===0?(e.openBlock(),e.createElementBlock("div",ai," Записи відсутні ")):(e.openBlock(),e.createElementBlock("table",si,[e.createElementVNode("thead",ii,[e.createElementVNode("tr",null,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(i,h=>e.createElementVNode("th",{key:h.key,class:e.normalizeClass(["px-4 py-3 text-xs font-semibold text-gray-900",[h.width,h.align]])},e.toDisplayString(h.label),3)),64))])]),e.createElementVNode("tbody",ci,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,h=>(e.openBlock(),e.createElementBlock("tr",{key:h.id,class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",di,[e.createElementVNode("div",{class:"w-6 h-6 rounded border border-gray-300",style:e.normalizeStyle({backgroundColor:h.color})},null,4)]),e.createElementVNode("td",ui,e.toDisplayString(h.text),1),e.createElementVNode("td",fi,e.toDisplayString(h.id),1),e.createElementVNode("td",mi,[e.createElementVNode("div",pi,[e.createElementVNode("button",{onClick:g=>s(h),class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати"},[e.createVNode(e.unref(ye.PenLine),{size:14,"stroke-width":2})],8,gi),e.createElementVNode("button",{onClick:g=>m(t.classifierName,h.id),class:"p-1 text-gray-400 hover:text-red-600 transition-all rounded hover:bg-red-50",title:"Видалити"},[e.createVNode(e.unref(ye.Trash2),{size:14,"stroke-width":2})],8,yi)])])]))),128))])]))]))}}),bi={class:"bg-white rounded-lg shadow-xl max-w-md w-full max-h-[90vh] overflow-y-auto"},xi={class:"sticky top-0 bg-white border-b border-gray-200 px-6 py-4 flex items-center justify-between"},ki={class:"text-lg font-semibold text-gray-900"},wi={class:"space-y-5"},_i={class:"space-y-3"},Ei={class:"grid grid-cols-6 gap-2"},Ci=["onClick"],Ni={key:0,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-3 text-sm mt-4"},Vi={class:"flex items-center gap-3 pt-6"},$i=["disabled"],Bi=["disabled"],Si=e.defineComponent({__name:"TableAddModale",props:{classifierName:{},editData:{}},emits:["close","created"],setup(t,{emit:n}){const o=t,r=n,l=["rgb(44, 94, 255)","rgb(187, 224, 168)","rgb(255, 165, 0)","rgb(139, 92, 246)","rgb(239, 68, 68)","rgb(84, 171, 82)","rgb(107, 114, 128)","rgb(236, 72, 153)","rgb(255, 216, 117)","rgb(96, 193, 235)","rgb(20, 184, 166)","rgb(209, 115, 168)"],s=e.ref(null),i=e.ref(!1),c=e.ref(null),u=e.reactive({id:"",text:""});e.onMounted(()=>{o.editData&&(u.id=o.editData.id||"",u.text=o.editData.text,s.value=o.editData.color||null)});const d=async()=>{if(u.text.trim())try{i.value=!0,c.value=null;const y=await fetch(`/api/suggest/${encodeURIComponent(o.classifierName)}`);if(!y.ok)throw new Error(`HTTP error: ${y.status}`);const m=(await y.json()).data||[],f={id:u.id.trim(),text:u.text.trim(),color:s.value||null};let p;o.editData?p=m.map(h=>{var g;return h.id===((g=o.editData)==null?void 0:g.id)?f:h}):p=[...m,f];const k=await fetch(`/api/user-cls/${encodeURIComponent(o.classifierName)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:o.classifierName,data:p})});if(!k.ok){const h=await k.json().catch(()=>({}));throw new Error(h.message||`HTTP error: ${k.status}`)}r("created"),r("close")}catch(y){c.value=y instanceof Error?y.message:"Помилка збереження",console.error("Error saving record:",y)}finally{i.value=!1}};return(y,a)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[e.createElementVNode("div",{class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4",onClick:a[4]||(a[4]=e.withModifiers(m=>r("close"),["self"]))},[e.createElementVNode("div",bi,[e.createElementVNode("div",xi,[e.createElementVNode("h2",ki,e.toDisplayString(t.editData?"Редагувати запис":"Додати запис"),1),e.createElementVNode("button",{onClick:a[0]||(a[0]=m=>r("close")),class:"text-gray-400 hover:text-gray-600 transition-colors"},[e.createVNode(e.unref(ye.X),{width:20,height:20,"stroke-width":2,class:""})])]),e.createElementVNode("form",{class:"p-6",onSubmit:e.withModifiers(d,["prevent"])},[e.createElementVNode("div",wi,[e.createElementVNode("div",null,[a[6]||(a[6]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 mb-2"}," Колір ",-1)),e.createElementVNode("div",_i,[e.createElementVNode("div",Ei,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,m=>e.createElementVNode("button",{key:m,type:"button",class:e.normalizeClass(["w-full aspect-square rounded-lg border-2 transition-all",s.value===m?"border-gray-900 scale-110":"border-gray-300 hover:border-gray-400"]),style:e.normalizeStyle({backgroundColor:m}),onClick:f=>s.value=m},null,14,Ci)),64))]),a[5]||(a[5]=e.createElementVNode("div",{class:"relative"},[e.createElementVNode("button",{type:"button",class:"text-sm text-sky-600 hover:text-sky-700"}," Обрати інший колір ")],-1))])]),e.createElementVNode("div",null,[a[7]||(a[7]=e.createElementVNode("label",{for:"id",class:"block text-sm font-medium text-gray-700 mb-2"},[e.createTextVNode(" Код "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":a[1]||(a[1]=m=>u.id=m),type:"text",id:"id",placeholder:"Введіть код",class:"w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-sky-500 focus:border-transparent text-sm text-[#2e3338]",required:""},null,512),[[e.vModelText,u.id]])]),e.createElementVNode("div",null,[a[8]||(a[8]=e.createElementVNode("label",{for:"name",class:"block text-sm font-medium text-gray-700 mb-2"},[e.createTextVNode(" Назва "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":a[2]||(a[2]=m=>u.text=m),type:"text",id:"name",placeholder:"Введіть назву",class:"w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-sky-500 focus:border-transparent text-sm text-[#2e3338]",required:""},null,512),[[e.vModelText,u.text]])])]),c.value?(e.openBlock(),e.createElementBlock("div",Ni,e.toDisplayString(c.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Vi,[e.createElementVNode("button",{type:"submit",disabled:i.value||!u.text.trim(),class:"flex-1 px-4 py-2.5 bg-sky-600 text-white rounded-lg hover:bg-sky-700 transition-colors text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2"},[i.value?(e.openBlock(),e.createBlock(e.unref(ye.Loader2),{key:0,width:16,height:16,"stroke-width":2,class:"animate-spin"})):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(i.value?"Збереження...":t.editData?"Зберегти зміни":"Зберегти"),1)],8,$i),e.createElementVNode("button",{type:"button",onClick:a[3]||(a[3]=m=>r("close")),disabled:i.value,class:"flex-1 px-4 py-2.5 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed"}," Скасувати ",8,Bi)])],32)])])]))}}),vi={class:"space-y-6 flex-1 overflow-y-auto p-0"},Li={class:"flex items-center gap-2 text-sm text-gray-600 mb-4"},Ti={class:"text-gray-900"},Ai={class:"flex items-start justify-between mb-6"},Mi={class:"flex-1 mr-4"},Fi={class:"text-2xl font-bold text-gray-900"},Di={key:0,class:"flex items-center gap-2 group mt-1"},Pi={class:"text-sm text-gray-500"},zi={key:1,class:"flex items-center gap-2 mt-1"},Ii=["disabled"],ji=["disabled"],Ri={class:"flex items-center gap-3"},Oi={class:"bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-4 grid grid-cols-2 justify-between"},Ui={class:"relative max-w-md grid"},qi={class:"vs-form-text relative w-full border-transparent text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-sm"},Hi={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},Wi=e.defineComponent({__name:"DictionaryDetails",setup(t){const n=Oe.useRouter(),o=Oe.useRoute(),r=e.computed(()=>o.params.name),l=e.ref(!1),s=e.ref(null),i=e.ref(null),c=e.ref(""),u=e.ref(""),d=e.ref(""),y=e.ref(!1),a=e.ref(!1),m=e.ref(null),f=async()=>{var E;try{const _=await fetch(`/api/user-cls?name=${encodeURIComponent(r.value)}`);if(!_.ok)return;const T=(E=(await _.json()).data)==null?void 0:E[0];T&&(u.value=T.description||"")}catch(_){console.error("Error fetching classifier details:",_)}},p=()=>{d.value=u.value,y.value=!0,e.nextTick(()=>{var E;(E=m.value)==null||E.focus()})},k=()=>{y.value=!1,d.value=""},h=async()=>{try{a.value=!0;const N=(await(await fetch(`/api/suggest/${encodeURIComponent(r.value)}`)).json()).data||[],T={name:r.value,description:d.value.trim()||null,data:N},Y=await fetch(`/api/user-cls/${encodeURIComponent(r.value)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(T)});if(!Y.ok)throw new Error(`HTTP error: ${Y.status}`);u.value=d.value,y.value=!1}catch(E){console.error("Error saving description:",E)}finally{a.value=!1}};e.onMounted(()=>{f()}),e.watch(r,()=>{f()});const g=()=>{s.value=null,l.value=!0},b=E=>{s.value=E,l.value=!0},x=()=>{l.value=!1,s.value=null},C=()=>{var E;(E=i.value)==null||E.refetch()},V=async()=>{try{const E=await fetch(`/api/suggest/${encodeURIComponent(r.value)}`);if(!E.ok)throw new Error(`HTTP error: ${E.status}`);const N=(await E.json()).data||[],T=new Blob([JSON.stringify(N,(R,ae)=>ae===null?void 0:ae,2)],{type:"application/json"}),Y=URL.createObjectURL(T),ee=document.createElement("a");ee.href=Y,ee.download=`${r.value}.json`,document.body.appendChild(ee),ee.click(),document.body.removeChild(ee),URL.revokeObjectURL(Y),Ee.notify({title:"Експорт завершено",type:"success",message:"Файл успішно експортовано"})}catch(E){console.error("Error exporting classifier to json:",E),Ee.notify({title:"Помилка",type:"error",message:"Не вдалося експортувати дані"})}};return(E,_)=>(e.openBlock(),e.createElementBlock("div",vi,[e.createElementVNode("div",null,[e.createElementVNode("div",Li,[e.createElementVNode("button",{onClick:_[0]||(_[0]=N=>e.unref(n).back()),class:"text-blue-600 hover:text-blue-500 transition-colors"}," Довідники "),_[4]||(_[4]=e.createElementVNode("span",{class:"text-gray-400"},"/",-1)),e.createElementVNode("span",Ti,e.toDisplayString(r.value),1)]),e.createElementVNode("div",Ai,[e.createElementVNode("div",Mi,[e.createElementVNode("h1",Fi,e.toDisplayString(r.value),1),y.value?(e.openBlock(),e.createElementBlock("div",zi,[e.withDirectives(e.createElementVNode("input",{ref_key:"editInputRef",ref:m,"onUpdate:modelValue":_[1]||(_[1]=N=>d.value=N),type:"text",class:"text-sm text-gray-600 border-b-2 border-sky-500 focus:outline-none bg-transparent w-full py-0.5",onKeydown:[e.withKeys(h,["enter"]),e.withKeys(k,["esc"])],placeholder:"Введіть опис"},null,544),[[e.vModelText,d.value]]),e.createElementVNode("button",{onClick:h,disabled:a.value,class:"p-1.5 text-green-600 hover:bg-green-50 rounded transition-colors disabled:opacity-50"},[e.createVNode(e.unref(ye.Check),{width:18,height:18,"stroke-width":2})],8,Ii),e.createElementVNode("button",{onClick:k,disabled:a.value,class:"p-1.5 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors"},[e.createVNode(e.unref(ye.X),{width:18,height:18,"stroke-width":2})],8,ji)])):(e.openBlock(),e.createElementBlock("div",Di,[e.createElementVNode("p",Pi,e.toDisplayString(u.value||"Опис відсутній"),1),e.createElementVNode("button",{onClick:p,class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати опис"},[e.createVNode(e.unref(ye.SquarePen),{width:16,height:16,"stroke-width":2})])]))]),e.createElementVNode("div",Ri,[e.createElementVNode("button",{onClick:g,class:"w-full md:w-auto flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-200 transform hover:scale-105 text-sm font-medium"},[e.createVNode(e.unref(ye.Plus),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),_[5]||(_[5]=e.createTextVNode(" Додати запис ",-1))]),e.createElementVNode("button",{onClick:_[2]||(_[2]=N=>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",Oi,[e.createElementVNode("div",Ui,[e.createElementVNode("div",qi,[e.createElementVNode("div",Hi,[e.createVNode(e.unref(ye.Search),{width:18,height:18,"stroke-width":2,class:"stroke-gray-400 transition-all"})]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":_[3]||(_[3]=N=>c.value=N),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,c.value]])])]),e.createElementVNode("button",{onClick:V,class:"justify-self-end border p-2 rounded-lg w-fit text-sm bg-stone-100/50 hover:bg-white hover:shadow-sm transition-colors"}," Експорт ")]),l.value?(e.openBlock(),e.createBlock(Si,{key:0,"classifier-name":r.value,"edit-data":s.value,onClose:x,onCreated:C},null,8,["classifier-name","edit-data"])):e.createCommentVNode("",!0),e.createVNode(hi,{ref_key:"detailsTableRef",ref:i,"classifier-name":r.value,search:c.value,onEdit:b},null,8,["classifier-name","search"])]))}}),Yi={class:"flex-col justify-between h-full"},Gi={class:"classifiers-component space-y-6 p-8 pt-2 max-w-[90%] mx-auto h-[calc(100vh-95px)]"},Ki=e.defineComponent({__name:"index",setup(t){const n=Oe.useRoute(),o=e.ref(""),r=e.ref(""),l=e.ref(null),s=e.ref({filtered:0,total:0}),i=u=>{s.value=u},c=()=>{var u;(u=l.value)==null||u.refetch()};return(u,d)=>(e.openBlock(),e.createElementBlock("div",Yi,[e.createElementVNode("div",Gi,[e.unref(n).params.name?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(ni,{key:0,modelValue:o.value,"onUpdate:modelValue":d[0]||(d[0]=y=>o.value=y),filter:r.value,"onUpdate:filter":d[1]||(d[1]=y=>r.value=y),counts:s.value,onRefresh:c},null,8,["modelValue","filter","counts"])),e.unref(n).params.name?(e.openBlock(),e.createBlock(Wi,{key:2})):(e.openBlock(),e.createBlock(Ms,{key:1,ref_key:"gridRef",ref:l,search:o.value,type:r.value,"onUpdate:counts":i},null,8,["search","type"]))]),d[2]||(d[2]=e.createElementVNode("div",{id:"pagination",class:"bg-gray-100"},null,-1))]))}}),Zi={class:"border border-gray-300 rounded-lg shadow-sm overflow-auto max-h-[calc(100vh-10rem)]"},Xi={class:"w-full bg-white relative"},Ji={class:"bg-gradient-to-b from-gray-50 to-gray-100 border-b border-gray-300 sticky top-0 z-10"},Qi={key:0,class:"bg-white divide-y divide-gray-200"},ec={class:"bg-gradient-to-r from-gray-50 to-gray-100 border-t-2 border-gray-300"},tc=["onClick"],nc={class:"flex items-center gap-2 text-sm font-semibold text-gray-900 hover:text-blue-600 transition-colors"},oc={key:1,class:"px-6 py-3.5"},rc={class:"text-sm font-semibold text-gray-900"},lc={class:"text-xs text-gray-400 mt-0.5"},ac={key:0,class:"inline-flex items-center cursor-pointer"},sc={class:"relative"},ic=["checked","onChange"],cc=["checked","onChange"],dc={class:"px-6 py-3"},uc={class:"ml-6"},fc={class:"text-sm text-black font-medium"},mc={class:"text-xs text-gray-400 mt-0.5"},pc=["checked","onChange"],gc={key:1},yc=e.defineComponent({__name:"permissions",props:{data:{},modelValue:{},actions:{}},emits:["update:modelValue"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=e.computed(()=>r.actions&&r.actions.length?r.actions:["view"]),i=e.ref({}),c=e.ref({}),u=e.computed(()=>{var x;return((x=r.data)==null?void 0:x.routers)||[]});e.watch(()=>r.modelValue,x=>{const C={};(x||[]).forEach(V=>{C[V.id]=new Set(V.actions||[])}),c.value=C},{immediate:!0});function d(){const x=Object.entries(c.value).map(([C,V])=>({id:C,actions:Array.from(V)}));l("update:modelValue",x)}function y(x){return x?x.id||x.path||x.table||x.ua||JSON.stringify(x):""}function a(x){return x?x.id||x.ua||x.name:""}function m(x){return{view:"Перегляд",edit:"Редагування",add:"Додавання",del:"Видалення"}[x]||x}function f(x,C){var E;const V=y(x);return((E=c.value[V])==null?void 0:E.has(C))||!1}function p(x){const C=a(x);return i.value[C]===!0}function k(x){const C=a(x);i.value[C]=!p(x)}function h(x,C){var V;return(V=x.menu)!=null&&V.length?x.menu.every(E=>f(E,C)):f(x,C)}function g(x,C,V){var E;if((E=x.menu)!=null&&E.length){const _={...c.value};x.menu.forEach(N=>{const T=y(N),Y=new Set(_[T]||[]);V?Y.add(C):Y.delete(C),_[T]=Y}),c.value=_,d()}}function b(x,C,V){const E=y(x),_=new Set(c.value[E]||[]);V?_.add(C):_.delete(C),c.value={...c.value,[E]:_},d()}return n({getSelected:()=>r.modelValue}),(x,C)=>{var V;return e.openBlock(),e.createElementBlock("div",Zi,[e.createElementVNode("table",Xi,[e.createElementVNode("thead",Ji,[e.createElementVNode("tr",null,[C[0]||(C[0]=e.createElementVNode("th",{class:"px-6 py-4 text-xs font-semibold text-gray-800 uppercase tracking-wider w-32 text-left"},"Групи",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,E=>(e.openBlock(),e.createElementBlock("th",{key:E,class:"px-4 py-4 text-xs font-semibold text-gray-800 uppercase tracking-wider w-20 text-center"},e.toDisplayString(m(E)),1))),128))])]),(V=u.value)!=null&&V.length?(e.openBlock(),e.createElementBlock("tbody",Qi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,E=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:y(E)},[e.createElementVNode("tr",ec,[E!=null&&E.menu?(e.openBlock(),e.createElementBlock("td",{key:0,class:"px-6 py-3.5 cursor-pointer",onClick:_=>k(E)},[e.createElementVNode("button",nc,[e.createVNode(e.unref(ye.ChevronDown),{class:e.normalizeClass(["text-gray-600 w-4 h-4 transition-transform duration-200",{"rotate-180":p(E)}])},null,8,["class"]),e.createTextVNode(" "+e.toDisplayString(E.ua),1)])],8,tc)):(e.openBlock(),e.createElementBlock("td",oc,[e.createElementVNode("div",rc,e.toDisplayString(E.ua),1),e.createElementVNode("div",lc,e.toDisplayString(E.path||E.table),1)])),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,_=>(e.openBlock(),e.createElementBlock("td",{key:_,class:"px-4 py-3.5 text-center"},[E!=null&&E.menu?(e.openBlock(),e.createElementBlock("label",ac,[e.createElementVNode("div",sc,[e.createElementVNode("input",{type:"checkbox",class:"sr-only peer",checked:h(E,_),onChange:N=>g(E,_,N.target.checked)},null,40,ic),C[1]||(C[1]=e.createElementVNode("div",{class:"w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-blue-600"},null,-1))])])):(e.openBlock(),e.createElementBlock("input",{key:1,type:"checkbox",checked:f(E,_),onChange:N=>b(E,_,N.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,cc))]))),128))]),E!=null&&E.menu&&p(E)?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(E.menu,_=>(e.openBlock(),e.createElementBlock("tr",{key:y(_),class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",dc,[e.createElementVNode("div",uc,[e.createElementVNode("div",fc,e.toDisplayString(_.ua),1),e.createElementVNode("div",mc,e.toDisplayString(_.path||_.table),1)])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,N=>(e.openBlock(),e.createElementBlock("td",{key:N,class:"px-5 py-3 text-center"},[e.createElementVNode("input",{type:"checkbox",checked:f(_,N),onChange:T=>b(_,N,T.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,pc)]))),128))]))),128)):e.createCommentVNode("",!0)],64))),128))])):(e.openBlock(),e.createElementBlock("tfoot",gc,[...C[2]||(C[2]=[e.createElementVNode("tr",null,[e.createElementVNode("td",{colspan:"100%",class:"text-center py-4"}," Немає доступних шарів ")],-1)])]))])])}}}),hc={class:"flex flex-col gap-4 mt-2 mx-2"},bc={class:"flex items-center gap-3"},xc={class:"flex-1 relative"},kc=e.defineComponent({__name:"VsPermissions",setup(t){const n=Oe.useRoute(),o=e.ref(""),r=e.ref(null),l=e.ref({categories:[],layers:[]}),s=e.ref([]),i=e.ref(["edit"]),c=e.computed(()=>d(l.value)),u=e.computed(()=>{const m=o.value.toLowerCase().trim();return m?c.value.map(f=>{const p=String(f.ua||"").toLowerCase().includes(m),k=(f.menu||[]).filter(h=>String(h.ua||"").toLowerCase().includes(m));return p?{...f,menu:f.menu}:k.length?{...f,menu:k}:null}).filter(Boolean):c.value}),d=m=>{const f=m.categories||[],p=m.layers||[],k=f.map(g=>{const b=p.filter(x=>x.category_id===g.category_id).map(x=>({id:String(x.layer_id),ua:x.name,path:String(x.layer_id)}));return b.length?{ua:g.name,menu:b,id:String(g.category_id)}:null}).filter(Boolean),h=p.filter(g=>!g.category_id).map(g=>({ua:g.name,id:String(g.layer_id),path:String(g.layer_id)}));return h.length&&k.push({ua:"Без категорії",menu:h,id:"noCategory"}),k},y=async()=>{const[m,f]=await Promise.all([fetch("/api/catalog").then(p=>p.json()),fetch(`/api/catalog-permissions/${n.params.id}`).then(p=>p.json())]);l.value=m,s.value=((f==null?void 0:f.layer_list)||[]).filter(p=>p.service_id).map(p=>({id:String(p.service_id),actions:p.actions||[]}))},a=async()=>{var p,k;const f=(((k=(p=r.value)==null?void 0:p.getSelected)==null?void 0:k.call(p))||s.value).filter(h=>{var g;return(g=h.actions)==null?void 0:g.length}).map(h=>({service_id:h.id,actions:h.actions}));await fetch(`/api/catalog-permissions/${n.params.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(f)}).then(h=>h.json()).then(h=>{Ee.notify({title:"Успіх",message:"Доступ успішно збережено",type:"success"})}).catch(h=>{Ee.notify({title:"Помилка",message:h.message,type:"error"})})};return e.onMounted(y),(m,f)=>(e.openBlock(),e.createElementBlock("div",hc,[e.createElementVNode("div",bc,[e.createElementVNode("div",xc,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":f[0]||(f[0]=p=>o.value=p),type:"text",placeholder:"Пошук...",class:"w-full pl-3 pr-4 py-2 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"},null,512),[[e.vModelText,o.value]])]),e.createElementVNode("button",{class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border bg-background hover:text-accent-foreground h-10 px-4 py-2 border-gray-300 text-gray-700 hover:bg-gray-50",onClick:f[1]||(f[1]=p=>m.$router.back())}," Повернутися "),e.createElementVNode("button",{class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-white rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 text-primary-foreground h-10 px-4 py-2 bg-blue-600 hover:bg-blue-700",onClick:a}," Зберегти ")]),e.createVNode(yc,{ref_key:"accessRef",ref:r,data:{routers:u.value},modelValue:s.value,"onUpdate:modelValue":f[2]||(f[2]=p=>s.value=p),actions:i.value},null,8,["data","modelValue","actions"])]))}});function Xt(t){if(t==null)return null;const n=Number(typeof t=="string"?t.trim():t);return Number.isFinite(n)?n:null}function It(t){if(!t)return null;if(Array.isArray(t)&&t.length>=2){const n=Xt(t[0]),o=Xt(t[1]);return n!=null&&o!=null?[n,o]:null}if(typeof t=="object"){const n=t;if(Array.isArray(n.coordinates))return It(n.coordinates);const o=n.lng??n.lon??n.long??n.longitude??n.x,r=n.lat??n.latitude??n.y;if(o!=null&&r!=null){const l=Xt(o),s=Xt(r);if(l!=null&&s!=null)return[l,s]}}if(typeof t=="string"&&t.includes(",")){const[n,o]=t.split(","),r=Xt(n),l=Xt(o);return r!=null&&l!=null?[r,l]:null}return null}const ll=Symbol("MapContext");function wc(t){const n=e.shallowRef(null),o=e.ref(!1);let r=!1;const l=[],s=()=>{r=!0,l.length&&l.forEach(f=>f())},i=()=>{const f=t.container;return typeof f=="string"?document.getElementById(f):(f==null?void 0:f.value)!==void 0?f.value:f},c=()=>r?Promise.resolve():new Promise(f=>l.push(f)),u=(f,p)=>{if(f==null)return p;const k=Number(typeof f=="string"?f.trim():f);return Number.isFinite(k)?k:p},d=f=>{if(!n.value||!f)return;const p=It(f.center);p&&n.value.setCenter(p);const k=n.value.getZoom(),h=u(f.zoom,k);if(h!==k&&n.value.setZoom(h),typeof n.value.getMaxZoom=="function"&&typeof n.value.setMaxZoom=="function"){const g=n.value.getMaxZoom(),b=u(f.maxZoom,g);b!==g&&n.value.setMaxZoom(b)}if(typeof n.value.getMinZoom=="function"&&typeof n.value.setMinZoom=="function"){const g=n.value.getMinZoom(),b=u(f.minZoom,g);b!==g&&n.value.setMinZoom(b)}f.bounds&&n.value.fitBounds(f.bounds,{animate:!1})},y=async()=>{var C,V,E,_,N,T,Y;if(typeof window>"u"||n.value)return;const f=i();if(!f)throw new Error("Map container not found");const p=e.unref(t.settings)||null,k=It((C=p==null?void 0:p.map)==null?void 0:C.center)||[30,50],h=u((V=p==null?void 0:p.map)==null?void 0:V.zoom,7),g=u((E=p==null?void 0:p.map)==null?void 0:E.maxZoom,20),x={...{attributionControl:!1,center:k,zoom:h,maxZoom:g,minZoom:4},...t.mapOptions||{},container:f};x.maxZoom==null&&(x.maxZoom=g),n.value=new maplibregl.Map(x),(_=t.controls)!=null&&_.navigation&&(n.value.addControl(new maplibregl.NavigationControl(typeof t.controls.navigation=="object"?t.controls.navigation:{}),"top-right"),n.value.once("load",()=>{var ae;const ee=n.value.getContainer(),R=(ae=ee==null?void 0:ee.querySelector)==null?void 0:ae.call(ee,".maplibregl-ctrl-compass, .mapboxgl-ctrl-compass");R&&typeof n.value.easeTo=="function"&&R.addEventListener("click",ue=>{ue.preventDefault(),ue.stopPropagation(),n.value.easeTo({bearing:0,pitch:0})},!0)})),(N=t.controls)!=null&&N.scale&&n.value.addControl(new maplibregl.ScaleControl(typeof t.controls.scale=="object"?t.controls.scale:{}),"bottom-left"),(T=t.controls)!=null&&T.fullscreen&&n.value.addControl(new maplibregl.FullscreenControl,"top-right"),(Y=t.controls)!=null&&Y.geolocate&&n.value.addControl(new maplibregl.GeolocateControl(typeof t.controls.geolocate=="object"?t.controls.geolocate:{}),"top-right"),n.value.once("load",()=>{var ee;d((ee=e.unref(t.settings))==null?void 0:ee.map),o.value=!0,s()})};e.watch(()=>{var f;return(f=e.unref(t.settings))==null?void 0:f.map},f=>{d(f)},{deep:!0});const a=()=>{n.value&&(n.value.remove(),n.value=null,o.value=!1)};e.onMounted(y),e.onUnmounted(a);const m={map:n,ready:c,flyTo:f=>{var p;return(p=n.value)==null?void 0:p.flyTo(f)},fitBounds:(f,p)=>{var k;return(k=n.value)==null?void 0:k.fitBounds(f,p)},setCenter:f=>{var p;return(p=n.value)==null?void 0:p.setCenter(f)},setZoom:f=>{var p;return(p=n.value)==null?void 0:p.setZoom(f)},addControl:(f,p)=>{var k;return(k=n.value)==null?void 0:k.addControl(f,p)},removeControl:f=>{var p;return(p=n.value)==null?void 0:p.removeControl(f)},on:(f,p,k)=>{var h,g;return typeof p=="string"?((h=n.value)==null||h.on(f,p,k),()=>{var b;return(b=n.value)==null?void 0:b.off(f,p,k)}):((g=n.value)==null||g.on(f,p),()=>{var b;return(b=n.value)==null?void 0:b.off(f,p)})},off:(f,p,k)=>{var h,g;typeof p=="string"?(h=n.value)==null||h.off(f,p,k):(g=n.value)==null||g.off(f,p)},project:f=>{var p;return(p=n.value)==null?void 0:p.project(f)},unproject:f=>{var p;return(p=n.value)==null?void 0:p.unproject(f)}};return e.provide(ll,m),m}function Qe(t){if(t)return{map:t,flyTo:t.value.flyTo,fitBounds:t.value.fitBounds};const n=e.inject(ll);if(!n)throw new Error("useMap() called outside of a Map provider");return n}const al=Symbol.for("gis.settingsRef");function Oo(){const t=e.getCurrentInstance();if(!t)return e.ref(null);const n=t.appContext.config.globalProperties;let o=n[al];return o||(o=e.ref(n.$settings??null),Object.defineProperty(n,"$settings",{configurable:!0,enumerable:!0,get:()=>o.value,set:r=>{o.value=r}}),n[al]=o),o}const _c={class:""},Zn=Ae(e.defineComponent({__name:"MapView",setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),l=e.ref(null),s=Oo(),i=wc({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},doubleClickZoom:!1,canvasContextAttributes:{preserveDrawingBuffer:!0}},controls:{navigation:!1,scale:!0},settings:s});async function c(){var a;await e.nextTick();const y=(a=i.map)==null?void 0:a.value;y!=null&&y.resize&&y.resize()}function u(){typeof ResizeObserver>"u"||l.value||!r.value||(l.value=new ResizeObserver(()=>{c()}),l.value.observe(r.value))}function d(){var y;(y=l.value)==null||y.disconnect(),l.value=null}return e.onMounted(()=>{c(),u(),window.addEventListener("resize",c)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",c),d()}),n({ctx:i}),(y,a)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"wrapper",ref:r,class:"map-view-root w-full h-full rounded-xl overflow-hidden"},[e.createElementVNode("div",{ref_key:"el",ref:o,class:"map-view-canvas"},null,512),e.createElementVNode("div",_c,[e.renderSlot(y.$slots,"default",{},void 0,!0)])],512))}}),[["__scopeId","data-v-88c21b5f"]]),Ec=["Noto Sans Regular"],Cc=12,Nc="#0f172a",Vc="#fff",$c=14;function ot(t,n){if(!t)return;for(const r of n)if(Object.prototype.hasOwnProperty.call(t,r)&&t[r]!==void 0)return t[r];const o=t.text;if(o&&typeof o=="object"){for(const r of n)if(Object.prototype.hasOwnProperty.call(o,r)&&o[r]!==void 0)return o[r]}}function Bc(t){return t?Array.isArray(t)?t:[t]:Ec}function Uo(t,n){if(typeof t=="number")return Number.isFinite(t)?t:n;if(t==null||t==="")return n;const o=Number(t);return Number.isFinite(o)?o:n}function Sc(t){if(t==null)return null;if(Array.isArray(t))return t;const n=String(t).trim(),o=n.match(/^\{([^{}]+)\}$/);return o?["get",o[1]]:n}function vc(t,n){const o=[];if(t!=null&&o.push(t),n&&o.push(["!",["has","point_count"]]),!!o.length)return o.length===1?o[0]:["all",...o]}function Lc(t,n={}){if(!t)return[];const o=ot(t,["text-field","textField","textFieldValue","labelText","label"]);if(!o)return[];const r=Sc(o);if(!r)return[];const l=r,s=(n.geometry||t.type||"point").toString().toLowerCase(),i=ot(t,["text-font","textFont"]),c=Uo(ot(t,["text-size","textSize"]),Cc),u=ot(t,["text-allow-overlap","textAllowOverlap"]),d=ot(t,["text-minzoom","textMinZoom","textZoom","text-zoom"]),y=ot(t,["text-maxzoom","textMaxZoom","maxzoom"]),a=ot(t,["text-color","textColor"])||Nc,m=ot(t,["text-halo-color","textHaloColor"])||Vc,f=ot(t,["text-halo-width","textHaloWidth"]),p=ot(t,["text-halo-blur","textHaloBlur"]),k=ot(t,["text-offset","textOffset"]),h=ot(t,["text-anchor","textAnchor"]),g=ot(t,["text-justify","textJustify"]),b=ot(t,["text-letter-spacing","textLetterSpacing"]),x=ot(t,["text-transform","textTransform"]),C=ot(t,["symbol-placement","symbolPlacement"]),V=ot(t,["symbol-spacing","symbolSpacing"]),E=ot(t,["text-rotation-alignment","textRotationAlignment"]),_=ot(t,["text-pitch-alignment","textPitchAlignment"]),N=ot(t,["text-opacity","textOpacity"]),T={"text-field":l,"text-font":Bc(i),"text-size":c,"text-allow-overlap":u??!1};k&&(T["text-offset"]=k),s!=="line"&&(T["text-anchor"]=h??"center"),g&&(T["text-justify"]=g),b!==void 0&&(T["text-letter-spacing"]=b),x&&(T["text-transform"]=x),V!==void 0&&(T["symbol-spacing"]=V),s==="line"?(T["symbol-placement"]=C||"line",T["text-rotation-alignment"]=E||"map",T["text-pitch-alignment"]=_||"map"):(E&&(T["text-rotation-alignment"]=E),_&&(T["text-pitch-alignment"]=_),C&&(T["symbol-placement"]=C)),h&&s==="line"&&(T["text-anchor"]=h);const Y={"text-color":a,"text-opacity":N??1};Y["text-halo-color"]=m,f!==void 0&&(Y["text-halo-width"]=f),p!==void 0&&(Y["text-halo-blur"]=p);const ee={type:"symbol",layout:T,paint:Y},R=Uo(d,$c);if(ee.minzoom=R,y!==void 0){const ue=Uo(y,void 0);ue!==void 0&&(ee.maxzoom=ue)}const ae=vc(n.filter,n.excludeClusters);return ae&&(ee.filter=ae),[ee]}const bt="#9ca3af";function qo(t){return!t||typeof t!="object"||Array.isArray(t)?null:{...t}}const sl=new WeakMap,Tc={};function Ac(t){if(!t||t.__layerStoreMode!=="isolated")return Tc;const n=sl.get(t);if(n)return n;const o={};return sl.set(t,o),o}function Ho(t){if(t.colorAttr&&t.colors){const n=Object.entries(t.colors).flat();return["match",["get",t.colorAttr],...n,bt]}return null}function Xn(t){return/^(https?:|data:|blob:)/i.test(t)||t.startsWith("/")||t.startsWith("./")||t.startsWith("../")||/\.(svg|png|jpe?g|gif|webp)$/i.test(t)}function Mc(t){return Xn(t)?t:`/api/gis-icon/${t}`}function Wo(t){return/\.svg(?:[?#].*)?$/i.test(t)||/^data:image\/svg\+xml/i.test(t)}function Jn(t,n){return n?`${t}__${String(n).replace("#","")}`:t}function Fc(t,n){return t.replace(/currentColor/gi,n).replace(/\bfill=(['"])([^'"]+)\1/gi,(o,r,l)=>/^(none|currentColor|url\()/i.test(l)?o:`fill=${r}${n}${r}`).replace(/\bstroke=(['"])([^'"]+)\1/gi,(o,r,l)=>/^(none|currentColor|url\()/i.test(l)?o:`stroke=${r}${n}${r}`)}async function Dc(t,n){const o=await fetch(t);if(!o.ok)throw new Error(`Failed to fetch SVG image: ${t}`);const r=await o.text(),l=n?Fc(r,n):r,s=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(l)}`;return il(s)}function il(t){return new Promise((n,o)=>{const r=new Image;r.crossOrigin="anonymous",r.onload=()=>n(r),r.onerror=()=>o(new Error(`Failed to load image: ${t}`)),r.src=t})}function Pc(t){const n=t.iconSet&&typeof t.iconSet=="object"?t.iconSet:null,o=t.colors&&typeof t.colors=="object"?Object.entries(t.colors):[],r=!!(t.colorAttr&&o.length),l=c=>{if(!r)return c;const u=o.flatMap(([d,y])=>[d,Jn(c,y)]);return["match",["get",t.colorAttr],...u,Jn(c,bt)]};if(t.iconAttr&&n){const c=Object.entries(n).flatMap(([u,d])=>{if(r&&typeof d=="string"){const y=t.colors[u];return[u,Jn(d,typeof y=="string"?y:bt)]}return[u,d]});return["match",["get",t.iconAttr],...c,r&&t.icon?l(t.icon):t.icon||Object.values(n)[0]]}if(!t.icon||!t.colors)return null;if(Xn(t.icon))return l(t.icon);const s=[],i=t.icon.split("+")[0];return Object.values(t.colors).forEach(c=>{s.push(`${i}+${c.replace("#","")}.png`)}),["match",["get",t.colorAttr],...Object.entries(t.colors).reduce((c,[u,d],y)=>c.concat([u,s[y]]),[]),t.icon]}function Jt(t,n){n&&(Array.isArray(n)?t.push(...n):t.push(n))}function zc(t,n){const o=(t==null?void 0:t.clusterZoom)??(t==null?void 0:t.pointZoom)??(t==null?void 0:t.iconZoom)??12,r=Number(o);if(!Number.isFinite(r))return null;const l=["get","point_count"],s=["has","point_count"],i=["!",s],d={type:"circle",maxzoom:r,filter:s,paint:{"circle-color":["step",l,"#3b82f6",10,"#fde047",100,"#fbbf24",1e3,"#fda4af",1e4,"#fb7185",1e6,"#a21caf"],"circle-radius":["step",l,16,10,22,100,28,1e3,34,1e4,40,1e6,48],"circle-stroke-color":"#fff","circle-stroke-width":1}},y={type:"symbol",maxzoom:r,filter:s,layout:{"text-field":["to-string",["coalesce",["get","point_count_abbreviated"],l]],"text-font":["Noto Sans Regular"],"text-size":12,"text-allow-overlap":!0},paint:{"text-color":"#fff","text-halo-color":"#172554","text-halo-width":1.25}},a={...n,filter:["all",i,n.filter||!0]};return[d,y,a]}function cl(t,n){const o=Ho(t);if(t.icon&&!t.iconZoom&&!t.clusterZoom)return;const r={type:"circle",maxzoom:n||t.iconZoom||22,paint:{"circle-stroke-color":(t==null?void 0:t.stroke)||"#fff","circle-opacity":t.opacity||1,"circle-color":o||t.color||bt,"circle-stroke-width":t.width||1,"circle-radius":t.radius||5}},l=zc(t,r);return l||r}function Ic(t){const n=Ho(t);return{type:"fill",minzoom:t.pointZoom||0,paint:{"fill-color":n||t.color||bt,"fill-opacity":t.opacity||.3,"fill-outline-color":t.stroke||bt}}}function jc(t){return{type:"line",paint:{"line-color":Ho(t)||t.color||bt,"line-opacity":t.opacity||1,"line-width":t.width||1.5}}}function Rc(t){const n=Pc(t);return{type:"symbol",minzoom:t.iconZoom||0,layout:{"icon-image":n||t.icon,"icon-size":1,"icon-allow-overlap":!0,"icon-ignore-placement":!0}}}function dl(t,n={}){if(!t)return[];if(!Oc(t))return[];const o=[];t.icon&&Jt(o,Rc(t)),t.pointZoom&&Jt(o,cl(t,t.pointZoom)),t.type==="polygon"?Jt(o,Ic(t)):t.type==="line"?Jt(o,jc(t)):Jt(o,cl(t));const l=n.sourceType!=="raster"?Lc(t,{geometry:t.type||"point",filter:t.filter,excludeClusters:!!t.clusterZoom}):[];return Jt(o,l),o.filter(Boolean)}function Oc(t){return t?!!(new Set(["point","line","polygon"]).has(t.type)||t.icon||t.attrType||t.color||t.stroke||t.radius||t.width||t.colorAttr&&t.colors&&typeof t.colors=="object"&&Object.keys(t.colors).length>0):!1}function ul(t,{sourceType:n,filter:o,allowFallback:r=!1}={}){const l=qo(t);if(l&&o&&(l.filter=o),l)return dl(l,{sourceType:n});if(r&&["vector","geojson"].includes(n||"")){const s={type:"point",color:bt};return o&&(s.filter=o),dl(s,{sourceType:n})}return[]}function Uc(t){return{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:t}}]}}}function Yo(t){if(typeof t!="string")return t;const n=t.trim();if(!n)return"";if(n==="null")return null;if(n==="true")return!0;if(n==="false")return!1;const o=Number(n);return Number.isFinite(o)&&n!==""?o:n}function hn(t){if(t==null)return!0;if(Array.isArray(t))return t.length===0;if(typeof t!="string")return!1;const n=t.trim();return n===""||n==="[]"}function qc(t){if(t==null)return null;if(Array.isArray(t))return t;if(typeof t=="object"){const l=Object.entries(t).filter(([,i])=>!hn(i));if(!l.length)return null;const s=l.map(([i,c])=>{if(Array.isArray(c)){const d=c.map(y=>Yo(y)).filter(y=>!hn(y));return d.length?["in",["get",i],["literal",d]]:null}const u=Yo(c);return hn(u)?null:["==",["get",i],u]}).filter(Boolean);return s.length?s.length===1?s[0]:["all",...s]:null}if(typeof t!="string")return null;const n=t.trim();if(!n)return null;const o=n.split("|").map(l=>l.trim()).filter(Boolean);if(!o.length)return null;const r=o.map(l=>{const s=l.indexOf("=");if(s<=0)return null;const i=l.slice(0,s).trim(),c=l.slice(s+1).trim();if(!i||hn(c))return null;const u=c.split(",").map(d=>Yo(d)).filter(d=>!hn(d));return u.length?u.length>1?["in",["get",i],["literal",u]]:["==",["get",i],u[0]]:null}).filter(Boolean);return r.length?r.length===1?r[0]:["all",...r]:null}function Hc(t,n){return n?!t||t===!0?n:Array.isArray(t)&&t[0]==="all"?[...t,n]:["all",t,n]:t??null}async function fl(t,n){var c;const o=new Set,r=new Map,l=n!=null&&n.colors&&typeof n.colors=="object"?Object.entries(n.colors):[],s=!!(n!=null&&n.colorAttr&&l.length),i=(u,d)=>{const y=Jn(u,d);o.add(y),d&&r.set(y,d)};if(n!=null&&n.icon&&i(n.icon),n!=null&&n.iconSet&&typeof n.iconSet=="object"&&Object.values(n.iconSet).forEach(u=>{if(!(typeof u!="string"||!u.trim())){if(!s){i(u);return}if(Wo(u)){l.forEach(([,d])=>{i(u,String(d))}),i(u,bt);return}i(u),l.forEach(([,d])=>{i(u,String(d))})}}),n!=null&&n.icon&&(n!=null&&n.colors)&&!Xn(n.icon)){const u=n.icon.split("+")[0];Object.values(n.colors||{}).forEach(d=>{o.add(`${u}+${String(d).replace("#","")}.png`)})}n!=null&&n.icon&&(n!=null&&n.colors)&&Xn(n.icon)&&Wo(String(n.icon))&&(Object.values(n.colors||{}).forEach(u=>{i(n.icon,String(u))}),i(n.icon,bt)),await Promise.allSettled(Array.from(o).map(async u=>{if(t.getImage(u))return;const d=r.get(u)||null,y=u.split("__")[0],a=Mc(y),m=Wo(y)?await Dc(a,d):await il(a);t.addImage(u,m)})),(c=t.triggerRepaint)==null||c.call(t)}function Ie(t,n,o){var J;const r=Ac(o);if(!t)return r;if(!n)return r[t];const{map:l,ready:s=()=>Promise.resolve()}=Qe(o),i=t||((J=n.layer)==null?void 0:J.id),c=n.sourceId??t;function u(S){var M;const F={...S};return F.point&&(F.source=Uc(F.point)),!F.layer&&((M=F.source)==null?void 0:M.type)==="raster"&&(F.layer={id:c,type:"raster",source:c}),F.layer&&!F.layer.source&&Object.assign(F.layer,{source:c}),F}let d=u({...n}),y=!1,a=!1;const m=new Map,f=(S=!0)=>{var M,B,j;if(!l.value)return;(((j=(B=(M=l.value).getStyle)==null?void 0:B.call(M))==null?void 0:j.layers)??[]).filter(X=>X.source===i).forEach(X=>{l.value.removeLayer(X.id)}),d.source&&S&&l.value.getSource(c)&&l.value.removeSource(c)},p=async()=>{var S,F,M,B,j,X,he,Z,P,q,H,re;if(!(a||!l.value)){if(d.source&&!l.value.getSource(c)&&l.value.addSource(c,d.source),!l.value.getLayer(i)){const I=d.beforeId===0?(F=(S=l.value.getStyle().layers)==null?void 0:S[0])==null?void 0:F.id:d.beforeId;((B=(M=d.layer)==null?void 0:M.style)!=null&&B.icon||(X=(j=d.layer)==null?void 0:j.style)!=null&&X.iconSet)&&await fl(l.value,d.layer.style);const le=((he=d.source)==null?void 0:he.type)||((Z=d.layer)==null?void 0:Z.type),me=d.layer&&(d.layer.type||d.layer.ref)?d.layer:null,be=(P=d.layer)==null?void 0:P.style,A=((q=d.layer)==null?void 0:q["source-layer"])||((H=d.source)==null?void 0:H["source-layer"])||d.sourceLayer||c,K=d.style||be,fe=ul(K,{sourceType:le,filter:(re=d.layer)==null?void 0:re.filter,allowFallback:!me});if(!fe.length){if(me){const ie={...me,id:me.id||i,source:me.source||c};le==="vector"&&A&&(ie["source-layer"]=ie["source-layer"]||A),l.value.addLayer(ie,I),m.set(ie.id,ie.filter??null)}return}fe.forEach((ie,de)=>{const pe={...ie,id:`${i}${de||""}`,source:c};le==="vector"&&A&&(pe["source-layer"]=A),l.value.addLayer(pe,I),m.set(pe.id,pe.filter??null)})}y=!0}};s().then(p);const k=(S,F)=>l.value?(l.value.on(S,i,F),()=>{var M;return(M=l.value)==null?void 0:M.off(S,i,F)}):()=>{},h=S=>{const F=l.value;if(!F)return;const M=F.getStyle(),B=M==null?void 0:M.layers;if(!(B!=null&&B.length))return;const j=S?"visible":"none";B.filter(X=>X.source===c||X.id===i||typeof X.id=="string"&&X.id.startsWith(String(i))).forEach(X=>{F.setLayoutProperty(X.id,"visibility",j)})},g=(S=!0)=>{l.value&&(f(S),a=!0)},b=async S=>{S&&(d=u({...S}),ue.opts=d,ue.card=d.card,ue.popup=d.popup),!a&&(y=!1,f(!0),await s(),await p())},x=async S=>{var j,X,he,Z,P;if(!l.value)return;(S!=null&&S.icon||S!=null&&S.iconSet)&&await fl(l.value,S);const F=((j=d.source)==null?void 0:j.type)||((X=d.layer)==null?void 0:X.type),M=((he=d.layer)==null?void 0:he["source-layer"])||((Z=d.source)==null?void 0:Z["source-layer"])||d.sourceLayer||c,B=ul(S,{sourceType:F,filter:(P=d.layer)==null?void 0:P.filter,allowFallback:!0});f(!1),B.forEach((q,H)=>{var I;const re={...q,id:`${i}${H}`,source:((I=d.layer)==null?void 0:I.source)||c};F==="vector"&&M&&(re["source-layer"]=re["source-layer"]||M),l.value.addLayer(re)}),y=!0},C=S=>{l.value&&Object.entries(S).forEach(([F,M])=>{l.value.setPaintProperty(i,F,M)})},V=(S,F,M)=>{const B=l.value;if(B)switch(F){case"raster":B.setPaintProperty(S,"raster-opacity",M);break;case"fill":B.setPaintProperty(S,"fill-opacity",M);break;case"line":B.setPaintProperty(S,"line-opacity",M);break;case"circle":B.setPaintProperty(S,"circle-opacity",M);break;case"symbol":B.setPaintProperty(S,"icon-opacity",M),B.setPaintProperty(S,"text-opacity",M);break}},ue={ids:{layerId:i,sourceId:c},isMounted:()=>{var S;return y&&!!((S=l.value)!=null&&S.getLayer(i))},setVisible:h,updatePaint:C,updateLayout:S=>{l.value&&Object.entries(S).forEach(([F,M])=>{l.value.setLayoutProperty(i,F,M)})},updateFilter:S=>{l.value&&l.value.setFilter(i,S)},setOpacity:S=>{var B;if(!l.value)return;const M=(((B=l.value.getStyle())==null?void 0:B.layers)||[]).filter(j=>j.source===c);if(!M.length){const j=l.value.getLayer(i);j&&V(i,j.type,S);return}M.forEach(j=>V(j.id,j.type,S))},setData:S=>{if(!l.value)return;const F=l.value.getSource(c);F&&"setData"in F&&F.setData(S)},setTiles:S=>{if(!l.value)return;const F=l.value.getSource(c);F&&"setTiles"in F&&F.setTiles(S)},setStyle:x,setFilter:S=>{var B,j,X,he,Z,P;if(!l.value)return;if(((B=d.source)==null?void 0:B.type)==="geojson"){const q=qc(S);(((he=(X=(j=l.value).getStyle)==null?void 0:X.call(j))==null?void 0:he.layers)??[]).filter(I=>I.source===c).map(I=>I.id).forEach(I=>{const le=m.get(I)??null,me=Hc(le,q);l.value.setFilter(I,me)});return}const M=l.value.getSource(c);if(M&&"setTiles"in M&&((P=(Z=d.source)==null?void 0:Z.tiles)!=null&&P[0])){const q=d.source.tiles[0];M.setTiles([`${q}${q.includes("?")?"&":"?"}filter=${S}`])}},setFeatureState:(S,F)=>{l.value&&l.value.setFeatureState({source:c,...S},F)},removeFeatureState:(S,F)=>{l.value&&l.value.removeFeatureState({source:c,...S},F?{key:F}:void 0)},refresh:b,remove:g,card:d.card,popup:d.popup,opts:d,getSource:()=>{var S;return(S=l.value)==null?void 0:S.getSource(c)},getLayer:()=>{var S;return(S=l.value)==null?void 0:S.getLayer(i)},on:k},oe=()=>{r[t]===ue&&delete r[t]},te=ue.remove;return ue.remove=()=>{oe(),te()},e.getCurrentInstance()&&e.onBeforeUnmount(ue.remove),r[t]=ue,ue}const Wc={class:"flex flex-row gap-x-3 z-10 relative widget"},Yc=["onClick"],Gc=["src","alt"],Qt=e.defineComponent({__name:"BaseMaps",props:{layers:{},defaultLayer:{},title:{}},emits:["state-change"],setup(t,{emit:n}){var Y,ee,R,ae,ue;const o={z:13,x:4790,y:2762},r={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:{}};function l(oe){if(oe)return oe.replace(/{z}/gi,String(o.z)).replace(/{x}/gi,String(o.x)).replace(/{y}/gi,String(o.y))}function s(oe,te){let J=oe||`layers-${Object.keys(te).length}`,S=1;for(;te[J];)J=`${oe}-${S}`,S+=1;return J}function i(oe,te,J){const S=(oe==null?void 0:oe.name)??(oe==null?void 0:oe.title)??`basemap-${te}`,F=((oe==null?void 0:oe.id)??S??`basemap-${te}`).toString().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),M=s(F||`basemap-${te}`,J),B=(oe==null?void 0:oe.preview)||(oe!=null&&oe.url?l(oe.url):void 0);return{id:M,title:S,url:oe==null?void 0:oe.url,preview:B,overlayUrl:oe==null?void 0:oe.overlayUrl}}function c(oe,te,J=r){let S=[];if(Array.isArray(oe)&&oe.length>0?S=oe:oe&&typeof oe=="object"&&Object.keys(oe).length>0?S=Object.values(oe):Array.isArray(te==null?void 0:te.basemaps)&&(S=te.basemaps),!S.length)return J;const F={};return S.forEach((M,B)=>{const j=i(M,B,F);F[j.id]={url:j.url,preview:j.preview,title:j.title,overlayUrl:j.overlayUrl}}),F}function u(oe,te,J=r){const S=c(oe,te,J);return Object.entries(S).map(([F,M])=>({id:F,title:M.title??F,url:M.url,preview:M.preview,overlayUrl:M.overlayUrl}))}const d=t,y=n,a=e.getCurrentInstance(),m=(Y=a==null?void 0:a.appContext.config.globalProperties)==null?void 0:Y.$settings,f=m==null?void 0:m.map,p=Oe.useRoute(),k=Oe.useRouter();function h(){const oe=p==null?void 0:p.query;return!oe||typeof oe!="object"?null:typeof oe.basemap=="string"?oe.basemap:null}const g=e.computed(()=>h()),b=e.computed(()=>c(d.layers,f,r)),x=e.computed(()=>u(d.layers,f,r)),C=e.ref(g.value??Object.keys(b.value)[0]??"gki"),V=Ie("base",{source:{type:"raster",tiles:(ee=b.value[C.value])!=null&&ee.url?[(R=b.value[C.value])==null?void 0:R.url]:[],tileSize:256},layer:{id:"base",type:"raster",source:"base"},beforeId:0}),E=Ie("base-overlay",{source:{type:"raster",tiles:(ae=b.value[C.value])!=null&&ae.overlayUrl?[(ue=b.value[C.value])==null?void 0:ue.overlayUrl]:[],tileSize:256},layer:{id:"base-overlay",type:"raster",source:"base-overlay",layout:{visibility:"none"}}});function _(oe){oe!=null&&oe.url?(V.setVisible(!0),V.setTiles([oe.url])):V.setVisible(!1),oe!=null&&oe.overlayUrl?(E.setVisible(!0),E.setTiles([oe.overlayUrl])):E.setVisible(!1)}function N(){y("state-change",{basemaps:x.value,selectedId:C.value})}function T(oe){b.value[oe]&&(C.value=oe,_(b.value[oe]),N(),typeof window<"u"&&h()!==oe&&k.replace({query:{...p==null?void 0:p.query,basemap:oe}}).catch(()=>{}))}return e.watch(()=>[b.value,g.value],([oe,te])=>{const J=te&&oe[te]?te:C.value;oe[J]?C.value=J:C.value=Object.keys(oe)[0]??J,_(oe[C.value]),N()},{immediate:!0,deep:!0}),e.watch(()=>C.value,()=>{N()}),e.onBeforeUnmount(()=>{}),(oe,te)=>(e.openBlock(),e.createElementBlock("div",Wc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.value,(J,S)=>(e.openBlock(),e.createElementBlock("div",{key:S,onClick:F=>T(S)},[S!=="none"&&J.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",C.value===S?"border-blue-500":"border-gray-200"])},[J.preview?(e.openBlock(),e.createElementBlock("img",{key:0,src:J.preview,alt:J.title,class:"object-cover rounded-lg lg:w-12 lg:h-12 w-8 h-8"},null,8,Gc)):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",C.value===S?"border-blue-500":"border-gray-200"])},[e.createVNode(e.unref(ye.EyeOff),{class:"w-4 h-4 text-gray-500"})],2))],8,Yc))),128))]))}}),Kc={class:"mapLayer-info__inner"},Zc={class:"mapLayer-info__item-label"},Go=Ae(e.defineComponent({__name:"MapLayerInfoPopover",props:{items:{}},setup(t,{expose:n}){const o=t,r=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),l=e.ref(null),s=e.ref(null);let i=null;const c=e.computed(()=>r.open?{position:"absolute",width:"auto",maxWidth:`${Math.min(300,window.innerWidth-24)}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}:{display:"none"});function u(k){if(r.open){m();return}const h=k.currentTarget,g=h==null?void 0:h.closest(".mapLayer-info");if(!g){m();return}l.value=g,r.open=!0,e.nextTick(()=>{d(),f(),requestAnimationFrame(()=>{d()})})}function d(){if(!r.open||!l.value||!s.value)return;const k=l.value.getBoundingClientRect(),h=12,g=window.scrollX+h,b=window.scrollX+window.innerWidth-h,x=window.scrollY+h,C=window.scrollY+window.innerHeight-h,V=s.value.offsetWidth||Math.min(300,window.innerWidth-24),E=s.value.offsetHeight||0;let _=k.left+window.scrollX+(k.width-V)/2;_<g&&(_=g),_+V>b&&(_=Math.max(g,b-V)),r.left=_;let N=k.bottom+window.scrollY+h;N+E>C&&(N=k.top+window.scrollY-E-h,N<x&&(N=Math.max(x,C-E))),N<x&&(N=x),N+E>C&&(N=Math.max(x,C-E)),r.top=N,r.transform="none"}function y(k){var g,b;if(!r.open)return;const h=k.target;(g=l.value)!=null&&g.contains(h)||(b=s.value)!=null&&b.contains(h)||m()}function a(k){k.key==="Escape"&&m()}function m(){p(),r.open=!1,l.value=null,s.value=null}function f(){p(),s.value&&(i=new ResizeObserver(()=>{d()}),i.observe(s.value))}function p(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",y,!0),document.addEventListener("keydown",a),window.addEventListener("scroll",d,!0),window.addEventListener("resize",d)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",y,!0),document.removeEventListener("keydown",a),window.removeEventListener("scroll",d,!0),window.removeEventListener("resize",d),p()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>d())},{deep:!0}),n({close:m}),(k,h)=>(e.openBlock(),e.createElementBlock("div",{class:"mapLayer-info",ref_key:"anchorEl",ref:l},[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"},[r.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(c.value),ref_key:"popoverEl",ref:s,onClick:h[0]||(h[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Kc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,g=>(e.openBlock(),e.createElementBlock("div",{key:g.label,class:"mapLayer-info__item"},[e.createElementVNode("div",Zc,e.toDisplayString(g.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":g.breakLine}])},e.toDisplayString(g.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-cc1cc7bf"]]),Xc={key:0,class:"map-info__title"},Jc={class:"map-info__actions"},Qc={key:0,class:"map-info__menu"},ed=["href"],td=["innerHTML"],ml=Ae(e.defineComponent({__name:"MapInfoWidget",props:{title:{},content:{},links:{},mapName:{},mapDescription:{}},setup(t){const n=t,o=e.ref(null),r=e.ref(!1),l=e.ref(null),s=e.ref(null),i=e.ref({top:0,left:0});Oe.useRouter();const c=e.ref(!0),u=e.ref(!1),d=e.computed(()=>Array.isArray(n.links)?n.links.filter(C=>(C==null?void 0:C.name)&&(C==null?void 0:C.slug)):[]),y=e.computed(()=>({top:`${i.value.top}px`,left:`${i.value.left}px`})),a=e.computed(()=>{const C=[];return n.mapName&&C.push({label:"Назва карти",value:n.mapName}),n.mapDescription&&C.push({label:"Опис",value:n.mapDescription,breakLine:!0}),C});function m(C){return C==null?!1:C.replace(/<[^>]*>/g,"").trim().length>0}const f=e.computed(()=>m(n.content)),p=e.computed(()=>f.value);function k(C){C.stopPropagation(),r.value=!r.value}function h(){const C=l.value;if(!C||!s.value)return;const V=C.getBoundingClientRect(),E=12,_=8,N=window.scrollX+E,T=window.scrollX+window.innerWidth-E,Y=window.scrollY+E,ee=window.scrollY+window.innerHeight-E,R=s.value.offsetWidth||160,ae=s.value.offsetHeight||0;let ue=V.bottom+window.scrollY+_,oe=V.left+window.scrollX;oe+R>T&&(oe=V.right+window.scrollX-R,oe<N&&(oe=N)),oe<N&&(oe=N),ue+ae>ee&&(ue=V.top+window.scrollY-ae-_,ue<Y&&(ue=Math.max(Y,ee-ae))),ue<Y&&(ue=Y),ue+ae>ee&&(ue=Math.max(Y,ee-ae)),i.value={top:ue,left:oe}}function g(C){if(!r.value)return;const V=o.value;if(!V){r.value=!1;return}V.contains(C.target)||(r.value=!1)}e.watch(r,C=>{C?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(){c.value=!c.value}function x(){u.value=window.innerWidth<=768}return e.onMounted(()=>{document.addEventListener("click",g,!0),x(),p.value?u.value&&(c.value=!1):c.value=!1,window.addEventListener("resize",x)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",g,!0),window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h),window.removeEventListener("resize",x)}),(C,V)=>(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||d.value.length||a.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"map-info__header",style:e.normalizeStyle([f.value?"":"padding-bottom: 20px"])},[t.title?(e.openBlock(),e.createElementBlock("h2",Xc,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Jc,[d.value.length?(e.openBlock(),e.createElementBlock("div",Qc,[e.createElementVNode("button",{ref_key:"menuButton",ref:l,type:"button",class:"map-info__menu-button",onClick:k,"aria-label":"Показати посилання"},[...V[1]||(V[1]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e.createElementVNode("path",{d:"M4 12H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 6H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 18H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuPopover",ref:s,class:"vsTailwind vs-popover__content right map-info__popover",style:e.normalizeStyle(y.value),onClick:V[0]||(V[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,E=>(e.openBlock(),e.createElementBlock("a",{key:E.slug||E.name,href:`/maps/${E.slug}`,class:"map-info__popover-link"},e.toDisplayString(E.name),9,ed))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),a.value.length?(e.openBlock(),e.createBlock(Go,{key:1,items:a.value},null,8,["items"])):e.createCommentVNode("",!0),p.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":c.value})},[...V[2]||(V[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),f.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["map-info__content",{"map-info__content--collapsed":!c.value}]),innerHTML:t.content},null,10,td)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-813e24fb"]]),nd=new Set(["Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection"]);function pl(t){if(!t||typeof t!="object")return null;const n=t,o=n.type;return o==="FeatureCollection"&&Array.isArray(n.features)?{type:"FeatureCollection",features:n.features.filter(r=>r==null?void 0:r.geometry)}:o==="Feature"&&n.geometry?{type:"FeatureCollection",features:[n]}:typeof o=="string"&&nd.has(o)?{type:"FeatureCollection",features:[{type:"Feature",geometry:n,properties:{}}]}:null}function od(t){const n=new Set((t.features||[]).map(o=>{var r;return((r=o==null?void 0:o.geometry)==null?void 0:r.type)||""}).filter(Boolean));return[...n].some(o=>o.includes("Polygon"))?"polygon":[...n].some(o=>o.includes("Line"))?"line":"point"}function bn(t,n=[]){if(!t)return n;if(Array.isArray(t))return t.length>=2&&typeof t[0]=="number"&&typeof t[1]=="number"?(n.push([t[0],t[1]]),n):(t.forEach(o=>bn(o,n)),n);if(typeof t=="object"){const o=t;Array.isArray(o.coordinates)&&bn(o.coordinates,n),Array.isArray(o.features)&&o.features.forEach(r=>bn(r==null?void 0:r.geometry,n)),Array.isArray(o.geometries)&&o.geometries.forEach(r=>bn(r,n))}return n}function Ko(t){const n=bn(t);if(!n.length)return null;let o=n[0][0],r=n[0][0],l=n[0][1],s=n[0][1];return n.forEach(([i,c])=>{i<o&&(o=i),i>r&&(r=i),c<l&&(l=c),c>s&&(s=c)}),[[o,l],[r,s]]}const gl=["zip","shp","kml","gml","geojson","json"],rd=[".zip",".shp",".kml",".gml",".geojson",".json"].join(",");function ld(t){const n=t.toLowerCase().split(".");return n.length>1&&n.pop()||""}function yl(t){const n=ld(t.name);return gl.includes(n)}function hl(){return gl.map(t=>t.toUpperCase()).join(", ")}function ad(t){let n="";for(let r=0;r<t.length;r+=32768)n+=String.fromCharCode(...t.subarray(r,r+32768));return btoa(n)}async function sd(t){const n=await t.arrayBuffer();return ad(new Uint8Array(n))}async function id(t,n){if(t.size>52428800)throw new Error("Максимальний розмір файлу — 50MB");if(!yl(t))throw new Error(`Підтримуються формати: ${hl()}`);const r=await sd(t),l=await fetch("/api/gis-convert",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({file:r,filename:t.name,srid:Number(n)})}),s=await l.json().catch(()=>null);if(!l.ok)throw new Error((s==null?void 0:s.error)||`Помилка обробки файлу (${l.status})`);return s}const gt=e.ref([]);function cd(t,n){return typeof t!="string"?"":t.includes("{{")?t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*}}/g,(o,r)=>{const l=String(r||"").trim();if(!l)return"";const s=n[l];return s!=null?String(s):""}):t}function Qn(t){return t==null?"":String(t).trim()}function Zo(t){var n,o;(o=(n=t==null?void 0:t.handle)==null?void 0:n.remove)==null||o.call(n)}function dd(t){return t?typeof(t==null?void 0:t.value)<"u"?t.value:t:null}function ud(t){var o;if(!(t!=null&&t.getStyle))return;const n=((o=t.getStyle())==null?void 0:o.layers)||[];for(let r=0;r<n.length;r+=1){const l=n[r];if(!(!l||typeof l.id!="string")&&l.type&&l.type!=="background"&&l.type!=="raster")return l.id}}function xn(t){function n(i,c={},u,d){var C,V;const y=Qn(i==null?void 0:i.id),a=((C=i==null?void 0:i.title)==null?void 0:C.trim())||y,m=(i==null?void 0:i.type)||(i!=null&&i.data?"geojson":"raster"),f=((V=i==null?void 0:i.url)==null?void 0:V.trim())||"";if(!y||m==="raster"&&!f||m==="geojson"&&!(i!=null&&i.data))return;const p=d??t;if(!p)return;const k=dd(p);if(!k)return;const h=gt.value.findIndex(E=>E.id===y);h!==-1&&(Zo(gt.value[h]),gt.value.splice(h,1));let g=null;const b=i.beforeId??ud(k);let x="";try{if(m==="geojson"){const E=od(i.data),_=i.style||{type:E,color:"#2563eb",stroke:"#1d4ed8",opacity:E==="polygon"?.35:1,width:2,radius:6};g=Ie(y,{source:{type:"geojson",data:i.data},style:_,beforeId:b},p)}else{if(x=cd(f,c),!x)return;g=Ie(y,{source:{type:"raster",tiles:[x],tileSize:i.tileSize??256,minzoom:i.minzoom??0,maxzoom:i.maxzoom??19},layer:{id:y,type:"raster",source:y,paint:{"raster-opacity":i.opacity??.85}},beforeId:b},p)}}catch(E){const _=(E==null?void 0:E.message)??"";if(!(typeof _=="string"&&_.includes("Map provider")))throw E;return}gt.value=[...gt.value,{id:y,title:a,originalUrl:m==="raster"?f:"",resolvedUrl:m==="raster"?x:"",owner:u??null,handle:g??null}]}function o(i,c){const u=Qn(i);if(!u)return;const d=gt.value.findIndex(a=>a.id===u&&(!c||a.owner===c));if(d===-1)return;const[y]=gt.value.splice(d,1);Zo(y)}function r(i,c,u){var a;const d=Qn(i);if(!d)return;const y=gt.value.find(m=>m.id===d&&(!u||m.owner===u));(a=y==null?void 0:y.handle)!=null&&a.setOpacity&&y.handle.setOpacity(c)}function l(i){if(!gt.value.length)return;const c=[];gt.value.forEach(u=>{(i?u.owner===i:!0)?Zo(u):c.push(u)}),gt.value=c}function s(i,c){const u=Qn(i);return u?gt.value.some(d=>d.id===u&&(!c||d.owner===c)):!1}return{temporaryLayers:gt,activateTemporaryLayer:n,deactivateTemporaryLayer:o,setTemporaryLayerOpacity:r,clearTemporaryLayers:l,isTemporaryLayerActive:s}}const kt=e.ref({}),kn="map:client-layer-added",eo="map:client-layer-removed";function Xo(){function t(s){kt.value={...kt.value,[s.id]:s}}function n(s){if(!kt.value[s])return;const i={...kt.value};delete i[s],kt.value=i}function o(){kt.value={}}function r(s){return!!kt.value[s]}function l(s){return kt.value[s]??null}return{clientLayers:kt,registerClientLayer:t,unregisterClientLayer:n,clearClientLayers:o,isClientLayer:r,getClientLayer:l}}const wn=e.ref(null);function fd(){wn.value=null}function md(t){const n=e.ref(!1),o=()=>typeof t=="string"?t:t.value;e.watch(wn,i=>{i!==o()&&n.value&&(n.value=!1)});function r(){wn.value=o(),n.value=!0}function l(){wn.value===o()&&(wn.value=null),n.value=!1}function s(){n.value?l():r()}return{isOpen:n,open:r,close:l,toggle:s}}const pd={class:"map-filter"},gd={class:"map-filter__header"},yd={class:"map-filter__title"},hd={"aria-hidden":"true"},Jo="#map-filter-popover-host",to=Ae(e.defineComponent({__name:"MapFilterPopover",props:{count:{},layer:{},catalogAnchor:{},disabled:{type:Boolean,default:!1}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/filter")),o=t,r=e.computed(()=>{var M;return((M=o.layer)==null?void 0:M.id)??""}),l=e.computed(()=>`filter-popover-${r.value}`),{isOpen:s,close:i,toggle:c}=md(l),u=e.reactive({top:0,left:0,transform:"translateX(-50%)"}),d=e.ref(null),y=e.ref(null);let a=null;const m=e.ref({}),f=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0}),p=e.computed(()=>s.value),k=e.computed(()=>{var M;return Array.isArray((M=o.layer)==null?void 0:M.filters)?o.layer.filters:[]}),h=e.computed(()=>k.value.length>0),g=e.computed(()=>{var M;return((M=o.layer)==null?void 0:M.name)??""}),b=e.computed(()=>k.value),x=e.ref(null),C=e.computed(()=>k.value.length),V=e.computed(()=>C.value<=2),E=e.computed(()=>V.value?"body":typeof window>"u"||x.value?Jo:"body"),_=e.computed(()=>{if(!p.value||!V.value)return{};const M=typeof window<"u"?window.innerWidth:280,j=Math.max(280,M-16*2);return{position:"absolute",top:`${u.top}px`,left:`${u.left}px`,transform:u.transform,zIndex:1e3,width:"280px",maxWidth:`${j}px`}});function N(){i()}function T(M,B,j=8){const X=window.scrollY+j,he=window.scrollY+window.innerHeight-j;let Z=M;return Z+B>he&&(Z=he-B),Z<X&&(Z=X),Z}function Y(){var q,H,re;if(!d.value||!V.value)return;const M=d.value.getBoundingClientRect(),B=window.scrollX+8,j=window.scrollX+window.innerWidth-8,X=((q=y.value)==null?void 0:q.offsetWidth)||280,he=((H=y.value)==null?void 0:H.offsetHeight)||0;let Z=0,P=0;if((re=o.catalogAnchor)!=null&&re.value){const I=o.catalogAnchor.value.getBoundingClientRect(),le=I.top+window.scrollY;Z=T(le,he,8);const me=I.right+window.scrollX+12,be=j-X,A=B;P=Math.min(Math.max(me,A),Math.max(A,be))}else{const I=M.bottom+window.scrollY+8;Z=T(I,he,8);let le=M.left+window.scrollX;le<B&&(le=B),le+X>j&&(le=Math.max(B,j-X)),P=le}u.left=P,u.top=Z,u.transform="none"}function ee(){V.value||F(),c(),s.value&&V.value&&e.nextTick(()=>{Y(),J(),requestAnimationFrame(()=>Y())})}function R(){o.disabled||ee()}e.watch(p,M=>{M&&V.value?e.nextTick(()=>{Y(),J(),requestAnimationFrame(()=>Y())}):(S(),V.value||F())}),e.watch(b,()=>{!p.value||!V.value||e.nextTick(()=>Y())},{deep:!0}),e.watch(V,M=>{p.value&&(M?e.nextTick(()=>{Y(),J()}):(S(),F()))}),e.watch(()=>o.disabled,M=>{M&&(i(),m.value={})});function ae(){!p.value||!V.value||Y()}function ue(M){const B=r.value;if(!B)return;const j=Ie(B);if(!(j!=null&&j.setFilter))return;m.value=M;const X=Object.entries(M).map(([he,Z])=>`${he}=${Z}`).join("|");j.setFilter(X)}function oe(M){if(!o.disabled)return;const B=M.currentTarget;if(!B)return;const j=B.getBoundingClientRect();f.left=j.left+j.width/2+window.scrollX,f.top=j.bottom+8+window.scrollY,f.visible=!0}function te(){f.visible=!1}e.onMounted(()=>{F(),window.addEventListener("resize",ae),window.addEventListener("scroll",ae,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",ae),window.removeEventListener("scroll",ae,!0),S()});function J(){S(),!(!y.value||!V.value)&&(a=new ResizeObserver(()=>{!p.value||!V.value||Y()}),a.observe(y.value))}function S(){a&&(a.disconnect(),a=null)}function F(){typeof window>"u"||typeof document>"u"||(x.value=document.querySelector(Jo))}return(M,B)=>h.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mapLayer-filter",ref_key:"anchor",ref:d},[e.createElementVNode("a",{class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(R,["prevent","stop"]),onMouseenter:oe,onMouseleave:te,onFocus:oe,onBlur:te},[...B[2]||(B[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),p.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:E.value},[e.createElementVNode("div",{class:e.normalizeClass(["vst-popover__content inline-block z-50 rounded-[16px] bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-filter__popover",{"mapLayer-filter__popover--static":!V.value}]),style:e.normalizeStyle(_.value),ref_key:"panel",ref:y,onClick:B[1]||(B[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",pd,[e.createElementVNode("div",gd,[e.createElementVNode("h3",yd,e.toDisplayString(g.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:N},[e.createElementVNode("span",hd,[e.createVNode(e.unref(ye.X),{class:"h-4 w-4"})]),B[3]||(B[3]=e.createElementVNode("span",{class:"sr-only"},"Закрити",-1))])]),e.createVNode(e.unref(n),{view:"inline",schema:b.value,value:m.value,limit:10,onChange:B[0]||(B[0]=j=>ue(j.data)),width:250},null,8,["schema","value"])])],6)],8,["to"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[f.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${f.top}px`,left:`${f.left}px`})},e.toDisplayString(f.text),5)):e.createCommentVNode("",!0)]))],512)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-32948852"]]),bd={class:"opacity-popover__content"},xd={class:"opacity-popover__value"},bl=Ae(e.defineComponent({__name:"LayerOpacityPopover",props:{layerId:{}},setup(t){const n=t,o=e.ref(!1),r=e.ref(100),l=e.ref(null),s=e.ref(null),i=e.reactive({top:0,left:0});function c(){var V;const a=(V=s.value)==null?void 0:V.querySelector("button");if(!a||!l.value)return;const m=a.getBoundingClientRect(),f=260,p=l.value.offsetHeight||60,k=8,h=12,g=window.innerWidth,b=window.innerHeight;let x=m.bottom+k+window.scrollY,C=m.left+window.scrollX;C+f>g-h&&(C=g-f-h+window.scrollX),C<h+window.scrollX&&(C=h+window.scrollX),x+p>b+window.scrollY-h&&(x=m.top-p-k+window.scrollY,x<h+window.scrollY&&(x=b-p-h+window.scrollY)),i.top=x,i.left=C}function u(){o.value=!o.value,o.value&&e.nextTick(c)}function d(){var p;const a=Ie(n.layerId),m=(r.value??100)/100;if(a!=null&&a.setOpacity){a.setOpacity(m);return}const f=(p=a==null?void 0:a.getLayer)==null?void 0:p.call(a);if(f)switch(f.type){case"raster":a.updatePaint({"raster-opacity":m});break;case"fill":a.updatePaint({"fill-opacity":m});break;case"line":a.updatePaint({"line-opacity":m});break;case"circle":a.updatePaint({"circle-opacity":m});break;case"symbol":a.updatePaint({"icon-opacity":m});break}}function y(a){var f,p;if(!o.value)return;const m=a.target;(f=l.value)!=null&&f.contains(m)||(p=s.value)!=null&&p.contains(m)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",y),window.addEventListener("scroll",c,!0),window.addEventListener("resize",c)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",y),window.removeEventListener("scroll",c,!0),window.removeEventListener("resize",c)}),(a,m)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:s},[e.renderSlot(a.$slots,"trigger",{toggle:u,opacity:r.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(u,["stop"])},e.toDisplayString(r.value)+"% ",1)],!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popoverEl",ref:l,class:"opacity-popover",style:e.normalizeStyle({top:i.top+"px",left:i.left+"px"})},[e.createElementVNode("div",bd,[m[1]||(m[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":m[0]||(m[0]=f=>r.value=f),class:"opacity-popover__range",onInput:d},null,544),[[e.vModelText,r.value]]),e.createElementVNode("span",xd,e.toDisplayString(r.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-39c90b6d"]]),kd={class:"layers-panel"},wd={class:"layers-panel__header"},_d={class:"layers-panel__heading"},Ed={class:"layers-panel__heading-title"},Cd={class:"layers-panel__count"},Nd={class:"layers-panel__bulk-actions"},Vd={class:"layers-panel__header-actions"},$d={class:"layers-panel__header-controls"},Bd={class:"layers-panel__label"},Sd={class:"layers-panel__label-row"},vd=["checked","onChange"],Ld={class:"layers-panel__title-block"},Td={class:"layers-panel__name"},Ad={class:"layers-panel__meta text-slate-500"},Md=["onClick"],Fd=["onClick"],Dd={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},Pd={key:0,class:"layers-panel__actions"},zd=["innerHTML","onClick"],xl="map:temporary-layer-request",Id="#5763ba",Qo=Ae(e.defineComponent({__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,r=e.ref({}),l=e.ref(!0),s=e.ref(!1),i=e.ref(!1),c=Qe(),{temporaryLayers:u,activateTemporaryLayer:d,deactivateTemporaryLayer:y,clearTemporaryLayers:a}=xn(c.map),{clientLayers:m,isClientLayer:f,getClientLayer:p,unregisterClientLayer:k}=Xo(),h=e.computed(()=>{const A=o.layers.map(ie=>({...ie,isTemporary:!1,owner:null,visible:ie.visible!==!1})),K=u.value.map(ie=>({id:ie.id,name:ie.title,visible:r.value[ie.id]??!0,actions:[],filters:null,isTemporary:!0,owner:ie.owner??null,handle:ie.handle??null,card:ie.card??null,popup:ie.popup??null,style:ie.style??null,group_name:null,count:null,holder:null})),fe=Object.values(m.value).filter(ie=>!K.some(de=>de.id===ie.id)).map(ie=>({id:ie.id,name:ie.name,visible:r.value[ie.id]??!0,actions:[],filters:null,isTemporary:!0,owner:"add-data",handle:Ie(ie.id)??null,card:null,popup:null,style:null,group_name:null,count:null,holder:null}));return[...A,...K,...fe]}),g=e.computed(()=>h.value.length),b=e.computed(()=>h.value.filter(A=>ue(A.id)).length),x=e.computed(()=>g.value>0&&b.value===g.value),C=n,V=new Map;function E(A){if(A==null)return"";try{return JSON.stringify(A)}catch{return String(A)}}function _(A){var K,fe;return E({id:(A==null?void 0:A.id)??null,visible:(A==null?void 0:A.visible)!==!1,service:(A==null?void 0:A.service)??(A==null?void 0:A.service_type)??(A==null?void 0:A.type)??null,data:(A==null?void 0:A.data)??(A==null?void 0:A.geojson)??((K=A==null?void 0:A.source)==null?void 0:K.data)??null,tiles:((fe=A==null?void 0:A.source)==null?void 0:fe.tiles)??(A==null?void 0:A.tiles)??null,style:(A==null?void 0:A.style)??null,filter:(A==null?void 0:A.filter)??null})}function N(A,K){var ie,de,pe,ve,U,ne,we,$e,Pe,Le,Ue,We,et;return{sourceKind:(((ie=K==null?void 0:K.source)==null?void 0:ie.type)||((de=K==null?void 0:K.layer)==null?void 0:de.type)||A.type||A.service_type||A.service||"").toString().toLowerCase(),sourceSig:E({type:((pe=K==null?void 0:K.source)==null?void 0:pe.type)??null,data:((ve=K==null?void 0:K.source)==null?void 0:ve.data)??null,tiles:((U=K==null?void 0:K.source)==null?void 0:U.tiles)??null,minzoom:((ne=K==null?void 0:K.source)==null?void 0:ne.minzoom)??null,maxzoom:((we=K==null?void 0:K.source)==null?void 0:we.maxzoom)??null,tileSize:(($e=K==null?void 0:K.source)==null?void 0:$e.tileSize)??null,scheme:((Pe=K==null?void 0:K.source)==null?void 0:Pe.scheme)??null}),styleSig:E(((Le=K==null?void 0:K.layer)==null?void 0:Le.style)??null),filterSig:E(((Ue=K==null?void 0:K.layer)==null?void 0:Ue.filter)??null),dataSig:E(((We=K==null?void 0:K.source)==null?void 0:We.data)??null),tilesSig:E(((et=K==null?void 0:K.source)==null?void 0:et.tiles)??null),visible:A.visible!==!1}}async function T(A=!1){var fe,ie,de,pe;const K=new Set;for(let ve=0;ve<o.layers.length;ve++){const U=o.layers[ve],ne=ee(U);if(!ne)continue;const we=N(U,ne),$e=Ie(U.id),Pe=V.get(U.id);if(K.add(U.id),!$e){if(!A)continue;const Ue=Ie(U.id,ne,c.map);r.value[U.id]=we.visible,(fe=Ue==null?void 0:Ue.setVisible)==null||fe.call(Ue,we.visible),V.set(U.id,we);continue}if(!Pe){r.value[U.id]=we.visible,V.set(U.id,we);continue}const Le=Pe.sourceKind!==we.sourceKind||Pe.sourceSig!==we.sourceSig||Pe.dataSig!==we.dataSig||Pe.tilesSig!==we.tilesSig||Pe.styleSig!==we.styleSig||Pe.filterSig!==we.filterSig;if(r.value[U.id]=we.visible,Le){await((ie=$e==null?void 0:$e.refresh)==null?void 0:ie.call($e,ne)),(de=$e==null?void 0:$e.setVisible)==null||de.call($e,we.visible),V.set(U.id,we);continue}Pe.visible!==we.visible&&((pe=$e==null?void 0:$e.setVisible)==null||pe.call($e,we.visible)),V.set(U.id,we)}V.forEach((ve,U)=>{K.has(U)||(V.delete(U),U in r.value&&delete r.value[U])})}function Y(A,K){const fe=A.sourceLayer||A["source-layer"];return fe||((A.service_url||A.url||"").toString().includes("/dla/vtile")?"dla":K)}function ee(A){var ne;const K=A.id;if(!K)return null;const fe=(A.type||A.service_type||A.service||"").toString().toLowerCase(),ie=ae(A.data??A.geojson??((ne=A.source)==null?void 0:ne.data)??null),de=fe==="geojson"||!!ie,pe=A.service_url||A.url||null;if(!!pe&&(fe==="tms"||fe==="wmts"||fe==="wms"||fe==="ogc")){const we=R(pe);return we?{sourceId:K,service:fe,source:{type:"raster",tiles:[we],tileSize:A.tileSize||256,minzoom:A.minzoom??0,maxzoom:A.maxzoom??22,scheme:A.scheme||"xyz"},layer:{id:K,type:"raster",source:K},card:A.card,popup:A.popup}:null}if(de)return ie?{sourceId:K,service:fe||"geojson",source:{type:"geojson",data:ie},layer:{id:K,source:K,style:A.style},card:A.card,popup:A.popup}:null;if(fe==="cartocss"){const we=A.url?R(A.url):`${location.origin}/api/gis-rtile/${K}/{z}/{x}/{y}.png`;return we?{sourceId:K,service:fe,source:{type:"raster",tiles:[we],tileSize:A.tileSize||256,minzoom:A.minzoom??0,maxzoom:A.maxzoom??22},layer:{id:K,type:"raster",source:K},card:A.card,popup:A.popup}:null}if(pe&&(fe==="vtile"||fe==="vector")){const we=R(pe);if(!we)return null;const $e=Y(A,K);return{sourceId:K,service:fe,source:{type:"vector",tiles:[we],minzoom:A.minzoom??0,maxzoom:A.maxzoom??22},layer:{id:K,source:K,"source-layer":$e,style:A.style,filter:A.filter},card:A.card,popup:A.popup}}if(fe==="raster"){const we=A.url?R(A.url):`${location.origin}/api/gis-rtile/${K}/{z}/{x}/{y}.png`;return we?{sourceId:K,service:fe,source:{type:"raster",tiles:[we],tileSize:A.tileSize||256,minzoom:A.minzoom??0,maxzoom:A.maxzoom??22},layer:{id:K,type:"raster",source:K},card:A.card,popup:A.popup}:null}const U=`${location.origin}/api/vtile/${K}/ua/{z}/{x}/{y}.vmt`;return{sourceId:K,service:fe,source:{type:"vector",tiles:[U],minZoom:4,maxZoom:14},layer:{id:K,source:K,"source-layer":K,style:A.style},card:A.card,popup:A.popup}}function R(A){return A?/^https?:\/\//i.test(A)?A:A.startsWith("//")?`${window.location.protocol}${A}`:A.startsWith("/")?`${location.origin}${A}`:`${location.origin}/${A}`:null}function ae(A){if(!A)return null;if(typeof A=="string")try{A=JSON.parse(A)}catch{return null}return A.type==="FeatureCollection"?A:A.type==="Feature"?{type:"FeatureCollection",features:[A]}:A.type&&Array.isArray(A.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:A,properties:{}}]}:Array.isArray(A.features)?{type:"FeatureCollection",features:A.features}:A.geometry?ae(A.geometry):null}function ue(A){const K=r.value[A];return K??!0}function oe(A){var ie,de;if(!(A!=null&&A.id))return null;const K=(ie=A.title)==null?void 0:ie.trim();if(!K)return null;if(A.type==="geojson"||A.data)return A.data?{id:A.id,title:K,type:"geojson",data:A.data,style:A.style}:null;const fe=(de=A.url)==null?void 0:de.trim();return fe?{id:A.id,title:K,url:fe,tileSize:A.tileSize,minzoom:A.minzoom,maxzoom:A.maxzoom,opacity:A.opacity}:null}function te(A){if(!A)return;const K=A.owner;if(A.action==="clear"){const ie=u.value.filter(de=>!K||de.owner===K).map(de=>de.id);a(K),ie.forEach(de=>{de in r.value&&delete r.value[de]});return}const fe=oe(A.spec);if(fe){if(A.action==="activate"){d(fe,A.context||{},K),r.value[fe.id]=!0;return}A.action==="deactivate"&&(y(fe.id,K),delete r.value[fe.id])}}function J(A){A instanceof CustomEvent&&te(A.detail)}e.watch(()=>u.value.map(A=>A.id),(A,K)=>{const fe=new Set(K||[]),ie=new Set(A);A.forEach(de=>{de in r.value||(r.value[de]=!0)}),fe.forEach(de=>{ie.has(de)||delete r.value[de]})},{immediate:!0});function S(A){return A.owner==="add-data"||f(A.id)}function F(A){const K=p(A);if(!(K!=null&&K.data))return;const fe={id:K.id,title:K.name,type:"geojson",data:K.data};d(fe,{},"add-data"),te({action:"activate",owner:"add-data",spec:fe})}function M(A,K){var ie,de,pe,ve,U;if(S(A)){r.value[A.id]=K;const ne=Ie(A.id);if(!K){(ie=ne==null?void 0:ne.setVisible)==null||ie.call(ne,!1);return}if((de=ne==null?void 0:ne.isMounted)!=null&&de.call(ne)){ne.setVisible(!0);return}F(A.id);return}if(A.isTemporary){if(!K){y(A.id,A.owner||void 0),delete r.value[A.id];return}r.value[A.id]=!0;const ne=A.handle||((pe=u.value.find(we=>we.id===A.id))==null?void 0:pe.handle);(ve=ne==null?void 0:ne.setVisible)==null||ve.call(ne,!0);return}r.value[A.id]=K;const fe=Ie(A.id);(U=fe==null?void 0:fe.setVisible)==null||U.call(fe,K)}function B(A,K){const fe=K.target;M(A,fe.checked)}function j(A){h.value.forEach(K=>M(K,A))}function X(){j(!x.value)}function he(A){return A.isTemporary?[{label:"Назва",value:A.name??null},{label:"Тип",value:"Тимчасовий шар"},A.owner==="add-data"?{label:"Джерело",value:"Завантажені дані"}:A.owner?{label:"Джерело",value:A.owner}:null].filter(Boolean):[{label:"Назва",value:A.name??null},{label:"Назва групи",value:A.group_name||null},{label:"Кількість",value:A.count??null},{label:"Балансоутримувач",value:A.holder??null}]}function Z(A){const K=A.trim();return K?!!(/^#[\da-fA-F]{3,8}$/.test(K)||/^rgb\s*\(/.test(K)||/^rgba\s*\(/.test(K)||/^hsl\s*\(/.test(K)||/^hsla\s*\(/.test(K)||/^[a-zA-Z]+$/.test(K)&&K.length<25):!1}function P(A){var K,fe,ie,de,pe,ve;if(!A)return null;if(typeof A=="string"){const U=A.trim();return!U||!Z(U)?null:U}if(Array.isArray(A)){for(const U of A){const ne=P(U);if(ne)return ne}return null}if(typeof A=="object"){const U=A;return P(U.color??U.fill??U.stroke??U.lineColor??U.fillColor??((K=U.paint)==null?void 0:K["fill-color"])??((fe=U.paint)==null?void 0:fe["line-color"])??((ie=U.paint)==null?void 0:ie["circle-color"])??((de=U.paint)==null?void 0:de.color)??((pe=U.paint)==null?void 0:pe.lineColor)??((ve=U.paint)==null?void 0:ve.fillColor)??U.paint??U.value)}return null}function q(A){const K=Array.isArray(A==null?void 0:A.legend)?A.legend[0]:A==null?void 0:A.legend,fe=P(K);return fe||P(A==null?void 0:A.style)||Id}function H(A){return{"--layers-panel-checkbox-color":q(A)}}function re(A){var de;const{id:K}=A,fe=A.owner||void 0;y(K,fe);const ie=Ie(K);(de=ie==null?void 0:ie.remove)==null||de.call(ie),(f(K)||fe==="add-data")&&(k(K),window.dispatchEvent(new CustomEvent(eo,{detail:{id:K}}))),delete r.value[K]}function I(){l.value=!l.value}function le(){s.value=window.innerWidth<=768}function me(A){var fe;if(!(A instanceof CustomEvent))return;const K=(fe=A.detail)==null?void 0:fe.id;K&&(r.value[K]=!0)}function be(A){var fe;if(!(A instanceof CustomEvent))return;const K=(fe=A.detail)==null?void 0:fe.id;K&&(y(K),delete r.value[K])}return e.onMounted(()=>{(async()=>{var A;await((A=c.ready)==null?void 0:A.call(c)),c.map.value&&(await T(!0),i.value=!0)})(),window.addEventListener(xl,J),window.addEventListener(kn,me),window.addEventListener(eo,be),le(),s.value&&(l.value=!1),window.addEventListener("resize",le)}),e.watch(()=>o.layers.map(A=>_(A)).join("|"),()=>{i.value&&T(!1)}),e.onBeforeUnmount(()=>{window.removeEventListener(xl,J),window.removeEventListener(kn,me),window.removeEventListener(eo,be),window.removeEventListener("resize",le)}),(A,K)=>(e.openBlock(),e.createElementBlock("div",kd,[e.createElementVNode("div",wd,[e.createElementVNode("div",_d,[e.createElementVNode("div",Ed,[K[0]||(K[0]=e.createElementVNode("h2",{class:"layers-panel__title"},"Шари",-1)),e.createElementVNode("span",Cd," ("+e.toDisplayString(b.value)+" з "+e.toDisplayString(g.value)+") ",1),e.createElementVNode("div",Nd,[h.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__header-link",onClick:X},e.toDisplayString(x.value?"Вимкнути всі":"Увімкнути всі"),1)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",Vd,[e.createElementVNode("div",$d,[h.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__toggle-button",onClick:I,"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":l.value})},[...K[1]||(K[1]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",{class:e.normalizeClass(["layers-panel__content",{"layers-panel__content--collapsed":!l.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,fe=>{var ie;return e.openBlock(),e.createElementBlock("div",{key:fe.id,class:"layers-panel__item"},[e.createElementVNode("label",Bd,[e.createElementVNode("div",Sd,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:ue(fe.id),style:e.normalizeStyle(H(fe)),onChange:de=>B(fe,de)},null,44,vd),e.createElementVNode("div",Ld,[e.createElementVNode("span",Td,e.toDisplayString(fe.name),1)]),e.createElementVNode("div",Ad,[fe.isTemporary?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__remove","aria-label":"Видалити шар",onClick:e.withModifiers(de=>re(fe),["stop"])},[...K[2]||(K[2]=[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"},[e.createElementVNode("path",{d:"M18 6 6 18"}),e.createElementVNode("path",{d:"m6 6 12 12"})],-1)])],8,Md)):e.createCommentVNode("",!0),ue(fe.id)&&!fe.isTemporary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(bl,{"layer-id":fe.id,class:"flex"},{trigger:e.withCtx(({toggle:de})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(de,["prevent","stop"])},[e.createElementVNode("div",Dd,[e.createVNode(e.unref(ye.Contrast))])],8,Fd)]),_:1},8,["layer-id"]),e.createVNode(to,{count:Array.isArray(fe.filters)?fe.filters.length:0,layer:fe},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(Go,{items:he(fe)},null,8,["items"])])])]),(ie=fe.actions)!=null&&ie.length?(e.openBlock(),e.createElementBlock("div",Pd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(fe.actions,de=>(e.openBlock(),e.createElementBlock("button",{key:de.widget||de.id||de.icon,type:"button",class:"layers-panel__action",innerHTML:de.icon,onClick:pe=>C("action",{layerId:de.widget})},null,8,zd))),128))])):e.createCommentVNode("",!0)])}),128))],2)]))}}),[["__scopeId","data-v-3c399929"]]);function jd(){const{map:t,ready:n}=Qe(),o=e.ref(null),r=e.ref(null),l=e.ref(null),s=e.ref(null);let i=[];function c(){i.forEach(f=>f()),i=[]}const u=f=>{const p=(f==null?void 0:f.properties)||{};return!!(p.cluster||p.point_count||p.point_count_abbreviated)},d=f=>{var g,b;o.value=[f.point.x,f.point.y];const p=t.value.queryRenderedFeatures(f.point);if(!(p!=null&&p.length)){y();return}const k=p.find(x=>!u(x));if(!k){y();return}const h=Ie(k.source)||Ie((g=k.layer)==null?void 0:g.id);h!=null&&h.popup&&(r.value=((b=h.popup)==null?void 0:b.fields)||h.popup,s.value=k.properties)},y=()=>{r.value=null,s.value=null,o.value=null};async function a(){await n(),t.value&&(c(),t.value.on("mousemove",d),t.value.on("mouseleave",y))}function m(){c(),r.value=null,s.value=null,o.value=null}return n().then(a),{popupCoords:o,popupFields:r,popupValues:s,disable:m,title:l}}const Rd={class:"min-w-[200px] max-w-[280px] rounded-lg border border-slate-200 bg-white/90 p-3 text-xs shadow-lg backdrop-blur"},Od={class:"space-y-1.5"},Ud={class:"font-bold text-slate-700"},qd={class:"text-slate-700"},kl=e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,popupFields:o,popupValues:r,disable:l}=jd(),{map:s}=Qe(),i=e.ref(null),c=e.ref({left:"-9999px",top:"-9999px"}),u=e.ref({}),d=new Set,y=new Intl.NumberFormat("uk-UA",{maximumFractionDigits:2});function a(g,b){if(b==null||b==="")return b;if((g==null?void 0:g.type)==="number"){const x=typeof b=="number"?b:Number(b);if(Number.isFinite(x))return y.format(x)}return b}function m(g,b,x){const C=g.name||g.label||g.title||`field-${x}`,V=g.label||g.title||g.name||C,E=g.name?b[g.name]:void 0,_=g.name?b[`${g.name}_text`]:void 0;let N;if((g.format==="select"||g.format==="autocomplete")&&g.data&&E!=null){const Y=u.value[g.data];Y&&(N=Y[String(E)])}const T=N??_??E??g.value??null;return{key:C,label:V,value:a(g,T)}}const f=e.computed(()=>{const g=o.value||[],b=r.value||{};return g.filter(x=>(x==null?void 0:x.meta)!=="title").map((x,C)=>m(x,b,C)).filter(x=>x.label)});e.watch([o,r],([g,b])=>{!g||!b||g.forEach(async x=>{if(x.format==="select"||x.format==="autocomplete"){const C=x.data;if(!C)return;if(!u.value[C]&&!d.has(C)){d.add(C);try{const V=await fetch(`/api/suggest/${C}`);if(V.ok){const E=await V.json();if(E!=null&&E.data&&Array.isArray(E.data)){const _={};E.data.forEach(N=>{_[String(N.id)]=N.text}),u.value[C]=_}}}catch(V){console.error(`Failed to fetch suggest for ${C}`,V)}}}})},{deep:!0,immediate:!0});const p=e.computed(()=>{const g=o.value||[],b=r.value||{},x=g.find(C=>(C==null?void 0:C.meta)==="title");return x?m(x,b,0):null}),k=e.computed(()=>{var b;const g=f.value;return(b=p.value)!=null&&b.value?[{...p.value,key:`${p.value.key}-title`,label:"Назва"},...g]:g});function h(){var M,B;if(!k.value.length||!n.value||!i.value){c.value={left:"-9999px",top:"-9999px"};return}const g=i.value,b=g.offsetParent||null,x=(b==null?void 0:b.getBoundingClientRect())??{left:0,top:0,width:window.innerWidth,height:window.innerHeight},C=((B=(M=s.value)==null?void 0:M.getContainer)==null?void 0:B.call(M))||void 0,V=(C==null?void 0:C.getBoundingClientRect())??x,E=V.left-x.left,_=V.top-x.top,N=g.offsetWidth||0,T=g.offsetHeight||0,Y=12,ee=8,[R,ae]=n.value;let ue=E+R+Y,oe=_+ae+Y;ue+N+ee>x.width&&(ue=E+R-N-Y),oe+T+ee>x.height&&(oe=_+ae-T-Y);const te=ee,J=ee,S=Math.max(ee,x.width-N-ee),F=Math.max(ee,x.height-T-ee);ue=Math.min(Math.max(ue,te),S),oe=Math.min(Math.max(oe,J),F),c.value={left:`${ue}px`,top:`${oe}px`}}return e.watch([n,k],()=>{e.nextTick(()=>h())}),e.onMounted(()=>{window.addEventListener("resize",h)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",h),l()}),(g,b)=>k.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popupRef",ref:i,class:"absolute pointer-events-none z-[130]",style:e.normalizeStyle(c.value)},[e.createElementVNode("div",Rd,[e.createElementVNode("div",Od,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value,x=>(e.openBlock(),e.createElementBlock("div",{key:x.key,class:"flex flex-col"},[e.createElementVNode("span",Ud,e.toDisplayString(x.label),1),e.createElementVNode("span",qd,e.toDisplayString(x.value??"—"),1)]))),128))])])],4)):e.createCommentVNode("",!0)}});function Hd(){const t=Oe.useRoute(),n=Oe.useRouter(),o=e.ref(null),r=e.ref(null),l=e.ref(null),s=e.ref(!1),i=e.ref([]),c=e.ref(0),u=e.computed(()=>i.value.length),d=e.computed(()=>s.value||!!o.value||!!l.value);let y=!1;function a(){o.value=null,r.value=null,l.value=null,s.value=!1,i.value=[],c.value=0}function m(_,N=0){if(!_.length){a(),V(null);return}i.value=_,f(N)}function f(_){const N=i.value[_];if(!N)return;c.value=_;const T=Ie(N.source);h(N,T==null?void 0:T.card)}function p(){c.value>=i.value.length-1||f(c.value+1)}function k(){c.value<=0||f(c.value-1)}async function h(_,N){var ee,R,ae,ue,oe;if(!((ee=_==null?void 0:_.properties)!=null&&ee.id))return;const T=new URLSearchParams;T.set("layer",_.source),T.set("id",String((R=_.properties)==null?void 0:R.id));const Y=Array.isArray(N)&&N.length>0;s.value=Y,l.value=null,o.value=null,r.value=_||null;try{const te=await fetch(`/api/map-format?${T.toString()}`);if(!te.ok)throw new Error(`Failed (${te.status})`);const J=await te.json(),S=Array.isArray(J.columns)?J.columns:[],F=Array.isArray(N)?N:[];if(!S.length&&!F.length){console.error("Configure layer in admin"),g();return}const M=J.rows??J.data??{};o.value={rows:M,fields:F,columns:S,html:J.html||null},y||V(r.value);const B=((ae=J.rows)==null?void 0:ae.geom)??((ue=J.data)==null?void 0:ue.geom);if(B){const j=typeof B=="string"?JSON.parse(B):B;j&&(r.value={...r.value,geometry:j,properties:{...((oe=r.value)==null?void 0:oe.properties)||{},geom:j,geom_4326:j}})}}catch(te){console.error("Failed to load feature card:",te),g()}finally{s.value=!1}}function g(){a(),V(null)}function b(){a()}E(x()),e.onBeforeUnmount(()=>b());function x(){const _=Array.isArray(t.query.info)?t.query.info[0]:t.query.info;if(typeof _!="string")return null;const N=_.trim();return N.startsWith("external:")?null:N||null}function C(_){var ee,R;const N=(_==null?void 0:_.source)??((ee=_==null?void 0:_.layer)==null?void 0:ee.id),T=(R=_==null?void 0:_.properties)==null?void 0:R.id;return!N||T===void 0||T===null?null:`${N},${T}`.trim()||null}function V(_){const N=C(_),T=x();if(N===T)return;const Y={...t.query};N?Y.info=N:delete Y.info,n.push({query:Y}).catch(()=>{})}async function E(_){if(!_){a();return}if(_===C(r.value))return;const[N,T]=_.split(","),Y=N==null?void 0:N.trim(),ee=T==null?void 0:T.trim();if(!Y||!ee){a(),V(null);return}y=!0;try{m([{source:Y,properties:{id:ee}}],0)}finally{y=!1}}return e.watch(()=>x(),_=>{_!==C(r.value)&&(y=!0,E(_).finally(()=>{y=!1}))}),{card:o,cardFeature:r,cardError:l,cardLoading:s,isOpen:d,close:g,openFeature:_=>m(_?[_]:[],0),openFeatures:m,next:p,prev:k,count:u,index:c}}function Wd(){const{map:t,ready:n}=Qe(),o=e.ref([]),r=e.ref(0),l=e.ref(0),s=e.ref(!1),i=e.ref(null),c=e.ref({}),u=e.ref(null),d=e.ref([]),y=e.computed(()=>o.value[l.value]||null),a=e.computed(()=>o.value.length>0);let m=null;const f=()=>{m==null||m.remove(),m=null},p=N=>N?N.type==="FeatureCollection"?N:N.type==="Feature"?{type:"FeatureCollection",features:[N]}:N.type&&Array.isArray(N.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:N,properties:{}}]}:Array.isArray(N.features)?{type:"FeatureCollection",features:N.features}:N.geometry?p(N.geometry):null:null,k=()=>({type:"line",color:"#0a57ff",width:4,opacity:.95}),h=N=>Number(N.toFixed(5)),g=async N=>{if(await n(),!t.value)return;const T=p(N);T&&(f(),m=Ie("feature-highlight",{source:{type:"geojson",data:T},style:k()},t))},b=async(N,T,Y)=>{var ae,ue;const[ee,R]=[h(N),h(T)];u.value={x:ee,y:R},d.value=Y,s.value=!0,i.value=null,o.value=[],c.value={},l.value=0;try{const oe=Y.map(async M=>{const B=`/api/map-info-point?x=${ee}&y=${R}&layers=${M}`,j=await fetch(B);if(!j.ok)return null;const X=await j.json();if(!X.count)return null;const Z=await(await fetch(`${B}&index=0`)).json();return{layerId:M,data:Z,count:X.count}}),J=(await Promise.all(oe)).filter(Boolean);if(J.length===0){r.value=0;return}o.value=J.map(M=>M.data);const[S]=o.value;r.value=J.reduce((M,B)=>M+(B.count||0),0),c.value[0]=S;const F=((ae=S==null?void 0:S.data)==null?void 0:ae.geom_4326)??((ue=S==null?void 0:S.data)==null?void 0:ue.geom);await g(F)}catch(oe){i.value=oe.message}finally{s.value=!1}},x=async N=>{if(!u.value||!d.value.length)return;if(c.value[N]){o.value[N]=c.value[N];return}const{x:T,y:Y}=u.value,ee=d.value.join(","),R=`/api/map-info-point?x=${T}&y=${Y}&index=${N}&layers=${ee}`;try{s.value=!0;const ae=await fetch(R);if(!ae.ok)throw new Error("Failed to fetch feature by index");const ue=await ae.json();o.value[N]=ue,c.value[N]=ue}catch(ae){i.value=ae.message}finally{s.value=!1}},C=async()=>{l.value<r.value-1&&(l.value+=1,c.value[l.value]||await x(l.value))},V=async()=>{l.value>0&&(l.value-=1,c.value[l.value]||await x(l.value))},E=()=>{o.value=[],r.value=0,l.value=0,c.value={},u.value=null,d.value=[],f()};e.watch(l,async()=>{var T,Y;const N=y.value;if(N){const ee=((T=N==null?void 0:N.data)==null?void 0:T.geom_4326)??((Y=N==null?void 0:N.data)==null?void 0:Y.geom);await g(ee)}});let _=null;return e.onMounted(async()=>{await n(),t.value&&(_=async N=>{const{lng:T,lat:Y}=N.lngLat,ee=Ie(),ae=Object.entries(ee).map(([ue,oe])=>{var te,J,S,F;return{id:ue,service:((te=oe==null?void 0:oe.opts)==null?void 0:te.service)??((S=(J=oe==null?void 0:oe.opts)==null?void 0:J.source)==null?void 0:S.service)??null,count:((F=oe==null?void 0:oe.opts)==null?void 0:F.count)??null,visible:(()=>{var M;try{return((M=t.value)==null?void 0:M.getLayer(ue))?t.value.getLayoutProperty(ue,"visibility")!=="none":!0}catch{return!0}})()}}).filter(ue=>ue.service==="ogc"&&ue.visible).map(ue=>ue.id);ae.length>0&&await b(T,Y,ae)},t.value.on("dblclick",_))}),e.onBeforeUnmount(()=>{t.value&&_&&t.value.off("dblclick",_),f()}),{features:o,count:r,index:l,current:y,loading:s,error:i,active:a,next:C,prev:V,close:E}}const wl=e.defineComponent({__name:"LayerSwitcher",props:{title:{},url:{},id:{},buttonText:{}},emits:["activate"],setup(t,{emit:n}){const o=t,r=n;function l(d){const y=d.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(y)return y;const a=Array.from(d).map(m=>m.charCodeAt(0).toString(16)).join("").slice(0,8);return a?`layer-${a}`:"layer-temp"}const s=e.computed(()=>{var d;return((d=o.id)==null?void 0:d.trim())||l(o.title)}),i=e.computed(()=>o.buttonText||"Показати шар");function c(){return{id:s.value,title:o.title,url:o.url}}function u(){r("activate",c())}return(d,y)=>(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(d.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(i.value),1)])]))}}),er="map-card:external-payload",no="map-card:click-results",_l=t=>t?typeof t.html=="string"&&t.html.trim().length>0?!0:Array.isArray(t.items)&&t.items.some(n=>typeof(n==null?void 0:n.html)=="string"&&n.html.trim().length>0):!1,Yd={key:0,class:"card pointer-events-auto absolute top-4 lg:left-auto right-[52px] md:left-4 z-[130] w-[calc(100%-60px)] 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"},Gd={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},Kd={class:"min-w-0 flex-1"},Zd={class:"text-base font-semibold text-slate-900 truncate"},Xd={key:0,class:"flex gap-1 mt-1"},Jd=["disabled"],Qd=["disabled"],eu={key:1,class:"flex gap-1 mt-1"},tu=["disabled"],nu=["disabled"],ou={class:"flex-1 overflow-y-auto px-4 py-3 space-y-4 text-sm text-slate-700"},ru={key:0,class:"text-center text-xs text-slate-500"},lu={key:1,class:"text-center text-xs text-red-500"},au={key:0,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},su={class:"divide-y divide-gray-100 py-[5px]"},iu={class:"text-gray-900 sm:col-span-4 font-normal"},cu={key:0,class:"flex gap-1 flex-wrap"},du={key:1,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},uu=["innerHTML"],fu=["innerHTML"],mu={key:2,class:"space-y-3 border-t border-slate-200 pt-3"},pu={key:3,class:"border-t border-slate-100 px-4 py-2 text-right text-xs text-slate-500"},gu={class:"text-xs tracking-[0.02em] leading-none"},yu={key:4,class:"space-y-3 border-t border-slate-200 pt-3"},hu={class:"space-y-1"},bu={class:"flex items-center cursor-pointer gap-2 flex-1"},xu=["checked","onChange"],ku={class:"text-[13px] text-gray-600"},wu={key:0,class:"text-right text-xs text-gray-400 truncate max-w-[40%]"},_u={key:5,class:"text-center text-xs text-slate-400"},Eu="map:temporary-layer-request",El="cardHideEmpty",Cu=14,tr=Ae(e.defineComponent({__name:"MapCardWidget",props:{mapId:{}},setup(t){const n=t,o=Hd(),r=Wd(),l=Oe.useRouter(),s=e.ref([]),i=e.ref(0),c=e.computed(()=>s.value[i.value]||null),u=e.computed(()=>{var w;return((w=c.value)==null?void 0:w.type)==="external"?c.value:null}),d=e.computed(()=>s.value.length>0),y=e.computed(()=>{var w,L;return!!((L=(w=u.value)==null?void 0:w.html)!=null&&L.trim())}),a=e.computed(()=>{var w;return((w=u.value)==null?void 0:w.geometry)??null});function m(){s.value=[],i.value=0}function f(w){if(!w)return null;if(typeof w=="string")try{return JSON.parse(w)}catch{return null}return w}function p(){const w=Array.isArray(oe.query.info)?oe.query.info[0]:oe.query.info;return typeof w!="string"?null:w.trim()||null}function k(w){if(!w||!w.startsWith("external:"))return null;const L=w.slice(9),[G,ce]=L.split(","),xe=G==null?void 0:G.trim(),Ve=ce==null?void 0:ce.trim();return!xe||!Ve?null:{layer:xe,id:Ve,token:`external:${xe},${Ve}`}}function h(w){const L=p(),G=(w==null?void 0:w.trim())||null;if(L===G)return;const ce={...oe.query};if(G)ce.info=G;else if(L!=null&&L.startsWith("external:"))delete ce.info;else return;l.push({query:ce}).catch(()=>{})}function g(w){var G;const L=s.value[w];if(!L){m(),o.close(),Je();return}if(i.value=w,L.type==="feature"){o.openFeature(L.feature);return}o.close(),h(L.infoToken??null),(G=L.html)!=null&&G.trim()?C():Je()}function b(w,L=0){if(r.close(),s.value=w.map(G=>({type:"external",...G})),!s.value.length){o.close(),h(null),Je();return}g(Math.min(Math.max(L,0),s.value.length-1))}function x(w){r.close();const L=Array.isArray(w==null?void 0:w.features)?w.features.filter(Boolean):[],G=Array.isArray(w==null?void 0:w.externalItems)?w.externalItems.filter(ce=>typeof(ce==null?void 0:ce.html)=="string"&&ce.html.trim()):[];if(s.value=[...L.map(ce=>({type:"feature",feature:ce})),...G.map(ce=>({type:"external",...ce}))],!s.value.length){o.close(),h(null),Je();return}g(0)}function C(){return y.value?a.value?(Se(a.value),!0):(Je(),!0):(Je(),!1)}const V=w=>{var ce,xe,Ve,Ne;const L=w,G=Array.isArray((ce=L.detail)==null?void 0:ce.items)?(xe=L.detail)==null?void 0:xe.items.filter(ze=>typeof(ze==null?void 0:ze.html)=="string"&&ze.html.trim()):[];G.length?b(G,Number(((Ve=L.detail)==null?void 0:Ve.index)??0)):typeof((Ne=L.detail)==null?void 0:Ne.html)=="string"&&L.detail.html.trim()?b([{html:L.detail.html,geometry:L.detail.geometry??null,infoToken:L.detail.infoToken??null}],0):(m(),o.close(),h(null),Je())},E=w=>{x(w.detail)};e.onMounted(()=>{typeof window>"u"||(window.addEventListener(no,E),window.addEventListener(er,V))}),e.onBeforeUnmount(()=>{typeof window>"u"||(window.removeEventListener(no,E),window.removeEventListener(er,V))});const _=e.computed(()=>r.active.value),N=e.computed(()=>_.value||o.isOpen.value||y.value),T=e.computed(()=>_.value?r.loading.value:o.cardLoading.value),Y=e.computed(()=>_.value?r.error.value:o.cardError.value),ee=e.computed(()=>{var w,L,G;return _.value?((w=r.current.value)==null?void 0:w.html)||null:y.value?((L=u.value)==null?void 0:L.html)||null:((G=o.card.value)==null?void 0:G.html)||null}),R=Qe(),ae=Oo(),ue=e.computed(()=>{var w,L;return((L=(w=ae.value)==null?void 0:w.map)==null?void 0:L.cardHideEmpty)??null}),oe=Oe.useRoute(),{activateTemporaryLayer:te,deactivateTemporaryLayer:J,clearTemporaryLayers:S,isTemporaryLayerActive:F}=xn(R.map);function M(w){window.dispatchEvent(new CustomEvent(Eu,{detail:w}))}const B=e.computed(()=>{var w;return((w=o.cardFeature.value)==null?void 0:w.source)??null}),j=e.computed(()=>B.value?`map-card:${B.value}`:"map-card"),X=e.computed(()=>{var ce,xe;const w=o.cardFeature.value,L=(w==null?void 0:w.source)||((ce=w==null?void 0:w.layer)==null?void 0:ce.id),G=((xe=w==null?void 0:w.properties)==null?void 0:xe.id)??(w==null?void 0:w.id);return L&&G!=null?`${L}:${G}`:null}),he=e.ref(null),Z=e.ref([]),P=e.ref(0),q=new Map;function H(){if(typeof window>"u")return null;const L=(window.location.pathname||"").match(/\/maps?\/([^/]+)/i);return L&&L[1]?L[1]:null}const re=e.computed(()=>{const w=typeof n.mapId=="string"?n.mapId.trim():"";if(w.length)return w;const L=typeof oe.params.slug=="string"?oe.params.slug.trim():"";if(L.length)return L;const G=typeof oe.query.slug=="string"?oe.query.slug.trim():"";return G.length?G:H()}),I=e.ref(null),le=e.ref(null),me=new Map;function be(w){const L=w.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(L)return L;const G=Array.from(w).map(ce=>ce.charCodeAt(0).toString(16)).join("").slice(0,8);return G?`layer-${G}`:`layer-${Math.random().toString(36).slice(2,8)}`}function A(w){if(typeof w!="string")return"";const L=w.trim();if(!L)return"";if(/^https?:\/\//i.test(L))return L;if(L.startsWith("//"))return typeof window>"u"?`https:${L}`:`${window.location.protocol}${L}`;const G=typeof window<"u"?window.location.origin:"";return L.startsWith("/")?G?`${G}${L}`:L:G?`${G}/${L}`:L}function K(w){if(w==null)return[];if(Array.isArray(w))return w.flatMap(L=>K(L));if(typeof w=="number")return Number.isFinite(w)?[w]:[];if(typeof w=="string"){const L=w.match(/-?\d+(?:\.\d+)?/g);return!L||!L.length?[]:L.map(G=>Number(G)).filter(G=>Number.isFinite(G))}return[]}function fe(w){const L=K(w);if(L.length<4)return null;const[G,ce,xe,Ve]=L;return[G,ce,xe,Ve].every(Ne=>Number.isFinite(Ne))?[G,ce,xe,Ve]:null}function ie(w){if(!w)return null;const L=w.trim();if(!L.length)return null;try{const xe=JSON.parse(L),Ve=fe(xe);if(Ve)return Ve}catch{}const G=L.match(/-?\d+(?:\.\d+)?/g);if(!G||G.length<4)return null;const ce=G.slice(0,4).map(xe=>Number(xe));return ce.every(xe=>Number.isFinite(xe))?[ce[0],ce[1],ce[2],ce[3]]:null}function de(w){const L={},G=/([:@\w-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;let ce;for(;(ce=G.exec(w))!==null;){const xe=ce[1],Ve=ce[2]??ce[3]??ce[4]??"";xe&&(L[xe]=Ve)}return L}function pe(w,L){for(const G of L)if(w[G]!=null&&String(w[G]).trim().length)return String(w[G]).trim();return""}function ve(w){if(!(w!=null&&w.length))return;const L=Number(w);return Number.isFinite(L)?L:void 0}function U(w){if(typeof w!="string"||!w.length)return[];const L=[],G=/<LayerSwitcher\b([^>]*)>([\s\S]*?)<\/LayerSwitcher>/gi;let ce=0,xe;const Ve=new Set,Ne=ze=>{let Re=ze,qe=2;for(;Ve.has(Re);)Re=`${ze}-${qe}`,qe+=1;return Ve.add(Re),Re};for(;(xe=G.exec(w))!==null;){const[ze,Re="",qe=""]=xe,Ge=xe.index;if(Ge>ce){const Ga=w.slice(ce,Ge);Ga.trim().length&&L.push({type:"html",content:Ga})}const tt=de(Re),pt=pe(tt,["title"])||"Тимчасовий шар",zt=A(pe(tt,["url"]));if(!zt){L.push({type:"html",content:ze}),ce=Ge+ze.length;continue}const Yn=pe(tt,["id"]),el=pe(tt,["button-text","buttonText","show","show-label","showLabel"]),b$=ve(pe(tt,["tile-size","tileSize"])),x$=ve(pe(tt,["minzoom","minZoom"])),k$=ve(pe(tt,["maxzoom","maxZoom"])),w$=ve(pe(tt,["opacity"])),_$=ie(pe(tt,["bounds","data-bounds","bbox"])),E$=Yn||be(`${pt}-${zt}`)||be(pt),Wa=Ne(E$||`layer-${L.length+1}`),tl=qe.trim(),Ya=/<[^>]+>/.test(tl),C$=Ya?tl:null,nl=Ya?null:tl,N$=el&&el.trim().length?el.trim():nl&&nl.trim().length?nl.trim():void 0;L.push({type:"layer",spec:{id:Wa,title:pt,url:zt,tileSize:b$,minzoom:x$,maxzoom:k$,opacity:w$,bounds:_$},componentProps:{title:pt,url:zt,id:Wa,buttonText:N$},slotText:C$}),ce=Ge+ze.length}if(ce<w.length){const ze=w.slice(ce);ze.trim().length&&L.push({type:"html",content:ze})}return!L.length&&w.trim().length&&L.push({type:"html",content:w}),L}function ne(w){if(!w)return null;const L=typeof w.id=="string"?w.id.trim():"",G=typeof w.title=="string"?w.title.trim():"",ce=A(typeof w.url=="string"?w.url:"");return!L||!ce?null:{id:L,title:G||L,url:ce,tileSize:w.tileSize,minzoom:w.minzoom,maxzoom:w.maxzoom,opacity:w.opacity,bounds:w.bounds}}const we=e.computed(()=>{if(_.value&&r.current.value)return r.current.value.data??{};const w=o.card.value;return(w==null?void 0:w.rows)??{}}),$e=e.computed(()=>{if(_.value&&r.current.value){const ce=r.current.value,xe=Array.isArray(ce.columns)?ce.columns:[];return xe.length?xe:ce.fields??[]}const w=o.card.value;if(!w)return[];const L=Array.isArray(w.columns)?w.columns:[];return L.length?L:Array.isArray(w.fields)?w.fields:[]}),Pe=e.computed(()=>{const w=$e.value;if(!w.length)return[];const L=we.value;return w.map(G=>({key:G.name,label:G.ua||G.label||G.title||G.name,value:et(L[G.name],G.format||"text",G.type||"text"),format:G.format||"text"}))}),Le=new Set(["—","-","–","−"]);function Ue(w){const L=w.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!L)return w;const[,G,ce,xe]=L;return`${xe}.${ce}.${G}`}function We(w){return Number.isFinite(w)?new Intl.NumberFormat("uk-UA").format(w):"—"}function et(w,L,G){if(w==null)return"—";if(L==="tags")return w;if(Array.isArray(w))return w.length?w.map(ce=>et(ce,"text","text")).join(", "):"—";if(typeof w=="boolean")return w?"так":"ні";if(G==="number"&&typeof w=="number")return We(w);if(typeof w=="string"){const ce=w.trim();if(!ce.length)return"—";if(/^\d{4}-\d{2}-\d{2}$/.test(ce))return Ue(ce);if(G==="number"&&/^-?\d+(?:\.\d+)?$/.test(ce)){const xe=Number(ce);return Number.isFinite(xe)?We(xe):ce}return ce}return String(w)}function Q(w){if(w==null)return!0;if(typeof w=="string"){const L=w.trim();return L.length?Le.has(L):!0}return!1}function $(w){if(!w)return[];if(Array.isArray(w))return w;if(typeof w=="string"){const L=w.trim();if(L.startsWith("{")&&L.endsWith("}")){const ce=L.slice(1,-1).match(/"((?:[^"\\]|\\.)*)"/g);return ce?ce.map(xe=>xe.slice(1,-1).replace(/\\"/g,'"')):[]}}return[]}const D=e.ref(!1),v=e.ref(!0),z=()=>{var w,L;return typeof window>"u"?null:((L=(w=window.localStorage)==null?void 0:w.getItem)==null?void 0:L.call(w,El))??null},W=e.ref(z()),ge=w=>{const L=typeof w=="string"&&w.toLowerCase()==="true";D.value=L,v.value=!L},ke=w=>{W.value=w};if(typeof window<"u"){const w=L=>{L.key===El&&ke(L.newValue)};window.addEventListener("storage",w),e.onBeforeUnmount(()=>{window.removeEventListener("storage",w)})}const _e=e.computed(()=>typeof W.value=="string");e.watch(W,w=>{ge(typeof w=="string"?w:ue.value)},{immediate:!0}),e.watch(ue,w=>{_e.value||ge(w)},{immediate:!0});const Be=e.computed(()=>Pe.value.filter(w=>Q(w.value)).length),Te=e.computed(()=>D.value&&!v.value?Pe.value.filter(w=>!Q(w.value)):Pe.value);function Ye(w){const L=typeof w=="string"?w:"";if(!L.length)return{sanitized:"",hiddenCount:0};if(typeof DOMParser>"u")return{sanitized:L,hiddenCount:0};const ce=new DOMParser().parseFromString(L,"text/html");let xe=0;return ce.querySelectorAll("dd").forEach(Ve=>{var Re;const Ne=((Re=Ve.textContent)==null?void 0:Re.trim())??"",ze=Ve.closest("div");if(Q(Ne)){xe+=1,ze?ze.remove():Ve.remove();return}}),{sanitized:ce.body.innerHTML,hiddenCount:xe}}const Xe=e.computed(()=>Ye(ee.value)),nt=e.computed(()=>ee.value?Xe.value.hiddenCount:0),mt=e.computed(()=>Be.value+nt.value),Yt=e.computed(()=>{var w;return D.value&&!v.value&&!!((w=ee.value)!=null&&w.trim())}),Rr=e.computed(()=>D.value&&mt.value>0),xt=e.computed(()=>v.value?"Приховати пусті значення":"Показати пусті значення"),Or=e.computed(()=>v.value?ye.ChevronUp:ye.ChevronDown);function Mo(){v.value=!v.value}const Gt=e.computed(()=>{const w=Yt.value?Xe.value.sanitized:ee.value??"";return U(w)}),In=e.computed(()=>Gt.value.filter(w=>w.type==="layer"));function Ur(w){return Array.isArray(w)?w.map((L,G)=>{const ce=A(typeof(L==null?void 0:L.url)=="string"?L.url:""),xe=typeof(L==null?void 0:L.geohub)=="string"&&L.geohub.trim().length?`/api-hub/tms/${L.geohub.trim()}/ua/{z}/{x}/{y}.png`:"",Ve=((L==null?void 0:L.name)||(L==null?void 0:L.title)||(L==null?void 0:L.label)||`Шар ${G+1}`).toString(),Ne=(L==null?void 0:L.id)!=null?String(L.id):be(`${Ve}-${G+1}`),ze=(L==null?void 0:L.buttonText)||(L==null?void 0:L.button_text)||null,Re=(L==null?void 0:L.description)||(L==null?void 0:L.subtitle)||null,qe=ce||A(xe)||"";if(!qe)return null;const Ge={id:Ne,title:Ve,url:qe,subtitle:Re,buttonText:ze||void 0};typeof(L==null?void 0:L.tileSize)=="number"&&(Ge.tileSize=L.tileSize),typeof(L==null?void 0:L.tile_size)=="number"&&(Ge.tileSize=L.tile_size),typeof(L==null?void 0:L.minzoom)=="number"&&(Ge.minzoom=L.minzoom),typeof(L==null?void 0:L.maxzoom)=="number"&&(Ge.maxzoom=L.maxzoom),typeof(L==null?void 0:L.opacity)=="number"&&(Ge.opacity=L.opacity);const tt=fe((L==null?void 0:L.bounds)??(L==null?void 0:L.bbox)??null);return tt&&(Ge.bounds=tt),Ge}).filter(Boolean):[]}const un=e.computed(()=>{var ce,xe;const w=o.card.value,L=r.current.value,G=[(ce=w==null?void 0:w.rows)==null?void 0:ce.layers,w==null?void 0:w.layers,(xe=L==null?void 0:L.data)==null?void 0:xe.layers,L==null?void 0:L.layers];for(const Ve of G){const Ne=Ur(Ve);if(Ne.length)return Ne}return[]}),qr=e.computed(()=>Gt.value.length>0||Pe.value.length>0||un.value.length>0),Fo=e.computed(()=>!o.cardLoading.value&&!!o.card.value);function Hr(){const w={},L=I.value;if(L&&typeof L=="object"&&Object.entries(L).forEach(([G,ce])=>{typeof ce=="string"&&(w[G]=ce)}),B.value&&(w.layer=B.value),!w.geohub){const G=typeof(L==null?void 0:L.geohub)=="string"?L.geohub:null,ce=typeof(L==null?void 0:L.geohub_key)=="string"?L.geohub_key:null,xe=typeof(L==null?void 0:L.geohubId)=="string"?L.geohubId:null;w.geohub=G||ce||xe||w.layer||""}return w}async function Wr(){const w=B.value;if(!w)return I.value=null,le.value=null,null;if(le.value===w&&I.value)return I.value;if(me.has(w)){const L=me.get(w);return I.value=L,le.value=w,L}try{const L=await fetch(`/api/gis-service/${encodeURIComponent(w)}`);if(!L.ok)return null;const G=await L.json();return me.set(w,G),I.value=G,le.value=w,G}catch{return null}}async function jn(w){if(!(w!=null&&w.id))return;await Wr();const L=Hr(),G=In.value.find(ze=>ze.spec.id===w.id),ce=un.value.find(ze=>ze.id===w.id),xe=(G==null?void 0:G.spec)||ne(ce)||ne(w),Ve=(G==null?void 0:G.spec.bounds)??(ce==null?void 0:ce.bounds);if(!xe||F(xe.id,j.value))return;const Ne=j.value||void 0;he.value=Ne??null,te(xe,L,Ne),M({action:"activate",owner:Ne,spec:xe,context:L}),Yr(Ve)}async function Yr(w){var Ve;if(!(w!=null&&w.length))return;const[L,G,ce,xe]=w;[L,G,ce,xe].every(Ne=>Number.isFinite(Ne))&&typeof R.fitBounds=="function"&&(await((Ve=R.ready)==null?void 0:Ve.call(R)),R.fitBounds([[L,G],[ce,xe]],{padding:48,maxZoom:18}))}function Gr(w){if(!w)return;const L=Rn()||void 0;J(w,L),M({action:"deactivate",owner:L,spec:{id:w}})}function Kr(w){return F(w,Rn())}function Zr(w,L){const G=L.target;!!(G!=null&&G.checked)?jn(w):Gr(w.id)}function Rn(){return he.value||j.value||null}e.watch(B,(w,L)=>{w!==L&&(I.value=null,le.value=null)});const{next:Do,prev:On,count:Un,index:fn}=r,Po=e.computed(()=>o.count.value),Xr=e.computed(()=>o.index.value),zo=e.computed(()=>_.value?!1:d.value?s.value.length>1:Po.value>1),qn=e.computed(()=>_.value?Un.value:d.value?s.value.length:Po.value),mn=e.computed(()=>_.value?fn.value:d.value?i.value:Xr.value),Jr=()=>{if(d.value){if(i.value>=s.value.length-1)return;g(i.value+1);return}o.next()},Qr=()=>{if(d.value){if(i.value<=0)return;g(i.value-1);return}o.prev()};function vt(){const w=Rn();w&&(S(w),M({action:"clear",owner:w}),he.value=null)}function Hn(){m(),o.close(),r.close(),vt(),h(null)}e.watch(N,(w,L)=>{!w&&L&&(vt(),Je())});function pn(){!o.isOpen.value&&!r.active.value&&vt()}e.watch(()=>o.isOpen.value,()=>{pn()}),e.watch(()=>r.active.value,()=>{pn()}),e.watch(B,(w,L)=>{w&&L&&w!==L&&vt()}),e.watch(fn,(w,L)=>{w!==L&&vt()}),e.watch(X,(w,L)=>{w&&L&&w!==L&&vt()});function Kt(w){if(!w)return null;if(w.geometry)return w.geometry;const L=(w==null?void 0:w.data)??(w==null?void 0:w.properties);return L!=null&&L.geom_4326?L.geom_4326:L!=null&&L.geom?L.geom:null}function Je(){Z.value.length&&(Z.value.forEach((w,L)=>{var G;(G=w==null?void 0:w.remove)==null||G.call(w,L===0)}),Z.value=[])}function Io(w){var G,ce,xe;const L=(w==null?void 0:w.type)||((xe=(ce=(G=w==null?void 0:w.features)==null?void 0:G[0])==null?void 0:ce.geometry)==null?void 0:xe.type)||"";return L.includes("Polygon")?[{type:"fill",paint:{"fill-color":"#A91A9E","fill-opacity":.18}},{type:"line",paint:{"line-color":"#ffffff","line-width":6,"line-opacity":.95}},{type:"line",paint:{"line-color":"#A91A9E","line-width":3,"line-opacity":1}}]:L.includes("LineString")?[{type:"line",paint:{"line-color":"#ffffff","line-width":7,"line-opacity":.95}},{type:"line",paint:{"line-color":"#A91A9E","line-width":4,"line-opacity":1}}]:[{type:"circle",paint:{"circle-color":"#ffffff","circle-opacity":.95,"circle-radius":10}},{type:"circle",paint:{"circle-color":"#A91A9E","circle-opacity":1,"circle-radius":7}}]}let gn=null;function Wn(){return p()}function jo(w){var xe,Ve;if(!w)return null;const L=(w==null?void 0:w.source)??((xe=w==null?void 0:w.layer)==null?void 0:xe.id),G=((Ve=w==null?void 0:w.properties)==null?void 0:Ve.id)??(w==null?void 0:w.id);return!L||G===void 0||G===null?null:`${L},${G}`.trim()||null}function Zt(w,L){if(w){if(Array.isArray(w)){if(w.length>=2&&typeof w[0]=="number"&&typeof w[1]=="number"){L.push([w[0],w[1]]);return}w.forEach(G=>Zt(G,L));return}typeof w=="object"&&(Array.isArray(w.coordinates)&&Zt(w.coordinates,L),Array.isArray(w.features)&&w.features.forEach(G=>Zt(G==null?void 0:G.geometry,L)))}}function O(w){var ze,Re;if(!w)return null;const L=w.type==="FeatureCollection"?(Re=(ze=w.features)==null?void 0:ze[0])==null?void 0:Re.geometry:w.type==="Feature"?w.geometry:w,G=[];if(Zt(L,G),!G.length)return null;let ce=G[0][0],xe=G[0][0],Ve=G[0][1],Ne=G[0][1];return G.forEach(([qe,Ge])=>{qe<ce&&(ce=qe),qe>xe&&(xe=qe),Ge<Ve&&(Ve=Ge),Ge>Ne&&(Ne=Ge)}),[(ce+xe)/2,(Ve+Ne)/2]}async function se(w,L){var Ve;const G=Wn();if(!G||G.startsWith("external:"))return;const ce=jo(w);if(!ce||ce!==G||gn===G)return;const xe=O(L);xe&&(await((Ve=R.ready)==null?void 0:Ve.call(R)),R.flyTo({center:xe,zoom:Cu}),gn=G)}function Se(w){var xe;if(!w){Je();return}const L=(xe=R.map)==null?void 0:xe.value,G={type:"FeatureCollection",features:[{type:"Feature",geometry:w,properties:{}}]};Je();const ce=Io(w);if(Z.value=ce.map((Ve,Ne)=>Ie(`feature-card-highlight${Ne||""}`,{...Ne===0?{source:{type:"geojson",data:G}}:{},sourceId:"feature-card-highlight",layer:{id:`feature-card-highlight${Ne||""}`,type:Ve.type,source:"feature-card-highlight",paint:Ve.paint}},R.map)),L!=null&&L.moveLayer){const Ve=()=>{try{Z.value.forEach(qe=>{var tt;const Ge=(tt=qe==null?void 0:qe.ids)==null?void 0:tt.layerId;Ge&&L.moveLayer(Ge)})}catch{}},Ne=()=>{typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame(()=>{window.requestAnimationFrame(Ve)}):setTimeout(Ve,0)};Ne();const ze=()=>Ne();L.once("styledata",ze);const Re=()=>{Ne(),L.off("styledata",ze),L.off("idle",Re)};L.on("idle",Re)}}function Me(w){var ce,xe;const L=(w==null?void 0:w.source)||((ce=w==null?void 0:w.layer)==null?void 0:ce.id)||"unknown",G=((xe=w==null?void 0:w.properties)==null?void 0:xe.id)??(w==null?void 0:w.id)??"unknown";return`${L}:${G}`}async function Ce(w){var Ve,Ne,ze,Re,qe;if(!w)return null;const L=Kt(w);if(L)return L;const G=((Ve=w==null?void 0:w.properties)==null?void 0:Ve.id)??(w==null?void 0:w.id);if(!G)return null;const ce=Me(w);if(q.has(ce))return q.get(ce);const xe=[re.value,w==null?void 0:w.source,(Ne=w==null?void 0:w.layer)==null?void 0:Ne.id].map(Ge=>typeof Ge=="string"?Ge.trim():"").filter(Boolean);for(const Ge of xe)try{const tt=await fetch(`/api/map-features/${encodeURIComponent(Ge)}/${encodeURIComponent(String(G))}`);if(!tt.ok)continue;const pt=await tt.json(),zt=((ze=pt==null?void 0:pt.data)==null?void 0:ze.geom)||((Re=pt==null?void 0:pt.data)==null?void 0:Re.geometry)||((qe=pt==null?void 0:pt.data)==null?void 0:qe.geom_4326)||null,Yn=typeof zt=="string"?JSON.parse(zt):zt;if(Yn)return q.set(ce,Yn),Yn}catch{continue}return null}async function De(w){P.value+=1;const L=P.value;if(C())return;if(!w||_.value){Je();return}if(!Fo.value){Je();return}const G=await Ce(w);if(L===P.value){if(!G){Je();return}Se(G),se(w,G)}}async function je(w){var G,ce,xe;const L=k(w);if(!L){(G=p())!=null&&G.startsWith("external:")&&(m(),Je());return}if(((ce=u.value)==null?void 0:ce.infoToken)===L.token){C();return}try{const Ve=await fetch(`/api/map-format?layer=${encodeURIComponent(L.layer)}&id=${encodeURIComponent(L.id)}`);if(!Ve.ok)throw new Error(`Failed (${Ve.status})`);const Ne=await Ve.json(),ze=typeof(Ne==null?void 0:Ne.html)=="string"?Ne.html:null,Re=f(((xe=Ne==null?void 0:Ne.data)==null?void 0:xe.geom)??(Ne==null?void 0:Ne.geom)??null);if(!ze&&!Re){m(),Je();return}b([{html:ze,geometry:Re,infoToken:L.token}],0)}catch{m(),Je()}}return e.watch(()=>o.cardFeature.value,w=>{De(w)},{immediate:!0}),e.watch(()=>o.index.value,()=>{_.value||De(o.cardFeature.value)}),e.watch(_,w=>{if(w){y.value||Je();return}if(y.value){C();return}De(o.cardFeature.value)}),e.watch(re,()=>{if(y.value){C();return}!_.value&&o.cardFeature.value&&De(o.cardFeature.value)}),e.watch(Fo,w=>{C()||(w?De(o.cardFeature.value):Je())}),e.watch(()=>Wn(),w=>{if(gn=null,w!=null&&w.startsWith("external:")){je(w);return}u.value&&(m(),Je())},{immediate:!0}),e.watch(u,w=>{var L;if(!((L=w==null?void 0:w.html)!=null&&L.trim())){Je();return}C()}),e.onBeforeUnmount(()=>{vt(),Je()}),(w,L)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[N.value?(e.openBlock(),e.createElementBlock("div",Yd,[e.createElementVNode("div",Gd,[e.createElementVNode("div",Kd,[e.createElementVNode("p",Zd,[_.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString(mn.value+1)+" / "+e.toDisplayString(qn.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[zo.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Об’єкт "+e.toDisplayString(mn.value+1)+" / "+e.toDisplayString(qn.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Інформація про об’єкт ")],64))],64))])]),_.value&&e.unref(Un)>1?(e.openBlock(),e.createElementBlock("div",Xd,[e.createElementVNode("button",{onClick:L[0]||(L[0]=(...G)=>e.unref(On)&&e.unref(On)(...G)),disabled:e.unref(fn)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ye.ArrowLeft),{class:"h-4 w-4"})],8,Jd),e.createElementVNode("button",{onClick:L[1]||(L[1]=(...G)=>e.unref(Do)&&e.unref(Do)(...G)),disabled:e.unref(fn)===e.unref(Un)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ye.ArrowRight),{class:"h-4 w-4"})],8,Qd)])):!_.value&&zo.value?(e.openBlock(),e.createElementBlock("div",eu,[e.createElementVNode("button",{onClick:Qr,disabled:mn.value===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ye.ArrowLeft),{class:"h-4 w-4"})],8,tu),e.createElementVNode("button",{onClick:Jr,disabled:mn.value>=qn.value-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ye.ArrowRight),{class:"h-4 w-4"})],8,nu)])):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:Hn}," ✕ ")]),e.createElementVNode("div",ou,[T.value?(e.openBlock(),e.createElementBlock("div",ru," Завантаження даних… ")):Y.value?(e.openBlock(),e.createElementBlock("div",lu,e.toDisplayString(Y.value),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[Pe.value.length?(e.openBlock(),e.createElementBlock("div",au,[e.createElementVNode("dl",su,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Te.value,G=>(e.openBlock(),e.createElementBlock("div",{key:G.key,class:"grid grid-cols-1 gap-1 py-3 sm:grid-cols-10 sm:gap-4 even:bg-gray-50 text-[12px]"},[e.createElementVNode("dt",iu,e.toDisplayString(G.label),1),e.createElementVNode("dd",{class:e.normalizeClass(["text-gray-700 sm:col-span-6 font-normal whitespace-pre-wrap",G.format==="badge"?"font-semibold text-yellow-800":""])},[G.format==="tags"?(e.openBlock(),e.createElementBlock("div",cu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($(G.value),(ce,xe)=>(e.openBlock(),e.createElementBlock("span",{key:xe,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold text-foreground"},e.toDisplayString(ce),1))),128))])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(G.value),1)],64))],2)]))),128))])])):Gt.value.length?(e.openBlock(),e.createElementBlock("div",du,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Gt.value,(G,ce)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:ce},[G.type==="html"?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:G.content},null,8,uu)):(e.openBlock(),e.createBlock(wl,{key:1,title:G.componentProps.title,url:G.componentProps.url,id:G.componentProps.id,"button-text":G.componentProps.buttonText,onActivate:jn},e.createSlots({_:2},[G.slotText?{name:"default",fn:e.withCtx(()=>[e.createElementVNode("span",{innerHTML:G.slotText},null,8,fu)]),key:"0"}:void 0]),1032,["title","url","id","button-text"]))],64))),128))])):e.createCommentVNode("",!0),In.value.length?(e.openBlock(),e.createElementBlock("div",mu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(In.value,G=>(e.openBlock(),e.createBlock(wl,{key:G.spec.id,title:G.componentProps.title,url:G.componentProps.url,id:G.spec.id,"button-text":G.componentProps.buttonText,onActivate:jn},null,8,["title","url","id","button-text"]))),128))])):e.createCommentVNode("",!0),Rr.value?(e.openBlock(),e.createElementBlock("div",pu,[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:Mo},[e.createElementVNode("span",gu,e.toDisplayString(xt.value),1),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(Or.value),{class:"h-3 w-3 stroke-[1.5px]"}))])])):e.createCommentVNode("",!0),un.value.length?(e.openBlock(),e.createElementBlock("div",yu,[L[3]||(L[3]=e.createElementVNode("p",{class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},"Шари",-1)),e.createElementVNode("div",hu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(un.value,G=>(e.openBlock(),e.createElementBlock("div",{key:G.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",bu,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:Kr(G.id),onChange:ce=>Zr(G,ce)},null,40,xu),L[2]||(L[2]=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",ku,e.toDisplayString(G.title),1)]),G.subtitle?(e.openBlock(),e.createElementBlock("div",wu,e.toDisplayString(G.subtitle),1)):e.createCommentVNode("",!0)]))),128))])])):e.createCommentVNode("",!0),qr.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",_u," Даних не знайдено. "))],64))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-86374b23"]]),Nu={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%"}},Vu={class:"flex flex-col gap-1 p-5"},$u={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},nr=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:r}=Qe(),l=e.ref([]);let s=null;function i(y){return y?y.map((a,m)=>{var k;const f=(a==null?void 0:a.name)||(a==null?void 0:a.label)||(a==null?void 0:a.title)||(a==null?void 0:a.id)||`Layer ${m+1}`,p=(a==null?void 0:a.color)||(a==null?void 0:a.fill)||((k=a==null?void 0:a.paint)==null?void 0:k.color)||"#3388ff";return{id:`${f}-${m}`,label:f,color:p}}):[]}function c(y){return y!=null&&y.layers?y.layers.filter(a=>{const m=a.paint||{};return m["fill-color"]||m["line-color"]||m["circle-color"]}).map((a,m)=>{var k;const f=a.paint||{},p=f["fill-color"]||f["line-color"]||f["circle-color"]||"#3388ff";return{id:a.id||`layer-${m}`,label:((k=a.metadata)==null?void 0:k.title)||a.id||`Layer ${m+1}`,color:p}}):[]}async function u(){var m;await r();const y=o.value;if(!y)return;const a=(m=y.getStyle)==null?void 0:m.call(y);l.value=c(a)}function d(){o.value&&(s==null||s())}return e.watch(()=>n.items,async y=>{y!=null?(l.value=i(y),s==null||s()):(await r(),d(),u())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await r(),d(),u())}),e.onBeforeUnmount(()=>{s==null||s(),s=null}),(y,a)=>l.value.length?(e.openBlock(),e.createElementBlock("div",Nu,[e.createElementVNode("div",Vu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,m=>(e.openBlock(),e.createElementBlock("div",{key:m.id,class:"flex items-center"},[e.createElementVNode("span",{class:"shrink-0 size-2.5 inline-block me-2.5 h-[10px] w-[10px] rounded-full",style:e.normalizeStyle({background:m.color})},null,4),e.createElementVNode("span",$u,[e.createElementVNode("span",null,e.toDisplayString(m.label),1)])]))),128))])])):e.createCommentVNode("",!0)}}),Bu={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"},or=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",Bu,[e.createVNode(to,{layer:{filters:t.filters,id:t.layerId},count:t.filters.length},null,8,["layer","count"])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-98772410"]]),oo=e.ref({}),ro=e.ref([]);function Su(t){const n={};t.forEach(o=>{o!=null&&o.id&&(n[o.id]=o)}),oo.value=n}function vu(t){ro.value=[...t]}function Lu(){oo.value={},ro.value=[]}function Tu(t){return t.legend?(Array.isArray(t.legend)?t.legend:[t.legend]).filter(Boolean):[]}const Cl=e.computed(()=>{const t=[];return ro.value.forEach(n=>{const o=oo.value[n];o&&Tu(o).forEach(r=>{t.push({...r,name:r.name??r.label??o.name,label:r.label??r.name??o.name})})}),t});function Au(t,n={}){const o=t==null?void 0:t.config;return Array.isArray(o)?o:o&&typeof o=="object"&&Array.isArray(o.items)?o.items:(o&&typeof o=="object"?o.source:void 0)==="catalog"||n.hasCatalogWidget?Cl.value:[]}function Nl(){return{layersById:oo,selectedLayerIds:ro,catalogLegendItems:Cl,registerCatalogLayers:Su,setCatalogSelectedLayerIds:vu,resetMapCatalogLegend:Lu,resolveMapLegendItems:Au}}const Mu={class:"catalog-tab__search relative mt-[10px]"},Fu={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%)"}},Du={class:"catalog-tab__list flex-1 overflow-y-auto mt-2"},Pu={key:0,class:"text-sm text-gray-400 text-center mt-6"},zu=["onClick"],Iu={class:"flex items-center gap-x-3"},ju={class:"max-w-[260px] text-[14px] text-[#4b5563]"},Ru={class:"text-xs opacity-60 text-[#4b5563]"},Ou={class:"flex items-center cursor-pointer gap-2 flex-1"},Uu=["checked","onChange"],qu={class:"text-[13px] text-gray-600 max-w-[260px]"},Hu={class:"flex items-center gap-2"},Wu=Ae(e.defineComponent({__name:"LayersCatalogTab",props:{catalog:{},selected:{},search:{}},emits:["toggle-layer","update:search","open-filter"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),s=e.ref(null),i=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0,layerId:null}),c=new Intl.Collator("uk",{sensitivity:"base"}),u=e.computed(()=>{const g=o.search.trim().toLowerCase();return o.catalog.groups.map(b=>{const x=b.layers.filter(C=>{const V=k(C);return V?g?V.toLowerCase().includes(g):!0:!1}).sort((C,V)=>c.compare(k(C),k(V)));return{...b,layers:x}}).filter(b=>b.layers.length>0).sort((b,x)=>c.compare(b.name,x.name))}),d=e.computed({get:()=>o.search,set:g=>r("update:search",g)});function y(g){l[g]=!l[g],fd()}function a(g){return!!l[g]}function m(g,b){if(o.selected.includes(b)){i.visible=!1,i.layerId=null;return}const x=g.currentTarget;if(!x)return;const C=x.getBoundingClientRect(),V=typeof window<"u"?window.scrollX:0,E=typeof window<"u"?window.scrollY:0;i.left=C.left+C.width/2+V,i.top=C.bottom+8+E,i.layerId=b,i.visible=!0}function f(){i.visible=!1,i.layerId=null}function p(g){return[{label:"Назва",value:h(g.name)},{label:"Сервіс",value:h(g.service)},{label:"Посилання",value:h(g.url),breakLine:!0}]}function k(g){return typeof(g==null?void 0:g.name)=="string"?g.name.trim():""}function h(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,b)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"catalogRef",ref:s,class:"catalog-tab"},[e.createElementVNode("div",Mu,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b[0]||(b[0]=x=>d.value=x),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,d.value]]),(e.openBlock(),e.createElementBlock("svg",Fu,[...b[1]||(b[1]=[e.createElementVNode("path",{d:"M11 19C15.4183 19 19 15.4183 19 11C19 6.5817 15.4183 3 11 3C6.5817 3 3 6.5817 3 11C3 15.4183 6.5817 19 11 19Z",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M21 21L16.7 16.7",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))]),e.createElementVNode("div",Du,[u.value.length===0?(e.openBlock(),e.createElementBlock("div",Pu," Нічого не знайдено ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,x=>(e.openBlock(),e.createElementBlock("div",{key:x.id,class:"mt-2"},[e.createElementVNode("div",{class:"hover:bg-gray-100 cursor-pointer p-[8px] rounded-lg flex justify-between items-center",onClick:C=>y(x.id)},[e.createElementVNode("div",Iu,[(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",a(x.id)?"rotate-90":""])},[...b[2]||(b[2]=[e.createElementVNode("path",{d:"M1 9L5 5L1 1",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2)),e.createElementVNode("div",ju,e.toDisplayString(x.name),1)]),e.createElementVNode("div",Ru,e.toDisplayString(x.layers.length),1)],8,zu),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(x.layers,C=>(e.openBlock(),e.createElementBlock("div",{key:C.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",Ou,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:t.selected.includes(C.id),onChange:V=>g.$emit("toggle-layer",C.id,V.target.checked,C)},null,40,Uu),b[3]||(b[3]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600 shrink-0"},[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",qu,e.toDisplayString(C.name),1)]),e.createElementVNode("div",Hu,[Array.isArray(C.filters)&&C.filters.length?(e.openBlock(),e.createBlock(to,{key:0,count:C.filters.length,layer:C,disabled:!t.selected.includes(C.id),onMouseenter:V=>m(V,C.id),onMouseleave:f,onFocus:V=>m(V,C.id),onBlur:f},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(Go,{items:p(C)},null,8,["items"])])]))),128))],512),[[e.vShow,a(x.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-36ed2aad"]]),Yu={class:"flex flex-col gap-0"},Gu={class:"text-xs text-slate-600 font-semibold"},Ku=e.defineComponent({__name:"MapLayerPopover",props:{items:{}},setup(t,{expose:n}){const o=t,r=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),l=e.ref(null),s=e.ref(null);let i=null;const c=e.computed(()=>{if(!r.open)return{display:"none"};const k=Math.min(460,window.innerWidth-24);return{position:"absolute",width:`${k}px`,maxWidth:`${k}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}});function u(){if(r.open){m();return}if(!l.value){m();return}r.open=!0,e.nextTick(()=>{d(),f(),requestAnimationFrame(()=>{d()})})}function d(){if(!r.open||!l.value||!s.value)return;const k=l.value.getBoundingClientRect(),h=12,g=window.scrollX+h,b=window.scrollX+window.innerWidth-h,x=window.scrollY+h,C=window.scrollY+window.innerHeight-h,V=s.value.offsetWidth||Math.min(460,window.innerWidth-24),E=s.value.offsetHeight||0;let _=k.left+window.scrollX+(k.width-V)/2;_<g&&(_=g),_+V>b&&(_=Math.max(g,b-V)),r.left=_;let N=k.bottom+window.scrollY+h;N+E>C&&(N=k.top+window.scrollY-E-h,N<x&&(N=Math.max(x,C-E))),N<x&&(N=x),N+E>C&&(N=Math.max(x,C-E)),r.top=N,r.transform="none"}function y(k){var g,b;if(!r.open)return;const h=k.target;(g=l.value)!=null&&g.contains(h)||(b=s.value)!=null&&b.contains(h)||m()}function a(k){k.key==="Escape"&&m()}function m(){p(),r.open=!1,l.value=null,s.value=null}function f(){p(),s.value&&(i=new ResizeObserver(()=>{d()}),i.observe(s.value))}function p(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",y,!0),document.addEventListener("keydown",a),window.addEventListener("scroll",d,!0),window.addEventListener("resize",d)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",y,!0),document.removeEventListener("keydown",a),window.removeEventListener("scroll",d,!0),window.removeEventListener("resize",d),p()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>d())},{deep:!0}),n({close:m}),(k,h)=>(e.openBlock(),e.createElementBlock("div",{class:"inline-flex relative",ref_key:"anchorEl",ref:l},[e.createElementVNode("div",{onClick:e.withModifiers(u,["prevent","stop"])},[e.renderSlot(k.$slots,"default")]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.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(c.value),ref_key:"popoverEl",ref:s,onClick:h[0]||(h[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Yu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,g=>(e.openBlock(),e.createElementBlock("div",{key:g.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",Gu,e.toDisplayString(g.label),1),e.createElementVNode("div",{class:e.normalizeClass(["text-sm text-gray-800",{"break-all":g.breakLine}])},e.toDisplayString(g.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),Zu={class:"selected-tab"},Xu={class:"selected-tab__actions"},Ju={key:0,class:"selected-tab__scroll"},Qu=["onDragstart","onDragover","onDrop"],ef={class:"selected-tab__item-header"},tf={class:"selected-tab__item-info"},nf=["checked","onChange"],of={class:"selected-tab__item-name"},rf={class:"selected-tab__item-controls"},lf=["onClick"],af={class:"selected-tab__menu-inner"},sf=Ae(e.defineComponent({__name:"LayersSelectedTab",props:{catalog:{},selected:{},clientLayers:{}},emits:["select-layer","reorder","remove","toggle-layer"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),s=e.ref(null),i=e.ref(null),c=new Map,u=e.reactive({top:0,left:0}),d=e.ref(null),y=e.reactive({top:0,left:0}),a=e.ref(null),m=new Map,f=e.reactive({});function p(S){var M,B;const F=(M=o.clientLayers)==null?void 0:M[S];if(F){const j=F.bounds?[F.bounds[0][0],F.bounds[0][1],F.bounds[1][0],F.bounds[1][1]]:null;return{id:F.id,name:F.name,service:"geojson",isClient:!0,extent:j}}for(const j of((B=o.catalog)==null?void 0:B.groups)??[]){const X=j.layers.find(he=>he.id===S);if(X)return X}return null}e.watch(()=>o.selected,S=>{S.forEach(F=>{l[F]==null&&(l[F]=100)})},{immediate:!0});function k(){if(!s.value)return;const S=c.get(s.value);if(!S)return;const F=S.getBoundingClientRect();u.top=F.bottom+8+window.scrollY,u.left=F.left+window.scrollX}e.watch(()=>o.selected,S=>{S.forEach(F=>{f[F]==null&&(f[F]=!0)})},{immediate:!0});function h(S,F){var B;if(f[S]=F,(B=o.clientLayers)!=null&&B[S]){r("toggle-layer",S,F);return}const M=Ie(S);M&&M.setVisible(F)}function g(S,F){F?m.set(S,F):m.delete(S)}function b(S){d.value=d.value===S?null:S,d.value&&e.nextTick(()=>{x(S),requestAnimationFrame(()=>{x(S)})})}function x(S){const F=m.get(S);if(!F||!a.value)return;const M=F.getBoundingClientRect(),B=12,j=6,X=window.scrollX+B,he=window.scrollX+window.innerWidth-B,Z=window.scrollY+B,P=window.scrollY+window.innerHeight-B,q=a.value.offsetWidth||190,H=a.value.offsetHeight||0;let re=M.bottom+window.scrollY+j,I=M.left+window.scrollX;I+q>he&&(I=M.right+window.scrollX-q,I<X&&(I=X)),I<X&&(I=X),re+H>P&&(re=M.top+window.scrollY-H-j,re<Z&&(re=Math.max(Z,P-H))),re<Z&&(re=Z),re+H>P&&(re=Math.max(Z,P-H)),y.top=re,y.left=I}function C(S){const F=Ie(S);F&&F.remove(),r("remove",S),d.value=null}function V(S){const F=S.target,M=s.value,B=d.value;if(M){const j=i.value,X=c.get(M);if(j&&j.contains(F)||X&&X.contains(F))return;s.value=null}if(B){const j=a.value,X=m.get(B);if(j&&j.contains(F)||X&&X.contains(F))return;d.value=null}}function E(){s.value&&k(),d.value&&x(d.value)}e.onMounted(()=>{document.addEventListener("click",V),window.addEventListener("resize",E),window.addEventListener("scroll",E,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",V),window.removeEventListener("resize",E),window.removeEventListener("scroll",E,!0)});const{map:_}=Qe();function N(S){var X,he,Z,P,q,H;if(!S)return;const F=Ie(S),M=p(S);if(!F&&!M)return;if(((X=M==null?void 0:M.extent)==null?void 0:X.length)===4&&((he=_.value)!=null&&he.fitBounds)){const re=M.extent.map(I=>Number(I));if(re.every(I=>Number.isFinite(I))){const[I,le,me,be]=re;_.value.fitBounds([[I,le],[me,be]],{padding:40}),d.value=null;return}}const B=(P=(Z=o.clientLayers)==null?void 0:Z[S])==null?void 0:P.bounds;if(B&&((q=_.value)!=null&&q.fitBounds)){_.value.fitBounds(B,{padding:40}),d.value=null;return}(H=F==null?void 0:F.getSource)!=null&&H.call(F)&&(d.value=null)}const T=e.ref(null),Y=e.ref(null);function ee(S,F){T.value=F,Y.value=F,S.dataTransfer&&(S.dataTransfer.effectAllowed="move",S.dataTransfer.setData("text/plain",String(F)))}function R(S){Y.value=S}function ae(S,F){if(S.preventDefault(),T.value===null||T.value===F){T.value=null,Y.value=null;return}const B=[...o.selected],[j]=B.splice(T.value,1);B.splice(F,0,j),r("reorder",B),T.value=null,Y.value=null}function ue(){T.value=null,Y.value=null}function oe(S){return S==null||S===""?null:String(S)}function te(S,F){return!Array.isArray(S)||S.length===0?null:`${S.length} ${F}`}function J(S){var re,I,le,me,be,A;const F=Ie(S),M=p(S);if(!F&&!M)return[];const B=(M==null?void 0:M.name)||((I=(re=F==null?void 0:F.opts)==null?void 0:re.layer)==null?void 0:I.name)||null,j=(M==null?void 0:M.service)||((le=F==null?void 0:F.opts)==null?void 0:le.service)||null,X=(me=F==null?void 0:F.getSource)==null?void 0:me.call(F),he=X&&"tiles"in X?(be=X.tiles)==null?void 0:be[0]:(M==null?void 0:M.url)||null,Z=(M==null?void 0:M.source_path)||null,P=(F==null?void 0:F.popup)||(M==null?void 0:M.popup),q=(F==null?void 0:F.card)||(M==null?void 0:M.card),H=(M==null?void 0:M.filters)||((A=F==null?void 0:F.opts)==null?void 0:A.filters);return[{label:"Назва",value:oe(B)},{label:"Сервіс",value:oe(M!=null&&M.isClient?"Завантажені дані":j)},{label:"Посилання",value:oe(he),breakLine:!0},{label:"Джерело",value:oe(Z),breakLine:!0},{label:"Popup",value:te(P,"полів")},{label:"Картка",value:te(q,"полів")},{label:"Фільтри",value:te(H,"фільтрів")}]}return(S,F)=>(e.openBlock(),e.createElementBlock("div",Zu,[e.createElementVNode("div",Xu,[e.createElementVNode("button",{class:"selected-tab__add",onClick:F[0]||(F[0]=M=>r("select-layer"))},[...F[3]||(F[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",Ju,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.selected,(M,B)=>{var j;return e.openBlock(),e.createElementBlock("div",{key:M,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":T.value===B,"selected-tab__item--over":Y.value===B}]),draggable:"true",onDragstart:X=>ee(X,B),onDragover:e.withModifiers(X=>R(B),["prevent"]),onDrop:X=>ae(X,B),onDragend:ue},[e.createElementVNode("div",ef,[e.createElementVNode("div",tf,[F[4]||(F[4]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox shrink-0",checked:f[M]??!0,onChange:X=>h(M,X.target.checked)},null,40,nf),e.createElementVNode("span",of,e.toDisplayString(((j=p(M))==null?void 0:j.name)||"Шар"),1)]),e.createElementVNode("div",rf,[e.createVNode(bl,{"layer-id":M},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:X=>g(M,X),onClick:e.withModifiers(X=>b(M),["stop"])},[...F[5]||(F[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,lf)])])],42,Qu)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[d.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:a,class:"selected-tab__menu",style:e.normalizeStyle({top:y.top+"px",left:y.left+"px"})},[e.createElementVNode("div",af,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:F[1]||(F[1]=M=>N(d.value))},[...F[6]||(F[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(Ku,{items:J(d.value)},{default:e.withCtx(()=>[...F[7]||(F[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"]),F[9]||(F[9]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:F[2]||(F[2]=M=>C(d.value))},[...F[8]||(F[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-32207ce7"]]),cf={class:"filter-tab"},df={key:0,class:"filter-tab__header"},uf={class:"filter-tab__title"},ff={key:1,class:"filter-tab__content rounded-md"},mf={class:"filter-tab__scroll"},pf={key:2,class:"filter-tab__empty"},gf=Ae(e.defineComponent({__name:"LayersFilterTab",props:{layer:{},value:{}},emits:["change"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/filter")),r=t,l=n,s=e.computed(()=>{var u;return((u=r.layer)==null?void 0:u.filters)??[]}),i=e.computed(()=>s.value.length>0);function c(u){l("change",u.data)}return(u,d)=>(e.openBlock(),e.createElementBlock("div",cf,[t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",df,[e.createElementVNode("div",null,[e.createElementVNode("p",uf,e.toDisplayString(t.layer.name),1)])])):e.createCommentVNode("",!0),t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",ff,[e.createElementVNode("div",mf,[e.createVNode(e.unref(o),{view:"vertical",schema:s.value,value:t.value,limit:5,class:"rounded-md pb-0",onChange:d[0]||(d[0]=y=>c(y))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",pf,[...d[1]||(d[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),yf={class:"flex items-center justify-between mb-1"},hf={class:"flex items-center gap-2"},bf={class:"text-lg font-semibold text-gray-800"},xf={key:0},kf={key:1,class:"block text-sm font-normal text-gray-500"},wf={class:"flex items-center gap-2"},_f={class:"flex mb-4 border-b border-gray-200"},Ef={class:"map-catalog-widget__body"},Vl=Ae(e.defineComponent({__name:"MapCatalogWidget",setup(t){const{registerCatalogLayers:n,setCatalogSelectedLayerIds:o,resetMapCatalogLegend:r}=Nl(),l=Oe.useRoute(),s=Oe.useRouter();function i(){const I=l.query["catalog-tab"];return(Array.isArray(I)?I[0]:I)==="selected"?"selected":"catalog"}const c=e.ref(i()),u=e.ref({groups:[]}),d=e.ref([]),y=e.ref(""),{map:a}=Qe(),{clientLayers:m,isClientLayer:f,getClientLayer:p,unregisterClientLayer:k,clearClientLayers:h}=Xo(),g=e.reactive({}),b=e.ref(null),x=e.ref(!0),C=e.ref(!1),{activateTemporaryLayer:V}=xn(a);function E(I){window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:{action:"activate",owner:"add-data",spec:I}}))}function _(I,le){var K,fe;const me=m.value[I]||p(I),be=Ie(I);if(!le){(K=be==null?void 0:be.setVisible)==null||K.call(be,!1);return}if((fe=be==null?void 0:be.isMounted)!=null&&fe.call(be)){be.setVisible(!0);return}if(!(me!=null&&me.data))return;const A={id:me.id,title:me.name,type:"geojson",data:me.data};V(A,{},"add-data"),E(A)}function N(I){const le=m.value[I];if(le){const me=le.bounds?[le.bounds[0][0],le.bounds[0][1],le.bounds[1][0],le.bounds[1][1]]:null;return{id:le.id,name:le.name,service:"geojson",isClient:!0,extent:me}}return u.value.groups.map(me=>me.layers.find(be=>be.id===I)).find(Boolean)||null}function T(I){return typeof(I==null?void 0:I.name)=="string"&&I.name.trim().length>0}function Y(){const I=b.value;if(!I)return;delete g[I];const le=Ie(I);le!=null&&le.setFilter&&le.setFilter("")}function ee(I,le){const me=Ie(I);if(g[I]={...le},!(me!=null&&me.setFilter))return;const be=Object.entries(le).filter(([,A])=>A!=null&&A!=="").map(([A,K])=>`${A}=${K}`);me.setFilter(be.join("|"))}function R(I){const le=b.value;le&&ee(le,I)}function ae(I){const le=I.url;let me=null;if(le&&(me=le.startsWith("http")?le:`${window.location.origin}${le}`),!me)return null;const be=(I.service||"").toString().toLowerCase(),A=I.count??null;return be&&be!=="vtile"?{service:be,count:A,source:{type:"raster",tiles:[me],tileSize:256,minzoom:0,maxzoom:20}}:{service:be,count:A,source:{type:"vector",tiles:[me],minzoom:0,maxzoom:14},layer:{style:I.style},card:I.card,popup:I.popup}}function ue(I,le,me){var fe;const be=me??N(I);if(!be)return;if(be.isClient){_(I,le),le&&!d.value.includes(I)&&d.value.push(I);return}const A=ae(be);if(!A)return;const K=Ie(be.id,A,a);if(K)if(K.setVisible(le),le){if(!d.value.includes(I)&&(d.value.push(I),(fe=a.value)!=null&&fe.getLayer(I)))try{a.value.moveLayer(I)}catch(ie){console.warn("Cannot move new layer",I,ie)}}else d.value=d.value.filter(ie=>ie!==I),b.value===I&&(Y(),b.value=null)}function oe(){d.value.forEach(I=>{var me;const le=Ie(I);le&&le.setVisible(!1),f(I)&&((me=le==null?void 0:le.remove)==null||me.call(le),k(I))}),d.value=[],h()}function te(I){var me;const le=Ie(I);(me=le==null?void 0:le.remove)==null||me.call(le),f(I)&&(k(I),window.dispatchEvent(new CustomEvent(eo,{detail:{id:I}})),window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:{action:"deactivate",spec:{id:I},owner:"add-data"}}))),d.value=d.value.filter(be=>be!==I),b.value===I&&(Y(),b.value=null)}function J(I){if(!(I instanceof CustomEvent))return;const{id:le}=I.detail||{};!le||typeof le!="string"||(d.value.includes(le)||d.value.push(le),c.value="selected")}function S(I){d.value=[...I],e.nextTick(()=>{var A;if(!a.value)return;const le=((A=a.value.getStyle())==null?void 0:A.layers)??[];let me;const be=K=>le.filter(fe=>{var ie,de;return(fe==null?void 0:fe.source)===K||(fe==null?void 0:fe.id)===K||((de=(ie=fe==null?void 0:fe.id)==null?void 0:ie.startsWith)==null?void 0:de.call(ie,`${K}`))}).map(fe=>fe.id);for(let K=I.length-1;K>=0;K-=1){const fe=I[K],ie=be(fe);ie.length&&(ie.forEach(de=>{var pe;if((pe=a.value)!=null&&pe.getLayer(de))try{a.value.moveLayer(de,me)}catch(ve){console.warn("Cannot move layer",de,ve)}}),me=ie[0])}})}function F(I){!I||!Array.isArray(I.filters)||I.filters.length===0||d.value.includes(I.id)&&(b.value=I.id,g[I.id]||(g[I.id]={}),c.value="filter")}function M(){c.value="catalog"}const B=e.computed(()=>b.value?N(b.value):null),j=e.computed(()=>{const I=b.value;return I?g[I]??{}:{}}),X=e.computed(()=>u.value.groups.reduce((I,le)=>I+le.layers.filter(T).length,0)),he=e.computed(()=>c.value==="selected"?"Вибрані шари":c.value==="filter"?"Фільтр шарів":"Каталог"),Z=e.computed(()=>c.value==="selected"?d.value.length:c.value==="catalog"?X.value:null),P=e.computed(()=>{var I;return c.value==="filter"?((I=B.value)==null?void 0:I.name)??"":""});async function q(){const le=await(await fetch("/api/gis-layer-list")).json(),me=new Map;le.forEach(K=>{const fe=K.group_id??"other";me.has(fe)||me.set(fe,{id:fe,name:K.group_name||"Інші шари",layers:[]}),me.get(fe).layers.push(K)}),u.value={groups:Array.from(me.values())},n(u.value.groups.flatMap(K=>K.layers)),o(d.value);const be=l.query.layers;if(!be)return;const A=Array.isArray(be)?be[0]:be;typeof A=="string"&&A.split(",").forEach(K=>{const fe=K.trim();if(!fe)return;const ie=N(fe);ie&&ue(fe,!0,ie)})}e.watch(b,I=>{!I&&c.value==="filter"&&(c.value="catalog")}),e.watch(B,I=>{!I&&b.value&&(b.value=null)}),e.watch(d,I=>{const le=I.filter(be=>!f(be));o(le);const me={...l.query};le.length?me.layers=le.join(","):delete me.layers,s.replace({query:me}).catch(()=>{})},{deep:!0});function H(){x.value=!x.value}function re(){C.value=window.innerWidth<=768}return e.onMounted(()=>{q(),re(),C.value&&(x.value=!1),window.addEventListener("resize",re),window.addEventListener(kn,J)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",re),window.removeEventListener(kn,J),r()}),(I,le)=>(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",x.value&&(c.value==="selected"||Z.value>1)?"min-h-[250px]":"min-h-[0px]"])},[e.createElementVNode("div",yf,[e.createElementVNode("div",hf,[le[4]||(le[4]=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",bf,[e.createTextVNode(e.toDisplayString(he.value)+" ",1),Z.value!==null?(e.openBlock(),e.createElementBlock("span",xf,"("+e.toDisplayString(Z.value)+")",1)):e.createCommentVNode("",!0),P.value?(e.openBlock(),e.createElementBlock("span",kf,e.toDisplayString(P.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",wf,[e.createElementVNode("button",{onClick:oe,class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers"},[...le[5]||(le[5]=[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-b81b0112><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-b81b0112></path><path d="M21 3v5h-5" data-v-b81b0112></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-b81b0112></path><path d="M8 16H3v5" data-v-b81b0112></path></svg>',1)])]),e.createElementVNode("button",{type:"button",class:"map-catalog-widget__toggle-button",onClick:H,"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":x.value})},[...le[6]||(le[6]=[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":!x.value}])},[e.createElementVNode("div",_f,[e.createElementVNode("button",{onClick:le[0]||(le[0]=me=>c.value="catalog"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",c.value==="catalog"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Каталог ",2),e.createElementVNode("button",{onClick:le[1]||(le[1]=me=>c.value="selected"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",c.value==="selected"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Вибрані шари ",2)]),e.createElementVNode("div",Ef,[c.value==="catalog"?(e.openBlock(),e.createBlock(Wu,{key:0,class:"map-catalog-widget__scroll",catalog:u.value,selected:d.value,search:y.value,"onUpdate:search":le[2]||(le[2]=me=>y.value=me),onToggleLayer:ue,onOpenFilter:F},null,8,["catalog","selected","search"])):c.value==="selected"?(e.openBlock(),e.createBlock(sf,{key:1,catalog:u.value,selected:d.value,"client-layers":e.unref(m),onToggleLayer:ue,onSelectLayer:le[3]||(le[3]=me=>c.value="catalog"),onReorder:S,onRemove:te},null,8,["catalog","selected","client-layers"])):(e.openBlock(),e.createBlock(gf,{key:2,layer:B.value,value:j.value,onChange:R,onClose:M},null,8,["layer","value"]))])],2)],2))}}),[["__scopeId","data-v-b81b0112"]]),Cf={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},Nf={class:"flex items-start justify-between gap-3 p-5 pb-3"},Vf={class:"inline-block text-xl font-semibold text-gray-800"},$f={key:0,class:"mt-1 text-sm text-gray-500"},Bf={class:"flex items-center gap-[6px]"},Sf={class:"px-5 pb-5 space-y-6"},vf={key:0,class:"space-y-2"},Lf={class:"flex flex-wrap gap-4"},Tf=["value"],Af={key:1,class:"text-sm text-gray-500"},Mf={key:2,class:"text-sm text-gray-500"},Ff={class:"text-4xl font-medium text-gray-800"},Df={class:"space-y-[14px]"},Pf={class:"flex items-center gap-[10px] text-gray-600"},zf={class:"font-medium text-gray-700"},If={class:"flex items-center justify-end text-end gap-3"},jf={class:"font-medium text-gray-800"},Rf={class:"min-w-[40px] font-medium text-[#3C3C4399]"},$l=Ae(e.defineComponent({__name:"MapAttributeWidget",props:{config:{}},setup(t){const n=["#3a7a57","#d970d5","#8e997b","#b4c039","#a855f7","#71823a","#f79d92","#8b5cf6","#a6514e","#6b7280"],o=t,r=e.ref(!0),l=e.ref(!1),s=e.ref([]),i=e.ref(null),c=e.ref(null),u=e.ref(null),d=e.ref(null),y=e.ref(null),a=e.ref({}),m=e.ref(null);function f(te){return te&&JSON.parse(JSON.stringify(te))}const p=e.computed(()=>{const te=o.config.layer;if(typeof te!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const J=te.trim();if(!J)throw new Error("MapAttributeWidget: `layer` must be non-empty");return J}),k=e.computed(()=>{const{list:te,attribute:J}=o.config;if(Array.isArray(te)&&te.length)return te.map(S=>({id:(S==null?void 0:S.id)!=null?String(S.id).trim():"",text:(S==null?void 0:S.text)!=null&&String(S.text).trim()||null})).filter(S=>S.id.length);if(Array.isArray(J))return J.map(S=>S!=null?String(S).trim():"").filter(S=>S.length).map(S=>({id:S,text:null}));if(typeof J=="string"){const S=J.trim();if(!S)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:S,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),h=e.computed(()=>k.value.map(te=>({id:te.id,label:te.text||a.value[te.id]||te.id})));e.watch(k,te=>{if(!te.length){m.value=null,s.value=[];return}(!m.value||!te.some(J=>J.id===m.value))&&(m.value=te[0].id)},{immediate:!0});const g=e.computed(()=>{var te;return m.value||((te=k.value[0])==null?void 0:te.id)||null});e.watch(p,()=>{var te,J;(J=(te=c.value)==null?void 0:te.remove)==null||J.call(te),c.value=null,u.value=null,d.value=null,y.value=null,a.value={}});const b=e.computed(()=>{var te;return(te=d.value)!=null&&te.length?{id:p.value,name:u.value,filters:d.value}:null}),x=e.computed(()=>{var te,J;return((J=(te=b.value)==null?void 0:te.filters)==null?void 0:J.length)||0});async function C(te){var F;const J=await fetch(`/api/gis-service/${encodeURIComponent(te)}`);if(!J.ok){let M="Не вдалося завантажити налаштування шару";try{const B=await J.json();M=((F=B==null?void 0:B.message)==null?void 0:F.error)||(B==null?void 0:B.message)||M}catch{}throw new Error(M)}const S=await J.json();return u.value=(S==null?void 0:S.name)||null,d.value=Array.isArray(S==null?void 0:S.filters)?S.filters:null,y.value=f((S==null?void 0:S.style)||{}),a.value=((S==null?void 0:S.attributes)||[]).reduce((M,B)=>{const j=typeof(B==null?void 0:B.name)=="string"?B.name.trim():"",X=typeof(B==null?void 0:B.ua)=="string"?B.ua.trim():"";return j&&(M[j]=X||j),M},{}),S}function V(te,J){let S=Ie(te);if(!S){const F=`${location.origin}/api/vtile/${te}/ua/{z}/{x}/{y}.vmt`;S=Ie(te,{source:{type:"vector",tiles:[F],minzoom:0,maxzoom:14},layer:{id:te,source:te,"source-layer":te,style:(J==null?void 0:J.style)||{}},card:J==null?void 0:J.card,popup:J==null?void 0:J.popup})}return c.value=S,S}async function E(te,J){var M;const S=`/api/gis-service/${encodeURIComponent(te)}/${encodeURIComponent(J)}`,F=await fetch(S);if(!F.ok){let B="Не вдалося отримати статистику";try{const j=await F.json();B=((M=j==null?void 0:j.message)==null?void 0:M.error)||(j==null?void 0:j.message)||B}catch{}throw new Error(B)}return F.json()}function _(te){const J=new Map;return te&&(te.rules||[]).forEach(F=>{const M=(F==null?void 0:F.value)??(F==null?void 0:F.id);M!=null&&J.set(String(M),F)}),J}function N(te,J,S,F,M){if(typeof(J==null?void 0:J.color)=="string"&&J.color.trim())return J.color.trim();const B=o.config.colors||{};if(B[te])return B[te];const X=_(S==null?void 0:S.style).get(te);return typeof(X==null?void 0:X.color)=="string"&&X.color.trim()?X.color.trim():n[M%n.length]}function T(te,J,S,F){var M;return(J==null?void 0:J.text)||(J==null?void 0:J.label)||(J==null?void 0:J.name)||(J==null?void 0:J[`${F}_text`])||((M=_(S==null?void 0:S.style).get(te))==null?void 0:M.label)||te}function Y(te,J,S,F){if(!te)return;const M=f((J==null?void 0:J.style)||y.value)||{},B=F.trim();if(!B)return;const j={...M.colors||{},...o.config.colors||{}};B===F&&S.forEach(X=>{X.color.trim()&&(j[X.id]=X.color)}),te.setStyle({...M,type:M.type||"polygon",colorAttr:B,opacity:.8,colors:j})}async function ee(){var B,j;s.value=[],i.value=null;const te=p.value,J=g.value;if(!J)return;l.value=!0;const S=await C(te);V(te,S);const F=await E(te,J),M=Array.isArray(F==null?void 0:F.rows)?F.rows.map((X,he)=>{const Z=(X==null?void 0:X.id)??(X==null?void 0:X.value),P=Z!=null?String(Z):"";if(!P)return null;const q=T(P,X,S,J),H=Number((X==null?void 0:X.count)??0)||0,re=N(P,X,S,J,he);return{id:P,label:q,count:H,color:re}}).filter(Boolean):[];s.value=M,i.value=((B=F==null?void 0:F.field)==null?void 0:B.label)||((j=F==null?void 0:F.field)==null?void 0:j.name)||null,Y(c.value,S,M,J),l.value=!1}e.watch(()=>[p.value,g.value],()=>{ee()},{immediate:!0});const R=e.computed(()=>"Набори даних"),ae=e.computed(()=>s.value.reduce((te,J)=>te+J.count,0)),ue=e.computed(()=>{var S;const te=g.value;return((S=h.value.find(F=>F.id===te))==null?void 0:S.label)||null||i.value||te||null});function oe(te){return ae.value?`${(te/ae.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var te,J;(J=(te=c.value)==null?void 0:te.remove)==null||J.call(te)}),(te,J)=>r.value?(e.openBlock(),e.createElementBlock("div",Cf,[e.createElementVNode("div",Nf,[e.createElementVNode("div",null,[e.createElementVNode("h2",Vf,e.toDisplayString(R.value),1),ue.value&&h.value.length===1?(e.openBlock(),e.createElementBlock("p",$f,e.toDisplayString(ue.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Bf,[b.value?(e.openBlock(),e.createBlock(to,{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:x.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:J[1]||(J[1]=S=>r.value=!1)},[...J[3]||(J[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",Sf,[h.value.length>1?(e.openBlock(),e.createElementBlock("div",vf,[e.createElementVNode("div",Lf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,S=>(e.openBlock(),e.createElementBlock("label",{key:S.id,class:"inline-flex items-center gap-2 text-sm text-gray-700"},[e.withDirectives(e.createElementVNode("input",{type:"radio",class:"text-sky-600 focus:ring-sky-500",value:S.id,"onUpdate:modelValue":J[2]||(J[2]=F=>m.value=F)},null,8,Tf),[[e.vModelRadio,m.value]]),e.createElementVNode("span",null,e.toDisplayString(S.label),1)]))),128))])])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",Af,"Завантаження…")):s.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",Ff,e.toDisplayString(ae.value),1),e.createElementVNode("ul",Df,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,S=>(e.openBlock(),e.createElementBlock("li",{key:S.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",Pf,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:S.color})},null,4),e.createElementVNode("span",zf,e.toDisplayString(S.label),1)]),e.createElementVNode("div",If,[e.createElementVNode("span",jf,e.toDisplayString(S.count),1),e.createElementVNode("span",Rf,e.toDisplayString(oe(S.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",Mf,"Дані відсутні"))])])):(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:J[0]||(J[0]=S=>r.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-9686ce7b"]]),Of=["title"],Uf={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"},qf=["onClick"],Hf=["placeholder"],Wf={class:"absolute inset-y-0 right-2 flex items-center gap-1"},Yf={class:"flex items-center justify-between gap-2 px-3 py-2 border-b border-gray-100"},Gf={class:"text-xs font-semibold uppercase tracking-wide text-gray-500"},Kf={class:"max-h-[60vh] overflow-auto"},Zf={key:0,class:"divide-y divide-gray-100"},Xf=["onClick"],Jf={key:1,class:"px-3 py-3 text-xs text-gray-500"},Bl="mapSearchAddressHistory",lo="search-marker-source",rr="search-marker-layer",_n="search-geom-source",En="search-geom-layer-fill",ao="search-geom-layer-line",Qf=12,em="https://data.softpro.ua/api-user/gis-url-proxy",tm="https://data.softpro.ua/api/parcel",nm="https://nominatim.openstreetmap.org/search",Sl=Ae(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n={mounted(v,z){if(typeof document>"u")return;let W=null;const ge=8,ke=()=>{const Be=String((z==null?void 0:z.value)??"");if(!Be)return;W=document.createElement("div"),W.textContent=Be,Object.assign(W.style,{position:"absolute",background:"#333",color:"#fff",padding:"4px 8px",borderRadius:"4px",fontSize:"12px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:"9999"}),document.body.appendChild(W);const Te=v.getBoundingClientRect();W.style.left=`${Te.right+window.scrollX+ge}px`,W.style.top=`${Te.top+window.scrollY+(Te.height-W.offsetHeight)/2}px`},_e=()=>{W!=null&&W.parentNode&&W.parentNode.removeChild(W),W=null};v.addEventListener("mouseenter",ke),v.addEventListener("mouseleave",_e),Object.assign(v,{tooltipRightHandlers:{show:ke,hide:_e}})},unmounted(v){if(typeof document>"u")return;const z=v.tooltipRightHandlers;z&&(v.removeEventListener("mouseenter",z.show),v.removeEventListener("mouseleave",z.hide))}},o=t,r=Qe(),l=e.getCurrentInstance();function s(){return typeof globalThis<"u"&&globalThis.proxy?globalThis.proxy:typeof window<"u"&&window.proxy?window.proxy:null}function i(){var ge,ke,_e;const v=(ge=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:ge.$settings,z=(ke=v==null?void 0:v.map)==null?void 0:ke.searchViewbox;if(z)return z;const W=s();return(_e=W==null?void 0:W.map)==null?void 0:_e.searchViewbox}function c(){var ke,_e,Be;const v=(ke=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:ke.$settings,z=(_e=v==null?void 0:v.map)==null?void 0:_e.addressSuggest;if(typeof z=="string"&&z.trim())return z.trim();const W=s(),ge=(Be=W==null?void 0:W.map)==null?void 0:Be.addressSuggest;if(typeof ge=="string"&&ge.trim())return ge.trim()}const u=!!c(),d=!!i(),y=e.computed(()=>{const v=["xy","parcel"];return u&&v.push("address"),d&&v.push("nominatim"),v}),a=e.computed(()=>{var W,ge;const v=y.value,z=(ge=(W=o.config)==null?void 0:W.tools)==null?void 0:ge.filter(ke=>v.includes(ke));return z&&z.length?z:v}),m=e.computed(()=>{var v,z;return((z=(v=o.config)==null?void 0:v.placeholder)==null?void 0:z.trim())||"Пошук…"}),f=e.ref(a.value[0]);e.watch(a,v=>{v.includes(f.value)||(f.value=v[0])});const p=e.ref(""),k=e.ref(!1),h=e.ref(null),g=e.ref(null),b=e.ref(null),x=e.ref(null),C=e.ref([]),V=e.ref(null),E=e.ref(!1),_=e.ref([]),N=e.computed(()=>(f.value==="address"||f.value==="nominatim")&&E.value),T=e.computed(()=>{var v;return((v=o.config)==null?void 0:v.addressDebounceMs)??1e3});let Y=null;const ee=e.ref(!1),R=e.computed(()=>p.value.trim().length>0?C.value:_.value),ae=e.computed(()=>p.value.trim().length?`Знайдено ${C.value.length}`:"Історія пошуку"),ue=e.computed(()=>p.value.trim().length?"Нічого не знайдено":"Історія порожня");function oe(){var v,z;if(typeof window>"u")return[];try{const W=(z=(v=window.localStorage)==null?void 0:v.getItem)==null?void 0:z.call(v,Bl);if(!W)return[];const ge=JSON.parse(W);return Array.isArray(ge)?ge:[]}catch{return[]}}function te(v){var z,W;typeof window>"u"||(W=(z=window.localStorage)==null?void 0:z.setItem)==null||W.call(z,Bl,JSON.stringify(v))}function J(v){const W=[v,..._.value.filter(ge=>ge.id!==v.id)].slice(0,10);_.value=W,te(W)}function S(){var z;const v=(z=r.map)==null?void 0:z.value;v&&(v.getLayer(rr)&&v.removeLayer(rr),v.getSource(lo)&&v.removeSource(lo))}function F(){var z;const v=(z=r.map)==null?void 0:z.value;v&&(v.getLayer(En)&&v.removeLayer(En),v.getLayer(ao)&&v.removeLayer(ao),v.getSource(_n)&&v.removeSource(_n))}function M(v){var ke,_e,Be,Te;if(!((ke=o.config)!=null&&ke.showMarker)||!v)return;const z=(_e=r.map)==null?void 0:_e.value;if(!z)return;F(),j();const W={type:"Feature",geometry:v,properties:{}};z.addSource(_n,{type:"geojson",data:W});const ge=((Be=o.config)==null?void 0:Be.geometryColor)||((Te=o.config)==null?void 0:Te.markerColor)||"#3B82F6";z.addLayer({id:En,type:"fill",source:_n,paint:{"fill-color":ge,"fill-opacity":.3}}),z.addLayer({id:ao,type:"line",source:_n,paint:{"line-color":ge,"line-width":1,"line-opacity":1}}),X(z)}let B=null;function j(){B&&(cancelAnimationFrame(B),B=null)}function X(v){const W=performance.now();function ge(ke){if(!v.getLayer(En))return;const Be=(ke-W)%1200/1200,Te=Math.sin(Be*Math.PI),Ye=.2+Te*.3,Xe=1+Te*1;v.setPaintProperty(En,"fill-opacity",Ye),v.setPaintProperty(ao,"line-width",Xe),B=requestAnimationFrame(ge)}B=requestAnimationFrame(ge)}function he(v,z){var ke,_e,Be;if(!((ke=o.config)!=null&&ke.showMarker))return;S(),F();const W=(_e=r.map)==null?void 0:_e.value;if(!W)return;if(z){M(z);return}const ge=((Be=o.config)==null?void 0:Be.markerColor)||"#3B82F6";W.addSource(lo,{type:"geojson",data:{type:"Feature",geometry:{type:"Point",coordinates:[v.lng,v.lat]},properties:{}}}),W.addLayer({id:rr,type:"circle",source:lo,paint:{"circle-radius":7,"circle-color":ge,"circle-stroke-width":2,"circle-stroke-color":"#ffffff"}})}const Z=e.reactive({position:"absolute",left:"0px",top:"0px",width:"100%",display:"none"});function P(){var _e;if(!x.value)return;const v=x.value.getBoundingClientRect(),z=(_e=b.value)==null?void 0:_e.getBoundingClientRect(),W=(z==null?void 0:z.width)??v.width,ge=((z==null?void 0:z.left)??v.left)+window.scrollX,ke=v.bottom+window.scrollY+Qf;Z.left=`${ge}px`,Z.top=`${ke}px`,Z.width=`${W}px`,Z.display="block"}const q=()=>{N.value&&P()};function H(){Y&&(clearTimeout(Y),Y=null)}e.watch(f,()=>{p.value="",k.value=!1,C.value=[],E.value=!1,H(),ee.value=!1,S(),F()}),e.watch(N,v=>{v?e.nextTick(()=>{P()}):Z.display="none"}),e.watch(p,v=>{if(f.value!=="address"&&f.value!=="nominatim"){C.value=[],H();return}if(!v.trim()){C.value=[],E.value=_.value.length>0,H();return}H(),E.value=!0,Y=window.setTimeout(()=>{Ue(v).catch(z=>{const W=(z==null?void 0:z.message)||"Помилка пошуку адреси";Ee.notify({type:"error",title:"Пошук адреси",message:W})})},T.value)});function re(v){var ge;const z=[];g.value&&z.push(g.value),v instanceof HTMLElement&&z.push(v);const W=(ge=h.value)==null?void 0:ge.querySelectorAll("li");W==null||W.forEach(ke=>{z.push(ke)}),z.forEach(ke=>{ke.dispatchEvent(new MouseEvent("mouseleave",{bubbles:!0}))})}function I(v){k.value&&re(v.target),k.value=!k.value}function le(v,z){re(z==null?void 0:z.target),f.value=v}function me(){p.value="",C.value=[],E.value=!1,ee.value=!1,S(),F()}function be(v){const z=v.target;if(k.value){const W=h.value;W&&!W.contains(z)&&(re(z),k.value=!1)}if(N.value){const W=V.value,ge=x.value;W&&!W.contains(z)&&(!ge||!ge.contains(z))&&(E.value=!1)}}e.onMounted(()=>{_.value=oe(),window.addEventListener("click",be,!0),window.addEventListener("scroll",q,!0),window.addEventListener("resize",q)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",be,!0),window.removeEventListener("scroll",q,!0),window.removeEventListener("resize",q),H(),S(),F()});function A(v){return v==="xy"?"Координати":v==="parcel"?"Кадастр":v==="nominatim"?"Nominatim":"Адресний"}function K(v){switch(v){case"xy":return"Пошук за географічними координатами. Введіть широту і довготу через пробіл або кому (lat lng або lng lat).";case"parcel":return"Пошук земельної ділянки за кадастровим номером у форматі 0000000000:00:000:0000 з відображенням меж ділянки на карті.";case"nominatim":return"Пошук адрес та обʼєктів через Nominatim з обмеженням у межах карти.";case"address":return"Пошук адрес через локальний сервіс addressSuggest (швидкі підказки з вашого геопорталу).";default:return""}}function fe(v){const z=v.replace(/[,]+/g," ").trim();if(!z)return null;const W=z.split(/\s+/).filter(Boolean);if(W.length<2)return null;const ge=W.slice(0,2).map(Number);if(!ge.every(nt=>Number.isFinite(nt)))return null;let[ke,_e]=ge,Be=ke,Te=_e;const Ye=nt=>Math.abs(nt)<=90,Xe=nt=>Math.abs(nt)<=180;if(!Ye(Be)||!Xe(Te))if(Ye(Te)&&Xe(Be))Be=_e,Te=ke;else return null;return{lat:Be,lng:Te}}function ie(v){return((v==null?void 0:v.items)||[]).map((W,ge)=>{var ke,_e,Be;return{id:String((W==null?void 0:W.id)??ge),title:(W==null?void 0:W.title)||((ke=W==null?void 0:W.address)==null?void 0:ke.label)||"Знайдений обʼєкт",lat:Number((_e=W==null?void 0:W.position)==null?void 0:_e.lat),lng:Number((Be=W==null?void 0:W.position)==null?void 0:Be.lng)}})}function de(v){const z=(v==null?void 0:v.result)||(v==null?void 0:v.data)||v;if(!z)return[];const W=z.geom_centroid;if(!W||!Array.isArray(W.coordinates))return[];const[ge,ke]=W.coordinates;return!Number.isFinite(ke)||!Number.isFinite(ge)?[]:[{id:"parcel",title:z.cadnum||z.cad_num||"Земельна ділянка",lat:ke,lng:ge,geom:z.geom||null}]}function pe(v){return(Array.isArray(v==null?void 0:v.features)?v.features:[]).map((W,ge)=>{var nt,mt,Yt;const ke=(nt=W==null?void 0:W.geometry)==null?void 0:nt.coordinates,_e=Number(ke==null?void 0:ke[0]),Be=Number(ke==null?void 0:ke[1]);if(!Number.isFinite(Be)||!Number.isFinite(_e))return null;const Te=(W==null?void 0:W.properties)||{},Ye=((mt=Te==null?void 0:Te.geocoding)==null?void 0:mt.label)||(Te==null?void 0:Te.display_name)||(Te==null?void 0:Te.label)||"Адреса";return{id:String(((Yt=Te==null?void 0:Te.geocoding)==null?void 0:Yt.place_id)||(Te==null?void 0:Te.place_id)||ge),title:Ye,lat:Be,lng:_e}}).filter(W=>!!W)}function ve(v){return Number.isFinite(v.lat)&&Number.isFinite(v.lng)}function U(v){const z=Number(v);return Number.isFinite(z)?z:null}function ne(v){var ke,_e,Be,Te,Ye,Xe;const z=U(v.lng)??U(v.lon)??U(v.longitude)??U(v.x),W=U(v.lat)??U(v.latitude)??U(v.y);if(z!=null&&W!=null)return{lat:W,lng:z};const ge=((ke=v==null?void 0:v.geometry)==null?void 0:ke.coordinates)??((_e=v==null?void 0:v.geom_centroid)==null?void 0:_e.coordinates)??((Be=v==null?void 0:v.centroid)==null?void 0:Be.coordinates)??((Ye=(Te=v==null?void 0:v.geojson)==null?void 0:Te.geometry)==null?void 0:Ye.coordinates)??((Xe=v==null?void 0:v.geom)==null?void 0:Xe.coordinates);if(Array.isArray(ge)&&ge.length>=2){const nt=U(ge[0]),mt=U(ge[1]);if(nt!=null&&mt!=null)return{lat:mt,lng:nt}}return null}function we(v){return(Array.isArray(v==null?void 0:v.data)?v.data:[]).map((W,ge)=>{const ke=ne(W),_e=String(W.text??W.title??W.label??W.name??W.address??W.display_name??W.id??"Адреса"),Be=String(W.id??W.code??W.value??ge);return ke?{id:Be,title:_e,...ke}:{id:Be,title:_e}}).filter(W=>!!(W!=null&&W.title))}function $e(v){const z=c();if(!z)return null;if(z.includes(":name"))return z.replace(":name",encodeURIComponent(v));try{const W=new URL(z,window.location.origin);return v.trim()&&W.searchParams.set("q",v),W.toString()}catch{return z}}async function Pe(v){const z=$e(v);if(!z)return[];const W=await fetch(z);if(!W.ok)throw new Error(`HTTP ${W.status}`);const ge=await W.json();return we(ge)}async function Le(v){const z=new URL(nm);z.searchParams.set("format","geojson"),z.searchParams.set("q",v),z.searchParams.set("addressdetails","1"),z.searchParams.set("bounded","1");const W=i();W&&z.searchParams.set("viewbox",W);const ge=await fetch(z.toString());if(!ge.ok)throw new Error(`HTTP ${ge.status}`);const ke=await ge.json();return pe(ke)}async function Ue(v){if(C.value=[],H(),f.value==="address"){if(!c()){Ee.notify({type:"warning",title:"Пошук адреси",message:"Не налаштовано addressSuggest"});return}const ge=await Pe(v);if(!ge.length){Ee.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}C.value=ge;return}const z=await Le(v);if(!z.length){Ee.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}C.value=z}async function We(v){if(ve(v)){$(v),J(v);return}Ee.notify({type:"warning",title:"Пошук адреси",message:"Геометрія для обраної адреси відсутня"})}function et(){f.value!=="address"&&f.value!=="nominatim"||p.value.trim().length||_.value.length&&(E.value=!0,e.nextTick(()=>{P()}))}function Q(v){const W=v.replace(/\s+/g,"").split(":");if(console.log(W),W.length!==4)return!1;const ge=[10,2,3,4];return W.every((ke,_e)=>ke.length===ge[_e]&&/^\d+$/.test(ke))}function $(v){var W,ge;const z=((W=o.config)==null?void 0:W.zoom)??17;(ge=r.flyTo)==null||ge.call(r,{center:[v.lng,v.lat],zoom:z}),he(v,v.geom),ee.value=!0}async function D(){const v=p.value.trim();if(v){if(f.value==="xy"){const z=fe(v);if(!z){Ee.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}$(z);return}if(f.value==="address"||f.value==="nominatim"){try{await Ue(v)}catch(z){const W=(z==null?void 0:z.message)||"Помилка пошуку адреси";Ee.notify({type:"error",title:"Пошук адреси",message:W})}return}try{const z=new URL(f.value==="here"?em:tm);if(f.value==="here")z.searchParams.set("searchtext",v);else{if(!Q(v)){Ee.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}z.searchParams.set("cadnum",v)}const W=await fetch(z.toString());if(!W.ok)throw new Error(`HTTP ${W.status}`);const ge=await W.json(),ke=f.value==="here"?ie(ge):de(ge);if(!ke.length)Ee.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const _e=ke[0];$(_e)}}catch(z){const W=(z==null?void 0:z.message)||"Помилка пошуку";Ee.notify({type:"error",title:"Пошук",message:W})}}}return(v,z)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"widgetRef",ref:b,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]"},[e.createElementVNode("form",{class:"flex gap-2",onSubmit:e.withModifiers(D,["prevent"])},[a.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:h,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:I},[e.withDirectives((e.openBlock(),e.createElementBlock("span",{ref_key:"selectedToolLabelRef",ref:g,class:"block w-full truncate",title:A(f.value)},[e.createTextVNode(e.toDisplayString(A(f.value)),1)],8,Of)),[[n,K(f.value)]]),(e.openBlock(),e.createElementBlock("svg",{class:e.normalizeClass(["w-4 h-4 text-gray-500 transition-transform",{"rotate-180":k.value}]),viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[...z[3]||(z[3]=[e.createElementVNode("path",{d:"M6 9l6 6 6-6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))]),k.value?(e.openBlock(),e.createElementBlock("div",Uf,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,W=>e.withDirectives((e.openBlock(),e.createElementBlock("li",{key:W,class:"px-3 py-2 cursor-pointer hover:bg-gray-100 text-gray-900",onClick:ge=>le(W,ge)},[e.createTextVNode(e.toDisplayString(A(W)),1)],8,qf)),[[n,K(W)]])),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"searchWrapperRef",ref:x,class:"relative flex-1 min-w-[140px]"},[f.value==="parcel"?(e.openBlock(),e.createBlock(e.unref(ol.VsInputMask),{key:0,modelValue:p.value,"onUpdate:modelValue":z[0]||(z[0]=W=>p.value=W),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",ee.value?"!pr-14":"!pr-8"])},null,8,["modelValue","class"])):e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:1,"onUpdate:modelValue":z[1]||(z[1]=W=>p.value=W),placeholder:m.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",ee.value?"!pr-14":"!pr-8"]),onFocus:et},null,42,Hf)),[[e.vModelText,p.value,void 0,{trim:!0}]]),e.createElementVNode("div",Wf,[ee.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"flex items-center text-gray-400 hover:text-gray-600","aria-label":"Очистити",onClick:me},[...z[4]||(z[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),z[5]||(z[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))]),N.value?(e.openBlock(),e.createBlock(e.Teleport,{key:2,to:"body"},[e.createElementVNode("div",{ref_key:"addressResultsRef",ref:V,class:"vs-select__options mt-1 bg-white border border-gray-300 rounded-lg shadow-lg text-sm text-gray-900 z-50",style:e.normalizeStyle(Z)},[e.createElementVNode("div",Yf,[e.createElementVNode("span",Gf,e.toDisplayString(ae.value),1),e.createElementVNode("button",{type:"button",class:"text-gray-400 hover:text-gray-600","aria-label":"Закрити",onClick:z[2]||(z[2]=W=>E.value=!1)}," ✕ ")]),e.createElementVNode("div",Kf,[R.value.length?(e.openBlock(),e.createElementBlock("ul",Zf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(R.value,W=>(e.openBlock(),e.createElementBlock("li",{key:W.id,class:"px-3 py-2 cursor-pointer hover:bg-gray-50",onClick:ge=>We(W)},e.toDisplayString(W.title),9,Xf))),128))])):(e.openBlock(),e.createElementBlock("div",Jf,e.toDisplayString(ue.value),1))])],4)])):e.createCommentVNode("",!0)],512)],32)],512))}}),[["__scopeId","data-v-c278e4f1"]]),om="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",rm="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",lm=Ae(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:r,removeControl:l}=Qe(),s=e.ref(null),i=e.ref(null),c=e.ref(null),u=e.ref(null);let d=null;function y(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function a(E){if(Array.from(document.styleSheets).some(T=>{var Y;return(Y=T==null?void 0:T.href)==null?void 0:Y.includes(E)}))return;const N=document.createElement("link");N.rel="stylesheet",N.href=E,document.head.appendChild(N)}function m(E){return new Promise((_,N)=>{const T=Array.from(document.scripts).find(ee=>ee.src===E);if(T){if(T._loaded)return _();T.addEventListener("load",()=>_()),T.addEventListener("error",()=>N(new Error(`Failed ${E}`)));return}const Y=document.createElement("script");Y.src=E,Y.async=!0,Y.onload=()=>{Y._loaded=!0,_()},Y.onerror=()=>N(new Error(`Failed ${E}`)),document.head.appendChild(Y)})}function f(){var _,N,T;const E=window;return E.MapboxExportControl||((_=E.mapboxgl)==null?void 0:_.MapboxExportControl)||((N=E.mapboxglExport)==null?void 0:N.MapboxExportControl)||((T=E.mapboxglExport)==null?void 0:T.default)||null}function p(){const E=document.createElementNS("http://www.w3.org/2000/svg","svg");return E.setAttribute("xmlns","http://www.w3.org/2000/svg"),E.setAttribute("viewBox","0 0 24 24"),E.setAttribute("width","18"),E.setAttribute("height","18"),E.setAttribute("fill","none"),E.setAttribute("stroke","currentColor"),E.setAttribute("stroke-width","2"),E.setAttribute("stroke-linecap","round"),E.setAttribute("stroke-linejoin","round"),E.classList.add("map-control-button__icon"),[{d:"M0 0h24v24H0z",stroke:"none",fill:"none"},{d:"M17 17h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-14a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2"},{d:"M17 9v-4a2 2 0 0 0 -2 -2h-6a2 2 0 0 0 -2 2v4"},{d:"M7 13m0 2a2 2 0 0 1 2 -2h6a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2z"}].forEach((N,T)=>{const Y=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries(N).forEach(([ee,R])=>{Y.setAttribute(ee,R)}),E.appendChild(Y)}),E}function k(){const E=document.createElement("button");E.id="print-btn",E.type="button",E.className=["group relative flex items-center justify-center","w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200","bg-white text-gray-700 hover:bg-gray-50 hover:scale-105","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2"].join(" "),E.setAttribute("aria-label","Друк карти");const _=p(),N=document.createElement("span");return N.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(" "),N.textContent="Друк карти",N.setAttribute("aria-hidden","true"),E.appendChild(_),E.appendChild(N),E.addEventListener("click",T=>{T.stopPropagation(),h()}),u.value=E,E}function h(){if(!c.value)return;c.value.style.display==="block"?b():g()}function g(){var E,_,N;c.value&&(c.value.style.display="block",(E=u.value)==null||E.classList.add("scale-105","shadow-xl"),(_=i.value)==null||_.toggleCrosshair(!0),(N=i.value)==null||N.togglePrintableArea(!0),document.addEventListener("click",x))}function b(){var E,_,N;c.value&&(c.value.style.display="none",(E=u.value)==null||E.classList.remove("scale-105","shadow-xl"),(_=i.value)==null||_.toggleCrosshair(!1),(N=i.value)==null||N.togglePrintableArea(!1),document.removeEventListener("click",x))}function x(E){const _=s.value;_&&(E.target&&_.contains(E.target)||b())}function C(E){const _={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};E.querySelectorAll("label, option").forEach(T=>{var ee;const Y=(ee=T.textContent)==null?void 0:ee.trim();Y&&_[Y]&&(T.textContent=_[Y])});const N=E.querySelector("button");N&&(N.textContent="Друкувати")}function V(E){const _=E.querySelector(".mapboxgl-export-list");if(!_||!s.value)return;c.value=_;const N=E.querySelector("button");if(N&&(N.style.display="none"),E.style.display="none",!u.value){const Y=k();s.value.appendChild(Y)}_.style.display="none";const T="_printControlBound";if(!_[T]){const Y=ee=>ee.stopPropagation();_.addEventListener("click",Y),_.addEventListener("mousedown",Y),_[T]=!0}s.value.appendChild(_),C(_)}return e.onMounted(async()=>{await(o==null?void 0:o());const E=n.value;if(!E)return;a(om),y();try{await m(rm)}catch(T){console.warn("[MapPrintControl] load error",T);return}const _=f();if(!_)return;const N=new _({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(i.value=N,typeof N.onAdd=="function"){const T=N.onAdd.bind(N);N.onAdd=Y=>{const ee=T(Y);return setTimeout(()=>ee&&V(ee),50),ee}}r?r(N,"top-right"):E.addControl(N,"top-right"),d=T=>{T.key==="Escape"&&b()},document.addEventListener("keyup",d)}),e.onBeforeUnmount(()=>{b(),d&&(document.removeEventListener("keyup",d),d=null);const E=n.value;if(i.value)try{l?l(i.value):E==null||E.removeControl(i.value)}catch{}i.value=null}),(E,_)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:s,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-4fae7635"]]),am=["aria-label"],sm={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"},im=e.defineComponent({__name:"MapCompareControl",props:{hasCompareOptions:{type:Boolean},isCompareOpen:{type:Boolean}},emits:["toggle"],setup(t){return(n,o)=>t.hasCompareOptions?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",t.isCompareOpen?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":t.isCompareOpen?"Вимкнути порівняння":"Порівняння підложок",onClick:o[0]||(o[0]=e.withModifiers(r=>n.$emit("toggle"),["stop"]))},[e.createElementVNode("span",sm,e.toDisplayString(t.isCompareOpen?"Вимкнути порівняння":"Порівняння підложок"),1),e.createVNode(e.unref(ye.Columns2),{class:"w-4 h-4"})],10,am)):e.createCommentVNode("",!0)}}),cm={class:"map-center-control"},dm=["aria-label"],um={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"},jt=Ae(e.defineComponent({name:"MapCenterControl",__name:"MapCenterControl",props:{center:{},zoom:{},targetCenter:{},targetZoom:{},targetLabel:{},targetAriaLabel:{}},setup(t){const n=t,{map:o,ready:r}=Qe(),l=e.ref(null),s=e.ref(null),i=e.ref(null),c=e.ref(null),u=Oo(),d=e.computed(()=>{var b;return((b=u.value)==null?void 0:b.map)??null});function y(b){if(Array.isArray(b)&&b.length>=2){const[x,C]=b.slice(0,2).map(V=>Number(V));return Number.isNaN(x)||Number.isNaN(C)?null:[x,C]}if(b&&typeof b=="object"){const x=b,C=x.lng??x.lon??x.long??x.x,V=x.lat??x.y;if(C!=null&&V!=null){const E=Number(C),_=Number(V);if(!Number.isNaN(E)&&!Number.isNaN(_))return[E,_]}}if(typeof b=="string"){const x=b.split(",").map(C=>Number(C.trim()));if(x.length>=2&&x.every(C=>!Number.isNaN(C)))return[x[0],x[1]]}return null}function a(b){const x=y(b);x&&(l.value=x)}function m(b){const x=Number(b);Number.isNaN(x)||(s.value=x)}e.watch(()=>n.center,b=>a(b),{immediate:!0}),e.watch(()=>n.zoom,b=>m(b),{immediate:!0}),e.watch(()=>n.targetCenter,b=>{i.value=y(b)},{immediate:!0}),e.watch(()=>n.targetZoom,b=>{const x=Number(b);c.value=Number.isNaN(x)?null:x},{immediate:!0}),e.watch(()=>{var b;return(b=d.value)==null?void 0:b.center},b=>{a(b)},{immediate:!0}),e.watch(()=>{var b;return(b=d.value)==null?void 0:b.zoom},b=>{m(b)},{immediate:!0});const f=e.computed(()=>{var b;return((b=n.targetLabel)==null?void 0:b.trim())||"Точка"}),p=e.computed(()=>n.targetAriaLabel||"Перейти до точки"),k=e.computed(()=>!!i.value);e.onMounted(async()=>{await(r==null?void 0:r());const b=o.value;if(b){if(!l.value){const x=b.getCenter();l.value=[x.lng,x.lat]}s.value==null&&(s.value=b.getZoom())}});function h(){const b=o.value;if(!b)return;const x=l.value||(()=>{const V=b.getCenter();return[V.lng,V.lat]})(),C=s.value??b.getZoom();b.flyTo({center:x,zoom:C})}function g(){const b=o.value;if(!b||!i.value)return;const x=c.value??s.value??b.getZoom();b.flyTo({center:i.value,zoom:x})}return(b,x)=>(e.openBlock(),e.createElementBlock("div",cm,[k.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"])},[x[0]||(x[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(ye.House),{class:"w-4 h-4"})])),k.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":p.value,onClick:e.withModifiers(g,["stop"])},[e.createElementVNode("span",um,e.toDisplayString(f.value),1),e.createVNode(e.unref(ye.MapPin),{class:"w-4 h-4"})],8,dm)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-03fa94f6"]]),fm={class:"map-navigation-control"},mm=["disabled"],pm=["disabled"],gm=["disabled"],ym=Ae(e.defineComponent({__name:"MapNavigationControl",setup(t){const{map:n,ready:o}=Qe(),r=e.ref(!1),l=e.ref(0),s=e.ref(0),i=e.computed(()=>({transform:`scale(${(1+s.value/70).toFixed(5)}) rotateZ(0deg) rotateX(${s.value}deg) rotateZ(${l.value}deg)`}));function c(){var m,f;const a=n.value;a&&(l.value=Number(((m=a.getBearing)==null?void 0:m.call(a))??0),s.value=Number(((f=a.getPitch)==null?void 0:f.call(a))??0))}e.onMounted(async()=>{var m,f,p;await(o==null?void 0:o());const a=n.value;r.value=!!a,c(),(m=a==null?void 0:a.on)==null||m.call(a,"rotate",c),(f=a==null?void 0:a.on)==null||f.call(a,"pitch",c),(p=a==null?void 0:a.on)==null||p.call(a,"load",c)}),e.onBeforeUnmount(()=>{var m,f,p;const a=n.value;(m=a==null?void 0:a.off)==null||m.call(a,"rotate",c),(f=a==null?void 0:a.off)==null||f.call(a,"pitch",c),(p=a==null?void 0:a.off)==null||p.call(a,"load",c)});function u(){const a=n.value;a!=null&&a.zoomIn&&a.zoomIn()}function d(){const a=n.value;a!=null&&a.zoomOut&&a.zoomOut()}function y(){const a=n.value;a!=null&&a.easeTo&&a.easeTo({bearing:0,pitch:0})}return(a,m)=>(e.openBlock(),e.createElementBlock("div",fm,[e.createElementVNode("button",{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",disabled:!r.value,"aria-label":"Zoom in",title:"Zoom in",onClick:e.withModifiers(u,["stop"])},[m[0]||(m[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(ye.Plus),{class:"w-4 h-4","stroke-width":2.25})],8,mm),e.createElementVNode("button",{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",disabled:!r.value,"aria-label":"Zoom out",title:"Zoom out",onClick:e.withModifiers(d,["stop"])},[m[1]||(m[1]=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(ye.Minus),{class:"w-4 h-4","stroke-width":2.25})],8,pm),e.createElementVNode("button",{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",disabled:!r.value,"aria-label":"Reset north",title:"Reset north",onClick:e.withModifiers(y,["stop"])},[m[2]||(m[2]=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(ye.Navigation2),{class:"w-4 h-4","stroke-width":2.25,"aria-hidden":"true",style:e.normalizeStyle(i.value)},null,8,["style"])],8,gm)]))}}),[["__scopeId","data-v-14b11a99"]]),hm={class:"cursor-coordinates"},bm={class:"cursor-coordinates__text"},xm=Ae(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",hm,[e.createElementVNode("span",bm,e.toDisplayString(t.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),km={class:"minimap__wrapper"},so="minimap-viewport",wm="minimap-viewport-layer",_m=Ae(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var x,C,V,E;const n=t,o=((C=(x=e.getCurrentInstance())==null?void 0:x.appContext.config.globalProperties)==null?void 0:C.$settings)||null,r=It((V=o==null?void 0:o.map)==null?void 0:V.center)||[30,50],l=e.ref(null),s=e.shallowRef(null),i=(E=n.options)==null?void 0:E.active,c=e.ref(i===void 0?!1:!!i);function u(_,N){return typeof _=="number"&&Number.isFinite(_)?_:N}const d=e.computed(()=>{var ee,R;const _=(ee=n.options)==null?void 0:ee.width,N=(R=n.options)==null?void 0:R.height,T=u(n.width??_,210),Y=u(n.height??N,150);return{width:`${T}px`,height:`${Y}px`}});function y(){var N,T;const _=(T=(N=n.mapContext)==null?void 0:N.map)==null?void 0:T.value;if(!_||typeof _.getStyle!="function")return null;try{const Y=_.getStyle();return Y?JSON.parse(JSON.stringify(Y)):null}catch{return null}}let a=null;function m(){var ee;if(typeof window>"u"||s.value||!l.value)return;const _=y(),N=r,T={container:l.value,style:_??{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:N,zoom:((ee=n.options)==null?void 0:ee.zoom)??3,interactive:!1,attributionControl:!1},Y={...T,...n.options??{}};Y.container=T.container,s.value=new maplibregl.Map(Y),s.value.on("load",()=>{p(),h()})}function f(){if(!s.value)return;const _=y();_&&(s.value.once("styledata",()=>{p(),h()}),s.value.setStyle(_))}function p(){if(s.value){if(typeof s.value.isStyleLoaded=="function"&&!s.value.isStyleLoaded()){s.value.once("styledata",()=>{p(),h()});return}s.value.getSource(so)||(s.value.addSource(so,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),s.value.addLayer({id:wm,type:"fill",source:so,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function k(){c.value=!c.value,c.value&&e.nextTick(()=>{var _;return(_=s.value)==null?void 0:_.resize()})}function h(){var ae,ue;const _=(ue=(ae=n.mapContext)==null?void 0:ae.map)==null?void 0:ue.value;if(!s.value||!_||!_.getBounds)return;if(typeof s.value.isStyleLoaded=="function"&&!s.value.isStyleLoaded()){s.value.once("styledata",()=>{h()});return}const N=_.getBounds();if(!N)return;const T=N.getNorthEast(),Y=N.getSouthWest();if(!T||!Y)return;const ee=[[Y.lng,T.lat],[T.lng,T.lat],[T.lng,Y.lat],[Y.lng,Y.lat],[Y.lng,T.lat]],R=s.value.getSource(so);if(!R){p();return}R.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[ee]},properties:{}})}function g(){var T;const _=n.mapContext,N=(T=_==null?void 0:_.map)==null?void 0:T.value;!(_!=null&&_.on)||!N||(a==null||a(),a=_.on("move",h),h())}async function b(){const _=n.mapContext;if(_){if(typeof _.ready=="function")try{await _.ready()}catch{return}g()}}return e.onMounted(()=>{m(),b()}),e.watch(()=>n.mapContext,()=>{b(),h()}),e.watch(()=>{var _,N;return(N=(_=n.mapContext)==null?void 0:_.map)==null?void 0:N.value},()=>{s.value&&(f(),b())}),e.watch(d,()=>{s.value&&e.nextTick(()=>{var _;return(_=s.value)==null?void 0:_.resize()})}),e.watch(()=>n.options,()=>{var N;a==null||a(),a=null,s.value&&(s.value.remove(),s.value=null);const _=(N=n.options)==null?void 0:N.active;typeof _=="boolean"&&(c.value=_),e.nextTick(()=>{m(),b()})},{deep:!0}),e.onBeforeUnmount(()=>{a==null||a(),a=null,s.value&&(s.value.remove(),s.value=null)}),(_,N)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["minimap",{"minimap--open":c.value}])},[e.createElementVNode("button",{type:"button",class:"minimap__button",onClick:k},[e.createVNode(e.unref(ye.ArrowUpLeft))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",km,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:l,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(d.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,c.value]])]),_:1})],2))}}),[["__scopeId","data-v-bc754c89"]]),Em={key:0,class:"pointer-events-none absolute inset-0 z-[90]"},Cm={class:"pointer-events-auto absolute right-[54px] top-[103px] z-[131] flex items-start gap-2"},Nm={class:"compare-panel min-w-[220px] overflow-hidden rounded-[10px]"},Vm={class:"max-h-[260px] overflow-auto pb-1"},$m=["onClick"],Bm={class:"mt-1 border-t border-slate-200 p-2"},Sm="https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-compare@0.5.0/dist/maplibre-gl-compare.min.css",vl="https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-compare@0.5.0/dist/maplibre-gl-compare.min.js",ct="compare-base",dt="compare-base-overlay",vm=Ae(e.defineComponent({__name:"MapCompare",props:{compareBasemaps:{},isCompareOpen:{type:Boolean},selectedBasemapId:{}},emits:["close"],setup(t,{emit:n}){const o=t,r=n,{map:l,ready:s}=Qe(),i=e.ref(null),c=e.ref(null),u=e.ref(null),d=e.ref(!1),y=e.ref(null);y.__layerStoreMode="isolated";const a=e.ref(null),m=e.ref(!1),f=e.ref(!1),p=e.ref(!1);let k=null,h=null,g=null,b=!1,x="";const C=new Map,V=e.computed(()=>o.compareBasemaps||[]);let E=null;function _(){var P;if(typeof window>"u"||(P=window.maplibregl)!=null&&P.Compare)return Promise.resolve();if(!Array.from(document.styleSheets).some(q=>{var H;return!!((H=q==null?void 0:q.href)!=null&&H.includes("maplibre-gl-compare.min.css"))})){const q=document.createElement("link");q.rel="stylesheet",q.href=Sm,document.head.appendChild(q)}return E||(E=new Promise((q,H)=>{var le;if((le=window.maplibregl)!=null&&le.Compare){q();return}const re=Array.from(document.querySelectorAll("script")).find(me=>me.src===vl);if(re){re.addEventListener("load",()=>q(),{once:!0}),re.addEventListener("error",()=>H(new Error("Failed to load map compare script")),{once:!0});return}const I=document.createElement("script");I.src=vl,I.async=!0,I.onload=()=>q(),I.onerror=()=>{I.remove(),H(new Error("Failed to load map compare script"))},document.head.appendChild(I)}),E)}function N(){var Z,P,q;k==null||k(),k=null,h==null||h(),h=null,g==null||g(),g=null,C.forEach(H=>{var re;return(re=H==null?void 0:H.remove)==null?void 0:re.call(H)}),C.clear(),f.value=!1,p.value=!1,x="",(Z=a.value)==null||Z.remove(),a.value=null,(q=(P=y.value)==null?void 0:P.remove)==null||q.call(P),y.value=null,m.value=!1}function T(Z){try{return JSON.stringify(Z??null)}catch{return""}}function Y(Z,P){var H;if(!Z||!P)return;(Array.isArray((H=Z.listImages)==null?void 0:H.call(Z))?Z.listImages():[]).forEach(re=>{var le,me,be;if(!re||(le=P.hasImage)!=null&&le.call(P,re))return;const I=(me=Z.getImage)==null?void 0:me.call(Z,re);if(I)try{(be=P.addImage)==null||be.call(P,re,I)}catch{}})}function ee(Z){var P;try{return((P=Z==null?void 0:Z.getStyle)==null?void 0:P.call(Z))??null}catch{return null}}function R(Z){if(Z==null)return Z;try{return JSON.parse(JSON.stringify(Z))}catch{return Z}}function ae(Z){if(!Z)return null;try{if(typeof Z.serialize=="function"){const P=Z.serialize();if((P==null?void 0:P.data)!=null)return P.data;if((P==null?void 0:P.tiles)!=null)return P.tiles}}catch{}return Z._data!=null?Z._data:Z.data!=null?Z.data:null}function ue(Z,P){const q=ee(Z),H=(q==null?void 0:q.sources)||{};Object.entries(H).forEach(([re,I])=>{var be,A;const le=(be=Z==null?void 0:Z.getSource)==null?void 0:be.call(Z,re),me=(A=P==null?void 0:P.getSource)==null?void 0:A.call(P,re);if(!(!le||!me)&&(I==null?void 0:I.type)==="geojson"&&typeof me.setData=="function"){const K=ae(le);K!=null&&me.setData(R(K))}})}function oe(Z,P){return!Z||["base","base-overlay",ct,dt].includes(Z)?!1:!!(P!=null&&P.opts)}function te(){const Z=y;if(!(Z!=null&&Z.value)||!m.value)return;const P=Ie(void 0,void 0,l);Object.entries(P).forEach(([q,H])=>{var le;if(!oe(q,H))return;const re=R(H.opts)||{},I=Ie(q,void 0,Z);if(!I){const me=Ie(q,re,Z);C.set(q,me);return}C.set(q,I),T(I.opts)!==T(re)&&((le=I.refresh)==null||le.call(I,re))})}function J(Z){var P;try{const q=(P=Z==null?void 0:Z.getStyle)==null?void 0:P.call(Z);return q?JSON.parse(JSON.stringify(q)):null}catch{return null}}function S(Z,P){const q=J(Z)||{version:8,sources:{},layers:[]};if(q.sources||(q.sources={}),q.layers||(q.layers=[]),P!=null&&P.url){q.sources[ct]={type:"raster",tiles:[P.url],tileSize:256};const H=q.layers.find(re=>re.id===ct);H?(H.type="raster",H.source=ct,H.layout||(H.layout={}),H.layout.visibility="visible"):q.layers.unshift({id:ct,type:"raster",source:ct})}if(P!=null&&P.overlayUrl){q.sources[dt]={type:"raster",tiles:[P.overlayUrl],tileSize:256};const H=q.layers.find(re=>re.id===dt);if(H)H.type="raster",H.source=dt,H.layout||(H.layout={}),H.layout.visibility="visible";else{const re=q.layers.findIndex(le=>le.id===ct),I=re>=0?re+1:0;q.layers.splice(I,0,{id:dt,type:"raster",source:dt})}}return q}function F(Z){var be,A,K,fe,ie,de,pe,ve,U,ne,we,$e,Pe,Le,Ue;if(!y.value)return;const P=y.value,q=(be=P.getSource)==null?void 0:be.call(P,ct),H=(A=P.getSource)==null?void 0:A.call(P,dt),re=!!((K=P.getLayer)!=null&&K.call(P,ct)),I=!!((fe=P.getLayer)!=null&&fe.call(P,dt)),le=ee(P),me=(de=(ie=le==null?void 0:le.layers)==null?void 0:ie[0])==null?void 0:de.id;if(!(Z!=null&&Z.url)){re&&((pe=P.setLayoutProperty)==null||pe.call(P,ct,"visibility","none")),I&&((ve=P.setLayoutProperty)==null||ve.call(P,dt,"visibility","none"));return}re&&((U=P.setLayoutProperty)==null||U.call(P,ct,"visibility","visible")),q!=null&&q.setTiles?q.setTiles([Z.url]):q||((ne=P.addSource)==null||ne.call(P,ct,{type:"raster",tiles:[Z.url],tileSize:256}),(we=P.addLayer)==null||we.call(P,{id:ct,type:"raster",source:ct},me)),Z.overlayUrl?(I&&(($e=P.setLayoutProperty)==null||$e.call(P,dt,"visibility","visible")),H!=null&&H.setTiles?H.setTiles([Z.overlayUrl]):H||((Pe=P.addSource)==null||Pe.call(P,dt,{type:"raster",tiles:[Z.overlayUrl],tileSize:256}),(Le=P.addLayer)==null||Le.call(P,{id:dt,type:"raster",source:dt}))):I&&((Ue=P.setLayoutProperty)==null||Ue.call(P,dt,"visibility","none")),(!q||typeof q.setTiles!="function")&&P.setStyle(S(ee(P),Z))}function M(){if(!y.value||!m.value)return;const Z=V.value.find(P=>P.id===u.value);F(Z)}async function B(){const Z=l.value,P=y.value;if(!Z||!P||!m.value)return;const q=V.value.find(le=>le.id===u.value),H=ee(Z),re=S(H,q),I=T(re);!I||I===x||(x=I,P.setStyle(re),Y(Z,P),ue(Z,P),p.value=!1,await new Promise(le=>{var me,be;if((me=P.isStyleLoaded)!=null&&me.call(P)){le();return}(be=P.once)==null||be.call(P,"load",()=>le())}),te())}function j(){p.value=!0,!b&&(b=!0,queueMicrotask(()=>{b=!1,B()}))}function X(){p.value&&B()}async function he(){var A,K,fe,ie,de,pe,ve,U;if(!o.isCompareOpen||a.value||y.value||(await(s==null?void 0:s()),await e.nextTick(),!l.value||!i.value||!c.value))return;await _();const Z=l.value,P=V.value.find(ne=>ne.id===u.value),q=S({},P),H=(A=Z.getCenter)==null?void 0:A.call(Z),re=(K=Z.getZoom)==null?void 0:K.call(Z),I=((fe=Z.getBearing)==null?void 0:fe.call(Z))??0,le=((ie=Z.getPitch)==null?void 0:ie.call(Z))??0;y.value=new maplibregl.Map({container:c.value,style:q,center:H,zoom:re,bearing:I,pitch:le,attributionControl:!1,interactive:!1}),m.value=!1,await new Promise(ne=>{var we,$e;if(!y.value){ne();return}if(($e=(we=y.value).isStyleLoaded)!=null&&$e.call(we)){m.value=!0,X(),ne();return}y.value.once("load",()=>{m.value=!0,X(),ne()})});const me=(de=window.maplibregl)==null?void 0:de.Compare;if(!me){N(),r("close");return}a.value=new me(Z,y.value,"#comparison-container",{mousemove:!1});const be=()=>{o.isCompareOpen&&j()};Z.on("styledata",be),Z.on("sourcedata",be),Z.on("idle",be),k=()=>Z.off("styledata",be),h=()=>Z.off("sourcedata",be),g=()=>Z.off("idle",be),await B(),Y(Z,y.value),ue(Z,y.value),(pe=Z.resize)==null||pe.call(Z),(U=(ve=y.value).resize)==null||U.call(ve)}return e.watch(()=>o.isCompareOpen,async Z=>{if(Z){await he();return}N()}),e.watch(()=>l.value,async(Z,P)=>{!o.isCompareOpen||!Z||Z===P||(N(),await he())}),e.watch(()=>[o.isCompareOpen,V.value,o.selectedBasemapId],([Z,P,q])=>{var re;if(!Z||u.value&&P.some(I=>I.id===u.value))return;const H=P.find(I=>I.id!==q);u.value=(H==null?void 0:H.id)||((re=P[0])==null?void 0:re.id)||null},{immediate:!0,deep:!0}),e.watch(()=>u.value,()=>{var Z,P,q,H;if(y.value){if((P=(Z=y.value).isStyleLoaded)!=null&&P.call(Z)){m.value=!0,M();return}(H=(q=y.value).once)==null||H.call(q,"load",()=>{m.value=!0,M()})}}),e.onBeforeUnmount(()=>{N()}),(Z,P)=>t.isCompareOpen?(e.openBlock(),e.createElementBlock("div",Em,[e.createElementVNode("div",Cm,[e.createElementVNode("div",Nm,[e.createElementVNode("button",{type:"button",class:"compare-panel__head",onClick:P[0]||(P[0]=q=>d.value=!d.value)},[P[3]||(P[3]=e.createStaticVNode('<span class="compare-panel__head-left" data-v-06bedfe8><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="opacity-70" data-v-06bedfe8><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" data-v-06bedfe8></path><path d="m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65" data-v-06bedfe8></path><path d="m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65" data-v-06bedfe8></path></svg><span class="text-[12px] font-semibold text-slate-900" data-v-06bedfe8>Підложки для порівняння</span></span>',1)),(e.openBlock(),e.createElementBlock("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:e.normalizeClass(["compare-panel__chevron shrink-0 text-slate-400",d.value?"compare-panel__chevron--collapsed":""])},[...P[2]||(P[2]=[e.createElementVNode("path",{d:"m6 9 6 6 6-6"},null,-1)])],2))]),e.withDirectives(e.createElementVNode("div",null,[P[5]||(P[5]=e.createElementVNode("div",{class:"px-3 pb-1 pt-2 text-[10px] font-bold uppercase tracking-[0.07em] text-slate-400"}," Базова карта ",-1)),e.createElementVNode("div",Vm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,q=>(e.openBlock(),e.createElementBlock("button",{key:q.id,type:"button",class:e.normalizeClass(["compare-panel__item",q.id===u.value?"compare-panel__item--active":""]),onClick:H=>u.value=q.id},[e.createElementVNode("span",{class:e.normalizeClass(["compare-panel__radio",q.id===u.value?"compare-panel__radio--active":""])},null,2),e.createElementVNode("span",{class:e.normalizeClass(["text-[12px]",q.id===u.value?"font-semibold text-slate-900":"font-normal text-slate-600"])},e.toDisplayString(q.title),3)],10,$m))),128))]),e.createElementVNode("div",Bm,[e.createElementVNode("button",{type:"button",class:"flex h-[30px] w-full items-center justify-center gap-1.5 rounded-[7px] border border-slate-200 bg-white text-[12px] font-medium text-slate-700 transition-colors hover:bg-slate-50",onClick:P[1]||(P[1]=q=>r("close"))},[...P[4]||(P[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M18 6 6 18"}),e.createElementVNode("path",{d:"m6 6 12 12"})],-1),e.createTextVNode(" Закрити ",-1)])])])],512),[[e.vShow,!d.value]])])]),e.createElementVNode("div",{id:"comparison-container",ref_key:"containerRef",ref:i,class:"absolute inset-0 overflow-hidden z-[90]"},[e.createElementVNode("div",{id:"after",ref_key:"afterRef",ref:c,class:"map-compare"},null,512)],512)])):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-06bedfe8"]]);function lr(t){return[t.lng,t.lat]}function Ll(t){if(!Array.isArray(t)||t.length<2)return null;const n=Number(t[0]),o=Number(t[1]);return Number.isFinite(n)&&Number.isFinite(o)?[n,o]:null}function ar(t){if(!t||typeof t!="object")return null;const n=t;if(n.type==="LineString"&&Array.isArray(n.coordinates)){const o=n.coordinates.map(r=>Ll(r)).filter(r=>!!r);return o.length>=2?{type:"LineString",coordinates:o}:null}if(n.type==="MultiLineString"&&Array.isArray(n.coordinates)){const o=n.coordinates.map(r=>Array.isArray(r)?r.map(l=>Ll(l)).filter(l=>!!l):[]).filter(r=>r.length>=2);return o.length?o.length===1?{type:"LineString",coordinates:o[0]}:{type:"MultiLineString",coordinates:o}:null}return null}function Lm(t){return t?t.type==="LineString"?t.coordinates:t.coordinates.flatMap(n=>n):[]}function Tm(t,n){for(const o of n){const r=t[t.length-1];r&&r[0]===o[0]&&r[1]===o[1]||t.push(o)}}function Am(t){const n=[];for(const o of t)Tm(n,Lm(o.geometry));return n.length>=2?{type:"LineString",coordinates:n}:null}function sr(t){const n=Math.max(0,t);return n>=1e3?`${(n/1e3).toFixed(1)} км`:`${Math.round(n)} м`}function Tl(t){const n=Math.max(0,Math.round(t));if(n<60)return`${n} с`;const o=Math.floor(n/60);if(o<60)return`${o} хв`;const r=Math.floor(o/60),l=o%60;return l>0?`${r} год ${l} хв`:`${r} год`}function Mm(t){const n=Number(t);return Number.isFinite(n)&&n>0?n:null}function Fm(t){const n=Number((t==null?void 0:t.totalDistanceMeters)??0);if(Number.isFinite(n)&&n>0)return sr(n);const o=(t==null?void 0:t.distance)??"",r=Number(o);if(Number.isFinite(r)&&r>0)return sr(r);const l=String(o).trim();return l||""}function Dm(t){const n=Number((t==null?void 0:t.time_for_route)??0);if(Number.isFinite(n)&&n>0)return Tl(n);const o=(t==null?void 0:t.time_for_route)??"",r=String(o).trim();return r||""}function Pm(t){const n=Mm(t);return n!=null?Tl(n):""}function zm(t){const n=Number(t);return Number.isFinite(n)&&n>0?sr(n):String(t??"").trim()}function Im(t){return t?{title:t.title,distanceText:"",durationText:"",icon:t.icon,tone:t.tone,geometry:null}:null}function io(t){const n=t.toLowerCase();return n.includes("left")||n.includes("slight left")||n.includes("sharp left")}function co(t){const n=t.toLowerCase();return n.includes("right")||n.includes("slight right")||n.includes("sharp right")}function jm(t,n){const o=t.toLowerCase(),r=n.toLowerCase();return o.includes("depart")?"depart":o.includes("arriv")?"arrive":o.includes("roundabout")||r.includes("uturn")||r.includes("u-turn")?"roundabout":io(r)||o.includes("left")?"left":co(r)||o.includes("right")?"right":o.includes("straight")||r.includes("straight")||o.includes("merge")||o.includes("new name")?"straight":"unknown"}function Rm(t){const n=t.maneuver&&typeof t.maneuver=="object"?t.maneuver:{},o=String(n.type??t.type??"").trim(),r=String(n.modifier??t.modifier??"").trim(),l=String(t.name??t.ref??"").trim(),s=String(t.text??t.instruction??t.description??"").trim();if(s)return{title:s,icon:jm(o,r),tone:o.toLowerCase().includes("arriv")?"end":o.toLowerCase().includes("depart")?"start":"neutral"};const i=o.toLowerCase(),c=r.toLowerCase(),u=l?` на ${l}`:"",d=l?` по ${l}`:"",y=io(c)?"ліворуч":co(c)?"праворуч":"",a=y?` ${y}`:"";return i.includes("depart")?{title:y?l?`Виїдьте${a}${u}`:`Виїдьте${a}`:l?`Виїдьте${u}`:"Почніть рух",icon:"depart",tone:"start"}:i.includes("arriv")?{title:"Ви прибули до пункту призначення",icon:"arrive",tone:"end"}:i.includes("roundabout")?{title:l?`На кільці${d}`:"На кільці",icon:"roundabout",tone:"neutral"}:c.includes("uturn")||c.includes("u-turn")?{title:l?`Розверніться${u}`:"Розверніться",icon:"roundabout",tone:"neutral"}:i.includes("merge")?{title:l?`Злийтеся${d}`:"Злийтеся з потоком",icon:"straight",tone:"neutral"}:i.includes("fork")?io(c)?{title:l?`На розвилці тримайтеся ліворуч${u}`:"На розвилці тримайтеся ліворуч",icon:"left",tone:"neutral"}:co(c)?{title:l?`На розвилці тримайтеся праворуч${u}`:"На розвилці тримайтеся праворуч",icon:"right",tone:"neutral"}:{title:l?`На розвилці${u}`:"На розвилці",icon:"straight",tone:"neutral"}:i.includes("new name")?{title:l?`Продовжуйте по ${l}`:"Продовжуйте прямо",icon:"straight",tone:"neutral"}:i.includes("end of road")?io(c)?{title:l?`У кінці дороги поверніть ліворуч${u}`:"У кінці дороги поверніть ліворуч",icon:"left",tone:"neutral"}:co(c)?{title:l?`У кінці дороги поверніть праворуч${u}`:"У кінці дороги поверніть праворуч",icon:"right",tone:"neutral"}:{title:l?`У кінці дороги${u}`:"У кінці дороги",icon:"straight",tone:"neutral"}:i.includes("turn")&&c.includes("left")?{title:l?`Поверніть ліворуч${u}`:"Поверніть ліворуч",icon:"left",tone:"neutral"}:i.includes("turn")&&c.includes("right")?{title:l?`Поверніть праворуч${u}`:"Поверніть праворуч",icon:"right",tone:"neutral"}:i.includes("straight")||c.includes("straight")?{title:l?`Продовжуйте${d}`:"Продовжуйте прямо",icon:"straight",tone:"neutral"}:{title:l?`Рухайтесь${d}`:"Рухайтесь далі",icon:"unknown",tone:"neutral"}}function Om(t){return(Array.isArray(t==null?void 0:t.instructions)?t.instructions:Array.isArray(t==null?void 0:t.instruction)?t.instruction:Array.isArray(t==null?void 0:t.legs)?t.legs.flatMap(o=>{const r=o&&typeof o=="object"?o:null;return Array.isArray(r==null?void 0:r.steps)?r.steps:[]}):[]).map(o=>{if(!o||typeof o!="object")return null;const r=o,l=r.maneuver&&typeof r.maneuver=="object"?r.maneuver:{},s=Rm(r),i=ar(r.geometry??null);return{title:s.title,distanceText:zm(r.distance??r.length??l.distance??0),durationText:Pm(r.duration??r.time??r.duration_seconds??r.durationSeconds??0),icon:s.icon,tone:s.tone,geometry:i}}).filter(o=>!!o)}function Um(t,n){const o=lr(t[0].coords),r=lr(t[t.length-1].coords),l=new URLSearchParams({from:`${o[0]},${o[1]}`,to:`${r[0]},${r[1]}`}),s=String((n==null?void 0:n.mode)??"").trim();if(s&&l.set("mode",s),t.length>2){const i=t.slice(1,-1).map(c=>{const[u,d]=lr(c.coords);return`${u},${d}`}).join(";");i&&l.set("via",i)}return l}async function qm(t,n){const o=await fetch(`/api/routes?${Um(t,n).toString()}`,{credentials:"include"});if(!o.ok)throw new Error(`Route API returned ${o.status}`);return await o.json()}async function Hm(t,n){if(t.length<2)return{geometry:null,source:"api",distanceText:"",durationText:"",durationSeconds:null,instructions:[],note:null};const o=await qm(t,n),r=Array.isArray(o)?o[0]:Array.isArray(o==null?void 0:o.routes)?o.routes[0]:o!=null&&o.route&&typeof o.route=="object"?o.route:o,l=Om(r),s=Number((r==null?void 0:r.time_for_route)??(o==null?void 0:o.time_for_route)??0),i=Am(l)??ar((r==null?void 0:r.geom)??(r==null?void 0:r.geom_simplify)??(r==null?void 0:r.geometry)??null)??ar((o==null?void 0:o.geom)??(o==null?void 0:o.geom_simplify)??(o==null?void 0:o.geometry)??null);return{geometry:i,source:"api",distanceText:Fm(r),durationText:Dm(r),durationSeconds:Number.isFinite(s)?s:null,startInstruction:Im(l[0]),instructions:l,note:i?null:"Сервер маршруту не повернув геометрію."}}const Wm={class:"bg-white/95 backdrop-blur-xl rounded-2xl shadow-[0_20px_50px_rgba(15,23,42,0.18)] border border-white/60 flex-shrink-0 overflow-hidden pointer-events-auto w-72"},Ym={class:"px-4 pt-4 pb-3"},Gm={class:"flex items-center justify-between gap-2 mb-3"},Km={class:"flex items-center gap-2 min-w-0"},Zm={class:"w-7 h-7 bg-blue-500 rounded-xl flex items-center justify-center flex-shrink-0"},Xm={class:"flex items-center gap-1.5 flex-shrink-0"},Jm={key:0,class:"flex items-center gap-1 px-2 py-1 bg-blue-50 rounded-lg border border-blue-100 animate-fade-in"},Qm={class:"text-xs font-bold text-blue-700 tabular-nums"},ep={class:"relative flex flex-col gap-2"},tp={class:"relative"},np={class:"flex items-center justify-center relative z-10"},op=["disabled"],rp={class:"relative"},lp={class:"flex items-stretch gap-0.5 rounded-xl border p-0.5 bg-gray-100 border-gray-200"},ap=["aria-label","aria-pressed","onClick"],sp={class:"text-[9px] font-semibold leading-none tabular-nums text-blue-500"},ip=["aria-label","aria-pressed"],cp={key:0,class:"text-xs text-gray-500"},dp={key:1,class:"text-xs text-rose-600"},up={key:2,class:"text-xs text-amber-700"},fp={class:"px-4 pb-4 flex gap-2"},mp=["disabled"],pp={key:0,class:"bg-white/95 backdrop-blur-xl rounded-2xl shadow-[0_20px_50px_rgba(15,23,42,0.18)] border border-white/60 flex min-h-0 h-auto max-h-[250px] flex-[1_1_auto] flex-col overflow-hidden pointer-events-auto animate-slide-up"},gp={class:"flex items-center justify-between px-4 py-2.5 border-b border-gray-100 flex-shrink-0"},yp={class:"text-xs text-gray-400"},hp={class:"min-h-0 flex-1 overflow-y-auto overflow-x-hidden pb-1 scrollbar-thin"},bp={class:"min-h-0 py-1 animate-fade-in"},xp={class:"flex flex-col gap-0.5"},kp=["onMouseenter"],wp={class:"flex-1 min-w-0"},_p={class:"flex items-start justify-between gap-2"},Ep={class:"text-sm leading-snug font-medium text-gray-700"},Cp={key:0,class:"text-xs flex-shrink-0 font-semibold mt-0.5 text-gray-400"},Np={key:0,class:"text-xs mt-0.5 text-gray-400"},Vp=e.defineComponent({name:"RoutePanel",__name:"index",emits:["close","points-change","instruction-hover","route-change"],setup(t,{expose:n,emit:o}){const r=o,l=[{id:"car",label:"Автомобіль",icon:ye.Car,factor:1},{id:"walk",label:"Пішохід",icon:ye.PersonStanding,factor:6.5},{id:"bike",label:"Велосипед",icon:ye.Bike,factor:2.2},{id:"transit",label:"Громадський транспорт",icon:ye.Bus,factor:1.8},{id:"flight",label:"Авіарейс",icon:ye.PlaneTakeoff,factor:.45}],s=e.ref([]),i=e.ref(""),c=e.ref(""),u=e.ref("car"),d=e.ref(!1),y=e.ref(""),a=e.ref(""),m=e.ref(""),f=e.ref(null),p=e.ref(null),k=e.ref([]),h=e.ref(null),g=e.ref(null),b=e.ref(null),x=e.ref(null),C=e.ref(null);let V=null;const E=e.computed(()=>{if(C.value!==null)return{height:`${C.value}px`,maxHeight:`${C.value}px`}});let _=1,N=0;const T=e.computed(()=>s.value.length>=2),Y=e.computed(()=>{const ie=[];return p.value&&ie.push(p.value),ie.push(...k.value),ie}),ee=e.computed(()=>Y.value.length);function R(ie){return ie?`${ie.coords.lng.toFixed(6)}, ${ie.coords.lat.toFixed(6)}`:""}function ae(){i.value=R(s.value[0]),c.value=R(s.value[1])}function ue(){return s.value.map(ie=>({id:ie.id,coords:{...ie.coords}}))}function oe(){r("points-change",ue())}function te(ie){r("instruction-hover",ie)}function J(ie){r("route-change",ie?{geometry:ie.geometry,source:ie.source,distanceText:ie.distanceText,durationText:ie.durationText,note:ie.note}:null)}function S({loading:ie=!1}={}){g.value=null,a.value="",m.value="",f.value=null,p.value=null,k.value=[],h.value=null,y.value="",d.value=ie,b.value=null,te(null),J(null)}function F(){const ie=_;return _+=1,ie}function M(ie){const de=ie.replace(/[^\d.,+\-\s]/g," ").match(/-?\d+(?:\.\d+)?/g);if(!de||de.length<2)return null;const pe=Number(de[0]),ve=Number(de[1]);return!Number.isFinite(pe)||!Number.isFinite(ve)||Math.abs(ve)>90||Math.abs(pe)>180?null:{lat:ve,lng:pe}}function B(ie,de){var ve,U;const pe=s.value.slice(0,2);ie===0?pe[0]={id:((ve=pe[0])==null?void 0:ve.id)??F(),coords:{lat:de.lat,lng:de.lng}}:pe[0]?pe[1]={id:((U=pe[1])==null?void 0:U.id)??F(),coords:{lat:de.lat,lng:de.lng}}:pe[0]={id:F(),coords:{lat:de.lat,lng:de.lng}},s.value=pe.filter(Boolean).slice(0,2),ae(),oe(),S()}function j(ie){s.value.length===0?s.value=[{id:F(),coords:{lat:ie.lat,lng:ie.lng}}]:s.value.length===1?s.value=[s.value[0],{id:F(),coords:{lat:ie.lat,lng:ie.lng}}]:s.value=[s.value[0],{id:s.value[1].id,coords:{lat:ie.lat,lng:ie.lng}}],ae(),oe(),S()}function X(ie){ie===0?s.value=s.value.length>1?[s.value[1]]:[]:s.value=s.value.slice(0,1),ae(),oe(),S()}function he(){s.value.length<2||(s.value=[s.value[1],s.value[0]],ae(),oe(),S())}function Z(ie){const de=ie===0?i.value:c.value,pe=M(de);if(!pe){ae();return}B(ie,pe)}async function P(){if(s.value.length<2){S();return}const ie=++N;d.value=!0,y.value="";const de=ue();try{const pe=await Hm(de,{mode:u.value});if(ie!==N)return;g.value=pe.geometry,a.value=pe.distanceText,m.value=pe.durationText,f.value=pe.durationSeconds,p.value=pe.startInstruction,k.value=pe.instructions,h.value=pe.note,d.value=!1,b.value=null,te(null),J(pe)}catch(pe){if(ie!==N)return;d.value=!1,y.value=pe instanceof Error?pe.message:"Не вдалося побудувати маршрут",h.value=null,g.value=null,p.value=null,b.value=null,te(null),J(null)}}const q=ie=>{const de=(ie??[]).map(pe=>({id:pe.id??F(),coords:{...pe.coords}}));s.value=de.slice(0,2),_=s.value.length?Math.max(...s.value.map(pe=>pe.id))+1:1,ae(),oe(),S()};function H(ie){var ve;const de=f.value;if(!de||!Number.isFinite(de))return ie==="car"&&m.value||"—";const pe=((ve=l.find(U=>U.id===ie))==null?void 0:ve.factor)??1;return be(de*pe)}function re(ie){switch(ie){case"depart":return ye.Navigation;case"arrive":return ye.MapPin;case"left":return ye.ArrowLeft;case"right":return ye.ArrowRight;case"straight":return ye.ArrowUp;case"roundabout":return ye.RotateCcw;default:return ye.Route}}function I(ie){return ie==="start"?{icon:"bg-emerald-50 text-emerald-600"}:ie==="end"?{icon:"bg-red-50 text-red-500"}:{icon:"bg-gray-100 text-gray-500"}}function le(ie){var de;b.value=ie,te(((de=k.value[ie-1])==null?void 0:de.geometry)??null)}function me(){b.value=null,te(null)}function be(ie){const de=Math.max(0,Math.round(ie));if(de<60)return`${de} с`;const pe=Math.floor(de/60);if(pe<60)return`${pe} хв`;const ve=Math.floor(pe/60),U=pe%60;return U>0?`${ve} год ${U} хв`:`${ve} год`}function A(){K(),r("close")}function K(){s.value=[],_=1,N+=1,ae(),S(),oe()}async function fe(){await e.nextTick();const ie=x.value,de=ie==null?void 0:ie.closest(".map-view-root");if(!ie||!de)return;const pe=de.getBoundingClientRect(),ve=ie.getBoundingClientRect();C.value=Math.max(0,Math.floor(pe.bottom-ve.top-8))}return e.onMounted(()=>{var de;ae(),oe(),fe();const ie=(de=x.value)==null?void 0:de.closest(".map-view-root");ie&&typeof ResizeObserver<"u"&&(V=new ResizeObserver(fe),V.observe(ie))}),e.onBeforeUnmount(()=>{V==null||V.disconnect(),V=null}),e.watch(()=>s.value,()=>{ae(),s.value.length<2&&(N+=1)},{deep:!0}),e.watch(()=>Y.value.length,()=>fe()),e.watch(u,()=>{s.value.length>=2&&(N+=1,S())}),n({addPoint:j,setPoints:q,clearPoints:K}),(ie,de)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"panelWrapRef",ref:x,class:"route-panel-wrap absolute top-0 right-full mr-2 z-20 flex h-auto max-h-none min-h-0 flex-col gap-2 overflow-hidden pointer-events-none animate-slide-up",style:e.normalizeStyle(E.value)},[e.createElementVNode("div",Wm,[e.createElementVNode("div",Ym,[e.createElementVNode("div",Gm,[e.createElementVNode("div",Km,[e.createElementVNode("div",Zm,[e.createVNode(e.unref(ye.Route),{size:14,"stroke-width":2,class:"text-white"})]),de[8]||(de[8]=e.createElementVNode("div",{class:"flex-1 min-w-0"},[e.createElementVNode("h2",{class:"text-sm font-bold text-gray-900 leading-none"},"Маршрутизатор"),e.createElementVNode("p",{class:"text-xs text-gray-400 mt-0.5"},"Введіть координати")],-1))]),e.createElementVNode("div",Xm,[a.value?(e.openBlock(),e.createElementBlock("div",Jm,[e.createVNode(e.unref(ye.Map),{size:10,"stroke-width":2,class:"text-blue-500"}),e.createElementVNode("span",Qm,e.toDisplayString(a.value),1)])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"w-7 h-7 rounded-xl flex items-center justify-center text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 flex-shrink-0","aria-label":"Закрити",onClick:A},[e.createVNode(e.unref(ye.X),{size:14,"stroke-width":2})])])]),e.createElementVNode("div",ep,[e.createElementVNode("div",tp,[de[9]||(de[9]=e.createElementVNode("div",{class:"absolute left-3 top-1/2 -translate-y-1/2 w-2.5 h-2.5 rounded-full bg-emerald-500 ring-2 ring-white z-10"},null,-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":de[0]||(de[0]=pe=>i.value=pe),type:"text",placeholder:"30.5234, 50.4501",class:"w-full px-3 py-2 text-sm pl-9 pr-8 rounded-xl border border-gray-200 bg-white text-gray-800 placeholder-gray-400 focus:border-blue-500 focus:outline-none transition-all disabled:opacity-50",onBlur:de[1]||(de[1]=pe=>Z(0)),onKeyup:de[2]||(de[2]=e.withKeys(e.withModifiers(pe=>Z(0),["prevent"]),["enter"]))},null,544),[[e.vModelText,i.value]]),e.createElementVNode("button",{type:"button",class:"absolute right-2 top-1/2 -translate-y-1/2 w-5 h-5 rounded-full flex items-center justify-center transition-all hover:scale-110 text-gray-400 hover:text-gray-600 hover:bg-gray-100","aria-label":"Очистити точку A",onClick:de[3]||(de[3]=pe=>X(0))},[e.createVNode(e.unref(ye.X),{size:11,"stroke-width":2})]),de[10]||(de[10]=e.createElementVNode("span",{class:"absolute left-8 -top-2 px-1 text-xs font-semibold text-gray-500 bg-white"},"A",-1))]),e.createElementVNode("div",np,[de[11]||(de[11]=e.createElementVNode("div",{class:"absolute w-full h-px bg-gray-100"},null,-1)),e.createElementVNode("button",{type:"button",class:"relative w-8 h-8 rounded-full border flex items-center justify-center transition-all disabled:opacity-40 hover:shadow-sm bg-white border-gray-200 text-gray-500 hover:text-blue-500 hover:border-blue-300",title:"Поміняти місцями",disabled:s.value.length<2,onClick:he},[e.createVNode(e.unref(ye.ArrowUpDown),{size:14,"stroke-width":2})],8,op)]),e.createElementVNode("div",rp,[de[12]||(de[12]=e.createElementVNode("div",{class:"absolute left-3 top-1/2 -translate-y-1/2 w-2.5 h-2.5 rounded-full bg-red-500 ring-2 ring-white z-10"},null,-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":de[4]||(de[4]=pe=>c.value=pe),type:"text",placeholder:"30.4947, 50.4271",class:"w-full px-3 py-2 text-sm pl-9 pr-8 rounded-xl border border-gray-200 bg-white text-gray-800 placeholder-gray-400 focus:border-blue-500 focus:outline-none transition-all disabled:opacity-50",onBlur:de[5]||(de[5]=pe=>Z(1)),onKeyup:de[6]||(de[6]=e.withKeys(e.withModifiers(pe=>Z(1),["prevent"]),["enter"]))},null,544),[[e.vModelText,c.value]]),e.createElementVNode("button",{type:"button",class:"absolute right-2 top-1/2 -translate-y-1/2 w-5 h-5 rounded-full flex items-center justify-center transition-all hover:scale-110 text-gray-400 hover:text-gray-600 hover:bg-gray-100","aria-label":"Очистити точку B",onClick:de[7]||(de[7]=pe=>X(1))},[e.createVNode(e.unref(ye.X),{size:11,"stroke-width":2})]),de[13]||(de[13]=e.createElementVNode("span",{class:"absolute left-8 -top-2 px-1 text-xs font-semibold text-gray-500 bg-white"},"B",-1))]),e.createElementVNode("div",lp,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,pe=>e.createElementVNode("div",{key:pe.id,class:"relative flex-1 flex flex-col justify-center"},[pe.id==="car"?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button","aria-label":pe.label,"aria-pressed":u.value===pe.id,class:"w-full flex flex-col items-center justify-center rounded-lg transition-all duration-200 gap-0.5 py-1.5 bg-white text-blue-600 shadow-sm border border-blue-200",onClick:ve=>u.value=pe.id},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(pe.icon),{size:16,"stroke-width":2})),e.createElementVNode("span",sp,e.toDisplayString(H(pe.id)),1)],8,ap)):(e.openBlock(),e.createElementBlock("button",{key:1,type:"button","aria-label":pe.label,"aria-pressed":u.value===pe.id,disabled:"",class:"w-full flex flex-col items-center justify-center rounded-lg transition-all duration-200 gap-0.5 py-1.5 text-gray-300 opacity-60 cursor-not-allowed"},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(pe.icon),{size:16,"stroke-width":2}))],8,ip))])),64))]),d.value?(e.openBlock(),e.createElementBlock("p",cp,"Прокладаємо маршрут...")):y.value?(e.openBlock(),e.createElementBlock("p",dp,e.toDisplayString(y.value),1)):h.value?(e.openBlock(),e.createElementBlock("p",up,e.toDisplayString(h.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",fp,[e.createElementVNode("button",{type:"button",class:"w-full h-9 rounded-xl bg-blue-600 hover:bg-blue-700 text-white text-xs font-semibold flex items-center justify-center gap-1.5 transition-colors disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-blue-600",disabled:!T.value,onClick:P},[e.createVNode(e.unref(ye.Route),{size:13,"stroke-width":2}),de[14]||(de[14]=e.createTextVNode(" Побудувати маршрут ",-1))],8,mp)])]),k.value.length?(e.openBlock(),e.createElementBlock("div",pp,[e.createElementVNode("div",gp,[de[15]||(de[15]=e.createElementVNode("span",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wide"},"Покрокові інструкції",-1)),e.createElementVNode("span",yp,e.toDisplayString(ee.value)+" кроків",1)]),e.createElementVNode("div",hp,[e.createElementVNode("div",bp,[e.createElementVNode("div",xp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Y.value,(pe,ve)=>(e.openBlock(),e.createElementBlock("div",{key:`${ve}-${pe.title}`,class:e.normalizeClass(["step-item flex items-start gap-3 rounded-xl cursor-pointer select-none transition-all px-3 py-2",[ve===0?"bg-emerald-50/60 cursor-default":b.value===ve?"bg-blue-50 ring-1 ring-blue-100":"hover:bg-gray-50"]]),onMouseenter:U=>le(ve),onMouseleave:me},[e.createElementVNode("div",{class:e.normalizeClass(["flex-shrink-0 w-7 h-7 rounded-lg flex items-center justify-center mt-0.5",I(pe.tone).icon])},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(re(pe.icon)),{size:14,"stroke-width":2}))],2),e.createElementVNode("div",wp,[e.createElementVNode("div",_p,[e.createElementVNode("p",Ep,e.toDisplayString(pe.title),1),pe.distanceText?(e.openBlock(),e.createElementBlock("span",Cp,e.toDisplayString(pe.distanceText),1)):e.createCommentVNode("",!0)]),pe.durationText?(e.openBlock(),e.createElementBlock("p",Np,e.toDisplayString(pe.durationText),1)):e.createCommentVNode("",!0)])],42,kp))),128))])])])])):e.createCommentVNode("",!0),de[16]||(de[16]=e.createElementVNode("div",{class:"bg-white/80 backdrop-blur-xl rounded-xl border border-white/60 px-3 py-2 flex-shrink-0 pointer-events-auto"},[e.createElementVNode("p",{class:"text-[10px] text-gray-400 leading-relaxed text-center"},[e.createElementVNode("kbd",{class:"px-1.5 py-0.5 rounded bg-gray-100 text-gray-500 text-[9px] font-mono"},"ЛКМ"),e.createTextVNode(" по карті заповнює точки маршруту ")])],-1))],4))}}),$p={class:"relative"},Bp=["aria-label"],Sp={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"},vp=e.defineComponent({name:"RouteControl",__name:"RouteControl",props:{active:{type:Boolean}},emits:["toggle","close","points-change","instruction-hover","route-change"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=e.ref(null);function i(d){var y;(y=s.value)==null||y.addPoint(d)}function c(d){var y;(y=s.value)==null||y.setPoints(d)}function u(){var d;(d=s.value)==null||d.clearPoints()}return n({addPoint:i,setPoints:c,clearPoints:u}),(d,y)=>(e.openBlock(),e.createElementBlock("div",$p,[t.active?(e.openBlock(),e.createBlock(Vp,{key:0,ref_key:"routePanelRef",ref:s,class:"absolute top-0 right-full mr-2",onClose:y[0]||(y[0]=a=>l("close")),onPointsChange:y[1]||(y[1]=a=>l("points-change",a)),onInstructionHover:y[2]||(y[2]=a=>l("instruction-hover",a)),onRouteChange:y[3]||(y[3]=a=>l("route-change",a))},null,512)):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",r.active?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":r.active?"Вимкнути побудову маршруту":"Побудова маршруту",onClick:y[4]||(y[4]=e.withModifiers(a=>l("toggle"),["stop"]))},[e.createElementVNode("span",Sp,e.toDisplayString(r.active?"Вимкнути побудову маршруту":"Побудова маршруту"),1),e.createVNode(e.unref(ye.Route),{class:"w-4 h-4"})],10,Bp)]))}}),Lt="route-builder-src",uo="route-builder-line",fo="route-builder-points",mo="route-builder-labels",en="route-builder-hover-src",po="route-builder-hover-line",Lp=e.defineComponent({__name:"RouteLayer",props:{points:{},routeGeometry:{},hoverGeometry:{}},setup(t){const n={"text-anchor":"center","text-offset":[0,0],"text-allow-overlap":!0,"text-ignore-placement":!0};function o(){return{type:"FeatureCollection",features:[]}}function r(m){return m?{type:"FeatureCollection",features:[{type:"Feature",properties:{role:"hover-line"},geometry:m}]}:o()}function l(m){if(!m)return null;if(m.type==="LineString"){const f=(m.coordinates||[]).filter(p=>Number.isFinite(p[0])&&Number.isFinite(p[1]));return f.length>=2?{type:"LineString",coordinates:f}:null}if(m.type==="MultiLineString"){const f=(m.coordinates||[]).map(p=>p.filter(k=>Number.isFinite(k[0])&&Number.isFinite(k[1]))).filter(p=>p.length>=2);return f.length?f.length===1?{type:"LineString",coordinates:f[0]}:{type:"MultiLineString",coordinates:f}:null}return null}function s(m,f){const p=[];return f&&p.push({type:"Feature",properties:{role:"line"},geometry:f}),m.forEach((k,h)=>{p.push({type:"Feature",properties:{role:"point",label:String(h+1),kind:h===0?"start":h===m.length-1?"end":"mid"},geometry:{type:"Point",coordinates:[k.coords.lng,k.coords.lat]}})}),{type:"FeatureCollection",features:p}}function i(m){m.getSource(Lt)||m.addSource(Lt,{type:"geojson",data:o()}),m.getSource(en)||m.addSource(en,{type:"geojson",data:o()}),m.getLayer(uo)||m.addLayer({id:uo,type:"line",source:Lt,filter:["==",["get","role"],"line"],layout:{"line-join":"round","line-cap":"round"},paint:{"line-color":"#2563eb","line-width":4,"line-opacity":.9}}),m.getLayer(po)||m.addLayer({id:po,type:"line",source:en,layout:{"line-join":"round","line-cap":"round"},paint:{"line-color":"#f59e0b","line-width":7,"line-opacity":.95}}),m.getLayer(fo)||m.addLayer({id:fo,type:"circle",source:Lt,filter:["==",["get","role"],"point"],paint:{"circle-radius":10,"circle-color":["match",["get","kind"],"start","#22c55e","end","#ef4444","#60a5fa"],"circle-stroke-width":2,"circle-stroke-color":"#0f172a"}}),m.getLayer(mo)||m.addLayer({id:mo,type:"symbol",source:Lt,filter:["==",["get","role"],"point"],layout:{"text-field":["to-string",["get","label"]],"text-size":12,"text-font":["Arial Unicode MS Bold","Open Sans Bold"],...n},paint:{"text-color":"#ffffff","text-halo-color":"#0f172a","text-halo-width":1}})}function c(m){if(m)try{m.getLayer(po)&&m.removeLayer(po),m.getLayer(mo)&&m.removeLayer(mo),m.getLayer(fo)&&m.removeLayer(fo),m.getLayer(uo)&&m.removeLayer(uo),m.getSource(en)&&m.removeSource(en),m.getSource(Lt)&&m.removeSource(Lt)}catch{}}const u=t,{map:d,ready:y}=Qe();function a(){y().then(()=>{const m=d.value;if(!m)return;i(m);const f=m.getSource(Lt);if(!(f!=null&&f.setData))return;f.setData(s(u.points,l(u.routeGeometry)));const p=m.getSource(en);p!=null&&p.setData&&p.setData(r(l(u.hoverGeometry??null)))})}return e.watch(()=>[u.points,u.routeGeometry,u.hoverGeometry],()=>a(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{y().then(()=>c(d.value))}),(m,f)=>null}}),Tp={class:"pt-1 border-t border-gray-100"},Ap={class:"space-y-1"},Mp=e.defineComponent({__name:"AddCoordinates",emits:["submit","cancel"],setup(t,{emit:n}){const o=n,r=e.ref(null),l=e.ref(null),s=(u,d,y)=>Math.min(Math.max(u,d),y),i=()=>{if(r.value===null||l.value===null||!Number.isFinite(r.value)||!Number.isFinite(l.value))return;const u=s(r.value,-90,90),d=s(l.value,-180,180);o("submit",{lat:u,lng:d}),r.value=null,l.value=null},c=()=>{r.value=null,l.value=null,o("cancel")};return(u,d)=>(e.openBlock(),e.createElementBlock("div",Tp,[d[2]||(d[2]=e.createElementVNode("p",{class:"text-xs text-gray-600 mb-1"},"Додати точку за координатами:",-1)),e.createElementVNode("div",Ap,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":d[0]||(d[0]=y=>r.value=y),type:"number",step:"0.0001",class:"w-full px-2 py-1 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Широта (50.4501)"},null,512),[[e.vModelText,r.value,void 0,{number:!0}]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":d[1]||(d[1]=y=>l.value=y),type:"number",step:"0.0001",class:"w-full px-2 py-1 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Довгота (30.5234)"},null,512),[[e.vModelText,l.value,void 0,{number:!0}]]),e.createElementVNode("div",{class:"flex gap-1.5"},[e.createElementVNode("button",{class:"flex-1 px-2 py-1 bg-blue-500 hover:bg-blue-600 text-white text-xs font-medium rounded transition-colors",type:"button",onClick:i}," Додати "),e.createElementVNode("button",{class:"px-2 py-1 bg-gray-200 hover:bg-gray-300 text-gray-700 text-xs font-medium rounded transition-colors",type:"button",onClick:c}," Скасувати ")])])]))}}),Fp=e.defineComponent({__name:"BtnAdd",emits:["click"],setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("button",{class:"flex-1 px-2 py-1.5 bg-blue-500 hover:bg-blue-600 text-white text-xs font-medium rounded transition-colors duration-150 flex items-center justify-center gap-1",onClick:o[0]||(o[0]=r=>n.$emit("click"))},[e.createVNode(e.unref(ye.Plus),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Додати ",-1))]))}}),Dp=e.defineComponent({__name:"BtnClear",emits:["click"],setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("button",{class:"w-full px-2 py-1.5 bg-rose-500 hover:bg-rose-600 text-white text-xs font-medium rounded transition-colors duration-150 flex items-center justify-center gap-1",onClick:o[0]||(o[0]=r=>n.$emit("click"))},[e.createVNode(e.unref(ye.Trash2),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Очистити ",-1))]))}}),Pp=e.defineComponent({__name:"BtnComplete",emits:["click"],setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("button",{class:"flex-1 px-2 py-1.5 bg-emerald-500 hover:bg-emerald-600 text-white text-xs font-medium rounded transition-colors duration-150 flex items-center justify-center gap-1",onClick:o[0]||(o[0]=r=>n.$emit("click"))},[e.createVNode(e.unref(ye.Circle),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode("Замкнути ",-1))]))}}),zp=new Intl.NumberFormat("uk-UA",{minimumFractionDigits:2,maximumFractionDigits:2});function Rt(t){return zp.format(t)}function Al(t){return t>=1e3?`${Rt(t/1e3)} км`:`${Rt(t)} м`}const Ip={class:"flex items-center gap-1.5 text-xs bg-gray-50 rounded p-1.5"},jp={key:0,class:"flex-1 flex gap-1"},Rp={key:1,class:"flex-1 font-mono text-gray-700"},Op=e.defineComponent({__name:"DotListItem",props:{id:{},index:{},coords:{}},emits:["update","delete"],setup(t,{emit:n}){const o=t,r=n,l=e.computed(()=>`${o.coords.lat.toFixed(4)}°, ${o.coords.lng.toFixed(4)}°`),s=e.ref(!1),i=e.ref(o.coords.lat),c=e.ref(o.coords.lng);e.watch(()=>o.coords,m=>{i.value=m.lat,c.value=m.lng},{deep:!0,immediate:!0});const u=(m,f,p)=>Math.min(Math.max(m,f),p),d=()=>{s.value=!0},y=()=>{if(!Number.isFinite(i.value)||!Number.isFinite(c.value))return;const m=u(i.value,-90,90),f=u(c.value,-180,180);r("update",{id:o.id,coords:{lat:m,lng:f}}),s.value=!1},a=()=>{r("delete",o.id)};return(m,f)=>(e.openBlock(),e.createElementBlock("div",Ip,[e.createVNode(e.unref(ye.MapPin),{size:12,"stroke-width":2,class:"text-gray-400 flex-shrink-0"}),s.value?(e.openBlock(),e.createElementBlock("div",jp,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":f[0]||(f[0]=p=>i.value=p),type:"number",step:"0.0001",min:"-90",max:"90",class:"flex-1 px-1.5 py-0.5 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Широта"},null,512),[[e.vModelText,i.value,void 0,{number:!0}]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":f[1]||(f[1]=p=>c.value=p),type:"number",step:"0.0001",min:"-180",max:"180",class:"flex-1 px-1.5 py-0.5 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Довгота"},null,512),[[e.vModelText,c.value,void 0,{number:!0}]]),e.createElementVNode("button",{class:"px-1.5 py-0.5 bg-emerald-500 text-white rounded hover:bg-emerald-600 text-xs",type:"button",onClick:y}," ✓ ")])):(e.openBlock(),e.createElementBlock("span",Rp,e.toDisplayString(l.value),1)),s.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:2,class:"text-blue-500 hover:text-blue-600 px-0.5",type:"button",onClick:d}," ✎ ")),e.createElementVNode("button",{class:"text-rose-500 hover:text-rose-600 px-0.5",type:"button",onClick:a}," ✕ ")]))}}),Up={class:"ruler-control px-3 py-2.5 space-y-2"},qp={type:"button",class:"ruler-row w-full flex items-center gap-2 cursor-pointer group text-left"},Hp={class:e.normalizeClass(["flex items-center justify-center w-5 h-5 rounded-full shrink-0 transition-colors pointer-events-none"]),title:"Сумарна довжина всіх відрізків","aria-hidden":"true"},Wp={class:"text-sm font-semibold text-slate-700"},Yp={class:"ruler-row"},Gp={type:"button",class:"w-full flex items-center gap-2 cursor-pointer group text-left"},Kp={class:e.normalizeClass(["flex items-center justify-center w-5 h-5 rounded-full shrink-0 transition-colors pointer-events-none"]),title:"Площа замкнутого контуру","aria-hidden":"true"},Zp={class:"inline-flex rounded-md overflow-hidden border border-gray-200 bg-gray-100"},Xp=["onClick"],Jp={class:"flex items-center gap-2 mt-0.5 pl-7"},Qp={key:0,class:"text-base font-semibold text-green-600"},eg={key:1,class:"text-xs text-gray-400"},tg={class:"ruler-row flex items-center gap-2 cursor-pointer"},ng={class:e.normalizeClass(["flex items-center justify-center w-5 h-5 rounded-full shrink-0 transition-colors pointer-events-none"]),title:"Список точок","aria-hidden":"true"},og={class:"text-xs font-medium text-gray-600 flex-1"},rg={key:0,class:"pt-1.5 border-t border-gray-100 max-h-32 overflow-y-auto space-y-1"},lg=e.defineComponent({__name:"ControlPanel",props:{points:{},isShapeClosed:{type:Boolean}},emits:["update-point","delete-point"],setup(t){const n=t,o=e.ref(!1),r=e.ref("km2"),l=[{id:"km2",label:"км²"},{id:"ha",label:"га"},{id:"m2",label:"м²"}],s=()=>{o.value=!o.value},i=(p,k)=>{const h=T=>T*Math.PI/180,g=h(k.lat-p.lat),b=h(k.lng-p.lng),x=h(p.lat),C=h(k.lat),V=Math.sin(g/2),E=Math.sin(b/2);return 6371e3*(2*Math.asin(Math.sqrt(V*V+Math.cos(x)*Math.cos(C)*E*E)))},c=e.computed(()=>{if(n.points.length<2)return 0;let p=0;for(let k=1;k<n.points.length;k+=1)p+=i(n.points[k-1].coords,n.points[k].coords);return n.isShapeClosed&&n.points.length>=2&&(p+=i(n.points[n.points.length-1].coords,n.points[0].coords)),p}),u=e.computed(()=>c.value>=1e3?`${Rt(c.value/1e3)} км`:`${Rt(c.value)} м`);function d(p){if(p.length<3)return 0;const k=p[0].lat,h=p[0].lng,g=(x,C)=>{const V=(x-k)*110574;return{x:(C-h)*111320*Math.cos(k*Math.PI/180),y:V}};let b=0;for(let x=0;x<p.length;x++){const C=(x+1)%p.length,V=g(p[x].lat,p[x].lng),E=g(p[C].lat,p[C].lng);b+=V.x*E.y-V.y*E.x}return Math.abs(b)*.5}const y=e.computed(()=>{if(!n.isShapeClosed||n.points.length<3)return 0;const p=n.points.map(k=>k.coords);return d(p)}),a=e.computed(()=>y.value>0),m=e.computed(()=>{const p=y.value;if(p===0)return"—";if(r.value==="km2"){const h=p/1e6;return`${Rt(h)} км²`}if(r.value==="ha"){const h=p/1e4;return`${Rt(h)} га`}const k=p>=1?Math.round(p):p;return`${Rt(k)} м²`}),f=e.computed(()=>{const p=n.points.length;return p===1?"1 точка":p>=2&&p<=4?`${p} точки`:`${p} точок`});return e.watch(()=>n.points.length,()=>{n.points.length===0&&(o.value=!1)}),(p,k)=>(e.openBlock(),e.createElementBlock("div",Up,[e.createElementVNode("button",qp,[e.createElementVNode("span",Hp,[e.createVNode(e.unref(ye.Info),{size:12,"stroke-width":2.5})]),k[1]||(k[1]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Загальна відстань",-1)),e.createElementVNode("span",Wp,e.toDisplayString(u.value),1)]),e.createElementVNode("div",Yp,[e.createElementVNode("button",Gp,[e.createElementVNode("span",Kp,[e.createVNode(e.unref(ye.Info),{size:12,"stroke-width":2.5})]),k[2]||(k[2]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Площа",-1)),e.createElementVNode("div",Zp,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,(h,g)=>e.createElementVNode("button",{key:h.id,type:"button",class:e.normalizeClass(["px-2.5 py-1 text-xs font-medium transition-colors border-r border-gray-200 last:border-r-0",g===0&&"rounded-l-md",g===l.length-1&&"rounded-r-md",r.value===h.id?"bg-white text-green-600 font-semibold shadow-sm":"text-gray-600 hover:bg-gray-50"]),onClick:e.withModifiers(b=>r.value=h.id,["stop"])},e.toDisplayString(h.label),11,Xp)),64))])]),e.createElementVNode("div",Jp,[a.value?(e.openBlock(),e.createElementBlock("span",Qp,e.toDisplayString(m.value),1)):(e.openBlock(),e.createElementBlock("span",eg,"—"))])]),e.createElementVNode("div",tg,[e.createElementVNode("span",ng,[e.createVNode(e.unref(ye.Info),{size:12,"stroke-width":2.5})]),e.createElementVNode("span",og,e.toDisplayString(f.value),1),e.createElementVNode("button",{type:"button",class:"text-xs text-blue-500 hover:text-blue-600 font-medium transition-colors",onClick:e.withModifiers(s,["stop"])}," Координати ")]),o.value?(e.openBlock(),e.createElementBlock("div",rg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.points,(h,g)=>(e.openBlock(),e.createBlock(Op,{key:h.id,id:h.id,index:g+1,coords:h.coords,onUpdate:k[0]||(k[0]=b=>p.$emit("update-point",b)),onDelete:b=>p.$emit("delete-point",h.id)},null,8,["id","index","coords","onDelete"]))),128))])):e.createCommentVNode("",!0)]))}}),ag={class:"px-3 py-3 bg-blue-50/50 border-b border-blue-100"},sg={class:"flex items-start gap-2"},ig=e.defineComponent({__name:"InfoHint",setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",ag,[e.createElementVNode("div",sg,[e.createVNode(e.unref(ye.Info),{size:16,"stroke-width":2,class:"text-blue-600 flex-shrink-0 mt-0.5"}),o[0]||(o[0]=e.createElementVNode("div",{class:"space-y-1"},[e.createElementVNode("p",{class:"text-xs font-medium text-blue-900"}," Натискайте на карту, щоб додати точки вимірювання "),e.createElementVNode("p",{class:"text-[10px] text-blue-700"},' Або скористайтесь кнопкою "Додати" внизу для введення координат вручну ')],-1))])]))}}),cg={class:"space-y-1.5"},dg={class:"space-y-1 max-h-40 overflow-y-auto"},ug={class:"text-gray-700"},fg={class:"font-semibold text-slate-800"},mg=e.defineComponent({__name:"ToPointList",props:{points:{},isShapeClosed:{type:Boolean}},setup(t){const n=t;function o(s,i){const c=f=>f*Math.PI/180,u=c(i.lat-s.lat),d=c(i.lng-s.lng),y=c(s.lat),a=c(i.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(u/2)**2+Math.cos(y)*Math.cos(a)*Math.sin(d/2)**2)))}function r(s){return Al(s)}const l=e.computed(()=>{const s=[],i=n.points;if(i.length<2)return s;for(let c=0;c<i.length;c++){const u=c===i.length-1&&n.isShapeClosed?0:c+1;if(u>=i.length)break;const d=o(i[c].coords,i[u].coords);s.push({from:c+1,to:u+1,label:r(d)})}return s});return(s,i)=>(e.openBlock(),e.createElementBlock("div",cg,[i[0]||(i[0]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-600 mb-1.5"},"Відстань між точками:",-1)),e.createElementVNode("div",dg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(c,u)=>(e.openBlock(),e.createElementBlock("div",{key:u,class:"flex items-center justify-between text-xs py-1 px-2 rounded bg-gray-50"},[e.createElementVNode("span",ug,"Точка "+e.toDisplayString(c.from)+" → Точка "+e.toDisplayString(c.to),1),e.createElementVNode("span",fg,e.toDisplayString(c.label),1)]))),128))])]))}}),pg={class:"ruler-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up"},gg={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},yg={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},hg={class:"flex items-center gap-2"},bg={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},xg={class:"flex border-b border-gray-200"},kg={key:1,class:"px-3 py-2.5"},wg={key:1,class:"text-xs text-gray-500"},_g={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},Eg={class:"flex gap-1.5"},Cg=e.defineComponent({name:"RulerPanel",__name:"index",emits:["close","tab-change","points-change","add-request","complete","shape-closed-change"],setup(t,{expose:n,emit:o}){const r=o,l=e.ref([]),s=e.computed(()=>l.value.length>0),i=e.ref(!1),c=e.ref(!1),u=e.ref("general");function d(ee){u.value=ee,r("tab-change",ee)}e.onMounted(()=>{r("tab-change",u.value)});const y=e.computed(()=>l.value.length>=3&&!c.value);let a=1;const m=()=>l.value.map(ee=>({id:ee.id,coords:{...ee.coords}})),f=()=>{l.value.length<3&&c.value&&(c.value=!1,r("shape-closed-change",!1)),r("points-change",m())},p=()=>{const ee=a;return a+=1,ee},k=ee=>{l.value=[...l.value,{id:p(),coords:{lat:ee.lat,lng:ee.lng}}],f()},h=({id:ee,coords:R})=>{const ae=l.value.findIndex(oe=>oe.id===ee);if(ae===-1)return;const ue=[...l.value];ue[ae]={id:ee,coords:{...R}},l.value=ue,f()},g=ee=>{l.value=l.value.filter(R=>R.id!==ee),f()},b=()=>{l.value=[],c.value&&(c.value=!1,r("shape-closed-change",!1)),f()},x=ee=>{h(ee)},C=ee=>{g(ee)},V=()=>{i.value=!0,r("add-request")},E=ee=>{k(ee),i.value=!1},_=()=>{i.value=!1},N=()=>{y.value&&(c.value=!0,r("complete"),r("shape-closed-change",!0))},T=ee=>{const R=(ee??[]).map(ae=>({id:ae.id??p(),coords:{...ae.coords}}));l.value=R,R.length===0?a=1:a=Math.max(...R.map(ae=>ae.id))+1,f()},Y=()=>{b(),i.value=!1,r("close")};return n({addPoint:k,setPoints:T,clearPoints:b}),(ee,R)=>(e.openBlock(),e.createElementBlock("div",pg,[e.createElementVNode("div",gg,[e.createElementVNode("div",yg,[e.createElementVNode("div",hg,[e.createElementVNode("div",bg,[e.createVNode(e.unref(ye.Ruler),{size:14,"stroke-width":2,class:"text-white"})]),R[2]||(R[2]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Вимірювання",-1))]),e.createElementVNode("button",{class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:Y},[e.createVNode(e.unref(ye.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",xg,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",u.value==="general"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:R[0]||(R[0]=ae=>d("general"))}," Загальна ",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",u.value==="topoint"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:R[1]||(R[1]=ae=>d("topoint"))}," До точки ",2)]),u.value==="general"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[s.value?(e.openBlock(),e.createBlock(lg,{key:1,points:l.value,"is-shape-closed":c.value,onUpdatePoint:x,onDeletePoint:C},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createBlock(ig,{key:0}))],64)):(e.openBlock(),e.createElementBlock("div",kg,[s.value?(e.openBlock(),e.createBlock(mg,{key:0,points:l.value,"is-shape-closed":c.value},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createElementBlock("p",wg,"Додайте точки на карті, щоб бачити відстані між ними."))])),e.createElementVNode("div",_g,[e.createElementVNode("div",Eg,[i.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Fp,{key:0,onClick:V})),y.value?(e.openBlock(),e.createBlock(Pp,{key:1,onClick:N})):e.createCommentVNode("",!0)]),i.value?(e.openBlock(),e.createBlock(Mp,{key:0,onSubmit:E,onCancel:_})):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createBlock(Dp,{key:1,onClick:b})):e.createCommentVNode("",!0)])])]))}}),yt="ruler-points",wt="ruler-line",_t="ruler-polygon",Et="ruler-segments",Ng=e.defineComponent({__name:"RulerLayer",props:{points:{},isShapeClosed:{type:Boolean},labelMode:{}},setup(t){function n(h,g){const b=N=>N*Math.PI/180,x=b(g.lat-h.lat),C=b(g.lng-h.lng),V=b(h.lat),E=b(g.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(x/2)**2+Math.cos(V)*Math.cos(E)*Math.sin(C/2)**2)))}function o(h){return Al(h)}const r=t,{map:l,ready:s}=Qe();function i(){return{type:"FeatureCollection",features:[]}}function c(h,g,b){const x=b??"general",C=[];let V=0;C.push(0);for(let E=1;E<h.length;E++)V+=n(h[E-1].coords,h[E].coords),C.push(V);return g&&h.length>=2&&(V+=n(h[h.length-1].coords,h[0].coords)),{type:"FeatureCollection",features:h.map((E,_)=>{const N=x==="general"?_===0?"0":o(C[_]):_===0?"0":o(n(h[_-1].coords,h[_].coords));return{type:"Feature",geometry:{type:"Point",coordinates:[E.coords.lng,E.coords.lat]},properties:{id:E.id,index:_+1,label:N}}})}}function u(h,g){if(h.length<2)return i();const b=[];for(let x=0;x<h.length;x++){const C=x===h.length-1&&g?0:x+1;if(C>=h.length)break;const V=h[x].coords,E=h[C].coords,_=n(V,E);b.push({type:"Feature",geometry:{type:"LineString",coordinates:[[V.lng,V.lat],[E.lng,E.lat]]},properties:{distance:o(_)}})}return{type:"FeatureCollection",features:b}}function d(h,g){if(h.length<2)return i();const b=h.map(x=>[x.coords.lng,x.coords.lat]);return g&&b.push(b[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"LineString",coordinates:b},properties:{}}]}}function y(h){if(h.length<3)return i();const g=h.map(b=>[b.coords.lng,b.coords.lat]);return g.push(g[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Polygon",coordinates:[g]},properties:{}}]}}let a=!1;function m(h){h.getSource(yt)||(h.addSource(yt,{type:"geojson",data:i()}),h.addLayer({id:`${yt}-circle`,type:"circle",source:yt,paint:{"circle-radius":5,"circle-color":"#1e293b","circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),h.addLayer({id:`${yt}-labels`,type:"symbol",source:yt,layout:{"text-field":["get","label"],"text-size":14,"text-offset":[0,1.3]},paint:{"text-color":"#0f172a","text-halo-color":"#ffffff","text-halo-width":1}})),h.getSource(Et)||(h.addSource(Et,{type:"geojson",data:i()}),h.addLayer({id:`${Et}-labels`,type:"symbol",source:Et,layout:{"text-field":["get","distance"],"text-size":13,"symbol-placement":"line-center","text-rotation-alignment":"map","text-pitch-alignment":"map"},paint:{"text-color":"#1e293b","text-halo-color":"#ffffff","text-halo-width":1.5}})),h.getSource(wt)||(h.addSource(wt,{type:"geojson",data:i()}),h.addLayer({id:`${wt}-layer`,type:"line",source:wt,paint:{"line-color":"#3b82f6","line-width":2}})),h.getSource(_t)||(h.addSource(_t,{type:"geojson",data:i()}),h.addLayer({id:`${_t}-layer`,type:"fill",source:_t,paint:{"fill-color":"#93c5fd","fill-opacity":.25}})),a=!0}function f(h){if(h){try{h.getLayer(`${_t}-layer`)&&h.removeLayer(`${_t}-layer`),h.getSource(_t)&&h.removeSource(_t),h.getLayer(`${wt}-layer`)&&h.removeLayer(`${wt}-layer`),h.getSource(wt)&&h.removeSource(wt),h.getLayer(`${Et}-labels`)&&h.removeLayer(`${Et}-labels`),h.getSource(Et)&&h.removeSource(Et),h.getLayer(`${yt}-labels`)&&h.removeLayer(`${yt}-labels`),h.getLayer(`${yt}-circle`)&&h.removeLayer(`${yt}-circle`),h.getSource(yt)&&h.removeSource(yt)}catch{}a=!1}}function p(h){if(!h)return;const g=h.getSource(yt),b=h.getSource(wt),x=h.getSource(_t),C=h.getSource(Et),V=r.points,E=r.labelMode??"general";g&&g.setData(c(V,r.isShapeClosed,E)),b&&b.setData(d(V,r.isShapeClosed)),x&&x.setData(y(V)),C&&C.setData(E==="topoint"?u(V,r.isShapeClosed):i())}function k(){s().then(()=>{const h=l.value;h&&(a||m(h),p(h))})}return e.watch(()=>[r.points,r.isShapeClosed,r.labelMode],()=>k(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{s().then(()=>f(l.value))}),(h,g)=>null}}),Vg={class:"geolocation-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up flex items-end gap-2"},$g={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},Bg={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},Sg={class:"flex items-center gap-2"},vg=["disabled"],Lg={class:"px-3 py-3 border-t border-gray-100 flex items-center justify-between gap-3"},Tg={class:"text-sm font-mono text-slate-700"},Ag={class:"flex items-center gap-2 shrink-0"},Mg={key:0,class:"text-xs font-[100] text-gray-500"},Fg=e.defineComponent({name:"GeolocationPanel",__name:"index",props:{position:{}},emits:["close","recenter"],setup(t,{emit:n}){const o=t,r=n,l=e.computed(()=>o.position!=null?o.position.lng.toFixed(6):"—"),s=e.computed(()=>o.position!=null?o.position.lat.toFixed(6):"—"),i=e.ref(!1);let c=null;function u(){if(o.position==null)return;const a=`${o.position.lat.toFixed(6)}, ${o.position.lng.toFixed(6)}`;navigator.clipboard.writeText(a).then(()=>{i.value=!0,c&&clearTimeout(c),c=setTimeout(()=>{i.value=!1,c=null},600)})}function d(){r("close")}function y(){o.position!=null&&r("recenter")}return(a,m)=>(e.openBlock(),e.createElementBlock("div",Vg,[e.createElementVNode("div",$g,[e.createElementVNode("div",Bg,[e.createElementVNode("div",Sg,[e.createElementVNode("button",{type:"button",class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center hover:bg-white/30 transition-colors disabled:opacity-50 disabled:cursor-not-allowed","aria-label":"Центрувати на моєму місці",disabled:t.position==null,onClick:y},[e.createVNode(e.unref(ye.MapPin),{size:14,"stroke-width":2,class:"text-white"})],8,vg),m[0]||(m[0]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Ваше розташування",-1))]),e.createElementVNode("button",{type:"button",class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:d},[e.createVNode(e.unref(ye.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",Lg,[e.createElementVNode("div",null,[m[4]||(m[4]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-500 mb-1"},"Координати",-1)),e.createElementVNode("p",Tg,[m[1]||(m[1]=e.createElementVNode("span",{class:"text-gray-500"},"x:",-1)),e.createTextVNode(" "+e.toDisplayString(l.value)+" ",1),m[2]||(m[2]=e.createElementVNode("br",null,null,-1)),m[3]||(m[3]=e.createElementVNode("span",{class:"text-gray-500"},"y:",-1)),e.createTextVNode(" "+e.toDisplayString(s.value),1)])]),e.createElementVNode("div",Ag,[i.value?(e.openBlock(),e.createElementBlock("span",Mg," Скопійовано! ")):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"flex items-center justify-center w-9 h-9 rounded-xl border border-gray-200 text-gray-500 hover:bg-gray-50 hover:text-gray-700 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/50 focus-visible:ring-offset-1","aria-label":"Копіювати координати",onClick:u},[e.createVNode(e.unref(ye.ClipboardPaste),{size:18,"stroke-width":2})])])])])]))}}),Ct="geolocation-marker",Dg=e.defineComponent({__name:"GeolocationMarkerLayer",props:{position:{}},setup(t){const n=t,{map:o,ready:r}=Qe();let l=!1;function s(){return{type:"FeatureCollection",features:[]}}function i(a){return{type:"Feature",geometry:{type:"Point",coordinates:[a.lng,a.lat]},properties:{}}}function c(a){a.getSource(Ct)||(a.addSource(Ct,{type:"geojson",data:s()}),a.addLayer({id:`${Ct}-circle`,type:"circle",source:Ct,paint:{"circle-radius":6,"circle-color":"#3b82f6","circle-stroke-width":2,"circle-stroke-color":"#dddddd"}}),l=!0)}function u(a){try{a.getLayer(`${Ct}-circle`)&&a.removeLayer(`${Ct}-circle`),a.getSource(Ct)&&a.removeSource(Ct)}catch{}l=!1}function d(a){const m=a.getSource(Ct);if(m){if(n.position==null){m.setData(s());return}m.setData({type:"FeatureCollection",features:[i(n.position)]})}}function y(){r().then(()=>{const a=o.value;if(a){if(n.position==null){l&&u(a);return}l||c(a),d(a)}})}return e.watch(()=>n.position,()=>y(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{r().then(()=>u(o.value))}),(a,m)=>null}});function Pg(t,n,o){const r=o||`HTTP ${n}`;if(t==null||typeof t!="object")return r;const l=t;return typeof l.message=="string"&&l.message.trim()?l.message.trim():typeof l.error=="string"&&l.error.trim()?l.error.trim():r}async function zg(t,n){const o=new URLSearchParams({lat:String(t),lng:String(n)}),r=await fetch(`/api/coords/height?${o}`),l=await r.json().catch(()=>null);if(!r.ok)throw new Error(Pg(l,r.status,r.statusText));return l}function Ig(){const t=e.ref(null),n=e.ref(null),o=e.ref(!1),r=e.ref(null);async function l(i){t.value=i,o.value=!0,r.value=null,n.value=null;try{const c=await zg(i.lat,i.lng);n.value=c.height,c.height==null&&(r.value="unavailable")}catch(c){n.value=null,r.value=c instanceof Error?c.message:"loadFailed"}finally{o.value=!1}}function s(){t.value=null,n.value=null,o.value=!1,r.value=null}return{point:t,height:n,loading:o,error:r,measureAt:l,reset:s}}let ir;function Ml(){return ir||(ir=Ig()),ir}const jg={class:"height-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up"},Rg={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},Og={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},Ug={class:"flex items-center gap-2"},qg={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},Hg={class:"px-3 py-3 space-y-3"},Wg={key:0,class:"flex items-center gap-2 text-xs text-gray-500"},Yg={key:1,class:"rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700"},Gg={key:0,class:"space-y-1.5"},Kg={class:"text-3xl font-bold text-blue-600 tabular-nums"},Zg={class:"text-xs text-gray-500"},Xg={key:1,class:"rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-800"},Jg={key:3,class:"rounded-md border border-dashed border-gray-200 bg-gray-50 px-3 py-3 text-xs leading-relaxed text-gray-500"},Qg=e.defineComponent({name:"HeightPanel",__name:"index",emits:["close"],setup(t,{emit:n}){const o=n,r=Ml(),l=e.computed(()=>r.point.value),s=e.computed(()=>r.loading.value),i=e.computed(()=>r.error.value),c=e.computed(()=>typeof r.height.value=="number"),u=e.computed(()=>{const{value:m}=r.height;if(m==null||!Number.isFinite(m))return"—";const f=Math.round(m*10)/10;return Number.isInteger(f)?String(f):f.toLocaleString("uk-UA",{minimumFractionDigits:1,maximumFractionDigits:1})}),d=e.computed(()=>l.value?`${l.value.lat.toFixed(6)}, ${l.value.lng.toFixed(6)}`:""),y=e.computed(()=>i.value==="unavailable"?"Не вдалося визначити висоту для цієї точки":"Не вдалося завантажити дані висоти");function a(){o("close")}return(m,f)=>(e.openBlock(),e.createElementBlock("div",jg,[e.createElementVNode("div",Rg,[e.createElementVNode("div",Og,[e.createElementVNode("div",Ug,[e.createElementVNode("div",qg,[e.createVNode(e.unref(ye.TrendingUp),{size:14,"stroke-width":2,class:"text-white"})]),f[0]||(f[0]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Висота точки",-1))]),e.createElementVNode("button",{type:"button",class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:a},[e.createVNode(e.unref(ye.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",Hg,[s.value?(e.openBlock(),e.createElementBlock("div",Wg,[e.createVNode(e.unref(ye.Loader2),{size:14,class:"animate-spin text-blue-500"}),f[1]||(f[1]=e.createElementVNode("span",null,"Визначаємо висоту…",-1))])):i.value&&!c.value?(e.openBlock(),e.createElementBlock("div",Yg,e.toDisplayString(y.value),1)):l.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[c.value?(e.openBlock(),e.createElementBlock("div",Gg,[f[3]||(f[3]=e.createElementVNode("div",{class:"text-[10px] uppercase tracking-wide text-gray-400"},"Висота",-1)),e.createElementVNode("div",Kg,[e.createTextVNode(e.toDisplayString(u.value)+" ",1),f[2]||(f[2]=e.createElementVNode("span",{class:"text-sm font-semibold text-gray-400"},"м",-1))]),e.createElementVNode("div",Zg,e.toDisplayString(d.value),1)])):(e.openBlock(),e.createElementBlock("div",Xg," Не вдалося визначити висоту для цієї точки "))],64)):(e.openBlock(),e.createElementBlock("div",Jg," Клацніть по карті, щоб отримати висоту точки. "))])])]))}}),ey={"aria-hidden":"true",style:{display:"none"}},Nt="height-marker",ty=e.defineComponent({__name:"HeightMarkerLayer",props:{point:{}},setup(t){const n=t,{map:o,ready:r}=Qe();let l=!1;function s(){return{type:"FeatureCollection",features:[]}}function i(a){return{type:"Feature",geometry:{type:"Point",coordinates:[a.lng,a.lat]},properties:{}}}function c(a){a.getSource(Nt)||(a.addSource(Nt,{type:"geojson",data:s()}),a.addLayer({id:`${Nt}-circle`,type:"circle",source:Nt,paint:{"circle-radius":7,"circle-color":"#2563eb","circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),l=!0)}function u(a){try{a.getLayer(`${Nt}-circle`)&&a.removeLayer(`${Nt}-circle`),a.getSource(Nt)&&a.removeSource(Nt)}catch{}l=!1}function d(a){const m=a.getSource(Nt);if(m){if(n.point==null){m.setData(s());return}m.setData({type:"FeatureCollection",features:[i(n.point)]})}}function y(){r().then(()=>{const a=o.value;if(a){if(n.point==null){l&&u(a);return}l||c(a),d(a)}})}return e.watch(()=>n.point,()=>y(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{r().then(()=>u(o.value))}),(a,m)=>(e.openBlock(),e.createElementBlock("div",ey))}}),ny={class:"animate-slide-up"},oy={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},ry={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},ly={class:"flex items-center gap-2"},ay={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},sy={class:"px-3 py-2.5 border-b border-gray-200"},iy={class:"flex gap-1 flex-nowrap"},cy=["title","onClick"],dy={class:"px-3 py-2.5 border-b border-gray-200"},uy={class:"flex items-center gap-4"},fy={class:"flex items-center gap-2 cursor-pointer shrink-0"},my={class:"flex items-center gap-2 cursor-pointer flex-1 min-w-0"},py={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},gy={class:"flex items-center gap-1.5"},yy=Ae(e.defineComponent({name:"DrawingPanel",__name:"index",emits:["close","clear","download","finish-polygon","undo","update:tool","update:stroke-color","update:stroke-width"],setup(t,{expose:n,emit:o}){const r=o,l=[{id:"pen",icon:ye.Pen,title:"Олівець"},{id:"line",icon:ye.Minus,title:"Лінія"},{id:"rect",icon:ye.Square,title:"Прямокутник"},{id:"circle",icon:ye.Circle,title:"Коло"},{id:"polygon",icon:ye.Pentagon,title:"Полігон"},{id:"paint",icon:ye.PaintBucket,title:"Балончик"},{id:"eraser",icon:ye.Eraser,title:"Стирачка"}],s=e.ref("pen"),i=e.ref("#2563eb"),c=e.ref(3),u=()=>r("update:stroke-color",i.value),d=()=>r("update:stroke-width",c.value);e.watch(s,k=>r("update:tool",k)),e.watch(i,k=>r("update:stroke-color",k)),e.watch(c,k=>r("update:stroke-width",k));function y(){r("close")}function a(){r("undo")}function m(){r("finish-polygon")}function f(){r("clear")}function p(){r("download")}return n({tool:s,strokeColor:i,strokeWidth:c}),(k,h)=>(e.openBlock(),e.createElementBlock("div",ny,[e.createElementVNode("div",oy,[e.createElementVNode("div",ry,[e.createElementVNode("div",ly,[e.createElementVNode("div",ay,[e.createVNode(e.unref(ye.Pen),{size:14,"stroke-width":2,class:"text-white"})]),h[2]||(h[2]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Малювання",-1))]),e.createElementVNode("button",{type:"button",class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:y},[e.createVNode(e.unref(ye.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("section",sy,[h[3]||(h[3]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Інструмент ",-1)),e.createElementVNode("div",iy,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,g=>e.createElementVNode("button",{key:g.id,type:"button",class:e.normalizeClass(["w-8 h-8 shrink-0 flex items-center justify-center rounded-lg border transition-all",s.value===g.id?"bg-blue-50 text-blue-600 border-blue-200 ring-2 ring-blue-200":"bg-gray-50 text-gray-500 border-gray-200 hover:bg-gray-100 hover:text-gray-700 hover:border-gray-300"]),title:g.title,onClick:b=>s.value=g.id},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(g.icon),{size:16,"stroke-width":2}))],10,cy)),64))])]),e.createElementVNode("section",dy,[h[6]||(h[6]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Стиль ",-1)),e.createElementVNode("div",uy,[e.createElementVNode("label",fy,[h[4]||(h[4]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600"},"Колір",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[0]||(h[0]=g=>i.value=g),type:"color",class:"w-9 h-9 p-0.5 border-2 border-gray-200 rounded-lg cursor-pointer bg-white [&::-webkit-color-swatch-wrapper]:p-0 [&::-webkit-color-swatch]:border-none [&::-webkit-color-swatch]:rounded-md",onChange:u},null,544),[[e.vModelText,i.value]])]),e.createElementVNode("label",my,[h[5]||(h[5]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 shrink-0 w-14"},"Товщина",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[1]||(h[1]=g=>c.value=g),type:"range",min:"1",max:"12",class:"drawing-panel-range w-full min-w-[100px] h-2 bg-gray-200 rounded-full appearance-none cursor-pointer",onInput:d},null,544),[[e.vModelText,c.value,void 0,{number:!0}]])])])]),e.createElementVNode("footer",py,[e.createElementVNode("div",gy,[e.createElementVNode("button",{type:"button",class:"w-9 h-9 shrink-0 flex items-center justify-center rounded-lg bg-gray-100 text-gray-700 hover:bg-gray-200 transition-colors",title:"Відкотити дію","aria-label":"Відкотити дію",onClick:a},[e.createVNode(e.unref(ye.Undo2),{size:14,"stroke-width":2})]),e.createElementVNode("button",{type:"button",class:"flex-1 flex items-center justify-center gap-1.5 px-2 py-2 text-xs font-medium rounded-lg bg-red-50 text-red-600 hover:bg-red-100 hover:text-red-700 transition-colors",onClick:f},[e.createVNode(e.unref(ye.Trash2),{size:14,"stroke-width":2}),h[7]||(h[7]=e.createTextVNode(" Очистити ",-1))])]),s.value==="polygon"?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"w-full flex items-center justify-center gap-2 px-3 py-2 text-xs font-medium rounded-lg bg-blue-50 text-blue-600 hover:bg-blue-100 transition-colors",onClick:m},[e.createVNode(e.unref(ye.Pentagon),{size:14,"stroke-width":2}),h[8]||(h[8]=e.createTextVNode(" Замкнути полігон ",-1))])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"w-full flex items-center justify-center gap-2 px-3 py-2 text-xs font-medium rounded-lg bg-gradient-to-r from-blue-400 to-blue-500 text-white shadow-sm hover:brightness-105 transition-[filter]",onClick:p},[e.createVNode(e.unref(ye.Download),{size:14,"stroke-width":2}),h[9]||(h[9]=e.createTextVNode(" Завантажити як фото ",-1))])])])]))}}),[["__scopeId","data-v-4cee5a30"]]),hy=Ae(e.defineComponent({name:"DrawingCanvas",__name:"DrawingCanvas",props:{tool:{default:"pen"},strokeColor:{default:"#2563eb"},strokeWidth:{default:3}},setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),l=e.ref(null),s=e.ref({x:0,y:0}),i=e.ref(!1),c=t,u=e.computed(()=>Math.max(c.strokeWidth*3,12)),d=e.computed(()=>({width:`${u.value}px`,height:`${u.value}px`,left:`${s.value.x}px`,top:`${s.value.y}px`,transform:"translate(-50%, -50%)"})),{ready:y}=Qe(),a=e.ref(!1),m=e.ref([]),f=e.ref([]);let p=0,k=0,h=0,g=0,b=null;function x(){const B=r.value,j=l.value,X=o.value;if(!B||!X)return;const he=X.parentElement;if(!he)return;const Z=he.clientWidth,P=he.clientHeight;if(Z<=0||P<=0)return;const q=window.devicePixelRatio||1;B.width=Z*q,B.height=P*q,B.style.width=`${Z}px`,B.style.height=`${P}px`;const H=B.getContext("2d");if(H&&H.scale(q,q),j){j.width=Z*q,j.height=P*q,j.style.width=`${Z}px`,j.style.height=`${P}px`;const re=j.getContext("2d");re&&re.scale(q,q)}}function C(B){const j=r.value;if(!j)return{x:0,y:0};const X=j.getBoundingClientRect();return{x:B.clientX-X.left,y:B.clientY-X.top}}function V(){const B=r.value;return B?B.getContext("2d"):null}function E(){const B=l.value;return B?B.getContext("2d"):null}function _(){const B=l.value;if(!B)return;const j=window.devicePixelRatio||1,X=B.getContext("2d");X&&X.clearRect(0,0,B.width/j,B.height/j)}function N(){const B=E();if(B){if(_(),B.globalCompositeOperation="source-over",B.strokeStyle=c.strokeColor,B.lineWidth=c.strokeWidth,B.lineCap="round",B.lineJoin="round",c.tool==="line")B.beginPath(),B.moveTo(p,k),B.lineTo(h,g),B.stroke();else if(c.tool==="rect"){const j=Math.min(p,h),X=Math.min(k,g),he=Math.abs(h-p),Z=Math.abs(g-k);B.strokeRect(j,X,he,Z)}else if(c.tool==="circle"){const j=Math.sqrt((h-p)**2+(g-k)**2);B.beginPath(),B.arc(p,k,Math.max(j,1),0,2*Math.PI),B.stroke()}else if(c.tool==="polygon"&&m.value.length>0){const j=m.value;B.beginPath(),B.moveTo(j[0].x,j[0].y);for(let X=1;X<j.length;X++)B.lineTo(j[X].x,j[X].y);B.lineTo(h,g),B.stroke()}}}function T(B){B.strokeStyle=c.strokeColor,B.lineWidth=c.strokeWidth,B.lineCap="round",B.lineJoin="round"}function Y(){const B=r.value;if(!B)return;const j=B.getContext("2d");if(!j)return;const X=j.getImageData(0,0,B.width,B.height);f.value=[...f.value.slice(-19),X]}function ee(B){if(!r.value)return;const{x:j,y:X}=C(B);p=j,k=X,h=j,g=X;const he=V();if(he){if(c.tool==="pen"||c.tool==="eraser"){Y(),a.value=!0,c.tool==="eraser"?(he.globalCompositeOperation="destination-out",he.lineWidth=u.value):(he.globalCompositeOperation="source-over",T(he)),he.beginPath(),he.moveTo(j,X);return}if(c.tool==="paint"){Y(),a.value=!0,he.globalCompositeOperation="source-over",he.fillStyle=c.strokeColor,oe(he,j,X);return}if(c.tool==="line"||c.tool==="rect"||c.tool==="circle"){Y(),a.value=!0;return}if(c.tool==="polygon"){m.value=[...m.value,{x:j,y:X}],h=j,g=X,N();return}}}function R(B){const{x:j,y:X}=C(B);h=j,g=X,c.tool==="eraser"&&(s.value={x:j,y:X},i.value=!0);const he=V();if(he){if(c.tool==="pen"&&a.value){he.globalCompositeOperation="source-over",T(he),he.lineTo(j,X),he.stroke();return}if(c.tool==="eraser"&&a.value){he.globalCompositeOperation="destination-out",he.lineWidth=u.value,he.lineTo(j,X),he.stroke();return}if(c.tool==="paint"&&a.value){he.globalCompositeOperation="source-over",he.fillStyle=c.strokeColor,oe(he,j,X);return}a.value&&(c.tool==="line"||c.tool==="rect"||c.tool==="circle")&&N(),c.tool==="polygon"&&m.value.length>0&&N()}}function ae(){i.value=!1}function ue(){c.tool==="polygon"&&J()}function oe(B,j,X){const he=Math.max(c.strokeWidth*2.5,8),Z=12+Math.floor(c.strokeWidth);for(let P=0;P<Z;P++){const q=Math.random()*2*Math.PI,H=he*Math.random(),re=j+Math.cos(q)*H,I=X+Math.sin(q)*H,le=1+Math.random()*2;B.beginPath(),B.arc(re,I,le,0,2*Math.PI),B.fill()}}function te(){if(!a.value)return;const B=V();if(!B){a.value=!1;return}if(c.tool==="paint"){_(),a.value=!1,B.globalCompositeOperation="source-over";return}if(c.tool==="line")B.globalCompositeOperation="source-over",T(B),B.beginPath(),B.moveTo(p,k),B.lineTo(h,g),B.stroke();else if(c.tool==="rect"){B.globalCompositeOperation="source-over",T(B);const j=Math.min(p,h),X=Math.min(k,g),he=Math.abs(h-p),Z=Math.abs(g-k);B.strokeRect(j,X,he,Z)}else if(c.tool==="circle"){B.globalCompositeOperation="source-over",T(B);const j=Math.sqrt((h-p)**2+(g-k)**2);B.beginPath(),B.arc(p,k,Math.max(j,1),0,2*Math.PI),B.stroke()}_(),a.value=!1,B.globalCompositeOperation="source-over"}function J(){const B=V(),j=m.value;if(!B||j.length<2){m.value=[],_();return}Y(),B.globalCompositeOperation="source-over",T(B),B.beginPath(),B.moveTo(j[0].x,j[0].y);for(let X=1;X<j.length;X++)B.lineTo(j[X].x,j[X].y);B.closePath(),B.stroke(),m.value=[],_(),B.globalCompositeOperation="source-over"}function S(){const B=r.value;if(!B||f.value.length===0)return;const j=B.getContext("2d");if(!j)return;const X=f.value[f.value.length-1];f.value=f.value.slice(0,-1),j.putImageData(X,0,0)}function F(){const B=r.value;if(!B)return;const j=B.getContext("2d");if(!j)return;const X=window.devicePixelRatio||1;j.clearRect(0,0,B.width/X,B.height/X),m.value=[],f.value=[],_()}function M(){return r.value}return e.watch(()=>c.tool,(B,j)=>{j==="polygon"&&B!=="polygon"&&(m.value=[],_())}),e.onMounted(()=>{y().then(()=>{var j;x();const B=(j=o.value)==null?void 0:j.parentElement;B&&typeof ResizeObserver<"u"&&(b=new ResizeObserver(x),b.observe(B))})}),e.onBeforeUnmount(()=>{b==null||b.disconnect(),b=null}),n({clear:F,getCanvas:M,finishPolygon:J,undo:S,canUndo:()=>f.value.length>0}),(B,j)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"wrapRef",ref:o,class:e.normalizeClass(["drawing-canvas-wrap",{"drawing-canvas-wrap--eraser":t.tool==="eraser"}]),onMousedown:ee,onMousemove:R,onMouseup:te,onDblclick:ue,onMouseleave:j[0]||(j[0]=()=>{ae(),te()})},[e.createElementVNode("canvas",{ref_key:"canvasRef",ref:r,class:"drawing-canvas"},null,512),e.createElementVNode("canvas",{ref_key:"previewRef",ref:l,class:"drawing-canvas drawing-canvas--preview"},null,512),e.withDirectives(e.createElementVNode("div",{class:"drawing-canvas__eraser-cursor",style:e.normalizeStyle(d.value)},null,4),[[e.vShow,t.tool==="eraser"&&i.value]])],34))}}),[["__scopeId","data-v-7f5e8365"]]),by={class:"add-data-modal__dialog bg-white rounded-2xl shadow-2xl border border-slate-200 w-full max-w-5xl max-h-[90vh] flex flex-col overflow-hidden"},xy={class:"flex items-center justify-between px-6 py-4 border-b border-slate-200"},ky={class:"grid grid-cols-1 lg:grid-cols-2 min-h-0 flex-1"},wy={class:"px-6 py-5 border-b lg:border-b-0 lg:border-r border-slate-200 overflow-y-auto"},_y={class:"block mb-4"},Ey={class:"block mb-4"},Cy={key:0,class:"mb-4"},Ny={key:1,class:"mb-4"},Vy={class:"block mb-4"},$y={class:"relative"},By={key:0,class:"absolute left-0 right-0 top-full z-10 mt-1 max-h-48 overflow-y-auto rounded-lg border border-slate-200 bg-white shadow-lg"},Sy=["onMousedown"],vy={key:0,class:"px-3 py-2 text-sm text-slate-500"},Ly={key:1,class:"px-3 py-2 text-sm text-slate-500"},Ty={class:"flex flex-col items-center text-center gap-3 px-4 py-8"},Ay={class:"w-12 h-12 rounded-xl bg-blue-50 text-blue-600 flex items-center justify-center"},My={class:"text-sm text-slate-600 leading-relaxed"},Fy={key:0,class:"text-sm font-medium text-slate-700"},Dy=["accept"],Py={key:2,class:"mb-4 text-sm text-red-600"},zy={class:"flex items-center gap-3"},Iy=["disabled"],jy=["disabled"],Ry={class:"px-6 py-5 bg-slate-50 overflow-y-auto flex flex-col justify-center"},Oy={class:"rounded-xl border border-slate-200 bg-white p-4 space-y-2"},Uy={class:"text-sm text-slate-700"},qy={class:"text-sm text-slate-700"},Hy={key:0,class:"text-sm text-slate-700"},Wy={class:"text-sm text-slate-500 leading-relaxed"},cr="client-layer-preview",go="add-data-preview",Fl="add-data",yo="4326",Yy=Ae(e.defineComponent({name:"MapAddDataPanel",__name:"index",emits:["close"],setup(t,{emit:n}){const o=n,r=Qe(),{registerClientLayer:l}=Xo(),{activateTemporaryLayer:s,deactivateTemporaryLayer:i,clearTemporaryLayers:c}=xn(r.map),u=e.ref("file"),d=rd,y=hl(),a=e.ref(""),m=e.ref(""),f=e.ref(null),p=e.ref(yo),k=e.ref("EPSG:4326"),h=e.ref([{id:yo,text:"EPSG:4326"}]),g=e.ref(null),b=e.ref(""),x=e.ref(!1),C=e.ref(!1),V=e.ref(!1),E=e.ref(!1),_=e.ref(null);let N=null;const T=e.computed(()=>a.value.trim()?u.value==="geometry"?!!m.value.trim():!!(f.value&&p.value):!1),Y=e.computed(()=>T.value),ee=e.computed(()=>{if(!g.value)return null;const q=Array.isArray(g.value.features)?g.value.features:[],H=[...new Set(q.map(le=>{var me;return(me=le==null?void 0:le.geometry)==null?void 0:me.type}).filter(Boolean))].join(", ")||"—",re=Ko(g.value),I=re?`${re[0][1].toFixed(5)}, ${re[0][0].toFixed(5)} — ${re[1][1].toFixed(5)}, ${re[1][0].toFixed(5)}`:null;return{featureCount:q.length,geometryTypes:H,boundsText:I}});function R(q){window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:q}))}function ae(){i(cr,go),R({action:"deactivate",owner:go,spec:{id:cr}})}function ue(q){const H={id:cr,title:a.value.trim()||"Попередній перегляд",type:"geojson",data:q};s(H,{},go),R({action:"activate",owner:go,spec:H});const re=Ko(q);re&&r.fitBounds&&r.fitBounds(re,{padding:48,duration:600})}function oe(q){if(!q||typeof q!="object")return null;const H=q,re=H.id??H.srid??H.code??H.value;if(re==null||re==="")return null;const I=String(re),le=H.text??H.name??H.title??H.label,me=le?String(le):`EPSG:${I}`;return{id:I,text:me.includes(I)?me:`${me} (${I})`}}async function te(q="",H=!1){try{V.value=!0;const re=q.trim(),I=re?`/api/suggest/srid?key=${encodeURIComponent(re)}`:"/api/suggest/srid",le=await fetch(I);if(!le.ok){h.value=[];return}const me=await le.json(),A=(Array.isArray(me==null?void 0:me.data)?me.data:Array.isArray(me)?me:[]).map(oe).filter(Boolean);if(A.length){if(h.value=A,H){const K=A.find(fe=>fe.id===yo)||A[0];J(K,!1)}return}h.value=[]}catch(re){console.error("Failed to load SRID classifier:",re)}finally{V.value=!1}}function J(q,H=!0){p.value=q.id,k.value=q.text,H&&(C.value=!1)}function S(){const q=k.value.trim(),H=h.value.find(re=>re.id===p.value);(!H||q!==H.id&&q!==H.text)&&(p.value=""),C.value=!0,N&&clearTimeout(N),N=setTimeout(()=>{te(q)},300)}function F(){setTimeout(()=>{C.value=!1},150)}function M(q){var re;const H=[q,q==null?void 0:q.data,q==null?void 0:q.result,q==null?void 0:q.geojson];for(const I of H){const le=pl(I);if((re=le==null?void 0:le.features)!=null&&re.length)return le}return null}async function B(){var re,I;if(b.value="",u.value==="geometry"){let le;try{le=JSON.parse(m.value.trim())}catch{throw new Error("Некоректний JSON у полі геометрії")}const me=pl(le);if(!((re=me==null?void 0:me.features)!=null&&re.length))throw new Error("Не вдалося розпізнати геометрію GeoJSON");return me}if(!f.value)throw new Error(`Оберіть файл (${y})`);const q=await id(f.value,p.value),H=M(q);if(!((I=H==null?void 0:H.features)!=null&&I.length))throw new Error("Не вдалося розпізнати геометрію у файлі");return H}async function j(){x.value=!0,b.value="";try{const q=await B();g.value=q,ae(),ue(q)}catch(q){g.value=null,ae(),b.value=(q==null?void 0:q.message)||"Не вдалося підготувати попередній перегляд"}finally{x.value=!1}}async function X(){if(!g.value&&(await j(),!g.value))return;const q=`client-layer-${Date.now()}`,H={id:q,title:a.value.trim(),type:"geojson",data:g.value};ae(),s(H,{},Fl),R({action:"activate",owner:Fl,spec:H});const re=Ko(g.value),I=a.value.trim();l({id:q,name:I,bounds:re,data:g.value}),window.dispatchEvent(new CustomEvent(kn,{detail:{id:q,name:I,bounds:re}})),re&&r.fitBounds&&r.fitBounds(re,{padding:48,duration:600}),o("close")}function he(q){if(!q){f.value=null;return}if(!yl(q)){b.value=`Підтримуються формати: ${y}`,f.value=null,g.value=null,ae();return}f.value=q,g.value=null,ae(),b.value=""}function Z(q){var re;const H=q.target;he(((re=H.files)==null?void 0:re[0])||null)}function P(q){var H,re;E.value=!1,he(((re=(H=q.dataTransfer)==null?void 0:H.files)==null?void 0:re[0])||null)}return e.watch(u,()=>{g.value=null,b.value="",ae()}),e.onMounted(()=>{te(yo,!0)}),e.onBeforeUnmount(()=>{N&&clearTimeout(N),ae()}),(q,H)=>(e.openBlock(),e.createElementBlock("div",{class:"add-data-modal fixed inset-0 z-[1200] flex items-center justify-center p-4 pointer-events-auto",onClick:H[9]||(H[9]=e.withModifiers(re=>o("close"),["self"]))},[e.createElementVNode("div",by,[e.createElementVNode("div",xy,[H[10]||(H[10]=e.createElementVNode("h2",{class:"text-lg font-semibold text-slate-800"},"Додавання даних",-1)),e.createElementVNode("button",{type:"button",class:"w-8 h-8 inline-flex items-center justify-center rounded-lg text-slate-500 hover:bg-slate-100 hover:text-slate-700","aria-label":"Закрити",onClick:H[0]||(H[0]=re=>o("close"))},[e.createVNode(e.unref(ye.X),{size:18})])]),e.createElementVNode("div",ky,[e.createElementVNode("div",wy,[e.createElementVNode("label",_y,[H[12]||(H[12]=e.createElementVNode("span",{class:"block text-sm font-medium text-slate-700 mb-1.5"},[e.createTextVNode(" Формат даних "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":H[1]||(H[1]=re=>u.value=re),class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm text-slate-800 bg-white focus:outline-none focus:ring-2 focus:ring-blue-400/50"},[...H[11]||(H[11]=[e.createElementVNode("option",{value:"file"},"Файл",-1),e.createElementVNode("option",{value:"geometry"},"Геометрія",-1)])],512),[[e.vModelSelect,u.value]])]),e.createElementVNode("label",Ey,[H[13]||(H[13]=e.createElementVNode("span",{class:"block text-sm font-medium text-slate-700 mb-1.5"},[e.createTextVNode(" Назва "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":H[2]||(H[2]=re=>a.value=re),type:"text",class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm text-slate-800 focus:outline-none focus:ring-2 focus:ring-blue-400/50",placeholder:"Введіть назву"},null,512),[[e.vModelText,a.value]])]),u.value==="geometry"?(e.openBlock(),e.createElementBlock("div",Cy,[H[14]||(H[14]=e.createElementVNode("span",{class:"block text-sm font-medium text-slate-700 mb-1.5"},[e.createTextVNode(" Геометрія (GeoJSON) "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":H[3]||(H[3]=re=>m.value=re),rows:"10",class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm font-mono text-slate-800 focus:outline-none focus:ring-2 focus:ring-blue-400/50 resize-y",placeholder:'{"type":"Polygon","coordinates":[[[30.5,50.4],[30.6,50.4],[30.6,50.5],[30.5,50.5],[30.5,50.4]]]}'},null,512),[[e.vModelText,m.value]]),H[15]||(H[15]=e.createElementVNode("p",{class:"mt-1.5 text-xs text-slate-500"}," Вставте GeoJSON-геометрію, Feature або FeatureCollection. ",-1))])):(e.openBlock(),e.createElementBlock("div",Ny,[e.createElementVNode("label",Vy,[H[16]||(H[16]=e.createElementVNode("span",{class:"block text-sm font-medium text-slate-700 mb-1.5"},[e.createTextVNode(" Проекція "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.createElementVNode("div",$y,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":H[4]||(H[4]=re=>k.value=re),type:"text",class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm text-slate-800 bg-white focus:outline-none focus:ring-2 focus:ring-blue-400/50",placeholder:"EPSG:4326",autocomplete:"off",onFocus:H[5]||(H[5]=re=>C.value=!0),onInput:S,onBlur:F},null,544),[[e.vModelText,k.value]]),C.value?(e.openBlock(),e.createElementBlock("div",By,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,re=>(e.openBlock(),e.createElementBlock("button",{key:re.id,type:"button",class:"block w-full px-3 py-2 text-left text-sm text-slate-700 hover:bg-blue-50 hover:text-blue-700",onMousedown:e.withModifiers(I=>J(re),["prevent"])},e.toDisplayString(re.text),41,Sy))),128)),!h.value.length&&!V.value?(e.openBlock(),e.createElementBlock("p",vy," Нічого не знайдено ")):e.createCommentVNode("",!0),V.value?(e.openBlock(),e.createElementBlock("p",Ly," Пошук... ")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:e.normalizeClass(["add-data-modal__dropzone",{"add-data-modal__dropzone--active":E.value}]),onDragover:H[6]||(H[6]=e.withModifiers(re=>E.value=!0,["prevent"])),onDragleave:H[7]||(H[7]=e.withModifiers(re=>E.value=!1,["prevent"])),onDrop:e.withModifiers(P,["prevent"]),onClick:H[8]||(H[8]=re=>{var I;return(I=_.value)==null?void 0:I.click()})},[e.createElementVNode("div",Ty,[e.createElementVNode("div",Ay,[e.createVNode(e.unref(ye.Upload),{size:22})]),e.createElementVNode("p",My," Ви можете підключити власний файл у форматах "+e.toDisplayString(e.unref(y))+". Для цього перетягніть файл зі свого сховища у цю область або завантажте з комп'ютера ",1),H[17]||(H[17]=e.createElementVNode("p",{class:"text-xs text-slate-400"},"Максимальний розмір: 50MB",-1)),f.value?(e.openBlock(),e.createElementBlock("p",Fy,e.toDisplayString(f.value.name),1)):e.createCommentVNode("",!0)]),e.createElementVNode("input",{ref_key:"fileInputRef",ref:_,type:"file",accept:e.unref(d),class:"hidden",onChange:Z},null,40,Dy)],34)])),b.value?(e.openBlock(),e.createElementBlock("p",Py,e.toDisplayString(b.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",zy,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center px-4 py-2 rounded-lg text-sm font-medium text-white bg-slate-800 hover:bg-slate-900 disabled:opacity-50 disabled:cursor-not-allowed",disabled:!Y.value||x.value,onClick:X}," Додати ",8,Iy),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center px-4 py-2 rounded-lg text-sm font-medium text-slate-700 border border-slate-300 bg-white hover:bg-slate-50 disabled:opacity-50 disabled:cursor-not-allowed",disabled:!T.value||x.value,onClick:j}," Попередній перегляд ",8,jy)])]),e.createElementVNode("div",Ry,[ee.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[H[21]||(H[21]=e.createElementVNode("p",{class:"text-xs font-semibold tracking-wide text-slate-500 uppercase mb-2"}," Попередній перегляд ",-1)),e.createElementVNode("div",Oy,[e.createElementVNode("p",Uy,[H[18]||(H[18]=e.createElementVNode("span",{class:"font-medium"},"Об'єктів:",-1)),e.createTextVNode(" "+e.toDisplayString(ee.value.featureCount),1)]),e.createElementVNode("p",qy,[H[19]||(H[19]=e.createElementVNode("span",{class:"font-medium"},"Тип:",-1)),e.createTextVNode(" "+e.toDisplayString(ee.value.geometryTypes),1)]),ee.value.boundsText?(e.openBlock(),e.createElementBlock("p",Hy,[H[20]||(H[20]=e.createElementVNode("span",{class:"font-medium"},"Межі:",-1)),e.createTextVNode(" "+e.toDisplayString(ee.value.boundsText),1)])):e.createCommentVNode("",!0)])],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[H[22]||(H[22]=e.createElementVNode("p",{class:"text-xs font-semibold tracking-wide text-slate-500 uppercase mb-2"}," Немає даних для попереднього перегляду ",-1)),e.createElementVNode("p",Wy,[u.value==="file"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Для продовження завантажте файл та заповніть необхідні поля. Якщо бажаєте попередньо переглянути Ваші дані, натисніть кнопку «Попередній перегляд». ")],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Для продовження вставте геометрію та заповніть необхідні поля. Якщо бажаєте попередньо переглянути Ваші дані, натисніть кнопку «Попередній перегляд». ")],64))])],64))])])])]))}}),[["__scopeId","data-v-d53011ce"]]),Dl=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var m,f;const n=t,o=((f=(m=e.getCurrentInstance())==null?void 0:m.appContext.config.globalProperties)==null?void 0:f.$settings)||null,{map:r,ready:l}=Qe();let s=null;function i(){s==null||s.remove(),s=null}function c(p){if(!p)return null;if(typeof p=="string")try{p=JSON.parse(p)}catch{return null}return p.type==="FeatureCollection"?p:p.type==="Feature"?{type:"FeatureCollection",features:[p]}:p.type&&Array.isArray(p.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:p,properties:{}}]}:Array.isArray(p.features)?{type:"FeatureCollection",features:p.features}:p.geometry?c(p.geometry):null}function u(p){var g,b,x;return{type:"line",color:"#8e4484",width:2,opacity:((((x=(b=(g=p==null?void 0:p.features)==null?void 0:g[0])==null?void 0:b.geometry)==null?void 0:x.type)||"").includes("Polygon"),.95)}}async function d(p){const k=await fetch(p);if(!k.ok)throw new Error(String(k.status));return k.json()}async function y(p,k){if(p){const h=/^https?:\/\//.test(p)?p:new URL(p,location.origin).toString(),g=await d(h).catch(()=>null),b=c(g);if(b)return b}if(k){const h=await d(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(k)}`).catch(()=>null),g=c(h);if(g)return g}return null}async function a(){var g,b,x,C;if(!n.layerId||!r.value){i();return}typeof l=="function"&&await l().catch(()=>{});const p=n.boundary??((g=n.settingsMap)==null?void 0:g.boundary)??((b=o==null?void 0:o.map)==null?void 0:b.boundary)??null,k=n.katottg??((x=n.settingsMap)==null?void 0:x.katottg)??((C=o==null?void 0:o.map)==null?void 0:C.katottg)??null;if(!p&&!k){i();return}const h=await y(p,k);if(!h){i();return}i(),s=Ie(`${n.layerId}-boundary`,{source:{type:"geojson",data:h},style:u(h)},r)}return e.watch(()=>{var p,k;return[n.layerId,n.boundary,n.katottg,(p=n.settingsMap)==null?void 0:p.boundary,(k=n.settingsMap)==null?void 0:k.katottg,r.value]},()=>{a()},{immediate:!0}),e.onBeforeUnmount(i),(p,k)=>null}}),Gy={key:3,class:"absolute bottom-16 right-4 z-[120] pointer-events-auto"},Ky={key:4,class:"absolute bottom-4 right-4 z-[120] flex items-end gap-2 pointer-events-auto"},Zy={class:"absolute top-[6.5px] right-[6.5px] z-[130] flex flex-col items-end gap-1 pointer-events-auto"},Xy=["aria-label","disabled"],Jy={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"},Qy=["aria-label"],eh={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"},th=["aria-label"],nh={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"},oh=["aria-label"],rh={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"},lh=["aria-label"],ah={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"},sh={class:"map-widget__overlay-grid"},ih={key:0,id:"map-filter-popover-host",class:"map-widget__filter-host"},ch={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},dh={class:"map-widget__stack"},uh={key:2,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom xl:mb-5 mb-2"},fh={class:"map-widget__stack map-widget__stack--bottom"},mh={key:0,class:"map-widget__state"},ph={key:1,class:"map-widget__state map-widget__state--error"},ho=Ae(e.defineComponent({__name:"MapWidget",props:{id:{},height:{},minZoom:{},maxZoom:{},data:{}},setup(t){var gn,Wn,jo,Zt;const n=t;console.log("props.data",n.data);const o=Oe.useRoute(),r=Oe.useRouter(),l=e.ref(null),s=e.ref({}),i=e.ref(null),c=e.ref(!1),u=e.ref(null),d=e.ref(!1),y=e.ref([]),a=e.ref([]),m=e.ref(null),f=e.ref(!1),{resolveMapLegendItems:p}=Nl(),k=Ml(),h=e.ref(null),g=e.computed(()=>h.value==="route"),b=e.computed(()=>h.value==="ruler"),x=e.computed(()=>h.value==="height"),C=e.computed(()=>h.value==="draw"),V=e.computed(()=>h.value==="geolocation"),E=e.computed(()=>h.value==="add-data"),_=e.ref(null),N=e.ref("general"),T=e.ref(null),Y=e.ref(null),ee=e.ref(null),R=e.ref("pen"),ae=e.ref("#2563eb"),ue=e.ref(3),oe=e.ref([]),te=e.ref(null),J=e.ref(null),S=e.ref([]),F=e.ref(!1),M=e.ref(null),B=e.ref(!1),j=e.ref(null),X=e.computed(()=>n.id||"main"),he=e.computed(()=>{var O,se;return{height:((O=n.height)==null?void 0:O.trim())||((se=s.value)==null?void 0:se.height)||"calc(100vh - 65px)"}}),Z=e.computed(()=>{var O;return((O=s.value)==null?void 0:O.name)??null}),P=e.computed(()=>{var O;return((O=s.value)==null?void 0:O.description)??null}),q=e.computed(()=>{var O;return $e((O=s.value)==null?void 0:O.maps)}),H=e.computed(()=>{var se,Se;const O=((se=s.value)==null?void 0:se.minZoom)??((Se=s.value)==null?void 0:Se.minzoom)??null;return typeof O=="number"?O:null}),re=e.computed(()=>{var se,Se;const O=((se=s.value)==null?void 0:se.maxZoom)??((Se=s.value)==null?void 0:Se.maxzoom)??null;return typeof O=="number"?O:typeof n.maxZoom=="number"?n.maxZoom:20}),I=e.ref(null),le=e.computed(()=>{if(!I.value)return null;const{lng:O,lat:se}=I.value;return`${se.toFixed(6)}, ${O.toFixed(6)}`}),me=e.computed(()=>{var O;return((O=l.value)==null?void 0:O.ctx)??null}),be=e.computed(()=>{var O;return((O=s.value)==null?void 0:O.minimap)??null});function A(O){a.value=O.basemaps,m.value=O.selectedId}function K(){f.value=!f.value}function fe(){f.value=!1}function ie(O){if(!O||typeof O!="object")return O;const se=It(O.center);return se?{...O,center:se}:O}const de=((Wn=(gn=e.getCurrentInstance())==null?void 0:gn.appContext.config.globalProperties)==null?void 0:Wn.$settings)||null;function pe(O){if(O==null)return null;const se=Number(typeof O=="string"?O.trim():O);return Number.isFinite(se)?se:null}const ve=It((jo=de==null?void 0:de.map)==null?void 0:jo.center),U=pe((Zt=de==null?void 0:de.map)==null?void 0:Zt.zoom),ne=e.computed(()=>{const O=(de==null?void 0:de.map)||null,se=(O==null?void 0:O.boundary)??null,Se=(O==null?void 0:O.katottg)??null;return!se&&!Se?null:{boundary:se,katottg:Se}});function we(O){return typeof O=="string"&&O.trim()?O.trim().toLowerCase():"top-left"}function $e(O){return Array.isArray(O)?O:O&&typeof O=="object"?Object.values(O).filter(Boolean):[]}const Pe=e.computed(()=>{var O;return $e((O=s.value)==null?void 0:O.widgets)}),Le=e.computed(()=>Pe.value.some(O=>(O==null?void 0:O.type)==="catalog"));function Ue(O){return p(O,{hasCatalogWidget:Le.value})}const We=e.computed(()=>Pe.value.some(O=>(O==null?void 0:O.type)==="basemaps")),et=e.computed(()=>Pe.value.some(O=>(O==null?void 0:O.type)==="layers")),Q=["left","right"],$=e.computed(()=>{const O={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},se={"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 Pe.value.forEach(Se=>{const Me=we(Se.position),Ce=se[Me]??{side:"left",align:"top"};O[Ce.side][Ce.align].push(Se)}),O});function D(O){return Array.isArray(O)?O[0]??null:typeof O=="string"?O:null}async function v(){var se;await e.nextTick();const O=(se=l.value)==null?void 0:se.ctx;return O?(O.ready&&await O.ready(),O):null}function z(){var O,se,Se;return((Se=(se=(O=l.value)==null?void 0:O.ctx)==null?void 0:se.map)==null?void 0:Se.value)??null}function W(){const O=z();if(!O)return null;const se=O.getCenter();return{z:O.getZoom().toFixed(2),x:se.lng.toFixed(5),y:se.lat.toFixed(5)}}async function ge(){var Se;const O=await v(),se=(Se=O==null?void 0:O.map)==null?void 0:Se.value;se&&(typeof H.value=="number"&&se.setMinZoom(H.value),typeof re.value=="number"&&se.setMaxZoom(re.value))}async function ke(){var Ce;if(i.value)return;const O=await v(),se=(Ce=O==null?void 0:O.map)==null?void 0:Ce.value;if(!se)return;const Se=se.getCenter(),Me=se.getZoom();i.value={center:[Se.lng,Se.lat],zoom:Me}}function _e(){if(nt.value)return;const O=W();if(!O)return;const se=D(o.query.x),Se=D(o.query.y),Me=D(o.query.z);se===O.x&&Se===O.y&&Me===O.z||(mt.value=O,r.replace({query:{...o.query,...O}}).catch(()=>{}))}function Be(O,se,Se=1e-6){return Math.abs(O-se)<=Se}async function Te(){var G;if(Yt())return;const O=await v(),se=(G=O==null?void 0:O.map)==null?void 0:G.value;if(!O||!se)return;const Se=parseFloat(D(o.query.x)??""),Me=parseFloat(D(o.query.y)??""),Ce=parseFloat(D(o.query.z)??""),De=!Number.isNaN(Se),je=!Number.isNaN(Me),w=!Number.isNaN(Ce);let L=!1;nt.value=!0;try{if(De&&je){const ce=se.getCenter();(!Be(ce.lng,Se)||!Be(ce.lat,Me))&&(se.setCenter([Se,Me]),L=!0)}if(w){const ce=se.getZoom();Be(ce,Ce,.001)||(se.setZoom(Ce),L=!0)}(!De||!je||!w||L)&&_e()}finally{nt.value=!1}}let Ye=null,Xe=null;const nt=e.ref(!1),mt=e.ref(null);function Yt(){const O=mt.value;if(!O)return!1;const se=D(o.query.x),Se=D(o.query.y),Me=D(o.query.z);return se===O.x&&Se===O.y&&Me===O.z?(mt.value=null,!0):!1}function Rr(O){const se=O==null?void 0:O.lngLat;se&&(I.value={lng:se.lng,lat:se.lat})}let xt=null;function Or(O){typeof window>"u"||window.dispatchEvent(new CustomEvent(no,{detail:O}))}function Mo(O){if(!O)return null;if(typeof O=="string")try{return JSON.parse(O)}catch{return null}return O}async function Gt(O){const se=await fetch(`/api/map-format?${O.toString()}`);if(!se.ok)throw new Error(`API returned ${se.status}`);return se.json()}function In(){const O=z();return O?Object.entries(Ie()).filter(([,se])=>{var ce,xe,Ve,Ne,ze,Re,qe;const Se=(xe=(ce=se==null?void 0:se.opts)==null?void 0:ce.source)==null?void 0:xe.type,Me=(Ne=(Ve=se==null?void 0:se.opts)==null?void 0:Ve.layer)==null?void 0:Ne.type,Ce=(((ze=se==null?void 0:se.opts)==null?void 0:ze.service)||"").toString().toLowerCase(),De=Array.isArray(se==null?void 0:se.card)?se.card.length>0:!!(se!=null&&se.card),je=Array.isArray(se==null?void 0:se.popup)?se.popup.length>0:!!(se!=null&&se.popup),w=(Re=se==null?void 0:se.ids)==null?void 0:Re.sourceId;if(Se!=="raster"&&Me!=="raster"||Ce!=="cartocss"&&!De&&!je||!w||!O.getSource(w))return!1;const G=(((qe=O.getStyle())==null?void 0:qe.layers)||[]).filter(Ge=>Ge.source===w);return G.length?G.some(Ge=>{try{return O.getLayoutProperty(Ge.id,"visibility")!=="none"}catch{return!0}}):!1}).map(([se])=>se):[]}function Ur(O){const se=z();return se?(se.queryRenderedFeatures(O==null?void 0:O.point)||[]).filter(Me=>{var w,L,G,ce,xe;if(!((w=Me==null?void 0:Me.properties)!=null&&w.id))return!1;const Ce=Ie(Me.source);if(!Ce)return!1;const De=(G=(L=Ce==null?void 0:Ce.opts)==null?void 0:L.source)==null?void 0:G.type,je=(xe=(ce=Ce==null?void 0:Ce.opts)==null?void 0:ce.layer)==null?void 0:xe.type;return De!=="raster"&&je!=="raster"}):[]}async function un(O){var De,je,w,L,G;const se=(De=O==null?void 0:O.lngLat)==null?void 0:De.lng,Se=(je=O==null?void 0:O.lngLat)==null?void 0:je.lat;if(typeof se!="number"||typeof Se!="number")return[];const Me=In();if(!Me.length)return[];const Ce=[];for(let ce=0;ce<Me.length;ce+=1){const xe=Me[ce],Ve=new URLSearchParams({layer:xe,lat:Se.toFixed(6),lng:se.toFixed(6)});try{const Ne=await Gt(Ve),ze=Mo(((w=Ne==null?void 0:Ne.data)==null?void 0:w.geom)??(Ne==null?void 0:Ne.geom)??null),Re=((L=Ne==null?void 0:Ne.data)==null?void 0:L.id)??(Ne==null?void 0:Ne.id);if(Re!=null){const qe=await Gt(new URLSearchParams({layer:xe,id:String(Re)})),Ge=typeof(qe==null?void 0:qe.html)=="string"?qe.html:null,tt=Mo(((G=qe==null?void 0:qe.data)==null?void 0:G.geom)??(qe==null?void 0:qe.geom)??null);if(Ge||tt){Ce.push({html:Ge,geometry:tt??ze,infoToken:`external:${xe},${String(Re)}`});continue}}_l({html:Ne==null?void 0:Ne.html})&&Ce.push({html:Ne.html,geometry:ze,infoToken:null})}catch{}}return Ce}async function qr(O){var Ce,De;const se=O==null?void 0:O.lngLat;if(h.value==="height"&&se){await k.measureAt({lat:se.lat,lng:se.lng});return}y.value.includes("route")&&g.value&&se&&((Ce=_.value)==null||Ce.addPoint({lat:se.lat,lng:se.lng})),y.value.includes("ruler")&&b.value&&se&&((De=T.value)==null||De.addPoint({lat:se.lat,lng:se.lng}));const Se=Ur(O),Me=await un(O).catch(()=>[]);Or({features:Se,externalItems:Me})}function Fo(){var O,se;h.value==="ruler"?(S.value=[],F.value=!1,(O=T.value)==null||O.clearPoints(),h.value=null):(h.value==="route"&&(oe.value=[],te.value=null,(se=_.value)==null||se.clearPoints()),M.value=null,j.value=null,h.value="ruler")}function Hr(){if(h.value==="height"){k.reset(),h.value=null;return}k.reset(),h.value="height"}function Wr(){var O,se,Se;h.value==="route"?(oe.value=[],te.value=null,(O=_.value)==null||O.clearPoints(),h.value=null):(h.value==="ruler"&&(S.value=[],F.value=!1,(se=T.value)==null||se.clearPoints()),M.value=null,j.value=null,oe.value=[],te.value=null,(Se=_.value)==null||Se.clearPoints(),h.value="route")}function jn(){h.value=null,S.value=[],F.value=!1}function Yr(){k.reset(),h.value=null}function Gr(){h.value=null,oe.value=[],te.value=null,J.value=null}function Kr(){var O;h.value==="draw"?h.value=null:(h.value==="route"&&(oe.value=[],te.value=null,(O=_.value)==null||O.clearPoints()),M.value=null,j.value=null,h.value="draw")}function Zr(){h.value==="add-data"?h.value=null:(M.value=null,j.value=null,h.value="add-data")}function Rn(){var O;if(h.value==="geolocation"&&M.value!=null){On();return}if(h.value==="route"&&(oe.value=[],te.value=null,(O=_.value)==null||O.clearPoints()),j.value=null,B.value=!0,!navigator.geolocation){j.value="Геолокація не підтримується браузером",B.value=!1;return}navigator.geolocation.getCurrentPosition(se=>{const Se=se.coords.latitude,Me=se.coords.longitude;M.value={lat:Se,lng:Me},j.value=null,B.value=!1,h.value="geolocation",v().then(Ce=>{Ce!=null&&Ce.flyTo&&Ce.flyTo({center:[Me,Se],zoom:15})})},()=>{j.value="Не вдалося визначити місце розташування",B.value=!1},{enableHighAccuracy:!0})}function Do(){h.value=null,M.value=null,j.value=null}function On(){const O=M.value;O!=null&&v().then(se=>{se!=null&&se.flyTo&&se.flyTo({center:[O.lng,O.lat],zoom:15})})}function Un(O){S.value=O}function fn(O){oe.value=O}function Po(O){te.value=(O==null?void 0:O.geometry)??null,J.value=null}function Xr(O){J.value=O}function zo(O){if(!O)return;const se=[];if(O.type==="LineString"?se.push(...O.coordinates):O.coordinates.forEach(Me=>se.push(...Me)),!se.length)return;const Se=se.reduce((Me,[Ce,De])=>(Me[0]=[Math.min(Me[0][0],Ce),Math.min(Me[0][1],De)],Me[1]=[Math.max(Me[1][0],Ce),Math.max(Me[1][1],De)],Me),[[se[0][0],se[0][1]],[se[0][0],se[0][1]]]);v().then(Me=>{var Ce;(Ce=Me==null?void 0:Me.fitBounds)==null||Ce.call(Me,Se,{padding:72,duration:600,maxZoom:16})})}function qn(){var O;(O=ee.value)==null||O.clear()}function mn(){var O;(O=ee.value)==null||O.finishPolygon()}function Jr(){var O;(O=ee.value)==null||O.undo()}function Qr(){var Ce,De,je,w;const O=(je=(De=(Ce=l.value)==null?void 0:Ce.ctx)==null?void 0:De.map)==null?void 0:je.value,se=(w=ee.value)==null?void 0:w.getCanvas();if(!O||!se)return;const Se=(L,G)=>{const ce=document.createElement("a");ce.download=G,ce.rel="noopener",typeof L=="string"?ce.href=L:(ce.href=URL.createObjectURL(L),setTimeout(()=>URL.revokeObjectURL(ce.href),100)),document.body.appendChild(ce),ce.click(),document.body.removeChild(ce)},Me=()=>{const L=O.getCanvas();if(!L)return;const G=L.width,ce=L.height;if(G<=0||ce<=0)return;const xe=document.createElement("canvas");xe.width=G,xe.height=ce;const Ve=xe.getContext("2d");if(!Ve)return;Ve.drawImage(L,0,0),Ve.drawImage(se,0,0,se.width,se.height,0,0,G,ce);const Ne=`map-drawing-${Date.now()}.png`;xe.toBlob(ze=>{if(ze){Se(ze,Ne);return}try{const Re=xe.toDataURL("image/png");Se(Re,Ne)}catch{const Re=document.createElement("canvas");Re.width=se.width,Re.height=se.height;const qe=Re.getContext("2d");qe&&(qe.drawImage(se,0,0),Re.toBlob(Ge=>Ge&&Se(Ge,Ne),"image/png"))}},"image/png")};requestAnimationFrame(()=>requestAnimationFrame(Me))}async function vt(){const O=await v();O!=null&&O.on&&(Ye==null||Ye(),Ye=O.on("moveend",_e),Xe==null||Xe(),Xe=O.on("mousemove",Rr),xt==null||xt(),xt=O.on("click",qr))}e.onUnmounted(()=>{Ye==null||Ye(),Ye=null,Xe==null||Xe(),Xe=null,xt==null||xt(),xt=null});async function Hn(O=!1,se=!1){var Me,Ce;se||(d.value=!1,u.value=null,I.value=null);const Se=O||!n.data;se||(c.value=Se);try{const De=Se?await(async()=>{const ce=await fetch(`/api/gis-map/${encodeURIComponent(X.value)}`);if(!ce.ok)throw new Error(`Помилка завантаження (${ce.status})`);return ce.json()})():n.data;Se||(d.value=!0);const je=It(De.center)??ve,w=$e(De.layers).map(ce=>ie(ce)),L=pe(De.zoom)??U;s.value={...De,center:je??null,zoom:L??De.zoom??null,layers:w,widgets:De.widgets},y.value=De.tools||["home","print","ruler","draw","add-data"];const G=await v();G&&(je&&((Me=G.setCenter)==null||Me.call(G,je)),L!=null&&((Ce=G.setZoom)==null||Ce.call(G,L)),i.value||await ke()),await ge(),await Te(),se||await vt(),d.value=!0}catch(De){u.value=(De==null?void 0:De.message)||"Не вдалося завантажити карту"}finally{Se&&!se&&(c.value=!1)}}const pn=e.computed(()=>{var Me;const O=new Map;return $e((Me=s.value)==null?void 0:Me.layers).forEach(Ce=>{if(!(Ce!=null&&Ce.id))return;const De=ie(Ce)||Ce;O.set(Ce.id,{...De})}),Pe.value.filter(Ce=>(Ce==null?void 0:Ce.type)==="layers").flatMap(Ce=>{var De;return $e((De=Ce==null?void 0:Ce.config)==null?void 0:De.layers)}).forEach(Ce=>{if(!(Ce!=null&&Ce.id))return;const De=O.get(Ce.id)||{},je=ie(Ce)||Ce;O.set(Ce.id,{...De,...je,actions:Ce.actions||De.actions||null,name:De.name||Ce.name||Ce.title||De.title||Ce.id,title:De.title||Ce.title||De.name||null,visible:De.visible??Ce.visible??!0})}),Array.from(O.values())}),Kt=e.ref([]);function Je(O){Kt.value.includes(O)?Kt.value=Kt.value.filter(se=>se!==O):Kt.value.push(O)}const Io=e.computed(()=>O=>Kt.value.includes(O.id));return e.watch([H,re],()=>{ge()},{immediate:!0}),e.watch(X,()=>{Hn(!0)}),e.watch(()=>n.data,O=>{O&&Hn(!1,!0)},{deep:!0}),e.onMounted(()=>{Hn()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{Te()}),e.watch(()=>te.value,O=>{!O||!g.value||zo(O)},{deep:!0}),(O,se)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(he.value)},[se[10]||(se[10]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createVNode(Zn,{ref_key:"mapViewRef",ref:l,class:"map-widget__view"},{default:e.withCtx(()=>{var Se,Me,Ce,De;return[We.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Qt,{key:0,class:"hidden",onStateChange:A})),d.value&&!c.value&&!et.value?e.withDirectives((e.openBlock(),e.createBlock(Qo,{key:1,layers:pn.value,onAction:se[0]||(se[0]=je=>Je(je.layerId))},null,8,["layers"])),[[e.vShow,!1]]):e.createCommentVNode("",!0),ne.value?(e.openBlock(),e.createBlock(Dl,{key:2,"layer-id":"app-boundary",boundary:ne.value.boundary,katottg:ne.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),me.value&&y.value.includes("draw")&&C.value?(e.openBlock(),e.createElementBlock("div",Gy,[e.createVNode(yy,{ref_key:"drawingPanelRef",ref:Y,onClose:se[1]||(se[1]=je=>h.value=null),onClear:qn,onDownload:Qr,onFinishPolygon:mn,onUndo:Jr,"onUpdate:tool":se[2]||(se[2]=je=>R.value=je),"onUpdate:strokeColor":se[3]||(se[3]=je=>ae.value=je),"onUpdate:strokeWidth":se[4]||(se[4]=je=>ue.value=je)},null,512)])):e.createCommentVNode("",!0),me.value?(e.openBlock(),e.createElementBlock("div",Ky,[le.value?(e.openBlock(),e.createBlock(xm,{key:0,coordinates:le.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(_m,{"map-context":me.value,options:be.value},null,8,["map-context","options"]),y.value.includes("ruler")&&b.value?(e.openBlock(),e.createBlock(Cg,{key:1,ref_key:"rulerPanelRef",ref:T,onClose:jn,onTabChange:se[5]||(se[5]=je=>N.value=je),onPointsChange:Un,onShapeClosedChange:se[6]||(se[6]=je=>F.value=je)},null,512)):e.createCommentVNode("",!0),x.value?(e.openBlock(),e.createBlock(Qg,{key:2,onClose:Yr})):e.createCommentVNode("",!0),y.value.includes("geolocation")&&V.value?(e.openBlock(),e.createBlock(Fg,{key:3,position:M.value,onClose:Do,onRecenter:On},null,8,["position"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Zy,[e.createVNode(ym),y.value.includes("home")?(e.openBlock(),e.createBlock(jt,{key:0,center:((Se=s.value)==null?void 0:Se.center)||((Me=i.value)==null?void 0:Me.center)||null,zoom:((Ce=s.value)==null?void 0:Ce.zoom)??((De=i.value)==null?void 0:De.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),y.value.includes("compare")?(e.openBlock(),e.createBlock(im,{key:1,"has-compare-options":a.value.length>1,"is-compare-open":f.value,onToggle:K},null,8,["has-compare-options","is-compare-open"])):e.createCommentVNode("",!0),y.value.includes("print")?(e.openBlock(),e.createBlock(lm,{key:2})):e.createCommentVNode("",!0),y.value.includes("route")?(e.openBlock(),e.createBlock(vp,{key:3,ref_key:"routePanelRef",ref:_,active:g.value,onToggle:Wr,onClose:Gr,onPointsChange:fn,onInstructionHover:Xr,onRouteChange:Po},null,8,["active"])):e.createCommentVNode("",!0),y.value.includes("geolocation")?(e.openBlock(),e.createElementBlock("button",{key:4,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",V.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":V.value?"Вимкнути геолокацію":"Ваше розташування",disabled:B.value,onClick:e.withModifiers(Rn,["stop"])},[e.createElementVNode("span",Jy,e.toDisplayString(V.value?"Вимкнути геолокацію":"Ваше розташування"),1),e.createVNode(e.unref(ye.MapPin),{class:"w-4 h-4"})],10,Xy)):e.createCommentVNode("",!0),y.value.includes("ruler")?(e.openBlock(),e.createElementBlock("button",{key:5,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",b.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":b.value?"Вимкнути вимірювання":"Вимірювання",onClick:e.withModifiers(Fo,["stop"])},[e.createElementVNode("span",eh,e.toDisplayString(b.value?"Вимкнути вимірювання":"Вимірювання"),1),e.createVNode(e.unref(ye.Ruler),{class:"w-4 h-4"})],10,Qy)):e.createCommentVNode("",!0),y.value.includes("height")?(e.openBlock(),e.createElementBlock("button",{key:6,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",x.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":x.value?"Вимкнути вимірювання висоти":"Вимірювання висоти",onClick:e.withModifiers(Hr,["stop"])},[e.createElementVNode("span",nh,e.toDisplayString(x.value?"Вимкнути вимірювання висоти":"Вимірювання висоти"),1),e.createVNode(e.unref(ye.TrendingUp),{class:"w-4 h-4"})],10,th)):e.createCommentVNode("",!0),y.value.includes("draw")?(e.openBlock(),e.createElementBlock("button",{key:7,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",C.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":C.value?"Вимкнути малювання":"Малювання",onClick:e.withModifiers(Kr,["stop"])},[e.createElementVNode("span",rh,e.toDisplayString(C.value?"Вимкнути малювання":"Малювання"),1),e.createVNode(e.unref(ye.Pen),{class:"w-4 h-4"})],10,oh)):e.createCommentVNode("",!0),y.value.includes("add-data")?(e.openBlock(),e.createElementBlock("button",{key:8,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",E.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":E.value?"Закрити додавання даних":"Додавання даних",onClick:e.withModifiers(Zr,["stop"])},[e.createElementVNode("span",ah,e.toDisplayString(E.value?"Закрити додавання даних":"Додавання даних"),1),e.createVNode(e.unref(ye.Upload),{class:"w-4 h-4"})],10,lh)):e.createCommentVNode("",!0)]),d.value&&b.value&&S.value.length>0?(e.openBlock(),e.createBlock(Ng,{key:5,points:S.value,"is-shape-closed":F.value,"label-mode":N.value},null,8,["points","is-shape-closed","label-mode"])):e.createCommentVNode("",!0),d.value&&y.value.includes("height")&&x.value?(e.openBlock(),e.createBlock(ty,{key:6,point:e.unref(k).point.value},null,8,["point"])):e.createCommentVNode("",!0),d.value&&oe.value.length>0?(e.openBlock(),e.createBlock(Lp,{key:7,points:oe.value,"route-geometry":te.value,"hover-geometry":J.value},null,8,["points","route-geometry","hover-geometry"])):e.createCommentVNode("",!0),d.value&&M.value!=null?(e.openBlock(),e.createBlock(Dg,{key:8,position:M.value},null,8,["position"])):e.createCommentVNode("",!0),d.value&&C.value?(e.openBlock(),e.createBlock(hy,{key:9,ref_key:"drawingCanvasRef",ref:ee,tool:R.value,"stroke-color":ae.value,"stroke-width":ue.value},null,8,["tool","stroke-color","stroke-width"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[E.value?(e.openBlock(),e.createBlock(Yy,{key:0,onClose:se[7]||(se[7]=je=>h.value=null)})):e.createCommentVNode("",!0)])),d.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:10},[e.createElementVNode("div",sh,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(Q,je=>e.createElementVNode("div",{key:je,class:e.normalizeClass(["map-widget__side",`map-widget__side--${je}`])},[je==="left"?(e.openBlock(),e.createElementBlock("div",ih)):e.createCommentVNode("",!0),$.value[je].top.length?(e.openBlock(),e.createElementBlock("div",ch,[e.createElementVNode("div",dh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.value[je].top,w=>{var L,G,ce,xe,Ve,Ne,ze;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:w.id||w.type,class:"map-overlay__item"},[w.type==="info"?(e.openBlock(),e.createBlock(ml,{key:0,title:((L=w.config)==null?void 0:L.title)||w.title||null,content:((G=w.config)==null?void 0:G.content)||"",links:q.value,"map-name":Z.value,"map-description":P.value},null,8,["title","content","links","map-name","map-description"])):w.type==="catalog"?(e.openBlock(),e.createBlock(Vl,{key:1,api:((ce=w.config)==null?void 0:ce.api)||null},null,8,["api"])):w.type==="layers"&&!c.value?(e.openBlock(),e.createBlock(Qo,{key:2,layers:pn.value,onAction:se[8]||(se[8]=Re=>Je(Re.layerId)),config:w.config},null,8,["layers","config"])):w.type==="basemaps"?(e.openBlock(),e.createBlock(Qt,{key:3,layers:((xe=w.config)==null?void 0:xe.layers)||null,"default-layer":((Ve=w.config)==null?void 0:Ve.default)||null,title:w.title||((Ne=w.config)==null?void 0:Ne.title)||null,onStateChange:A},null,8,["layers","default-layer","title"])):w.type==="legend"?(e.openBlock(),e.createBlock(nr,{key:4,items:Ue(w)},null,8,["items"])):w.type==="filters"&&Io.value(w)?(e.openBlock(),e.createBlock(or,{key:5,"layer-id":(ze=w.config)==null?void 0:ze.layer,onClose:Je},null,8,["layer-id"])):w.type==="dataset"||w.type==="attribute"?(e.openBlock(),e.createBlock($l,{key:6,config:w.config},null,8,["config"])):w.type==="search"?(e.openBlock(),e.createBlock(Sl,{key:7,config:w.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,w.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),$.value[je].bottom.length?(e.openBlock(),e.createElementBlock("div",uh,[e.createElementVNode("div",fh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.value[je].bottom,w=>{var L,G,ce,xe,Ve,Ne,ze;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:w.id||w.type,class:"map-overlay__item"},[w.type==="info"?(e.openBlock(),e.createBlock(ml,{key:0,title:((L=w.config)==null?void 0:L.title)||w.title||null,content:((G=w.config)==null?void 0:G.content)||"",links:q.value,"map-name":Z.value,"map-description":P.value},null,8,["title","content","links","map-name","map-description"])):w.type==="catalog"?(e.openBlock(),e.createBlock(Vl,{key:1,api:((ce=w.config)==null?void 0:ce.api)||null},null,8,["api"])):w.type==="layers"&&!c.value?(e.openBlock(),e.createBlock(Qo,{key:2,layers:pn.value,onAction:se[9]||(se[9]=Re=>Je(Re.layerId)),config:w.config},null,8,["layers","config"])):w.type==="basemaps"?(e.openBlock(),e.createBlock(Qt,{key:3,layers:((xe=w.config)==null?void 0:xe.layers)||null,"default-layer":((Ve=w.config)==null?void 0:Ve.default)||null,title:w.title||((Ne=w.config)==null?void 0:Ne.title)||null,onStateChange:A},null,8,["layers","default-layer","title"])):w.type==="legend"?(e.openBlock(),e.createBlock(nr,{key:4,items:Ue(w)},null,8,["items"])):w.type==="filters"&&Io.value(w)?(e.openBlock(),e.createBlock(or,{key:5,"layer-id":(ze=w.config)==null?void 0:ze.layer,onClose:Je},null,8,["layer-id"])):w.type==="dataset"||w.type==="attribute"?(e.openBlock(),e.createBlock($l,{key:6,config:w.config},null,8,["config"])):w.type==="search"?(e.openBlock(),e.createBlock(Sl,{key:7,config:w.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,w.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(kl),e.createVNode(tr,{"map-id":X.value},null,8,["map-id"]),y.value.includes("compare")?(e.openBlock(),e.createBlock(vm,{key:0,"compare-basemaps":a.value,"is-compare-open":f.value,"selected-basemap-id":m.value,onClose:fe},null,8,["compare-basemaps","is-compare-open","selected-basemap-id"])):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0)]}),_:1},512),c.value?(e.openBlock(),e.createElementBlock("div",mh,"Завантаження карти…")):u.value?(e.openBlock(),e.createElementBlock("div",ph,e.toDisplayString(u.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-b88845f8"]]),gh=["","січня","лютого","березня","квітня","травня","червня","липня","серпня","вересня","жовтня","листопада","грудня"];function Cn(t){if(!t)return"";const[n,o]=t.split(" ");if(!n)return t;const[r,l,s]=n.split("-");if(!r||!l||!s)return t;const i=parseInt(l,10),c=gh[i]||l;let u=`${parseInt(s,10)} ${c} ${r}`;if(o){const d=o.split(".")[0],[y,a,m]=d.split(":");y&&a&&m?u+=`, ${y}:${a}:${m}`:y&&a?u+=`, ${y}:${a}`:y&&(u+=`, ${y}`)}return u}function Nn(t,n={dateStyle:"short"}){if(t==null||t==="")return"";const o=new Date(t);return Number.isNaN(o.getTime())?"":new Intl.DateTimeFormat(void 0,n).format(o)}const yh={class:"flex flex-col md:flex-row md:justify-between lg:flex-row lg:justify-between p-3 md:p-3.5 lg:p-4 pb-2 bg-slate-50 gap-3 md:gap-3.5 lg:gap-4"},hh={class:"flex flex-col gap-2 md:flex-row md:items-center md:justify-between md:gap-3 lg:flex-row lg:items-center lg:justify-between lg:gap-0"},bh={class:"flex flex-col gap-2 md:flex-row md:items-center"},xh={class:"text-base md:text-base lg:text-lg font-bold line-clamp-2"},kh={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2 md:ml-2 lg:ml-2"},wh={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 text-foreground whitespace-nowrap","data-v0-t":"badge"},_h={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2"},Eh={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 text-foreground whitespace-nowrap"},Ch={class:"p-3 md:p-3.5 lg:p-4 pt-2"},Nh={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-2 md:gap-2.5 lg:gap-3 text-sm"},Vh={class:"text-gray-500 shrink-0 md:max-w-[50%]"},$h={class:"font-medium flex flex-wrap gap-1"},Bh={class:"items-center p-3 bg-slate-50 flex flex-col md:flex-row justify-end gap-2"},Sh=["href"],vh=["href"],Pl=e.defineComponent({__name:"template-1",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=a=>(a==null?void 0:a.service_id)&&(a==null?void 0:a.is_map)&&a[n.id_key]&&(a==null?void 0:a.geom),l=e.computed(()=>n.columns.find(a=>a.meta==="title")),s=e.computed(()=>n.columns.filter(a=>a.meta==="category")),i=e.computed(()=>n.columns.filter(a=>a.meta==="tags")),c=e.computed(()=>n.columns.filter(a=>a.meta!=="title")),u=(a,m)=>{if(m)return a[m]},d=a=>{const m=u(a,n.id_key);return`${n.path}?id=${m}`},y=(a,m)=>{const f=u(a,n.id_key);return`/map?layers=${m}&info=${m},${f}`};return(a,m)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,f=>{var p,k,h;return e.openBlock(),e.createElementBlock("div",{key:f.id,class:"rounded-lg border bg-card text-card-foreground overflow-hidden border-none shadow-md relative","data-v0-t":"card"},[e.createElementVNode("div",yh,[e.createElementVNode("div",hh,[e.createElementVNode("div",bh,[e.createElementVNode("h2",xh,e.toDisplayString(f[`${(p=l.value)==null?void 0:p.name}_text`]||f[(k=l.value)==null?void 0:k.name]||f[(h=l.value)==null?void 0:h.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",kh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,g=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:g.name},[f[g.name]?(e.openBlock(),e.createElementBlock("div",wh,e.toDisplayString(f[`${g.name}_text`]||f[g.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])]),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",_h,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,g=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:g.name},[f[g.name]?(e.openBlock(),e.createElementBlock("span",Eh,e.toDisplayString(f[`${g.name}_text`]||f[g.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Ch,[e.createElementVNode("div",Nh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,g=>{var b;return e.openBlock(),e.createElementBlock("div",{key:g.name,class:"flex flex-col md:flex-row md:items-center lg:flex-row lg:items-center gap-1 md:gap-1.5 lg:gap-1.5"},[e.createElementVNode("span",Vh,e.toDisplayString((g==null?void 0:g.ua)||g.label||g.name)+": ",1),e.createElementVNode("span",$h,[Array.isArray(f[g==null?void 0:g.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(f[(g==null?void 0:g.name)+"_text"]||f[g==null?void 0:g.name],(x,C)=>(e.openBlock(),e.createElementBlock("span",{key:C,class:"bg-gray-100 px-2 py-0 border-[0.01rem] border-gray-300 rounded-lg whitespace-nowrap"},e.toDisplayString(x),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[g.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Nn)(f[g==null?void 0:g.name])||"Немає даних"),1)],64)):g.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Cn)(f[g==null?void 0:g.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=f[(g==null?void 0:g.name)+"_data"])==null?void 0:b.text)||f[(g==null?void 0:g.name)+"_text"]||f[g==null?void 0:g.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Bh,[!t.hideDetailsButton&&r(f)?(e.openBlock(),e.createElementBlock("a",{key:0,href:y(f,f==null?void 0:f.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...m[0]||(m[0]=[e.createTextVNode(" На карті ",-1),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-map-pin-check-inside ml-1 h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"}),e.createElementVNode("path",{d:"m9 10 2 2 4-4"})],-1)])],8,Sh)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:d(f),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...m[1]||(m[1]=[e.createTextVNode(" Детальніше ",-1),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-arrow-right ml-1 h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M5 12h14"}),e.createElementVNode("path",{d:"m12 5 7 7-7 7"})],-1)])],8,vh))])])}),128))}}),Lh={class:"p-0"},Th={class:"border-l-4 border-l-slate-400"},Ah={class:"p-4"},Mh={class:"flex flex-wrap items-center gap-2 mb-3"},Fh={class:"text-lg font-bold"},Dh={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent bg-green-100 text-green-800 hover:bg-green-100","data-v0-t":"badge"},Ph={key:1,class:"flex"},zh={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold border-transparent bg-gray-100 text-gray-800"},Ih={class:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3 text-sm border-t pt-3"},jh={class:"text-xs text-gray-500 mb-1"},Rh={class:"font-medium"},Oh={class:"flex justify-end gap-2 mt-3 border-t pt-3"},Uh=["href"],qh=["href"],zl=e.defineComponent({__name:"template-2",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=a=>(a==null?void 0:a.service_id)&&(a==null?void 0:a.is_map)&&a[n.id_key]&&(a==null?void 0:a.geom),l=e.computed(()=>n.columns.find(a=>a.meta==="title")),s=e.computed(()=>n.columns.filter(a=>a.meta==="category")),i=e.computed(()=>n.columns.filter(a=>a.meta==="tags")),c=e.computed(()=>n.columns.filter(a=>a.meta!=="title")),u=(a,m)=>{if(m)return a[m]},d=a=>{const m=u(a,n.id_key);return`${n.path}?id=${m}`},y=(a,m)=>{const f=u(a,n.id_key);return`/map?layers=${m}&info=${m},${f}`};return(a,m)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,f=>{var p,k,h;return e.openBlock(),e.createElementBlock("div",{key:f.id,class:"rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden","data-v0-t":"card"},[e.createElementVNode("div",Lh,[e.createElementVNode("div",Th,[e.createElementVNode("div",Ah,[e.createElementVNode("div",Mh,[e.createElementVNode("h2",Fh,e.toDisplayString(f[`${(p=l.value)==null?void 0:p.name}_text`]||f[(k=l.value)==null?void 0:k.name]||f[(h=l.value)==null?void 0:h.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,g=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:g.name},[f[g.name]?(e.openBlock(),e.createElementBlock("div",Dh,e.toDisplayString(f[`${g.name}_text`]||f[g.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",Ph,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,g=>(e.openBlock(),e.createElementBlock("div",{key:g.name,class:"flex flex-wrap gap-1 ml-2"},[f[g.name]?(e.openBlock(),e.createElementBlock("span",zh,e.toDisplayString(f[`${g.name}_text`]||f[g.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Ih,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,g=>{var b;return e.openBlock(),e.createElementBlock("div",{key:g.name},[e.createElementVNode("p",jh,e.toDisplayString(g.ua),1),e.createElementVNode("p",Rh,[Array.isArray(f[g==null?void 0:g.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(f[g==null?void 0:g.name],(x,C)=>(e.openBlock(),e.createElementBlock("span",{key:C,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1"},e.toDisplayString(x),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[g.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Nn)(f[g==null?void 0:g.name])||"Немає даних"),1)],64)):g.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Cn)(f[g==null?void 0:g.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=f[(g==null?void 0:g.name)+"_data"])==null?void 0:b.text)||f[(g==null?void 0:g.name)+"_text"]||f[g==null?void 0:g.name]||"Немає даних"),1)],64))],64))])])}),128))]),e.createElementVNode("div",Oh,[!t.hideDetailsButton&&r(f)?(e.openBlock(),e.createElementBlock("a",{key:0,href:y(f,f==null?void 0:f.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...m[0]||(m[0]=[e.createTextVNode(" На карті ",-1),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-map-pin-check-inside ml-1 h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"}),e.createElementVNode("path",{d:"m9 10 2 2 4-4"})],-1)])],8,Uh)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:d(f),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...m[1]||(m[1]=[e.createTextVNode(" Детальніше ",-1),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-external-link ml-1 h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M15 3h6v6"}),e.createElementVNode("path",{d:"M10 14 21 3"}),e.createElementVNode("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"})],-1)])],8,qh))])])])])])}),128))}}),Hh={class:"space-y-4"},Wh={class:"flex flex-col lg:flex-row lg:items-center py-2 px-2 lg:px-3"},Yh={class:"flex-1"},Gh={class:"grid grid-cols-1 lg:grid-cols-12 gap-2 w-full text-xs"},Kh={class:"col-span-1 lg:col-span-4"},Zh={class:"flex items-start"},Xh={class:"flex flex-col"},Jh={class:"font-bold text-xs lg:text-sm"},Qh={key:0,class:"flex flex-wrap gap-1 mt-1"},e0={key:0,class:"inline-flex items-center rounded-full bg-secondary text-secondary-foreground text-[9px] lg:text-[10px] px-1.5 py-0"},t0={key:1,class:"flex flex-wrap gap-1 mt-1"},n0={key:0,class:"inline-flex items-center rounded-full bg-gray-100 text-gray-800 text-[10px] lg:text-xs px-2 py-0.5 font-semibold"},o0={class:"col-span-1 lg:col-span-7 mt-2 lg:mt-0"},r0={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2 lg:gap-3"},l0={class:"text-[9px] lg:text-[10px] text-gray-500 mb-1"},a0={class:"truncate font-medium text-xs lg:text-sm"},s0={class:"flex items-center justify-center gap-2 mt-3 lg:mt-0"},i0=["href"],c0=["href"],Il=e.defineComponent({__name:"template-3",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=m=>(m==null?void 0:m.service_id)&&(m==null?void 0:m.is_map)&&m[n.id_key]&&(m==null?void 0:m.geom),l=e.computed(()=>n.columns.find(m=>m.meta==="title")),s=e.computed(()=>n.columns.filter(m=>m.meta==="category")),i=e.computed(()=>n.columns.filter(m=>m.meta==="tags")),c=e.computed(()=>n.columns.filter(m=>m.meta!=="title")),u=e.computed(()=>"bg-blue-500"),d=(m,f)=>{if(f)return m[f]},y=m=>{const f=d(m,n.id_key);return`${n.path}?id=${f}`},a=(m,f)=>{const p=d(m,n.id_key);return`/map?layers=${f}&info=${f},${p}`};return(m,f)=>(e.openBlock(),e.createElementBlock("div",Hh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,p=>{var k,h,g;return e.openBlock(),e.createElementBlock("div",{key:p.id,class:"border-b border-slate-200 hover:bg-slate-50 transition-colors"},[e.createElementVNode("div",Wh,[e.createElementVNode("div",Yh,[e.createElementVNode("div",Gh,[e.createElementVNode("div",Kh,[e.createElementVNode("div",Zh,[e.createElementVNode("div",{class:e.normalizeClass(["w-1 h-6 lg:h-8 rounded-full mr-2 lg:mr-3 mt-1",u.value])},null,2),e.createElementVNode("div",Xh,[e.createElementVNode("p",Jh,e.toDisplayString(p[`${(k=l.value)==null?void 0:k.name}_text`]||p[(h=l.value)==null?void 0:h.name]||p[(g=l.value)==null?void 0:g.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Qh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,b=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:b.name},[p[b.name]?(e.openBlock(),e.createElementBlock("span",e0,e.toDisplayString(p[`${b.name}_text`]||p[b.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",t0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,b=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:b.name},[p[b.name]?(e.openBlock(),e.createElementBlock("span",n0,e.toDisplayString(p[`${b.name}_text`]||p[b.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",o0,[e.createElementVNode("div",r0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,b=>{var x;return e.openBlock(),e.createElementBlock("div",{key:b.name},[e.createElementVNode("p",l0,e.toDisplayString(b.ua),1),e.createElementVNode("p",a0,[Array.isArray(p[b.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(p[b.name],(C,V)=>(e.openBlock(),e.createElementBlock("span",{key:V,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 text-[10px] lg:text-xs"},e.toDisplayString(C),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[b.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Nn)(p[b.name])||"Немає даних"),1)],64)):b.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Cn)(p[b.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((x=p[b.name+"_data"])==null?void 0:x.text)||p[b.name+"_text"]||p[b.name]||"Немає даних"),1)],64))],64))])])}),128))])])])]),e.createElementVNode("div",s0,[!t.hideDetailsButton&&r(p)?(e.openBlock(),e.createElementBlock("a",{key:0,href:a(p,p.service_id),class:"inline-flex items-center justify-center gap-2 text-xs lg:text-sm font-medium hover:bg-accent hover:text-accent-foreground h-8 lg:h-9 rounded-md px-2 lg:px-3"},[...f[0]||(f[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3 w-3 lg:h-3.5 lg:w-3.5"},[e.createElementVNode("path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"}),e.createElementVNode("path",{d:"m9 10 2 2 4-4"})],-1)])],8,i0)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:y(p),class:"flex items-center justify-center hover:bg-accent hover:text-accent-foreground rounded-md h-8 w-8 lg:h-7 lg:w-7"},[...f[1]||(f[1]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3.5 w-3.5 lg:h-4 lg:w-4"},[e.createElementVNode("path",{d:"m9 18 6-6-6-6"})],-1)])],8,c0))])])])}),128))]))}}),d0={class:"flex flex-col space-y-1.5 p-6 pb-2"},u0={class:"flex items-center gap-2 flex-wrap"},f0={class:"tracking-tight text-lg font-medium"},m0={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent bg-blue-100 text-blue-800 ml-2","data-v0-t":"badge"},p0={key:1,class:"flex"},g0={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold border-transparent bg-gray-100 text-gray-800"},y0={class:"p-6 pt-0 pb-4"},h0={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},b0={class:"text-sm text-gray-500"},x0={class:"font-medium"},k0={class:"flex items-center p-6 pt-0 gap-2"},w0=["href"],_0=["href"],jl=e.defineComponent({__name:"template-4",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=a=>(a==null?void 0:a.service_id)&&(a==null?void 0:a.is_map)&&a[n.id_key]&&(a==null?void 0:a.geom),l=e.computed(()=>n.columns.find(a=>a.meta==="title")),s=e.computed(()=>n.columns.filter(a=>a.meta==="category")),i=e.computed(()=>n.columns.filter(a=>a.meta==="tags")),c=e.computed(()=>n.columns.filter(a=>a.meta!=="title")),u=(a,m)=>{if(m)return a[m]},d=a=>{const m=u(a,n.id_key);return`${n.path}?id=${m}`},y=(a,m)=>{const f=u(a,n.id_key);return`/map?layers=${m}&info=${m},${f}`};return(a,m)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,f=>{var p,k,h;return e.openBlock(),e.createElementBlock("div",{key:f.id,class:"rounded-lg border bg-card text-card-foreground shadow-sm border-l-4 border-l-blue-600","data-v0-t":"card"},[e.createElementVNode("div",d0,[e.createElementVNode("div",u0,[e.createElementVNode("h3",f0,e.toDisplayString(f[`${(p=l.value)==null?void 0:p.name}_text`]||f[(k=l.value)==null?void 0:k.name]||f[(h=l.value)==null?void 0:h.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,g=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:g.name},[f[g.name]?(e.openBlock(),e.createElementBlock("div",m0,e.toDisplayString(f[`${g.name}_text`]||f[g.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",p0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,g=>(e.openBlock(),e.createElementBlock("div",{key:g.name,class:"flex flex-wrap gap-1 ml-2"},[f[g.name]?(e.openBlock(),e.createElementBlock("span",g0,e.toDisplayString(f[`${g.name}_text`]||f[g.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",y0,[e.createElementVNode("div",h0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,g=>{var b;return e.openBlock(),e.createElementBlock("div",{key:g.name},[e.createElementVNode("p",b0,e.toDisplayString(g.ua),1),e.createElementVNode("p",x0,[Array.isArray(f[g==null?void 0:g.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(f[g==null?void 0:g.name],(x,C)=>(e.openBlock(),e.createElementBlock("span",{key:C,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1"},e.toDisplayString(x),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[g.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Nn)(f[g==null?void 0:g.name])||"Немає даних"),1)],64)):g.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Cn)(f[g==null?void 0:g.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=f[(g==null?void 0:g.name)+"_data"])==null?void 0:b.text)||f[(g==null?void 0:g.name)+"_text"]||f[g==null?void 0:g.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",k0,[!t.hideDetailsButton&&r(f)?(e.openBlock(),e.createElementBlock("a",{key:0,href:y(f,f==null?void 0:f.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border bg-background h-10 px-4 py-2 rounded-md text-black border-black hover:bg-gray-100 hover:text-black"}," На карті ",8,w0)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:d(f),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border bg-background h-10 px-4 py-2 rounded-md text-black border-black hover:bg-gray-100 hover:text-black"}," Детальніше ",8,_0))])])}),128))}}),E0={class:"grid grid-cols-1 lg:grid-cols-12 lg:divide-x divide-y lg:divide-y-0 divide-gray-100"},C0={key:0,class:"w-full lg:w-auto lg:col-span-1"},N0=["src"],V0={key:1,class:"hidden lg:flex lg:col-span-1 items-center justify-center py-4 lg:py-0"},$0={class:"col-span-1 lg:col-span-7 p-4 lg:p-4"},B0={class:"flex flex-col mb-3 lg:flex-row lg:items-center lg:mb-1"},S0={class:"text-base lg:text-base font-bold text-gray-900 mb-2 lg:mr-2 lg:mb-0"},v0={class:"flex flex-wrap gap-2 lg:gap-0"},L0={key:0,class:"inline-flex items-center rounded-full px-2.5 py-0.5 font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent hover:bg-primary/80 bg-blue-100 text-blue-800 border-0 text-xs lg:ml-2"},T0={class:"text-sm text-gray-600 line-clamp-2 lg:line-clamp-1 mb-3 lg:mb-2"},A0={class:"grid grid-cols-1 md:grid-cols-2 gap-y-3 md:gap-x-4 md:gap-y-1 text-sm"},M0={class:"flex items-center mb-1 md:mb-0 md:mr-1 max-w-[50%]"},F0=["innerHTML"],D0={class:"text-gray-500 font-medium md:font-normal"},P0={class:"text-gray-600 break-words line-clamp-2"},z0={class:"col-span-1 lg:col-span-2 p-4 lg:p-3 bg-gray-50 flex flex-col justify-center border-t lg:border-t-0 lg:border-l border-gray-100"},I0={class:"text-xs text-gray-500 mb-2 lg:mb-1.5"},j0={key:0,class:"flex flex-wrap gap-1.5 lg:gap-1"},R0={key:0,class:"inline-flex items-center rounded-full font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 hover:bg-secondary/80 bg-white border border-gray-200 text-gray-700 text-xs px-2 py-0.5 lg:px-1.5 lg:py-0"},O0={class:"col-span-1 lg:col-span-2 flex flex-col justify-center items-stretch lg:items-center bg-gray-50 border-t lg:border-t-0 lg:border-l border-gray-100 p-4 lg:p-2"},U0={class:"w-full space-y-2"},q0=["href"],H0=["href"],Rl=e.defineComponent({__name:"template-5",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=f=>(f==null?void 0:f.service_id)&&(f==null?void 0:f.is_map)&&f[n.id_key]&&(f==null?void 0:f.geom),l=e.computed(()=>n.columns.find(f=>f.meta==="title")),s=e.computed(()=>n.columns.filter(f=>f.meta==="category")),i=e.computed(()=>n.columns.filter(f=>f.meta==="tags")),c=e.computed(()=>n.columns.filter(f=>f.meta!=="title")),u=e.computed(()=>n.columns.find(f=>f.meta==="image")),d=e.computed(()=>n.columns.find(f=>f.meta==="desc")||n.columns.find(f=>f.name==="description")),y=(f,p)=>{if(p)return f[p]},a=f=>{const p=y(f,n.id_key);return`${n.path}?id=${p}`},m=(f,p)=>{const k=y(f,n.id_key);return`/map?layers=${p}&info=${p},${k}`};return(f,p)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,k=>{var h,g,b,x,C,V,E,_,N;return e.openBlock(),e.createElementBlock("div",{key:k.id,class:"bg-white border border-gray-200 rounded-lg overflow-hidden transition-all duration-200 hover:shadow-md"},[e.createElementVNode("div",E0,[u.value?(e.openBlock(),e.createElementBlock("div",C0,[k[(h=u.value)==null?void 0:h.name]?(e.openBlock(),e.createElementBlock("img",{key:0,src:k[(g=u.value)==null?void 0:g.name],alt:"image",class:"object-cover w-full h-48 lg:h-full lg:w-auto"},null,8,N0)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",V0,[...p[0]||(p[0]=[e.createElementVNode("div",{class:"w-3 h-12 rounded-sm bg-blue-500",title:"Пріоритет: Високий","aria-hidden":"true"},null,-1)])])),e.createElementVNode("div",$0,[e.createElementVNode("div",B0,[e.createElementVNode("h3",S0,e.toDisplayString(k[`${(b=l.value)==null?void 0:b.name}_text`]||k[(x=l.value)==null?void 0:x.name]||k[(C=l.value)==null?void 0:C.label]||"Не вказано"),1),e.createElementVNode("div",v0,[Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,T=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:T.name},[k[T.name]?(e.openBlock(),e.createElementBlock("div",L0,e.toDisplayString(k[`${T.name}_text`]||k[T.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0)])]),e.createElementVNode("p",T0,e.toDisplayString(((E=k[((V=d.value)==null?void 0:V.name)+"_data"])==null?void 0:E.text)||k[((_=d.value)==null?void 0:_.name)+"_text"]||k[(N=d.value)==null?void 0:N.name]),1),e.createElementVNode("div",A0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,T=>{var Y;return e.openBlock(),e.createElementBlock("div",{key:T.name,class:"flex flex-col md:flex-row md:items-center"},[e.createElementVNode("div",M0,[T.icon?(e.openBlock(),e.createElementBlock("span",{key:0,class:"mr-1 flex-shrink-0",innerHTML:T.icon},null,8,F0)):e.createCommentVNode("",!0),e.createElementVNode("span",D0,e.toDisplayString((T==null?void 0:T.ua)||T.label||T.name)+":",1)]),e.createElementVNode("span",P0,[Array.isArray(k[T==null?void 0:T.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(k[T==null?void 0:T.name],(ee,R)=>(e.openBlock(),e.createElementBlock("span",{key:R,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 inline-block"},e.toDisplayString(ee),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[T.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Nn)(k[T==null?void 0:T.name])||"Немає даних"),1)],64)):T.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Cn)(k[T==null?void 0:T.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((Y=k[(T==null?void 0:T.name)+"_data"])==null?void 0:Y.text)||k[(T==null?void 0:T.name)+"_text"]||k[T==null?void 0:T.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",z0,[e.createElementVNode("p",I0," Теги: "+e.toDisplayString(i.value.length&&k[i.value[0].name]?"":"відсутні"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",j0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,T=>(e.openBlock(),e.createElementBlock("div",{key:T.name,class:"flex flex-wrap gap-1"},[k[T.name]?(e.openBlock(),e.createElementBlock("span",R0,e.toDisplayString(k[`${T.name}_text`]||k[T.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",O0,[e.createElementVNode("div",U0,[!t.hideDetailsButton&&r(k)?(e.openBlock(),e.createElementBlock("a",{key:0,href:m(k,k==null?void 0:k.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-md px-3 w-full bg-blue-600 hover:bg-blue-700 text-white text-xs h-8"}," На карті ",8,q0)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:a(k),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-md px-3 w-full bg-blue-600 hover:bg-blue-700 text-white text-xs h-8"}," Детальніше ",8,H0))])])])])}),128))}});function W0(t){t.component("MapCustom",ho)}const Y0={key:0,class:"flex items-center text-sm text-gray-500 pb-[8px]"},G0={key:0,class:"flex items-center gap-2 flex-shrink-0"},K0={key:1,class:"text-xs text-gray-500 m-0 p-0 mt-[-0.3em]"},tn=e.defineComponent({__name:"TableFormHeader",props:{variant:{default:"table"},title:{default:""}},setup(t){const n=t,o=e.computed(()=>n.variant==="table"?"px-6 pb-4 pt-0 mt-0 flex flex-col gap-0 px-[25px] pt-[24px]":"px-6 pb-4 pt-0 mt-0 flex flex-col gap-0 px-[25px] pt-[16px]"),r=e.computed(()=>n.variant==="form"?"font-medium":"");return(l,s)=>(e.openBlock(),e.createElementBlock("header",{class:e.normalizeClass([o.value,"flex-shrink-0 pt"])},[l.$slots.breadcrumbs?(e.openBlock(),e.createElementBlock("div",Y0,[e.renderSlot(l.$slots,"breadcrumbs")])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["flex items-center justify-between",{"gap-2":t.variant==="table"}])},[e.createElementVNode("h2",{class:e.normalizeClass(["text-xl font-semibold text-gray-900 p-0 m-0 flex-shrink-0",r.value])},[e.renderSlot(l.$slots,"title",{},()=>[e.createTextVNode(e.toDisplayString(t.title),1)])],2),l.$slots.actions?(e.openBlock(),e.createElementBlock("div",G0,[e.renderSlot(l.$slots,"actions")])):e.createCommentVNode("",!0)],2),l.$slots.description?(e.openBlock(),e.createElementBlock("p",K0,[e.renderSlot(l.$slots,"description")])):e.createCommentVNode("",!0)],2))}}),Z0={class:"flex-1 flex flex-col bg-gray-50 h-screen overflow-hidden p-0 m-0"},X0={key:0,href:"/api/gis-create-xml",target:"_blank",rel:"noreferrer",class:"flex h-[2rem] items-center gap-1.5 px-3 py-1.5 bg-slate-50 text-slate-700 rounded-md border border-slate-200 hover:bg-slate-100 transition-colors text-sm"},J0={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto overflow-x-visible"},Q0={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-visible"},eb={class:"p-3 border-b border-gray-200"},tb={class:"flex flex-col sm:flex-row gap-2"},nb={class:"entity-table-root"},ob={class:"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800"},rb={key:0,class:"gap-2 inline-flex"},lb=["onClick"],ab={key:0,class:"flex flex-col gap-3 border-t border-gray-200 px-4 py-3 sm:flex-row sm:items-center sm:justify-between bg-gray-50"},sb={class:"text-sm text-gray-500"},ib={class:"font-medium text-gray-700"},cb={class:"font-medium text-gray-700"},db={class:"font-medium text-gray-700"},ub={class:"flex items-center justify-end gap-3"},bo=Object.freeze(Object.defineProperty({__proto__:null,default:Ae(e.defineComponent({__name:"EntityTablePage",props:{entityKey:{default:""},entityBasePath:{default:""},columnsConfig:{default:()=>[]}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/table")),o=Oe.useRoute(),r=Oe.useRouter(),l=t,s=e.computed(()=>l.entityKey||String(o.name??"").split("-")[0]),i=e.computed(()=>{var j;let B=(((j=o.matched[o.matched.length-1])==null?void 0:j.path)||o.path).replace(/\/:id\??\/:action\??$/,"").replace(/\/:id\??$/,"").replace(/\/:action\??$/,"");return B.startsWith("/")||(B=`/${B}`),B}),c=e.computed(()=>l.entityBasePath||i.value),u=e.computed(()=>{var B;const M=((B=o.matched[o.matched.length-1])==null?void 0:B.path)||"";return/:id\??/.test(M)&&/:action\??/.test(M)}),d=e.computed(()=>{var B,j;return(B=o.meta)!=null&&B.title?o.meta.title:o.name?o.name:((j=o.path)==null?void 0:j.replace(/^\//,""))||""||"GIS"}),y=e.computed(()=>{var M;return((M=o.meta)==null?void 0:M.description)||""}),a=e.computed(()=>{const M=String(d.value||"").trim();return M?`Пошук ${M}...`:"Пошук..."}),m=e.ref([]),f=e.ref(!0),p=e.ref([]),k=e.ref([]),h=e.ref({}),g=e.ref([]),b=e.ref(String(o.query.search??"")),x=e.ref(Math.max(1,Number(o.query.page)||1)),C=e.ref(15),V=e.ref(0),E=e.computed(()=>V.value>0),_=e.computed(()=>V.value?(x.value-1)*C.value+1:0),N=e.computed(()=>V.value?Math.min(x.value*C.value,V.value):0);function T(M){const B=new URLSearchParams;return Object.entries(M).forEach(([j,X])=>{if(!(X==null||X==="")){if(Array.isArray(X)){X.forEach(he=>{he!=null&&he!==""&&B.append(j,String(he))});return}B.append(j,String(X))}}),B.toString()}function Y(){return u.value?`${c.value}/new`:o.name==="services"?"/gis.datasets/new":o.name==="group_list"?"/gis.group/add":`${o.path}/add`}function ee(M){if(u.value)return`${c.value}/${M}/edit`;const B=String(o.name??"").split("_")[0];return B==="services"?`/gis.datasets/${M}/edit`:`/gis.${B}/edit/${M}`}const R=async()=>{const M=`/api/data/gis.${s.value}.table`;if(!M){m.value=[],f.value=!1;return}try{f.value=!0;const B=T({...h.value,page:x.value,limit:C.value}),j=await fetch(B?`${M}?${B}`:M);if(!j.ok)throw new Error(`Rows fetch failed: ${j.status}`);const X=await j.json();m.value=X.rows||[],V.value=Number(X.filtered??X.total??X.count??m.value.length)||0,p.value=l.columnsConfig.length?l.columnsConfig:X.columns||[],k.value=X.filters||[],f.value=!1,g.value=X.actions,X.card!==!1&&p.value.length&&(u.value?p.value[0].link=`${c.value}/{id}`:p.value[0].link||(p.value[0].link=`/${o.name}/{id}`))}catch{m.value=[],f.value=!1}};function ae(M){h.value=M,x.value=1,F(),R()}e.onMounted(()=>{R(),document.title=d.value}),e.watch(()=>o.name,()=>{x.value=1,b.value="",R(),document.title=d.value}),e.watch(()=>o.query,M=>{const B=Math.max(1,Number(M.page)||1),j=String(M.search??""),X=B!==x.value,he=j!==b.value;!X&&!he||(x.value=B,b.value=j,h.value={...h.value,search:j||void 0},R())});async function ue(M,B,j){const X=await fetch(`/api/form/gis.${s.value}.table/${M.id}`);if(!X.ok)throw new Error(`Form fetch failed: ${X.status}`);const Z=(await X.json()).token,P={[B]:j},q=await fetch(`/api/table/${Z}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(P)});if(!q.ok)throw Ee.notify({type:"error",title:"Помилка збереження",message:`Поле "${B}" не оновлено`}),new Error(`Save failed: ${q.status}`);Ee.notify({title:"Збережено",message:`Поле "${B}" оновлено`})}function oe(M,B){h.value={...h.value,[M]:B},x.value=1,F(),R()}function te(M){oe((M==null?void 0:M.name)||"search",(M==null?void 0:M.value)??b.value)}function J(M){b.value="",oe(M||"search",void 0)}function S(M){!M||M===x.value||(x.value=M,F(),R())}function F(){const M={...o.query,page:String(x.value),...b.value?{search:b.value}:{}};b.value||delete M.search,r.replace({query:M})}return(M,B)=>(e.openBlock(),e.createElementBlock("div",Z0,[e.createVNode(tn,{variant:"table"},e.createSlots({title:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.value),1)]),actions:e.withCtx(()=>[e.unref(o).name==="rasters"?(e.openBlock(),e.createElementBlock("a",X0,[e.createVNode(e.unref(ye.RefreshCw),{size:16}),B[2]||(B[2]=e.createTextVNode(" Оновити растри ",-1))])):e.createCommentVNode("",!0),e.createElementVNode("a",{onClick:B[0]||(B[0]=j=>e.unref(r).push(Y())),class:"hover:cursor-pointer flex items-center gap-1.5 px-3 py-1.5 bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors text-sm"},[e.createVNode(e.unref(ye.Plus),{size:16}),B[3]||(B[3]=e.createTextVNode(" Додати ",-1))])]),_:2},[y.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(y.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",J0,[e.createElementVNode("div",Q0,[e.createElementVNode("div",eb,[e.createElementVNode("div",tb,[e.createVNode(e.unref(Gn.FilterField),{modelValue:b.value,"onUpdate:modelValue":B[1]||(B[1]=j=>b.value=j),name:"search",type:"text",layout:"inline",class:"flex-1",width:"100%",cleanable:!0,onChange:te,onClear:J,placeholder:a.value},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(Gn.Filter),{schema:k.value,value:h.value,onChange:ae,layout:"inline",mode:"soft",view:"popover",limit:8,class:"flex-shrink-0"},null,8,["schema","value"])])]),e.createElementVNode("div",nb,[e.createVNode(e.unref(n),{rows:m.value,columns:p.value,loading:f.value,router:e.unref(r),selectable:!1,onCellUpdate:ue,classWrapper:"overflow-x-auto overflow-y-visible",TableStyle:"w-full",classTable:"w-full min-w-[640px]",classThead:"bg-gray-50 border-b border-gray-200",classTh:"px-3 sm:px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase tracking-wider",classTbody:"bg-white divide-y divide-gray-200",classTr:"hover:bg-gray-50 transition-colors",classTd:"px-3 sm:px-4 py-2.5 whitespace-nowrap",classLink:"text-sm font-medium text-blue-600 hover:text-blue-800 hover:underline text-left"},{badge:e.withCtx(({row:j,value:X,column:he})=>[e.renderSlot(M.$slots,"badge",{row:j,value:X,column:he},()=>[e.createElementVNode("span",ob,e.toDisplayString((X==null?void 0:X.text)||X||"-"),1)],!0)]),action:e.withCtx(({row:j})=>[e.renderSlot(M.$slots,"action",{row:j},()=>[g.value.includes("add")?(e.openBlock(),e.createElementBlock("div",rb,[e.createElementVNode("button",{onClick:X=>e.unref(r).push(ee(j.id)),class:"inline-flex items-center justify-center bg-white border rounded-md size-7 gap-x-2 hover:bg-gray-100",title:"Редагувати","aria-label":"Редагувати"},[e.createVNode(Kn)],8,lb)])):e.createCommentVNode("",!0)],!0)]),_:3},8,["rows","columns","loading","router"])]),E.value?(e.openBlock(),e.createElementBlock("div",ab,[e.createElementVNode("div",sb,[B[4]||(B[4]=e.createTextVNode(" Показано ",-1)),e.createElementVNode("span",ib,e.toDisplayString(_.value),1),B[5]||(B[5]=e.createTextVNode(" - ",-1)),e.createElementVNode("span",cb,e.toDisplayString(N.value),1),B[6]||(B[6]=e.createTextVNode(" з ",-1)),e.createElementVNode("span",db,e.toDisplayString(V.value),1)]),e.createElementVNode("div",ub,[e.createVNode(e.unref(Ee.VsPagination),{total:V.value,page:x.value,"page-size":C.value,showPageSizes:!1,pageRange:5,view:"button",color:"gray","onUpdate:page":S,onPageChange:S},null,8,["total","page","page-size"])])])):e.createCommentVNode("",!0)])])]))}}),[["__scopeId","data-v-821aeb35"]])},Symbol.toStringTag,{value:"Module"})),fb={class:"mx-1"},mb={class:"flex items-center gap-2 mt-[0.4rem]"},pb={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto"},gb={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden"},yb={class:"w-full relative overflow-auto p-5 [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar:horizontal]:h-[8px] [&::-webkit-scrollbar-track]:bg-gray-100 [&::-webkit-scrollbar-thumb]:bg-gray-300 dark:[&::-webkit-scrollbar-track]:bg-neutral-700 dark:[&::-webkit-scrollbar-thumb]:bg-neutral-500"},hb={class:"vs-form w-full"},Vn=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"EntityCreatePage",props:{entityKey:{default:""}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/form")),o=e.ref({}),r=e.ref(null),l=e.ref(null),s=Oe.useRouter(),i=Oe.useRoute(),c=t,u=e.ref({}),d=e.ref(""),y=e.computed(()=>i.path.replace(/\/(add|new)$/,"")),a=e.computed(()=>{var h;return((h=s.resolve(y.value).meta)==null?void 0:h.title)??""}),m=e.computed(()=>a.value?`Додати в ${a.value.toLowerCase()}`:"Додати"),f=e.computed(()=>{var h;return((h=i.meta)==null?void 0:h.description)??""});function p(){s.push(y.value||"/")}async function k(){if(!l.value){Ee.notify({type:"error",title:"Error",message:"Create token is missing."});return}const h=u.value.validate();if(h){Ee.notify({type:"warning",title:"Validation",message:Object.entries(h).map(([b,x])=>`${b}: ${x}`).join(`
2
+ `)});return}if(c.value.name.trim())try{y.value=!0,m.value=null;const x={name:c.value.name.trim(),description:c.value.description.trim()||null,alias:c.value.alias.length>0?c.value.alias:null,data:d.value.length>0?d.value:[]},C=s.value?`/api/user-cls/${encodeURIComponent(c.value.name.trim())}`:"/api/user-cls",V=await fetch(C,{method:s.value?"PUT":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(x)});if(!V.ok){const E=await V.json().catch(()=>({}));throw new Error(E.message||`HTTP error: ${V.status}`)}l("created"),l("close")}catch(x){let C="Помилка створення довідника";x instanceof Error?C=x.message:s.value&&(C="Помилка оновлення довідника"),Ee.notify({type:"error",title:"Помилка",message:C}),console.error("Error saving classifier:",x)}finally{y.value=!1}},k=()=>{const h=document.createElement("input");h.type="file",h.accept=".json",h.onchange=g=>{var V;const b=(V=g.target.files)==null?void 0:V[0];if(!b)return;const x=b.name.replace(/\.json$/i,"").trim(),C=new FileReader;C.onload=async E=>{try{const _=JSON.parse(E.target.result);if(!Array.isArray(_))throw new Error("Файл повинен містити масив обʼєктів");y.value=!0,m.value=null;const T=await fetch("/api/user-cls",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:x,description:null,alias:null,data:_})});if(!T.ok){const Y=await T.json().catch(()=>({}));throw new Error(Y.message||`HTTP error: ${T.status}`)}Ee.notify({title:"Імпорт успішний",type:"success",message:`Створено класифікатор "${x}" з ${_.length} записами`}),l("created"),l("close")}catch(_){Ee.notify({title:"Помилка імпорту",type:"error",message:_.message||"Некоректний формат файлу"})}finally{y.value=!1}},C.readAsText(b)},h.click()};return(h,g)=>(e.openBlock(),e.createElementBlock("div",{onClick:g[3]||(g[3]=e.withModifiers(b=>l("close"),["self"])),class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4"},[e.createElementVNode("div",Fs,[e.createElementVNode("div",Ds,[e.createElementVNode("h3",Ps,e.toDisplayString(s.value?"Редагувати довідник":"Створити довідник"),1),e.createElementVNode("button",{onClick:g[0]||(g[0]=b=>l("close")),class:"text-gray-400 hover:text-gray-600 transition-colors"},[e.createVNode(e.unref(ye.X),{width:20,height:20,"stroke-width":2,class:"lucide lucide-x-icon lucide-x"})])]),a.value?(e.openBlock(),e.createElementBlock("div",zs,[e.createVNode(e.unref(ye.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):(e.openBlock(),e.createElementBlock("div",Is,[e.createVNode(e.unref(o),{ref_key:"formRef",ref:i,schema:u.value,values:c.value,"onUpdate:values":g[1]||(g[1]=b=>c.value=b)},null,8,["schema","values"]),m.value?(e.openBlock(),e.createElementBlock("div",js,e.toDisplayString(m.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Rs,[e.createElementVNode("button",{type:"button",onClick:p,disabled:y.value,class:"flex-1 px-4 py-2.5 bg-sky-600 text-white rounded-lg hover:bg-sky-700 transition-colors text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2"},[y.value?(e.openBlock(),e.createBlock(e.unref(ye.Loader2),{key:0,width:16,height:16,"stroke-width":2,class:"animate-spin"})):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(y.value?"Збереження...":"Зберегти"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(y.value?"Створення...":"Створити"),1)],64))],8,Os),e.createElementVNode("button",{type:"button",onClick:k,class:"flex-1 px-4 py-2.5 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium disabled:opacity-50"}," Імпорт "),e.createElementVNode("button",{type:"button",onClick:g[2]||(g[2]=b=>l("close")),disabled:y.value,class:"flex-1 px-4 py-2.5 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium disabled:opacity-50"}," Скасувати ",8,Us)])]))])]))}}),Hs={class:"flex flex-col 2xl:flex-row 2xl:items-center 2xl:justify-between"},Ws={class:""},Ys={class:"text-2xl font-bold mb-2 flex items-center gap-2"},Gs={key:0,class:"text-sm font-normal text-gray-500 mt-2 ml-1"},Ks={class:"flex flex-col gap-3 mt-4 lg:mt-5 lg:flex-row lg:items-center"},Zs={class:"w-full md:w-auto"},Xs=["value"],Js={class:"relative w-full lg:w-[16rem]"},Qs={class:"bg-white focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-lg"},ei={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},ti=["value"],ni=e.defineComponent({__name:"DictionariesHeader",props:{modelValue:{},filter:{default:""},counts:{}},emits:["update:modelValue","update:filter","refresh"],setup(t,{emit:n}){const o=t,r=n,l=c=>{const u=c.target.value;r("update:filter",u)},s=e.ref(!1),i=()=>{r("refresh")};return(c,u)=>(e.openBlock(),e.createElementBlock("div",Hs,[e.createElementVNode("div",Ws,[e.createElementVNode("h1",Ys,[u[4]||(u[4]=e.createTextVNode(" Довідники ",-1)),t.counts&&t.counts.total>0?(e.openBlock(),e.createElementBlock("span",Gs,e.toDisplayString(t.counts.filtered)+" / "+e.toDisplayString(t.counts.total),1)):e.createCommentVNode("",!0)]),u[5]||(u[5]=e.createElementVNode("p",{class:"text-sm opacity-60"}," Редагуйте довідники класифікаторів, що використовуються у вашій системі ",-1))]),e.createElementVNode("div",Ks,[e.createElementVNode("div",Zs,[u[7]||(u[7]=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:l},[...u[6]||(u[6]=[e.createElementVNode("option",{value:""},"Всі",-1),e.createElementVNode("option",{value:"cls"},"Довідники",-1),e.createElementVNode("option",{value:"select"},"Вибірки з БД",-1)])],40,Xs)]),e.createElementVNode("div",Js,[e.createElementVNode("div",Qs,[e.createElementVNode("div",ei,[e.createVNode(e.unref(ye.Search),{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:u[0]||(u[0]=d=>c.$emit("update:modelValue",d.target.value))},null,40,ti),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:u[1]||(u[1]=d=>c.$emit("update:modelValue",""))},[e.createVNode(e.unref(ye.X),{width:14,height:14,"stroke-width":2})])):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{onClick:u[2]||(u[2]=d=>s.value=!0),class:"w-full md:w-auto flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-200 transform hover:scale-105 text-sm font-medium"},[e.createVNode(e.unref(ye.Plus),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),u[8]||(u[8]=e.createTextVNode(" Додати ",-1))]),s.value?(e.openBlock(),e.createBlock(qs,{key:0,onClose:u[3]||(u[3]=d=>s.value=!1),onCreated:i})):e.createCommentVNode("",!0)])]))}}),oi={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-x-auto"},ri={key:0,class:"flex items-center justify-center py-12"},li={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm m-4"},ai={key:2,class:"text-center py-12 text-gray-500"},si={key:3,class:"w-full min-w-[640px] divide-y divide-gray-200"},ii={class:"bg-gray-50 border-b border-gray-200"},ci={class:"divide-y divide-gray-200"},di={class:"px-4 py-3 w-1/12"},ui={class:"px-4 py-3 text-sm font-medium text-gray-900 w-2/12"},fi={class:"px-4 py-3 text-sm text-gray-600 font-mono"},mi={class:"px-4 py-3 w-1/12"},pi={class:"flex gap-1"},gi=["onClick"],yi=["onClick"],hi=e.defineComponent({__name:"DetailsTable",props:{classifierName:{},search:{}},emits:["edit"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=p=>{l("edit",p)},i=[{key:"color",label:"Колір",width:"w-2/12",align:"text-left"},{key:"text",label:"Назва",width:"w-5/12",align:"text-left"},{key:"id",label:"Код",width:"w-4/12",align:"text-left"},{key:"actions",label:"Дії",width:"w-1/12",align:"text-left"}],c=e.ref([]),u=e.ref(!0),d=e.ref(null),y=e.computed(()=>{var k;if(!((k=r.search)!=null&&k.trim()))return c.value;const p=r.search.toLowerCase().trim();return c.value.filter(h=>{var g,b;return((g=h.text)==null?void 0:g.toLowerCase().includes(p))||((b=h.id)==null?void 0:b.toLowerCase().includes(p))})}),a=async p=>{try{u.value=!0,d.value=null;const k=await fetch(`/api/suggest/${encodeURIComponent(p)}`);if(!k.ok)throw new Error(`HTTP error: ${k.status}`);const h=await k.json();c.value=h.data}catch(k){d.value=k instanceof Error?k.message:"Failed to load items",console.error("Error fetching suggest items:",k)}finally{u.value=!1}},m=async(p,k)=>{Ee.confirm({title:"Підтвердіть дію",type:"error",message:"Ви впевнені, що хочете видалити даний обʼєкт?",onConfirm:async()=>{const h=await fetch(`/api/user-cls/${p}/${k}`,{method:"DELETE"});if(!h.ok){Ee.notify({type:"error",title:"Помилка",message:(await h.json()).error||"Something went wrong"});return}Ee.notify({title:"Видалено",type:"success",message:"Обʼєкт успішно видалено"}),a(p)}})};return e.onMounted(()=>{r.classifierName&&a(r.classifierName)}),e.watch(()=>r.classifierName,p=>{p&&a(p)}),n({refetch:()=>{a(r.classifierName)}}),(p,k)=>(e.openBlock(),e.createElementBlock("div",oi,[u.value?(e.openBlock(),e.createElementBlock("div",ri,[e.createVNode(e.unref(ye.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):d.value?(e.openBlock(),e.createElementBlock("div",li,e.toDisplayString(d.value),1)):c.value.length===0?(e.openBlock(),e.createElementBlock("div",ai," Записи відсутні ")):(e.openBlock(),e.createElementBlock("table",si,[e.createElementVNode("thead",ii,[e.createElementVNode("tr",null,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(i,h=>e.createElementVNode("th",{key:h.key,class:e.normalizeClass(["px-4 py-3 text-xs font-semibold text-gray-900",[h.width,h.align]])},e.toDisplayString(h.label),3)),64))])]),e.createElementVNode("tbody",ci,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,h=>(e.openBlock(),e.createElementBlock("tr",{key:h.id,class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",di,[e.createElementVNode("div",{class:"w-6 h-6 rounded border border-gray-300",style:e.normalizeStyle({backgroundColor:h.color})},null,4)]),e.createElementVNode("td",ui,e.toDisplayString(h.text),1),e.createElementVNode("td",fi,e.toDisplayString(h.id),1),e.createElementVNode("td",mi,[e.createElementVNode("div",pi,[e.createElementVNode("button",{onClick:g=>s(h),class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати"},[e.createVNode(e.unref(ye.PenLine),{size:14,"stroke-width":2})],8,gi),e.createElementVNode("button",{onClick:g=>m(t.classifierName,h.id),class:"p-1 text-gray-400 hover:text-red-600 transition-all rounded hover:bg-red-50",title:"Видалити"},[e.createVNode(e.unref(ye.Trash2),{size:14,"stroke-width":2})],8,yi)])])]))),128))])]))]))}}),bi={class:"bg-white rounded-lg shadow-xl max-w-md w-full max-h-[90vh] overflow-y-auto"},xi={class:"sticky top-0 bg-white border-b border-gray-200 px-6 py-4 flex items-center justify-between"},ki={class:"text-lg font-semibold text-gray-900"},wi={class:"space-y-5"},_i={class:"space-y-3"},Ei={class:"grid grid-cols-6 gap-2"},Ci=["onClick"],Ni={key:0,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-3 text-sm mt-4"},Vi={class:"flex items-center gap-3 pt-6"},$i=["disabled"],Bi=["disabled"],Si=e.defineComponent({__name:"TableAddModale",props:{classifierName:{},editData:{}},emits:["close","created"],setup(t,{emit:n}){const o=t,r=n,l=["rgb(44, 94, 255)","rgb(187, 224, 168)","rgb(255, 165, 0)","rgb(139, 92, 246)","rgb(239, 68, 68)","rgb(84, 171, 82)","rgb(107, 114, 128)","rgb(236, 72, 153)","rgb(255, 216, 117)","rgb(96, 193, 235)","rgb(20, 184, 166)","rgb(209, 115, 168)"],s=e.ref(null),i=e.ref(!1),c=e.ref(null),u=e.reactive({id:"",text:""});e.onMounted(()=>{o.editData&&(u.id=o.editData.id||"",u.text=o.editData.text,s.value=o.editData.color||null)});const d=async()=>{if(u.text.trim())try{i.value=!0,c.value=null;const y=await fetch(`/api/suggest/${encodeURIComponent(o.classifierName)}`);if(!y.ok)throw new Error(`HTTP error: ${y.status}`);const m=(await y.json()).data||[],f={id:u.id.trim(),text:u.text.trim(),color:s.value||null};let p;o.editData?p=m.map(h=>{var g;return h.id===((g=o.editData)==null?void 0:g.id)?f:h}):p=[...m,f];const k=await fetch(`/api/user-cls/${encodeURIComponent(o.classifierName)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:o.classifierName,data:p})});if(!k.ok){const h=await k.json().catch(()=>({}));throw new Error(h.message||`HTTP error: ${k.status}`)}r("created"),r("close")}catch(y){c.value=y instanceof Error?y.message:"Помилка збереження",console.error("Error saving record:",y)}finally{i.value=!1}};return(y,a)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[e.createElementVNode("div",{class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4",onClick:a[4]||(a[4]=e.withModifiers(m=>r("close"),["self"]))},[e.createElementVNode("div",bi,[e.createElementVNode("div",xi,[e.createElementVNode("h2",ki,e.toDisplayString(t.editData?"Редагувати запис":"Додати запис"),1),e.createElementVNode("button",{onClick:a[0]||(a[0]=m=>r("close")),class:"text-gray-400 hover:text-gray-600 transition-colors"},[e.createVNode(e.unref(ye.X),{width:20,height:20,"stroke-width":2,class:""})])]),e.createElementVNode("form",{class:"p-6",onSubmit:e.withModifiers(d,["prevent"])},[e.createElementVNode("div",wi,[e.createElementVNode("div",null,[a[6]||(a[6]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 mb-2"}," Колір ",-1)),e.createElementVNode("div",_i,[e.createElementVNode("div",Ei,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,m=>e.createElementVNode("button",{key:m,type:"button",class:e.normalizeClass(["w-full aspect-square rounded-lg border-2 transition-all",s.value===m?"border-gray-900 scale-110":"border-gray-300 hover:border-gray-400"]),style:e.normalizeStyle({backgroundColor:m}),onClick:f=>s.value=m},null,14,Ci)),64))]),a[5]||(a[5]=e.createElementVNode("div",{class:"relative"},[e.createElementVNode("button",{type:"button",class:"text-sm text-sky-600 hover:text-sky-700"}," Обрати інший колір ")],-1))])]),e.createElementVNode("div",null,[a[7]||(a[7]=e.createElementVNode("label",{for:"id",class:"block text-sm font-medium text-gray-700 mb-2"},[e.createTextVNode(" Код "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":a[1]||(a[1]=m=>u.id=m),type:"text",id:"id",placeholder:"Введіть код",class:"w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-sky-500 focus:border-transparent text-sm text-[#2e3338]",required:""},null,512),[[e.vModelText,u.id]])]),e.createElementVNode("div",null,[a[8]||(a[8]=e.createElementVNode("label",{for:"name",class:"block text-sm font-medium text-gray-700 mb-2"},[e.createTextVNode(" Назва "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":a[2]||(a[2]=m=>u.text=m),type:"text",id:"name",placeholder:"Введіть назву",class:"w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-sky-500 focus:border-transparent text-sm text-[#2e3338]",required:""},null,512),[[e.vModelText,u.text]])])]),c.value?(e.openBlock(),e.createElementBlock("div",Ni,e.toDisplayString(c.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Vi,[e.createElementVNode("button",{type:"submit",disabled:i.value||!u.text.trim(),class:"flex-1 px-4 py-2.5 bg-sky-600 text-white rounded-lg hover:bg-sky-700 transition-colors text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2"},[i.value?(e.openBlock(),e.createBlock(e.unref(ye.Loader2),{key:0,width:16,height:16,"stroke-width":2,class:"animate-spin"})):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(i.value?"Збереження...":t.editData?"Зберегти зміни":"Зберегти"),1)],8,$i),e.createElementVNode("button",{type:"button",onClick:a[3]||(a[3]=m=>r("close")),disabled:i.value,class:"flex-1 px-4 py-2.5 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed"}," Скасувати ",8,Bi)])],32)])])]))}}),vi={class:"space-y-6 flex-1 overflow-y-auto p-0"},Li={class:"flex items-center gap-2 text-sm text-gray-600 mb-4"},Ti={class:"text-gray-900"},Ai={class:"flex items-start justify-between mb-6"},Mi={class:"flex-1 mr-4"},Fi={class:"text-2xl font-bold text-gray-900"},Di={key:0,class:"flex items-center gap-2 group mt-1"},Pi={class:"text-sm text-gray-500"},zi={key:1,class:"flex items-center gap-2 mt-1"},Ii=["disabled"],ji=["disabled"],Ri={class:"flex items-center gap-3"},Oi={class:"bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-4 grid grid-cols-2 justify-between"},Ui={class:"relative max-w-md grid"},qi={class:"vs-form-text relative w-full border-transparent text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-sm"},Hi={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},Wi=e.defineComponent({__name:"DictionaryDetails",setup(t){const n=Oe.useRouter(),o=Oe.useRoute(),r=e.computed(()=>o.params.name),l=e.ref(!1),s=e.ref(null),i=e.ref(null),c=e.ref(""),u=e.ref(""),d=e.ref(""),y=e.ref(!1),a=e.ref(!1),m=e.ref(null),f=async()=>{var E;try{const _=await fetch(`/api/user-cls?name=${encodeURIComponent(r.value)}`);if(!_.ok)return;const T=(E=(await _.json()).data)==null?void 0:E[0];T&&(u.value=T.description||"")}catch(_){console.error("Error fetching classifier details:",_)}},p=()=>{d.value=u.value,y.value=!0,e.nextTick(()=>{var E;(E=m.value)==null||E.focus()})},k=()=>{y.value=!1,d.value=""},h=async()=>{try{a.value=!0;const N=(await(await fetch(`/api/suggest/${encodeURIComponent(r.value)}`)).json()).data||[],T={name:r.value,description:d.value.trim()||null,data:N},Y=await fetch(`/api/user-cls/${encodeURIComponent(r.value)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(T)});if(!Y.ok)throw new Error(`HTTP error: ${Y.status}`);u.value=d.value,y.value=!1}catch(E){console.error("Error saving description:",E)}finally{a.value=!1}};e.onMounted(()=>{f()}),e.watch(r,()=>{f()});const g=()=>{s.value=null,l.value=!0},b=E=>{s.value=E,l.value=!0},x=()=>{l.value=!1,s.value=null},C=()=>{var E;(E=i.value)==null||E.refetch()},V=async()=>{try{const E=await fetch(`/api/suggest/${encodeURIComponent(r.value)}`);if(!E.ok)throw new Error(`HTTP error: ${E.status}`);const N=(await E.json()).data||[],T=new Blob([JSON.stringify(N,(R,ae)=>ae===null?void 0:ae,2)],{type:"application/json"}),Y=URL.createObjectURL(T),ee=document.createElement("a");ee.href=Y,ee.download=`${r.value}.json`,document.body.appendChild(ee),ee.click(),document.body.removeChild(ee),URL.revokeObjectURL(Y),Ee.notify({title:"Експорт завершено",type:"success",message:"Файл успішно експортовано"})}catch(E){console.error("Error exporting classifier to json:",E),Ee.notify({title:"Помилка",type:"error",message:"Не вдалося експортувати дані"})}};return(E,_)=>(e.openBlock(),e.createElementBlock("div",vi,[e.createElementVNode("div",null,[e.createElementVNode("div",Li,[e.createElementVNode("button",{onClick:_[0]||(_[0]=N=>e.unref(n).back()),class:"text-blue-600 hover:text-blue-500 transition-colors"}," Довідники "),_[4]||(_[4]=e.createElementVNode("span",{class:"text-gray-400"},"/",-1)),e.createElementVNode("span",Ti,e.toDisplayString(r.value),1)]),e.createElementVNode("div",Ai,[e.createElementVNode("div",Mi,[e.createElementVNode("h1",Fi,e.toDisplayString(r.value),1),y.value?(e.openBlock(),e.createElementBlock("div",zi,[e.withDirectives(e.createElementVNode("input",{ref_key:"editInputRef",ref:m,"onUpdate:modelValue":_[1]||(_[1]=N=>d.value=N),type:"text",class:"text-sm text-gray-600 border-b-2 border-sky-500 focus:outline-none bg-transparent w-full py-0.5",onKeydown:[e.withKeys(h,["enter"]),e.withKeys(k,["esc"])],placeholder:"Введіть опис"},null,544),[[e.vModelText,d.value]]),e.createElementVNode("button",{onClick:h,disabled:a.value,class:"p-1.5 text-green-600 hover:bg-green-50 rounded transition-colors disabled:opacity-50"},[e.createVNode(e.unref(ye.Check),{width:18,height:18,"stroke-width":2})],8,Ii),e.createElementVNode("button",{onClick:k,disabled:a.value,class:"p-1.5 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors"},[e.createVNode(e.unref(ye.X),{width:18,height:18,"stroke-width":2})],8,ji)])):(e.openBlock(),e.createElementBlock("div",Di,[e.createElementVNode("p",Pi,e.toDisplayString(u.value||"Опис відсутній"),1),e.createElementVNode("button",{onClick:p,class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати опис"},[e.createVNode(e.unref(ye.SquarePen),{width:16,height:16,"stroke-width":2})])]))]),e.createElementVNode("div",Ri,[e.createElementVNode("button",{onClick:g,class:"w-full md:w-auto flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-200 transform hover:scale-105 text-sm font-medium"},[e.createVNode(e.unref(ye.Plus),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),_[5]||(_[5]=e.createTextVNode(" Додати запис ",-1))]),e.createElementVNode("button",{onClick:_[2]||(_[2]=N=>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",Oi,[e.createElementVNode("div",Ui,[e.createElementVNode("div",qi,[e.createElementVNode("div",Hi,[e.createVNode(e.unref(ye.Search),{width:18,height:18,"stroke-width":2,class:"stroke-gray-400 transition-all"})]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":_[3]||(_[3]=N=>c.value=N),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,c.value]])])]),e.createElementVNode("button",{onClick:V,class:"justify-self-end border p-2 rounded-lg w-fit text-sm bg-stone-100/50 hover:bg-white hover:shadow-sm transition-colors"}," Експорт ")]),l.value?(e.openBlock(),e.createBlock(Si,{key:0,"classifier-name":r.value,"edit-data":s.value,onClose:x,onCreated:C},null,8,["classifier-name","edit-data"])):e.createCommentVNode("",!0),e.createVNode(hi,{ref_key:"detailsTableRef",ref:i,"classifier-name":r.value,search:c.value,onEdit:b},null,8,["classifier-name","search"])]))}}),Yi={class:"flex-col justify-between h-full"},Gi={class:"classifiers-component space-y-6 p-8 pt-2 max-w-[90%] mx-auto h-[calc(100vh-95px)]"},Ki=e.defineComponent({__name:"index",setup(t){const n=Oe.useRoute(),o=e.ref(""),r=e.ref(""),l=e.ref(null),s=e.ref({filtered:0,total:0}),i=u=>{s.value=u},c=()=>{var u;(u=l.value)==null||u.refetch()};return(u,d)=>(e.openBlock(),e.createElementBlock("div",Yi,[e.createElementVNode("div",Gi,[e.unref(n).params.name?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(ni,{key:0,modelValue:o.value,"onUpdate:modelValue":d[0]||(d[0]=y=>o.value=y),filter:r.value,"onUpdate:filter":d[1]||(d[1]=y=>r.value=y),counts:s.value,onRefresh:c},null,8,["modelValue","filter","counts"])),e.unref(n).params.name?(e.openBlock(),e.createBlock(Wi,{key:2})):(e.openBlock(),e.createBlock(Ms,{key:1,ref_key:"gridRef",ref:l,search:o.value,type:r.value,"onUpdate:counts":i},null,8,["search","type"]))]),d[2]||(d[2]=e.createElementVNode("div",{id:"pagination",class:"bg-gray-100"},null,-1))]))}}),Zi={class:"border border-gray-300 rounded-lg shadow-sm overflow-auto max-h-[calc(100vh-10rem)]"},Xi={class:"w-full bg-white relative"},Ji={class:"bg-gradient-to-b from-gray-50 to-gray-100 border-b border-gray-300 sticky top-0 z-10"},Qi={key:0,class:"bg-white divide-y divide-gray-200"},ec={class:"bg-gradient-to-r from-gray-50 to-gray-100 border-t-2 border-gray-300"},tc=["onClick"],nc={class:"flex items-center gap-2 text-sm font-semibold text-gray-900 hover:text-blue-600 transition-colors"},oc={key:1,class:"px-6 py-3.5"},rc={class:"text-sm font-semibold text-gray-900"},lc={class:"text-xs text-gray-400 mt-0.5"},ac={key:0,class:"inline-flex items-center cursor-pointer"},sc={class:"relative"},ic=["checked","onChange"],cc=["checked","onChange"],dc={class:"px-6 py-3"},uc={class:"ml-6"},fc={class:"text-sm text-black font-medium"},mc={class:"text-xs text-gray-400 mt-0.5"},pc=["checked","onChange"],gc={key:1},yc=e.defineComponent({__name:"permissions",props:{data:{},modelValue:{},actions:{}},emits:["update:modelValue"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=e.computed(()=>r.actions&&r.actions.length?r.actions:["view"]),i=e.ref({}),c=e.ref({}),u=e.computed(()=>{var x;return((x=r.data)==null?void 0:x.routers)||[]});e.watch(()=>r.modelValue,x=>{const C={};(x||[]).forEach(V=>{C[V.id]=new Set(V.actions||[])}),c.value=C},{immediate:!0});function d(){const x=Object.entries(c.value).map(([C,V])=>({id:C,actions:Array.from(V)}));l("update:modelValue",x)}function y(x){return x?x.id||x.path||x.table||x.ua||JSON.stringify(x):""}function a(x){return x?x.id||x.ua||x.name:""}function m(x){return{view:"Перегляд",edit:"Редагування",add:"Додавання",del:"Видалення"}[x]||x}function f(x,C){var E;const V=y(x);return((E=c.value[V])==null?void 0:E.has(C))||!1}function p(x){const C=a(x);return i.value[C]===!0}function k(x){const C=a(x);i.value[C]=!p(x)}function h(x,C){var V;return(V=x.menu)!=null&&V.length?x.menu.every(E=>f(E,C)):f(x,C)}function g(x,C,V){var E;if((E=x.menu)!=null&&E.length){const _={...c.value};x.menu.forEach(N=>{const T=y(N),Y=new Set(_[T]||[]);V?Y.add(C):Y.delete(C),_[T]=Y}),c.value=_,d()}}function b(x,C,V){const E=y(x),_=new Set(c.value[E]||[]);V?_.add(C):_.delete(C),c.value={...c.value,[E]:_},d()}return n({getSelected:()=>r.modelValue}),(x,C)=>{var V;return e.openBlock(),e.createElementBlock("div",Zi,[e.createElementVNode("table",Xi,[e.createElementVNode("thead",Ji,[e.createElementVNode("tr",null,[C[0]||(C[0]=e.createElementVNode("th",{class:"px-6 py-4 text-xs font-semibold text-gray-800 uppercase tracking-wider w-32 text-left"},"Групи",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,E=>(e.openBlock(),e.createElementBlock("th",{key:E,class:"px-4 py-4 text-xs font-semibold text-gray-800 uppercase tracking-wider w-20 text-center"},e.toDisplayString(m(E)),1))),128))])]),(V=u.value)!=null&&V.length?(e.openBlock(),e.createElementBlock("tbody",Qi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,E=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:y(E)},[e.createElementVNode("tr",ec,[E!=null&&E.menu?(e.openBlock(),e.createElementBlock("td",{key:0,class:"px-6 py-3.5 cursor-pointer",onClick:_=>k(E)},[e.createElementVNode("button",nc,[e.createVNode(e.unref(ye.ChevronDown),{class:e.normalizeClass(["text-gray-600 w-4 h-4 transition-transform duration-200",{"rotate-180":p(E)}])},null,8,["class"]),e.createTextVNode(" "+e.toDisplayString(E.ua),1)])],8,tc)):(e.openBlock(),e.createElementBlock("td",oc,[e.createElementVNode("div",rc,e.toDisplayString(E.ua),1),e.createElementVNode("div",lc,e.toDisplayString(E.path||E.table),1)])),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,_=>(e.openBlock(),e.createElementBlock("td",{key:_,class:"px-4 py-3.5 text-center"},[E!=null&&E.menu?(e.openBlock(),e.createElementBlock("label",ac,[e.createElementVNode("div",sc,[e.createElementVNode("input",{type:"checkbox",class:"sr-only peer",checked:h(E,_),onChange:N=>g(E,_,N.target.checked)},null,40,ic),C[1]||(C[1]=e.createElementVNode("div",{class:"w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-blue-600"},null,-1))])])):(e.openBlock(),e.createElementBlock("input",{key:1,type:"checkbox",checked:f(E,_),onChange:N=>b(E,_,N.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,cc))]))),128))]),E!=null&&E.menu&&p(E)?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(E.menu,_=>(e.openBlock(),e.createElementBlock("tr",{key:y(_),class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",dc,[e.createElementVNode("div",uc,[e.createElementVNode("div",fc,e.toDisplayString(_.ua),1),e.createElementVNode("div",mc,e.toDisplayString(_.path||_.table),1)])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,N=>(e.openBlock(),e.createElementBlock("td",{key:N,class:"px-5 py-3 text-center"},[e.createElementVNode("input",{type:"checkbox",checked:f(_,N),onChange:T=>b(_,N,T.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,pc)]))),128))]))),128)):e.createCommentVNode("",!0)],64))),128))])):(e.openBlock(),e.createElementBlock("tfoot",gc,[...C[2]||(C[2]=[e.createElementVNode("tr",null,[e.createElementVNode("td",{colspan:"100%",class:"text-center py-4"}," Немає доступних шарів ")],-1)])]))])])}}}),hc={class:"flex flex-col gap-4 mt-2 mx-2"},bc={class:"flex items-center gap-3"},xc={class:"flex-1 relative"},kc=e.defineComponent({__name:"VsPermissions",setup(t){const n=Oe.useRoute(),o=e.ref(""),r=e.ref(null),l=e.ref({categories:[],layers:[]}),s=e.ref([]),i=e.ref(["edit"]),c=e.computed(()=>d(l.value)),u=e.computed(()=>{const m=o.value.toLowerCase().trim();return m?c.value.map(f=>{const p=String(f.ua||"").toLowerCase().includes(m),k=(f.menu||[]).filter(h=>String(h.ua||"").toLowerCase().includes(m));return p?{...f,menu:f.menu}:k.length?{...f,menu:k}:null}).filter(Boolean):c.value}),d=m=>{const f=m.categories||[],p=m.layers||[],k=f.map(g=>{const b=p.filter(x=>x.category_id===g.category_id).map(x=>({id:String(x.layer_id),ua:x.name,path:String(x.layer_id)}));return b.length?{ua:g.name,menu:b,id:String(g.category_id)}:null}).filter(Boolean),h=p.filter(g=>!g.category_id).map(g=>({ua:g.name,id:String(g.layer_id),path:String(g.layer_id)}));return h.length&&k.push({ua:"Без категорії",menu:h,id:"noCategory"}),k},y=async()=>{const[m,f]=await Promise.all([fetch("/api/catalog").then(p=>p.json()),fetch(`/api/catalog-permissions/${n.params.id}`).then(p=>p.json())]);l.value=m,s.value=((f==null?void 0:f.layer_list)||[]).filter(p=>p.service_id).map(p=>({id:String(p.service_id),actions:p.actions||[]}))},a=async()=>{var p,k;const f=(((k=(p=r.value)==null?void 0:p.getSelected)==null?void 0:k.call(p))||s.value).filter(h=>{var g;return(g=h.actions)==null?void 0:g.length}).map(h=>({service_id:h.id,actions:h.actions}));await fetch(`/api/catalog-permissions/${n.params.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(f)}).then(h=>h.json()).then(h=>{Ee.notify({title:"Успіх",message:"Доступ успішно збережено",type:"success"})}).catch(h=>{Ee.notify({title:"Помилка",message:h.message,type:"error"})})};return e.onMounted(y),(m,f)=>(e.openBlock(),e.createElementBlock("div",hc,[e.createElementVNode("div",bc,[e.createElementVNode("div",xc,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":f[0]||(f[0]=p=>o.value=p),type:"text",placeholder:"Пошук...",class:"w-full pl-3 pr-4 py-2 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"},null,512),[[e.vModelText,o.value]])]),e.createElementVNode("button",{class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border bg-background hover:text-accent-foreground h-10 px-4 py-2 border-gray-300 text-gray-700 hover:bg-gray-50",onClick:f[1]||(f[1]=p=>m.$router.back())}," Повернутися "),e.createElementVNode("button",{class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-white rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 text-primary-foreground h-10 px-4 py-2 bg-blue-600 hover:bg-blue-700",onClick:a}," Зберегти ")]),e.createVNode(yc,{ref_key:"accessRef",ref:r,data:{routers:u.value},modelValue:s.value,"onUpdate:modelValue":f[2]||(f[2]=p=>s.value=p),actions:i.value},null,8,["data","modelValue","actions"])]))}});function Xt(t){if(t==null)return null;const n=Number(typeof t=="string"?t.trim():t);return Number.isFinite(n)?n:null}function It(t){if(!t)return null;if(Array.isArray(t)&&t.length>=2){const n=Xt(t[0]),o=Xt(t[1]);return n!=null&&o!=null?[n,o]:null}if(typeof t=="object"){const n=t;if(Array.isArray(n.coordinates))return It(n.coordinates);const o=n.lng??n.lon??n.long??n.longitude??n.x,r=n.lat??n.latitude??n.y;if(o!=null&&r!=null){const l=Xt(o),s=Xt(r);if(l!=null&&s!=null)return[l,s]}}if(typeof t=="string"&&t.includes(",")){const[n,o]=t.split(","),r=Xt(n),l=Xt(o);return r!=null&&l!=null?[r,l]:null}return null}const ll=Symbol("MapContext");function wc(t){const n=e.shallowRef(null),o=e.ref(!1);let r=!1;const l=[],s=()=>{r=!0,l.length&&l.forEach(f=>f())},i=()=>{const f=t.container;return typeof f=="string"?document.getElementById(f):(f==null?void 0:f.value)!==void 0?f.value:f},c=()=>r?Promise.resolve():new Promise(f=>l.push(f)),u=(f,p)=>{if(f==null)return p;const k=Number(typeof f=="string"?f.trim():f);return Number.isFinite(k)?k:p},d=f=>{if(!n.value||!f)return;const p=It(f.center);p&&n.value.setCenter(p);const k=n.value.getZoom(),h=u(f.zoom,k);if(h!==k&&n.value.setZoom(h),typeof n.value.getMaxZoom=="function"&&typeof n.value.setMaxZoom=="function"){const g=n.value.getMaxZoom(),b=u(f.maxZoom,g);b!==g&&n.value.setMaxZoom(b)}if(typeof n.value.getMinZoom=="function"&&typeof n.value.setMinZoom=="function"){const g=n.value.getMinZoom(),b=u(f.minZoom,g);b!==g&&n.value.setMinZoom(b)}f.bounds&&n.value.fitBounds(f.bounds,{animate:!1})},y=async()=>{var C,V,E,_,N,T,Y;if(typeof window>"u"||n.value)return;const f=i();if(!f)throw new Error("Map container not found");const p=e.unref(t.settings)||null,k=It((C=p==null?void 0:p.map)==null?void 0:C.center)||[30,50],h=u((V=p==null?void 0:p.map)==null?void 0:V.zoom,7),g=u((E=p==null?void 0:p.map)==null?void 0:E.maxZoom,20),x={...{attributionControl:!1,center:k,zoom:h,maxZoom:g,minZoom:4},...t.mapOptions||{},container:f};x.maxZoom==null&&(x.maxZoom=g),n.value=new maplibregl.Map(x),(_=t.controls)!=null&&_.navigation&&(n.value.addControl(new maplibregl.NavigationControl(typeof t.controls.navigation=="object"?t.controls.navigation:{}),"top-right"),n.value.once("load",()=>{var ae;const ee=n.value.getContainer(),R=(ae=ee==null?void 0:ee.querySelector)==null?void 0:ae.call(ee,".maplibregl-ctrl-compass, .mapboxgl-ctrl-compass");R&&typeof n.value.easeTo=="function"&&R.addEventListener("click",ue=>{ue.preventDefault(),ue.stopPropagation(),n.value.easeTo({bearing:0,pitch:0})},!0)})),(N=t.controls)!=null&&N.scale&&n.value.addControl(new maplibregl.ScaleControl(typeof t.controls.scale=="object"?t.controls.scale:{}),"bottom-left"),(T=t.controls)!=null&&T.fullscreen&&n.value.addControl(new maplibregl.FullscreenControl,"top-right"),(Y=t.controls)!=null&&Y.geolocate&&n.value.addControl(new maplibregl.GeolocateControl(typeof t.controls.geolocate=="object"?t.controls.geolocate:{}),"top-right"),n.value.once("load",()=>{var ee;d((ee=e.unref(t.settings))==null?void 0:ee.map),o.value=!0,s()})};e.watch(()=>{var f;return(f=e.unref(t.settings))==null?void 0:f.map},f=>{d(f)},{deep:!0});const a=()=>{n.value&&(n.value.remove(),n.value=null,o.value=!1)};e.onMounted(y),e.onUnmounted(a);const m={map:n,ready:c,flyTo:f=>{var p;return(p=n.value)==null?void 0:p.flyTo(f)},fitBounds:(f,p)=>{var k;return(k=n.value)==null?void 0:k.fitBounds(f,p)},setCenter:f=>{var p;return(p=n.value)==null?void 0:p.setCenter(f)},setZoom:f=>{var p;return(p=n.value)==null?void 0:p.setZoom(f)},addControl:(f,p)=>{var k;return(k=n.value)==null?void 0:k.addControl(f,p)},removeControl:f=>{var p;return(p=n.value)==null?void 0:p.removeControl(f)},on:(f,p,k)=>{var h,g;return typeof p=="string"?((h=n.value)==null||h.on(f,p,k),()=>{var b;return(b=n.value)==null?void 0:b.off(f,p,k)}):((g=n.value)==null||g.on(f,p),()=>{var b;return(b=n.value)==null?void 0:b.off(f,p)})},off:(f,p,k)=>{var h,g;typeof p=="string"?(h=n.value)==null||h.off(f,p,k):(g=n.value)==null||g.off(f,p)},project:f=>{var p;return(p=n.value)==null?void 0:p.project(f)},unproject:f=>{var p;return(p=n.value)==null?void 0:p.unproject(f)}};return e.provide(ll,m),m}function Qe(t){if(t)return{map:t,flyTo:t.value.flyTo,fitBounds:t.value.fitBounds};const n=e.inject(ll);if(!n)throw new Error("useMap() called outside of a Map provider");return n}const al=Symbol.for("gis.settingsRef");function Oo(){const t=e.getCurrentInstance();if(!t)return e.ref(null);const n=t.appContext.config.globalProperties;let o=n[al];return o||(o=e.ref(n.$settings??null),Object.defineProperty(n,"$settings",{configurable:!0,enumerable:!0,get:()=>o.value,set:r=>{o.value=r}}),n[al]=o),o}const _c={class:""},Zn=Ae(e.defineComponent({__name:"MapView",setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),l=e.ref(null),s=Oo(),i=wc({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},doubleClickZoom:!1,canvasContextAttributes:{preserveDrawingBuffer:!0}},controls:{navigation:!1,scale:!0},settings:s});async function c(){var a;await e.nextTick();const y=(a=i.map)==null?void 0:a.value;y!=null&&y.resize&&y.resize()}function u(){typeof ResizeObserver>"u"||l.value||!r.value||(l.value=new ResizeObserver(()=>{c()}),l.value.observe(r.value))}function d(){var y;(y=l.value)==null||y.disconnect(),l.value=null}return e.onMounted(()=>{c(),u(),window.addEventListener("resize",c)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",c),d()}),n({ctx:i}),(y,a)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"wrapper",ref:r,class:"map-view-root w-full h-full rounded-xl overflow-hidden"},[e.createElementVNode("div",{ref_key:"el",ref:o,class:"map-view-canvas"},null,512),e.createElementVNode("div",_c,[e.renderSlot(y.$slots,"default",{},void 0,!0)])],512))}}),[["__scopeId","data-v-88c21b5f"]]),Ec=["Noto Sans Regular"],Cc=12,Nc="#0f172a",Vc="#fff",$c=14;function ot(t,n){if(!t)return;for(const r of n)if(Object.prototype.hasOwnProperty.call(t,r)&&t[r]!==void 0)return t[r];const o=t.text;if(o&&typeof o=="object"){for(const r of n)if(Object.prototype.hasOwnProperty.call(o,r)&&o[r]!==void 0)return o[r]}}function Bc(t){return t?Array.isArray(t)?t:[t]:Ec}function Uo(t,n){if(typeof t=="number")return Number.isFinite(t)?t:n;if(t==null||t==="")return n;const o=Number(t);return Number.isFinite(o)?o:n}function Sc(t){if(t==null)return null;if(Array.isArray(t))return t;const n=String(t).trim(),o=n.match(/^\{([^{}]+)\}$/);return o?["get",o[1]]:n}function vc(t,n){const o=[];if(t!=null&&o.push(t),n&&o.push(["!",["has","point_count"]]),!!o.length)return o.length===1?o[0]:["all",...o]}function Lc(t,n={}){if(!t)return[];const o=ot(t,["text-field","textField","textFieldValue","labelText","label"]);if(!o)return[];const r=Sc(o);if(!r)return[];const l=r,s=(n.geometry||t.type||"point").toString().toLowerCase(),i=ot(t,["text-font","textFont"]),c=Uo(ot(t,["text-size","textSize"]),Cc),u=ot(t,["text-allow-overlap","textAllowOverlap"]),d=ot(t,["text-minzoom","textMinZoom","textZoom","text-zoom"]),y=ot(t,["text-maxzoom","textMaxZoom","maxzoom"]),a=ot(t,["text-color","textColor"])||Nc,m=ot(t,["text-halo-color","textHaloColor"])||Vc,f=ot(t,["text-halo-width","textHaloWidth"]),p=ot(t,["text-halo-blur","textHaloBlur"]),k=ot(t,["text-offset","textOffset"]),h=ot(t,["text-anchor","textAnchor"]),g=ot(t,["text-justify","textJustify"]),b=ot(t,["text-letter-spacing","textLetterSpacing"]),x=ot(t,["text-transform","textTransform"]),C=ot(t,["symbol-placement","symbolPlacement"]),V=ot(t,["symbol-spacing","symbolSpacing"]),E=ot(t,["text-rotation-alignment","textRotationAlignment"]),_=ot(t,["text-pitch-alignment","textPitchAlignment"]),N=ot(t,["text-opacity","textOpacity"]),T={"text-field":l,"text-font":Bc(i),"text-size":c,"text-allow-overlap":u??!1};k&&(T["text-offset"]=k),s!=="line"&&(T["text-anchor"]=h??"center"),g&&(T["text-justify"]=g),b!==void 0&&(T["text-letter-spacing"]=b),x&&(T["text-transform"]=x),V!==void 0&&(T["symbol-spacing"]=V),s==="line"?(T["symbol-placement"]=C||"line",T["text-rotation-alignment"]=E||"map",T["text-pitch-alignment"]=_||"map"):(E&&(T["text-rotation-alignment"]=E),_&&(T["text-pitch-alignment"]=_),C&&(T["symbol-placement"]=C)),h&&s==="line"&&(T["text-anchor"]=h);const Y={"text-color":a,"text-opacity":N??1};Y["text-halo-color"]=m,f!==void 0&&(Y["text-halo-width"]=f),p!==void 0&&(Y["text-halo-blur"]=p);const ee={type:"symbol",layout:T,paint:Y},R=Uo(d,$c);if(ee.minzoom=R,y!==void 0){const ue=Uo(y,void 0);ue!==void 0&&(ee.maxzoom=ue)}const ae=vc(n.filter,n.excludeClusters);return ae&&(ee.filter=ae),[ee]}const bt="#9ca3af";function qo(t){return!t||typeof t!="object"||Array.isArray(t)?null:{...t}}const sl=new WeakMap,Tc={};function Ac(t){if(!t||t.__layerStoreMode!=="isolated")return Tc;const n=sl.get(t);if(n)return n;const o={};return sl.set(t,o),o}function Ho(t){if(t.colorAttr&&t.colors){const n=Object.entries(t.colors).flat();return["match",["get",t.colorAttr],...n,bt]}return null}function Xn(t){return/^(https?:|data:|blob:)/i.test(t)||t.startsWith("/")||t.startsWith("./")||t.startsWith("../")||t.includes("/")&&/\.(svg|png|jpe?g|gif|webp)(?:[?#].*)?$/i.test(t)}function Mc(t){return Xn(t)?t:`/api/gis-icon/${t}`}function Wo(t){return/\.svg(?:[?#].*)?$/i.test(t)||/^data:image\/svg\+xml/i.test(t)}function Jn(t,n){return n?`${t}__${String(n).replace("#","")}`:t}function Fc(t,n){return t.replace(/currentColor/gi,n).replace(/\bfill=(['"])([^'"]+)\1/gi,(o,r,l)=>/^(none|currentColor|url\()/i.test(l)?o:`fill=${r}${n}${r}`).replace(/\bstroke=(['"])([^'"]+)\1/gi,(o,r,l)=>/^(none|currentColor|url\()/i.test(l)?o:`stroke=${r}${n}${r}`)}async function Dc(t,n){const o=await fetch(t);if(!o.ok)throw new Error(`Failed to fetch SVG image: ${t}`);const r=await o.text(),l=n?Fc(r,n):r,s=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(l)}`;return il(s)}function il(t){return new Promise((n,o)=>{const r=new Image;r.crossOrigin="anonymous",r.onload=()=>n(r),r.onerror=()=>o(new Error(`Failed to load image: ${t}`)),r.src=t})}function Pc(t){const n=t.iconSet&&typeof t.iconSet=="object"?t.iconSet:null,o=t.colors&&typeof t.colors=="object"?Object.entries(t.colors):[],r=!!(t.colorAttr&&o.length),l=c=>{if(!r)return c;const u=o.flatMap(([d,y])=>[d,Jn(c,y)]);return["match",["get",t.colorAttr],...u,Jn(c,bt)]};if(t.iconAttr&&n){const c=Object.entries(n).flatMap(([u,d])=>{if(r&&typeof d=="string"){const y=t.colors[u];return[u,Jn(d,typeof y=="string"?y:bt)]}return[u,d]});return["match",["get",t.iconAttr],...c,r&&t.icon?l(t.icon):t.icon||Object.values(n)[0]]}if(!t.icon||!t.colors)return null;if(Xn(t.icon))return l(t.icon);const s=[],i=t.icon.split("+")[0];return Object.values(t.colors).forEach(c=>{s.push(`${i}+${c.replace("#","")}.png`)}),["match",["get",t.colorAttr],...Object.entries(t.colors).reduce((c,[u,d],y)=>c.concat([u,s[y]]),[]),t.icon]}function Jt(t,n){n&&(Array.isArray(n)?t.push(...n):t.push(n))}function zc(t,n){const o=(t==null?void 0:t.clusterZoom)??(t==null?void 0:t.pointZoom)??(t==null?void 0:t.iconZoom)??12,r=Number(o);if(!Number.isFinite(r))return null;const l=["get","point_count"],s=["has","point_count"],i=["!",s],d={type:"circle",maxzoom:r,filter:s,paint:{"circle-color":["step",l,"#3b82f6",10,"#fde047",100,"#fbbf24",1e3,"#fda4af",1e4,"#fb7185",1e6,"#a21caf"],"circle-radius":["step",l,16,10,22,100,28,1e3,34,1e4,40,1e6,48],"circle-stroke-color":"#fff","circle-stroke-width":1}},y={type:"symbol",maxzoom:r,filter:s,layout:{"text-field":["to-string",["coalesce",["get","point_count_abbreviated"],l]],"text-font":["Noto Sans Regular"],"text-size":12,"text-allow-overlap":!0},paint:{"text-color":"#fff","text-halo-color":"#172554","text-halo-width":1.25}},a={...n,filter:["all",i,n.filter||!0]};return[d,y,a]}function cl(t,n){const o=Ho(t);if(t.icon&&!t.iconZoom&&!t.clusterZoom)return;const r={type:"circle",maxzoom:n||t.iconZoom||22,paint:{"circle-stroke-color":(t==null?void 0:t.stroke)||"#fff","circle-opacity":t.opacity||1,"circle-color":o||t.color||bt,"circle-stroke-width":t.width||1,"circle-radius":t.radius||5}},l=zc(t,r);return l||r}function Ic(t){const n=Ho(t);return{type:"fill",minzoom:t.pointZoom||0,paint:{"fill-color":n||t.color||bt,"fill-opacity":t.opacity||.3,"fill-outline-color":t.stroke||bt}}}function jc(t){return{type:"line",paint:{"line-color":Ho(t)||t.color||bt,"line-opacity":t.opacity||1,"line-width":t.width||1.5}}}function Rc(t){const n=Pc(t);return{type:"symbol",minzoom:t.iconZoom||0,layout:{"icon-image":n||t.icon,"icon-size":1,"icon-allow-overlap":!0,"icon-ignore-placement":!0}}}function dl(t,n={}){if(!t)return[];if(!Oc(t))return[];const o=[];t.icon&&Jt(o,Rc(t)),t.pointZoom&&Jt(o,cl(t,t.pointZoom)),t.type==="polygon"?Jt(o,Ic(t)):t.type==="line"?Jt(o,jc(t)):Jt(o,cl(t));const l=n.sourceType!=="raster"?Lc(t,{geometry:t.type||"point",filter:t.filter,excludeClusters:!!t.clusterZoom}):[];return Jt(o,l),o.filter(Boolean)}function Oc(t){return t?!!(new Set(["point","line","polygon"]).has(t.type)||t.icon||t.attrType||t.color||t.stroke||t.radius||t.width||t.colorAttr&&t.colors&&typeof t.colors=="object"&&Object.keys(t.colors).length>0):!1}function ul(t,{sourceType:n,filter:o,allowFallback:r=!1}={}){const l=qo(t);if(l&&o&&(l.filter=o),l)return dl(l,{sourceType:n});if(r&&["vector","geojson"].includes(n||"")){const s={type:"point",color:bt};return o&&(s.filter=o),dl(s,{sourceType:n})}return[]}function Uc(t){return{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:t}}]}}}function Yo(t){if(typeof t!="string")return t;const n=t.trim();if(!n)return"";if(n==="null")return null;if(n==="true")return!0;if(n==="false")return!1;const o=Number(n);return Number.isFinite(o)&&n!==""?o:n}function hn(t){if(t==null)return!0;if(Array.isArray(t))return t.length===0;if(typeof t!="string")return!1;const n=t.trim();return n===""||n==="[]"}function qc(t){if(t==null)return null;if(Array.isArray(t))return t;if(typeof t=="object"){const l=Object.entries(t).filter(([,i])=>!hn(i));if(!l.length)return null;const s=l.map(([i,c])=>{if(Array.isArray(c)){const d=c.map(y=>Yo(y)).filter(y=>!hn(y));return d.length?["in",["get",i],["literal",d]]:null}const u=Yo(c);return hn(u)?null:["==",["get",i],u]}).filter(Boolean);return s.length?s.length===1?s[0]:["all",...s]:null}if(typeof t!="string")return null;const n=t.trim();if(!n)return null;const o=n.split("|").map(l=>l.trim()).filter(Boolean);if(!o.length)return null;const r=o.map(l=>{const s=l.indexOf("=");if(s<=0)return null;const i=l.slice(0,s).trim(),c=l.slice(s+1).trim();if(!i||hn(c))return null;const u=c.split(",").map(d=>Yo(d)).filter(d=>!hn(d));return u.length?u.length>1?["in",["get",i],["literal",u]]:["==",["get",i],u[0]]:null}).filter(Boolean);return r.length?r.length===1?r[0]:["all",...r]:null}function Hc(t,n){return n?!t||t===!0?n:Array.isArray(t)&&t[0]==="all"?[...t,n]:["all",t,n]:t??null}async function fl(t,n){var c;const o=new Set,r=new Map,l=n!=null&&n.colors&&typeof n.colors=="object"?Object.entries(n.colors):[],s=!!(n!=null&&n.colorAttr&&l.length),i=(u,d)=>{const y=Jn(u,d);o.add(y),d&&r.set(y,d)};if(n!=null&&n.icon&&i(n.icon),n!=null&&n.iconSet&&typeof n.iconSet=="object"&&Object.values(n.iconSet).forEach(u=>{if(!(typeof u!="string"||!u.trim())){if(!s){i(u);return}if(Wo(u)){l.forEach(([,d])=>{i(u,String(d))}),i(u,bt);return}i(u),l.forEach(([,d])=>{i(u,String(d))})}}),n!=null&&n.icon&&(n!=null&&n.colors)&&!Xn(n.icon)){const u=n.icon.split("+")[0];Object.values(n.colors||{}).forEach(d=>{o.add(`${u}+${String(d).replace("#","")}.png`)})}n!=null&&n.icon&&(n!=null&&n.colors)&&Xn(n.icon)&&Wo(String(n.icon))&&(Object.values(n.colors||{}).forEach(u=>{i(n.icon,String(u))}),i(n.icon,bt)),await Promise.allSettled(Array.from(o).map(async u=>{if(t.getImage(u))return;const d=r.get(u)||null,y=u.split("__")[0],a=Mc(y),m=Wo(y)?await Dc(a,d):await il(a);t.addImage(u,m)})),(c=t.triggerRepaint)==null||c.call(t)}function Ie(t,n,o){var J;const r=Ac(o);if(!t)return r;if(!n)return r[t];const{map:l,ready:s=()=>Promise.resolve()}=Qe(o),i=t||((J=n.layer)==null?void 0:J.id),c=n.sourceId??t;function u(S){var M;const F={...S};return F.point&&(F.source=Uc(F.point)),!F.layer&&((M=F.source)==null?void 0:M.type)==="raster"&&(F.layer={id:c,type:"raster",source:c}),F.layer&&!F.layer.source&&Object.assign(F.layer,{source:c}),F}let d=u({...n}),y=!1,a=!1;const m=new Map,f=(S=!0)=>{var M,B,j;if(!l.value)return;(((j=(B=(M=l.value).getStyle)==null?void 0:B.call(M))==null?void 0:j.layers)??[]).filter(X=>X.source===i).forEach(X=>{l.value.removeLayer(X.id)}),d.source&&S&&l.value.getSource(c)&&l.value.removeSource(c)},p=async()=>{var S,F,M,B,j,X,he,Z,P,q,H,re;if(!(a||!l.value)){if(d.source&&!l.value.getSource(c)&&l.value.addSource(c,d.source),!l.value.getLayer(i)){const I=d.beforeId===0?(F=(S=l.value.getStyle().layers)==null?void 0:S[0])==null?void 0:F.id:d.beforeId;((B=(M=d.layer)==null?void 0:M.style)!=null&&B.icon||(X=(j=d.layer)==null?void 0:j.style)!=null&&X.iconSet)&&await fl(l.value,d.layer.style);const le=((he=d.source)==null?void 0:he.type)||((Z=d.layer)==null?void 0:Z.type),me=d.layer&&(d.layer.type||d.layer.ref)?d.layer:null,be=(P=d.layer)==null?void 0:P.style,A=((q=d.layer)==null?void 0:q["source-layer"])||((H=d.source)==null?void 0:H["source-layer"])||d.sourceLayer||c,K=d.style||be,fe=ul(K,{sourceType:le,filter:(re=d.layer)==null?void 0:re.filter,allowFallback:!me});if(!fe.length){if(me){const ie={...me,id:me.id||i,source:me.source||c};le==="vector"&&A&&(ie["source-layer"]=ie["source-layer"]||A),l.value.addLayer(ie,I),m.set(ie.id,ie.filter??null)}return}fe.forEach((ie,de)=>{const pe={...ie,id:`${i}${de||""}`,source:c};le==="vector"&&A&&(pe["source-layer"]=A),l.value.addLayer(pe,I),m.set(pe.id,pe.filter??null)})}y=!0}};s().then(p);const k=(S,F)=>l.value?(l.value.on(S,i,F),()=>{var M;return(M=l.value)==null?void 0:M.off(S,i,F)}):()=>{},h=S=>{const F=l.value;if(!F)return;const M=F.getStyle(),B=M==null?void 0:M.layers;if(!(B!=null&&B.length))return;const j=S?"visible":"none";B.filter(X=>X.source===c||X.id===i||typeof X.id=="string"&&X.id.startsWith(String(i))).forEach(X=>{F.setLayoutProperty(X.id,"visibility",j)})},g=(S=!0)=>{l.value&&(f(S),a=!0)},b=async S=>{S&&(d=u({...S}),ue.opts=d,ue.card=d.card,ue.popup=d.popup),!a&&(y=!1,f(!0),await s(),await p())},x=async S=>{var j,X,he,Z,P;if(!l.value)return;(S!=null&&S.icon||S!=null&&S.iconSet)&&await fl(l.value,S);const F=((j=d.source)==null?void 0:j.type)||((X=d.layer)==null?void 0:X.type),M=((he=d.layer)==null?void 0:he["source-layer"])||((Z=d.source)==null?void 0:Z["source-layer"])||d.sourceLayer||c,B=ul(S,{sourceType:F,filter:(P=d.layer)==null?void 0:P.filter,allowFallback:!0});f(!1),B.forEach((q,H)=>{var I;const re={...q,id:`${i}${H}`,source:((I=d.layer)==null?void 0:I.source)||c};F==="vector"&&M&&(re["source-layer"]=re["source-layer"]||M),l.value.addLayer(re)}),y=!0},C=S=>{l.value&&Object.entries(S).forEach(([F,M])=>{l.value.setPaintProperty(i,F,M)})},V=(S,F,M)=>{const B=l.value;if(B)switch(F){case"raster":B.setPaintProperty(S,"raster-opacity",M);break;case"fill":B.setPaintProperty(S,"fill-opacity",M);break;case"line":B.setPaintProperty(S,"line-opacity",M);break;case"circle":B.setPaintProperty(S,"circle-opacity",M);break;case"symbol":B.setPaintProperty(S,"icon-opacity",M),B.setPaintProperty(S,"text-opacity",M);break}},ue={ids:{layerId:i,sourceId:c},isMounted:()=>{var S;return y&&!!((S=l.value)!=null&&S.getLayer(i))},setVisible:h,updatePaint:C,updateLayout:S=>{l.value&&Object.entries(S).forEach(([F,M])=>{l.value.setLayoutProperty(i,F,M)})},updateFilter:S=>{l.value&&l.value.setFilter(i,S)},setOpacity:S=>{var B;if(!l.value)return;const M=(((B=l.value.getStyle())==null?void 0:B.layers)||[]).filter(j=>j.source===c);if(!M.length){const j=l.value.getLayer(i);j&&V(i,j.type,S);return}M.forEach(j=>V(j.id,j.type,S))},setData:S=>{if(!l.value)return;const F=l.value.getSource(c);F&&"setData"in F&&F.setData(S)},setTiles:S=>{if(!l.value)return;const F=l.value.getSource(c);F&&"setTiles"in F&&F.setTiles(S)},setStyle:x,setFilter:S=>{var B,j,X,he,Z,P;if(!l.value)return;if(((B=d.source)==null?void 0:B.type)==="geojson"){const q=qc(S);(((he=(X=(j=l.value).getStyle)==null?void 0:X.call(j))==null?void 0:he.layers)??[]).filter(I=>I.source===c).map(I=>I.id).forEach(I=>{const le=m.get(I)??null,me=Hc(le,q);l.value.setFilter(I,me)});return}const M=l.value.getSource(c);if(M&&"setTiles"in M&&((P=(Z=d.source)==null?void 0:Z.tiles)!=null&&P[0])){const q=d.source.tiles[0];M.setTiles([`${q}${q.includes("?")?"&":"?"}filter=${S}`])}},setFeatureState:(S,F)=>{l.value&&l.value.setFeatureState({source:c,...S},F)},removeFeatureState:(S,F)=>{l.value&&l.value.removeFeatureState({source:c,...S},F?{key:F}:void 0)},refresh:b,remove:g,card:d.card,popup:d.popup,opts:d,getSource:()=>{var S;return(S=l.value)==null?void 0:S.getSource(c)},getLayer:()=>{var S;return(S=l.value)==null?void 0:S.getLayer(i)},on:k},oe=()=>{r[t]===ue&&delete r[t]},te=ue.remove;return ue.remove=()=>{oe(),te()},e.getCurrentInstance()&&e.onBeforeUnmount(ue.remove),r[t]=ue,ue}const Wc={class:"flex flex-row gap-x-3 z-10 relative widget"},Yc=["onClick"],Gc=["src","alt"],Qt=e.defineComponent({__name:"BaseMaps",props:{layers:{},defaultLayer:{},title:{}},emits:["state-change"],setup(t,{emit:n}){var Y,ee,R,ae,ue;const o={z:13,x:4790,y:2762},r={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:{}};function l(oe){if(oe)return oe.replace(/{z}/gi,String(o.z)).replace(/{x}/gi,String(o.x)).replace(/{y}/gi,String(o.y))}function s(oe,te){let J=oe||`layers-${Object.keys(te).length}`,S=1;for(;te[J];)J=`${oe}-${S}`,S+=1;return J}function i(oe,te,J){const S=(oe==null?void 0:oe.name)??(oe==null?void 0:oe.title)??`basemap-${te}`,F=((oe==null?void 0:oe.id)??S??`basemap-${te}`).toString().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),M=s(F||`basemap-${te}`,J),B=(oe==null?void 0:oe.preview)||(oe!=null&&oe.url?l(oe.url):void 0);return{id:M,title:S,url:oe==null?void 0:oe.url,preview:B,overlayUrl:oe==null?void 0:oe.overlayUrl}}function c(oe,te,J=r){let S=[];if(Array.isArray(oe)&&oe.length>0?S=oe:oe&&typeof oe=="object"&&Object.keys(oe).length>0?S=Object.values(oe):Array.isArray(te==null?void 0:te.basemaps)&&(S=te.basemaps),!S.length)return J;const F={};return S.forEach((M,B)=>{const j=i(M,B,F);F[j.id]={url:j.url,preview:j.preview,title:j.title,overlayUrl:j.overlayUrl}}),F}function u(oe,te,J=r){const S=c(oe,te,J);return Object.entries(S).map(([F,M])=>({id:F,title:M.title??F,url:M.url,preview:M.preview,overlayUrl:M.overlayUrl}))}const d=t,y=n,a=e.getCurrentInstance(),m=(Y=a==null?void 0:a.appContext.config.globalProperties)==null?void 0:Y.$settings,f=m==null?void 0:m.map,p=Oe.useRoute(),k=Oe.useRouter();function h(){const oe=p==null?void 0:p.query;return!oe||typeof oe!="object"?null:typeof oe.basemap=="string"?oe.basemap:null}const g=e.computed(()=>h()),b=e.computed(()=>c(d.layers,f,r)),x=e.computed(()=>u(d.layers,f,r)),C=e.ref(g.value??Object.keys(b.value)[0]??"gki"),V=Ie("base",{source:{type:"raster",tiles:(ee=b.value[C.value])!=null&&ee.url?[(R=b.value[C.value])==null?void 0:R.url]:[],tileSize:256},layer:{id:"base",type:"raster",source:"base"},beforeId:0}),E=Ie("base-overlay",{source:{type:"raster",tiles:(ae=b.value[C.value])!=null&&ae.overlayUrl?[(ue=b.value[C.value])==null?void 0:ue.overlayUrl]:[],tileSize:256},layer:{id:"base-overlay",type:"raster",source:"base-overlay",layout:{visibility:"none"}}});function _(oe){oe!=null&&oe.url?(V.setVisible(!0),V.setTiles([oe.url])):V.setVisible(!1),oe!=null&&oe.overlayUrl?(E.setVisible(!0),E.setTiles([oe.overlayUrl])):E.setVisible(!1)}function N(){y("state-change",{basemaps:x.value,selectedId:C.value})}function T(oe){b.value[oe]&&(C.value=oe,_(b.value[oe]),N(),typeof window<"u"&&h()!==oe&&k.replace({query:{...p==null?void 0:p.query,basemap:oe}}).catch(()=>{}))}return e.watch(()=>[b.value,g.value],([oe,te])=>{const J=te&&oe[te]?te:C.value;oe[J]?C.value=J:C.value=Object.keys(oe)[0]??J,_(oe[C.value]),N()},{immediate:!0,deep:!0}),e.watch(()=>C.value,()=>{N()}),e.onBeforeUnmount(()=>{}),(oe,te)=>(e.openBlock(),e.createElementBlock("div",Wc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.value,(J,S)=>(e.openBlock(),e.createElementBlock("div",{key:S,onClick:F=>T(S)},[S!=="none"&&J.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",C.value===S?"border-blue-500":"border-gray-200"])},[J.preview?(e.openBlock(),e.createElementBlock("img",{key:0,src:J.preview,alt:J.title,class:"object-cover rounded-lg lg:w-12 lg:h-12 w-8 h-8"},null,8,Gc)):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",C.value===S?"border-blue-500":"border-gray-200"])},[e.createVNode(e.unref(ye.EyeOff),{class:"w-4 h-4 text-gray-500"})],2))],8,Yc))),128))]))}}),Kc={class:"mapLayer-info__inner"},Zc={class:"mapLayer-info__item-label"},Go=Ae(e.defineComponent({__name:"MapLayerInfoPopover",props:{items:{}},setup(t,{expose:n}){const o=t,r=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),l=e.ref(null),s=e.ref(null);let i=null;const c=e.computed(()=>r.open?{position:"absolute",width:"auto",maxWidth:`${Math.min(300,window.innerWidth-24)}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}:{display:"none"});function u(k){if(r.open){m();return}const h=k.currentTarget,g=h==null?void 0:h.closest(".mapLayer-info");if(!g){m();return}l.value=g,r.open=!0,e.nextTick(()=>{d(),f(),requestAnimationFrame(()=>{d()})})}function d(){if(!r.open||!l.value||!s.value)return;const k=l.value.getBoundingClientRect(),h=12,g=window.scrollX+h,b=window.scrollX+window.innerWidth-h,x=window.scrollY+h,C=window.scrollY+window.innerHeight-h,V=s.value.offsetWidth||Math.min(300,window.innerWidth-24),E=s.value.offsetHeight||0;let _=k.left+window.scrollX+(k.width-V)/2;_<g&&(_=g),_+V>b&&(_=Math.max(g,b-V)),r.left=_;let N=k.bottom+window.scrollY+h;N+E>C&&(N=k.top+window.scrollY-E-h,N<x&&(N=Math.max(x,C-E))),N<x&&(N=x),N+E>C&&(N=Math.max(x,C-E)),r.top=N,r.transform="none"}function y(k){var g,b;if(!r.open)return;const h=k.target;(g=l.value)!=null&&g.contains(h)||(b=s.value)!=null&&b.contains(h)||m()}function a(k){k.key==="Escape"&&m()}function m(){p(),r.open=!1,l.value=null,s.value=null}function f(){p(),s.value&&(i=new ResizeObserver(()=>{d()}),i.observe(s.value))}function p(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",y,!0),document.addEventListener("keydown",a),window.addEventListener("scroll",d,!0),window.addEventListener("resize",d)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",y,!0),document.removeEventListener("keydown",a),window.removeEventListener("scroll",d,!0),window.removeEventListener("resize",d),p()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>d())},{deep:!0}),n({close:m}),(k,h)=>(e.openBlock(),e.createElementBlock("div",{class:"mapLayer-info",ref_key:"anchorEl",ref:l},[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"},[r.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(c.value),ref_key:"popoverEl",ref:s,onClick:h[0]||(h[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Kc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,g=>(e.openBlock(),e.createElementBlock("div",{key:g.label,class:"mapLayer-info__item"},[e.createElementVNode("div",Zc,e.toDisplayString(g.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":g.breakLine}])},e.toDisplayString(g.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-cc1cc7bf"]]),Xc={key:0,class:"map-info__title"},Jc={class:"map-info__actions"},Qc={key:0,class:"map-info__menu"},ed=["href"],td=["innerHTML"],ml=Ae(e.defineComponent({__name:"MapInfoWidget",props:{title:{},content:{},links:{},mapName:{},mapDescription:{}},setup(t){const n=t,o=e.ref(null),r=e.ref(!1),l=e.ref(null),s=e.ref(null),i=e.ref({top:0,left:0});Oe.useRouter();const c=e.ref(!0),u=e.ref(!1),d=e.computed(()=>Array.isArray(n.links)?n.links.filter(C=>(C==null?void 0:C.name)&&(C==null?void 0:C.slug)):[]),y=e.computed(()=>({top:`${i.value.top}px`,left:`${i.value.left}px`})),a=e.computed(()=>{const C=[];return n.mapName&&C.push({label:"Назва карти",value:n.mapName}),n.mapDescription&&C.push({label:"Опис",value:n.mapDescription,breakLine:!0}),C});function m(C){return C==null?!1:C.replace(/<[^>]*>/g,"").trim().length>0}const f=e.computed(()=>m(n.content)),p=e.computed(()=>f.value);function k(C){C.stopPropagation(),r.value=!r.value}function h(){const C=l.value;if(!C||!s.value)return;const V=C.getBoundingClientRect(),E=12,_=8,N=window.scrollX+E,T=window.scrollX+window.innerWidth-E,Y=window.scrollY+E,ee=window.scrollY+window.innerHeight-E,R=s.value.offsetWidth||160,ae=s.value.offsetHeight||0;let ue=V.bottom+window.scrollY+_,oe=V.left+window.scrollX;oe+R>T&&(oe=V.right+window.scrollX-R,oe<N&&(oe=N)),oe<N&&(oe=N),ue+ae>ee&&(ue=V.top+window.scrollY-ae-_,ue<Y&&(ue=Math.max(Y,ee-ae))),ue<Y&&(ue=Y),ue+ae>ee&&(ue=Math.max(Y,ee-ae)),i.value={top:ue,left:oe}}function g(C){if(!r.value)return;const V=o.value;if(!V){r.value=!1;return}V.contains(C.target)||(r.value=!1)}e.watch(r,C=>{C?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(){c.value=!c.value}function x(){u.value=window.innerWidth<=768}return e.onMounted(()=>{document.addEventListener("click",g,!0),x(),p.value?u.value&&(c.value=!1):c.value=!1,window.addEventListener("resize",x)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",g,!0),window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h),window.removeEventListener("resize",x)}),(C,V)=>(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||d.value.length||a.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"map-info__header",style:e.normalizeStyle([f.value?"":"padding-bottom: 20px"])},[t.title?(e.openBlock(),e.createElementBlock("h2",Xc,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Jc,[d.value.length?(e.openBlock(),e.createElementBlock("div",Qc,[e.createElementVNode("button",{ref_key:"menuButton",ref:l,type:"button",class:"map-info__menu-button",onClick:k,"aria-label":"Показати посилання"},[...V[1]||(V[1]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e.createElementVNode("path",{d:"M4 12H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 6H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 18H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuPopover",ref:s,class:"vsTailwind vs-popover__content right map-info__popover",style:e.normalizeStyle(y.value),onClick:V[0]||(V[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,E=>(e.openBlock(),e.createElementBlock("a",{key:E.slug||E.name,href:`/maps/${E.slug}`,class:"map-info__popover-link"},e.toDisplayString(E.name),9,ed))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),a.value.length?(e.openBlock(),e.createBlock(Go,{key:1,items:a.value},null,8,["items"])):e.createCommentVNode("",!0),p.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":c.value})},[...V[2]||(V[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),f.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["map-info__content",{"map-info__content--collapsed":!c.value}]),innerHTML:t.content},null,10,td)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-813e24fb"]]),nd=new Set(["Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection"]);function pl(t){if(!t||typeof t!="object")return null;const n=t,o=n.type;return o==="FeatureCollection"&&Array.isArray(n.features)?{type:"FeatureCollection",features:n.features.filter(r=>r==null?void 0:r.geometry)}:o==="Feature"&&n.geometry?{type:"FeatureCollection",features:[n]}:typeof o=="string"&&nd.has(o)?{type:"FeatureCollection",features:[{type:"Feature",geometry:n,properties:{}}]}:null}function od(t){const n=new Set((t.features||[]).map(o=>{var r;return((r=o==null?void 0:o.geometry)==null?void 0:r.type)||""}).filter(Boolean));return[...n].some(o=>o.includes("Polygon"))?"polygon":[...n].some(o=>o.includes("Line"))?"line":"point"}function bn(t,n=[]){if(!t)return n;if(Array.isArray(t))return t.length>=2&&typeof t[0]=="number"&&typeof t[1]=="number"?(n.push([t[0],t[1]]),n):(t.forEach(o=>bn(o,n)),n);if(typeof t=="object"){const o=t;Array.isArray(o.coordinates)&&bn(o.coordinates,n),Array.isArray(o.features)&&o.features.forEach(r=>bn(r==null?void 0:r.geometry,n)),Array.isArray(o.geometries)&&o.geometries.forEach(r=>bn(r,n))}return n}function Ko(t){const n=bn(t);if(!n.length)return null;let o=n[0][0],r=n[0][0],l=n[0][1],s=n[0][1];return n.forEach(([i,c])=>{i<o&&(o=i),i>r&&(r=i),c<l&&(l=c),c>s&&(s=c)}),[[o,l],[r,s]]}const gl=["zip","shp","kml","gml","geojson","json"],rd=[".zip",".shp",".kml",".gml",".geojson",".json"].join(",");function ld(t){const n=t.toLowerCase().split(".");return n.length>1&&n.pop()||""}function yl(t){const n=ld(t.name);return gl.includes(n)}function hl(){return gl.map(t=>t.toUpperCase()).join(", ")}function ad(t){let n="";for(let r=0;r<t.length;r+=32768)n+=String.fromCharCode(...t.subarray(r,r+32768));return btoa(n)}async function sd(t){const n=await t.arrayBuffer();return ad(new Uint8Array(n))}async function id(t,n){if(t.size>52428800)throw new Error("Максимальний розмір файлу — 50MB");if(!yl(t))throw new Error(`Підтримуються формати: ${hl()}`);const r=await sd(t),l=await fetch("/api/gis-convert",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({file:r,filename:t.name,srid:Number(n)})}),s=await l.json().catch(()=>null);if(!l.ok)throw new Error((s==null?void 0:s.error)||`Помилка обробки файлу (${l.status})`);return s}const gt=e.ref([]);function cd(t,n){return typeof t!="string"?"":t.includes("{{")?t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*}}/g,(o,r)=>{const l=String(r||"").trim();if(!l)return"";const s=n[l];return s!=null?String(s):""}):t}function Qn(t){return t==null?"":String(t).trim()}function Zo(t){var n,o;(o=(n=t==null?void 0:t.handle)==null?void 0:n.remove)==null||o.call(n)}function dd(t){return t?typeof(t==null?void 0:t.value)<"u"?t.value:t:null}function ud(t){var o;if(!(t!=null&&t.getStyle))return;const n=((o=t.getStyle())==null?void 0:o.layers)||[];for(let r=0;r<n.length;r+=1){const l=n[r];if(!(!l||typeof l.id!="string")&&l.type&&l.type!=="background"&&l.type!=="raster")return l.id}}function xn(t){function n(i,c={},u,d){var C,V;const y=Qn(i==null?void 0:i.id),a=((C=i==null?void 0:i.title)==null?void 0:C.trim())||y,m=(i==null?void 0:i.type)||(i!=null&&i.data?"geojson":"raster"),f=((V=i==null?void 0:i.url)==null?void 0:V.trim())||"";if(!y||m==="raster"&&!f||m==="geojson"&&!(i!=null&&i.data))return;const p=d??t;if(!p)return;const k=dd(p);if(!k)return;const h=gt.value.findIndex(E=>E.id===y);h!==-1&&(Zo(gt.value[h]),gt.value.splice(h,1));let g=null;const b=i.beforeId??ud(k);let x="";try{if(m==="geojson"){const E=od(i.data),_=i.style||{type:E,color:"#2563eb",stroke:"#1d4ed8",opacity:E==="polygon"?.35:1,width:2,radius:6};g=Ie(y,{source:{type:"geojson",data:i.data},style:_,beforeId:b},p)}else{if(x=cd(f,c),!x)return;g=Ie(y,{source:{type:"raster",tiles:[x],tileSize:i.tileSize??256,minzoom:i.minzoom??0,maxzoom:i.maxzoom??19},layer:{id:y,type:"raster",source:y,paint:{"raster-opacity":i.opacity??.85}},beforeId:b},p)}}catch(E){const _=(E==null?void 0:E.message)??"";if(!(typeof _=="string"&&_.includes("Map provider")))throw E;return}gt.value=[...gt.value,{id:y,title:a,originalUrl:m==="raster"?f:"",resolvedUrl:m==="raster"?x:"",owner:u??null,handle:g??null}]}function o(i,c){const u=Qn(i);if(!u)return;const d=gt.value.findIndex(a=>a.id===u&&(!c||a.owner===c));if(d===-1)return;const[y]=gt.value.splice(d,1);Zo(y)}function r(i,c,u){var a;const d=Qn(i);if(!d)return;const y=gt.value.find(m=>m.id===d&&(!u||m.owner===u));(a=y==null?void 0:y.handle)!=null&&a.setOpacity&&y.handle.setOpacity(c)}function l(i){if(!gt.value.length)return;const c=[];gt.value.forEach(u=>{(i?u.owner===i:!0)?Zo(u):c.push(u)}),gt.value=c}function s(i,c){const u=Qn(i);return u?gt.value.some(d=>d.id===u&&(!c||d.owner===c)):!1}return{temporaryLayers:gt,activateTemporaryLayer:n,deactivateTemporaryLayer:o,setTemporaryLayerOpacity:r,clearTemporaryLayers:l,isTemporaryLayerActive:s}}const kt=e.ref({}),kn="map:client-layer-added",eo="map:client-layer-removed";function Xo(){function t(s){kt.value={...kt.value,[s.id]:s}}function n(s){if(!kt.value[s])return;const i={...kt.value};delete i[s],kt.value=i}function o(){kt.value={}}function r(s){return!!kt.value[s]}function l(s){return kt.value[s]??null}return{clientLayers:kt,registerClientLayer:t,unregisterClientLayer:n,clearClientLayers:o,isClientLayer:r,getClientLayer:l}}const wn=e.ref(null);function fd(){wn.value=null}function md(t){const n=e.ref(!1),o=()=>typeof t=="string"?t:t.value;e.watch(wn,i=>{i!==o()&&n.value&&(n.value=!1)});function r(){wn.value=o(),n.value=!0}function l(){wn.value===o()&&(wn.value=null),n.value=!1}function s(){n.value?l():r()}return{isOpen:n,open:r,close:l,toggle:s}}const pd={class:"map-filter"},gd={class:"map-filter__header"},yd={class:"map-filter__title"},hd={"aria-hidden":"true"},Jo="#map-filter-popover-host",to=Ae(e.defineComponent({__name:"MapFilterPopover",props:{count:{},layer:{},catalogAnchor:{},disabled:{type:Boolean,default:!1}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/filter")),o=t,r=e.computed(()=>{var M;return((M=o.layer)==null?void 0:M.id)??""}),l=e.computed(()=>`filter-popover-${r.value}`),{isOpen:s,close:i,toggle:c}=md(l),u=e.reactive({top:0,left:0,transform:"translateX(-50%)"}),d=e.ref(null),y=e.ref(null);let a=null;const m=e.ref({}),f=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0}),p=e.computed(()=>s.value),k=e.computed(()=>{var M;return Array.isArray((M=o.layer)==null?void 0:M.filters)?o.layer.filters:[]}),h=e.computed(()=>k.value.length>0),g=e.computed(()=>{var M;return((M=o.layer)==null?void 0:M.name)??""}),b=e.computed(()=>k.value),x=e.ref(null),C=e.computed(()=>k.value.length),V=e.computed(()=>C.value<=2),E=e.computed(()=>V.value?"body":typeof window>"u"||x.value?Jo:"body"),_=e.computed(()=>{if(!p.value||!V.value)return{};const M=typeof window<"u"?window.innerWidth:280,j=Math.max(280,M-16*2);return{position:"absolute",top:`${u.top}px`,left:`${u.left}px`,transform:u.transform,zIndex:1e3,width:"280px",maxWidth:`${j}px`}});function N(){i()}function T(M,B,j=8){const X=window.scrollY+j,he=window.scrollY+window.innerHeight-j;let Z=M;return Z+B>he&&(Z=he-B),Z<X&&(Z=X),Z}function Y(){var q,H,re;if(!d.value||!V.value)return;const M=d.value.getBoundingClientRect(),B=window.scrollX+8,j=window.scrollX+window.innerWidth-8,X=((q=y.value)==null?void 0:q.offsetWidth)||280,he=((H=y.value)==null?void 0:H.offsetHeight)||0;let Z=0,P=0;if((re=o.catalogAnchor)!=null&&re.value){const I=o.catalogAnchor.value.getBoundingClientRect(),le=I.top+window.scrollY;Z=T(le,he,8);const me=I.right+window.scrollX+12,be=j-X,A=B;P=Math.min(Math.max(me,A),Math.max(A,be))}else{const I=M.bottom+window.scrollY+8;Z=T(I,he,8);let le=M.left+window.scrollX;le<B&&(le=B),le+X>j&&(le=Math.max(B,j-X)),P=le}u.left=P,u.top=Z,u.transform="none"}function ee(){V.value||F(),c(),s.value&&V.value&&e.nextTick(()=>{Y(),J(),requestAnimationFrame(()=>Y())})}function R(){o.disabled||ee()}e.watch(p,M=>{M&&V.value?e.nextTick(()=>{Y(),J(),requestAnimationFrame(()=>Y())}):(S(),V.value||F())}),e.watch(b,()=>{!p.value||!V.value||e.nextTick(()=>Y())},{deep:!0}),e.watch(V,M=>{p.value&&(M?e.nextTick(()=>{Y(),J()}):(S(),F()))}),e.watch(()=>o.disabled,M=>{M&&(i(),m.value={})});function ae(){!p.value||!V.value||Y()}function ue(M){const B=r.value;if(!B)return;const j=Ie(B);if(!(j!=null&&j.setFilter))return;m.value=M;const X=Object.entries(M).map(([he,Z])=>`${he}=${Z}`).join("|");j.setFilter(X)}function oe(M){if(!o.disabled)return;const B=M.currentTarget;if(!B)return;const j=B.getBoundingClientRect();f.left=j.left+j.width/2+window.scrollX,f.top=j.bottom+8+window.scrollY,f.visible=!0}function te(){f.visible=!1}e.onMounted(()=>{F(),window.addEventListener("resize",ae),window.addEventListener("scroll",ae,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",ae),window.removeEventListener("scroll",ae,!0),S()});function J(){S(),!(!y.value||!V.value)&&(a=new ResizeObserver(()=>{!p.value||!V.value||Y()}),a.observe(y.value))}function S(){a&&(a.disconnect(),a=null)}function F(){typeof window>"u"||typeof document>"u"||(x.value=document.querySelector(Jo))}return(M,B)=>h.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mapLayer-filter",ref_key:"anchor",ref:d},[e.createElementVNode("a",{class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(R,["prevent","stop"]),onMouseenter:oe,onMouseleave:te,onFocus:oe,onBlur:te},[...B[2]||(B[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),p.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:E.value},[e.createElementVNode("div",{class:e.normalizeClass(["vst-popover__content inline-block z-50 rounded-[16px] bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-filter__popover",{"mapLayer-filter__popover--static":!V.value}]),style:e.normalizeStyle(_.value),ref_key:"panel",ref:y,onClick:B[1]||(B[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",pd,[e.createElementVNode("div",gd,[e.createElementVNode("h3",yd,e.toDisplayString(g.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:N},[e.createElementVNode("span",hd,[e.createVNode(e.unref(ye.X),{class:"h-4 w-4"})]),B[3]||(B[3]=e.createElementVNode("span",{class:"sr-only"},"Закрити",-1))])]),e.createVNode(e.unref(n),{view:"inline",schema:b.value,value:m.value,limit:10,onChange:B[0]||(B[0]=j=>ue(j.data)),width:250},null,8,["schema","value"])])],6)],8,["to"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[f.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${f.top}px`,left:`${f.left}px`})},e.toDisplayString(f.text),5)):e.createCommentVNode("",!0)]))],512)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-32948852"]]),bd={class:"opacity-popover__content"},xd={class:"opacity-popover__value"},bl=Ae(e.defineComponent({__name:"LayerOpacityPopover",props:{layerId:{}},setup(t){const n=t,o=e.ref(!1),r=e.ref(100),l=e.ref(null),s=e.ref(null),i=e.reactive({top:0,left:0});function c(){var V;const a=(V=s.value)==null?void 0:V.querySelector("button");if(!a||!l.value)return;const m=a.getBoundingClientRect(),f=260,p=l.value.offsetHeight||60,k=8,h=12,g=window.innerWidth,b=window.innerHeight;let x=m.bottom+k+window.scrollY,C=m.left+window.scrollX;C+f>g-h&&(C=g-f-h+window.scrollX),C<h+window.scrollX&&(C=h+window.scrollX),x+p>b+window.scrollY-h&&(x=m.top-p-k+window.scrollY,x<h+window.scrollY&&(x=b-p-h+window.scrollY)),i.top=x,i.left=C}function u(){o.value=!o.value,o.value&&e.nextTick(c)}function d(){var p;const a=Ie(n.layerId),m=(r.value??100)/100;if(a!=null&&a.setOpacity){a.setOpacity(m);return}const f=(p=a==null?void 0:a.getLayer)==null?void 0:p.call(a);if(f)switch(f.type){case"raster":a.updatePaint({"raster-opacity":m});break;case"fill":a.updatePaint({"fill-opacity":m});break;case"line":a.updatePaint({"line-opacity":m});break;case"circle":a.updatePaint({"circle-opacity":m});break;case"symbol":a.updatePaint({"icon-opacity":m});break}}function y(a){var f,p;if(!o.value)return;const m=a.target;(f=l.value)!=null&&f.contains(m)||(p=s.value)!=null&&p.contains(m)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",y),window.addEventListener("scroll",c,!0),window.addEventListener("resize",c)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",y),window.removeEventListener("scroll",c,!0),window.removeEventListener("resize",c)}),(a,m)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:s},[e.renderSlot(a.$slots,"trigger",{toggle:u,opacity:r.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(u,["stop"])},e.toDisplayString(r.value)+"% ",1)],!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popoverEl",ref:l,class:"opacity-popover",style:e.normalizeStyle({top:i.top+"px",left:i.left+"px"})},[e.createElementVNode("div",bd,[m[1]||(m[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":m[0]||(m[0]=f=>r.value=f),class:"opacity-popover__range",onInput:d},null,544),[[e.vModelText,r.value]]),e.createElementVNode("span",xd,e.toDisplayString(r.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-39c90b6d"]]),kd={class:"layers-panel"},wd={class:"layers-panel__header"},_d={class:"layers-panel__heading"},Ed={class:"layers-panel__heading-title"},Cd={class:"layers-panel__count"},Nd={class:"layers-panel__bulk-actions"},Vd={class:"layers-panel__header-actions"},$d={class:"layers-panel__header-controls"},Bd={class:"layers-panel__label"},Sd={class:"layers-panel__label-row"},vd=["checked","onChange"],Ld={class:"layers-panel__title-block"},Td={class:"layers-panel__name"},Ad={class:"layers-panel__meta text-slate-500"},Md=["onClick"],Fd=["onClick"],Dd={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},Pd={key:0,class:"layers-panel__actions"},zd=["innerHTML","onClick"],xl="map:temporary-layer-request",Id="#5763ba",Qo=Ae(e.defineComponent({__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,r=e.ref({}),l=e.ref(!0),s=e.ref(!1),i=e.ref(!1),c=Qe(),{temporaryLayers:u,activateTemporaryLayer:d,deactivateTemporaryLayer:y,clearTemporaryLayers:a}=xn(c.map),{clientLayers:m,isClientLayer:f,getClientLayer:p,unregisterClientLayer:k}=Xo(),h=e.computed(()=>{const A=o.layers.map(ie=>({...ie,isTemporary:!1,owner:null,visible:ie.visible!==!1})),K=u.value.map(ie=>({id:ie.id,name:ie.title,visible:r.value[ie.id]??!0,actions:[],filters:null,isTemporary:!0,owner:ie.owner??null,handle:ie.handle??null,card:ie.card??null,popup:ie.popup??null,style:ie.style??null,group_name:null,count:null,holder:null})),fe=Object.values(m.value).filter(ie=>!K.some(de=>de.id===ie.id)).map(ie=>({id:ie.id,name:ie.name,visible:r.value[ie.id]??!0,actions:[],filters:null,isTemporary:!0,owner:"add-data",handle:Ie(ie.id)??null,card:null,popup:null,style:null,group_name:null,count:null,holder:null}));return[...A,...K,...fe]}),g=e.computed(()=>h.value.length),b=e.computed(()=>h.value.filter(A=>ue(A.id)).length),x=e.computed(()=>g.value>0&&b.value===g.value),C=n,V=new Map;function E(A){if(A==null)return"";try{return JSON.stringify(A)}catch{return String(A)}}function _(A){var K,fe;return E({id:(A==null?void 0:A.id)??null,visible:(A==null?void 0:A.visible)!==!1,service:(A==null?void 0:A.service)??(A==null?void 0:A.service_type)??(A==null?void 0:A.type)??null,data:(A==null?void 0:A.data)??(A==null?void 0:A.geojson)??((K=A==null?void 0:A.source)==null?void 0:K.data)??null,tiles:((fe=A==null?void 0:A.source)==null?void 0:fe.tiles)??(A==null?void 0:A.tiles)??null,style:(A==null?void 0:A.style)??null,filter:(A==null?void 0:A.filter)??null})}function N(A,K){var ie,de,pe,ve,U,ne,we,$e,Pe,Le,Ue,We,et;return{sourceKind:(((ie=K==null?void 0:K.source)==null?void 0:ie.type)||((de=K==null?void 0:K.layer)==null?void 0:de.type)||A.type||A.service_type||A.service||"").toString().toLowerCase(),sourceSig:E({type:((pe=K==null?void 0:K.source)==null?void 0:pe.type)??null,data:((ve=K==null?void 0:K.source)==null?void 0:ve.data)??null,tiles:((U=K==null?void 0:K.source)==null?void 0:U.tiles)??null,minzoom:((ne=K==null?void 0:K.source)==null?void 0:ne.minzoom)??null,maxzoom:((we=K==null?void 0:K.source)==null?void 0:we.maxzoom)??null,tileSize:(($e=K==null?void 0:K.source)==null?void 0:$e.tileSize)??null,scheme:((Pe=K==null?void 0:K.source)==null?void 0:Pe.scheme)??null}),styleSig:E(((Le=K==null?void 0:K.layer)==null?void 0:Le.style)??null),filterSig:E(((Ue=K==null?void 0:K.layer)==null?void 0:Ue.filter)??null),dataSig:E(((We=K==null?void 0:K.source)==null?void 0:We.data)??null),tilesSig:E(((et=K==null?void 0:K.source)==null?void 0:et.tiles)??null),visible:A.visible!==!1}}async function T(A=!1){var fe,ie,de,pe;const K=new Set;for(let ve=0;ve<o.layers.length;ve++){const U=o.layers[ve],ne=ee(U);if(!ne)continue;const we=N(U,ne),$e=Ie(U.id),Pe=V.get(U.id);if(K.add(U.id),!$e){if(!A)continue;const Ue=Ie(U.id,ne,c.map);r.value[U.id]=we.visible,(fe=Ue==null?void 0:Ue.setVisible)==null||fe.call(Ue,we.visible),V.set(U.id,we);continue}if(!Pe){r.value[U.id]=we.visible,V.set(U.id,we);continue}const Le=Pe.sourceKind!==we.sourceKind||Pe.sourceSig!==we.sourceSig||Pe.dataSig!==we.dataSig||Pe.tilesSig!==we.tilesSig||Pe.styleSig!==we.styleSig||Pe.filterSig!==we.filterSig;if(r.value[U.id]=we.visible,Le){await((ie=$e==null?void 0:$e.refresh)==null?void 0:ie.call($e,ne)),(de=$e==null?void 0:$e.setVisible)==null||de.call($e,we.visible),V.set(U.id,we);continue}Pe.visible!==we.visible&&((pe=$e==null?void 0:$e.setVisible)==null||pe.call($e,we.visible)),V.set(U.id,we)}V.forEach((ve,U)=>{K.has(U)||(V.delete(U),U in r.value&&delete r.value[U])})}function Y(A,K){const fe=A.sourceLayer||A["source-layer"];return fe||((A.service_url||A.url||"").toString().includes("/dla/vtile")?"dla":K)}function ee(A){var ne;const K=A.id;if(!K)return null;const fe=(A.type||A.service_type||A.service||"").toString().toLowerCase(),ie=ae(A.data??A.geojson??((ne=A.source)==null?void 0:ne.data)??null),de=fe==="geojson"||!!ie,pe=A.service_url||A.url||null;if(!!pe&&(fe==="tms"||fe==="wmts"||fe==="wms"||fe==="ogc")){const we=R(pe);return we?{sourceId:K,service:fe,source:{type:"raster",tiles:[we],tileSize:A.tileSize||256,minzoom:A.minzoom??0,maxzoom:A.maxzoom??22,scheme:A.scheme||"xyz"},layer:{id:K,type:"raster",source:K},card:A.card,popup:A.popup}:null}if(de)return ie?{sourceId:K,service:fe||"geojson",source:{type:"geojson",data:ie},layer:{id:K,source:K,style:A.style},card:A.card,popup:A.popup}:null;if(fe==="cartocss"){const we=A.url?R(A.url):`${location.origin}/api/gis-rtile/${K}/{z}/{x}/{y}.png`;return we?{sourceId:K,service:fe,source:{type:"raster",tiles:[we],tileSize:A.tileSize||256,minzoom:A.minzoom??0,maxzoom:A.maxzoom??22},layer:{id:K,type:"raster",source:K},card:A.card,popup:A.popup}:null}if(pe&&(fe==="vtile"||fe==="vector")){const we=R(pe);if(!we)return null;const $e=Y(A,K);return{sourceId:K,service:fe,source:{type:"vector",tiles:[we],minzoom:A.minzoom??0,maxzoom:A.maxzoom??22},layer:{id:K,source:K,"source-layer":$e,style:A.style,filter:A.filter},card:A.card,popup:A.popup}}if(fe==="raster"){const we=A.url?R(A.url):`${location.origin}/api/gis-rtile/${K}/{z}/{x}/{y}.png`;return we?{sourceId:K,service:fe,source:{type:"raster",tiles:[we],tileSize:A.tileSize||256,minzoom:A.minzoom??0,maxzoom:A.maxzoom??22},layer:{id:K,type:"raster",source:K},card:A.card,popup:A.popup}:null}const U=`${location.origin}/api/vtile/${K}/ua/{z}/{x}/{y}.vmt`;return{sourceId:K,service:fe,source:{type:"vector",tiles:[U],minZoom:4,maxZoom:14},layer:{id:K,source:K,"source-layer":K,style:A.style},card:A.card,popup:A.popup}}function R(A){return A?/^https?:\/\//i.test(A)?A:A.startsWith("//")?`${window.location.protocol}${A}`:A.startsWith("/")?`${location.origin}${A}`:`${location.origin}/${A}`:null}function ae(A){if(!A)return null;if(typeof A=="string")try{A=JSON.parse(A)}catch{return null}return A.type==="FeatureCollection"?A:A.type==="Feature"?{type:"FeatureCollection",features:[A]}:A.type&&Array.isArray(A.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:A,properties:{}}]}:Array.isArray(A.features)?{type:"FeatureCollection",features:A.features}:A.geometry?ae(A.geometry):null}function ue(A){const K=r.value[A];return K??!0}function oe(A){var ie,de;if(!(A!=null&&A.id))return null;const K=(ie=A.title)==null?void 0:ie.trim();if(!K)return null;if(A.type==="geojson"||A.data)return A.data?{id:A.id,title:K,type:"geojson",data:A.data,style:A.style}:null;const fe=(de=A.url)==null?void 0:de.trim();return fe?{id:A.id,title:K,url:fe,tileSize:A.tileSize,minzoom:A.minzoom,maxzoom:A.maxzoom,opacity:A.opacity}:null}function te(A){if(!A)return;const K=A.owner;if(A.action==="clear"){const ie=u.value.filter(de=>!K||de.owner===K).map(de=>de.id);a(K),ie.forEach(de=>{de in r.value&&delete r.value[de]});return}const fe=oe(A.spec);if(fe){if(A.action==="activate"){d(fe,A.context||{},K),r.value[fe.id]=!0;return}A.action==="deactivate"&&(y(fe.id,K),delete r.value[fe.id])}}function J(A){A instanceof CustomEvent&&te(A.detail)}e.watch(()=>u.value.map(A=>A.id),(A,K)=>{const fe=new Set(K||[]),ie=new Set(A);A.forEach(de=>{de in r.value||(r.value[de]=!0)}),fe.forEach(de=>{ie.has(de)||delete r.value[de]})},{immediate:!0});function S(A){return A.owner==="add-data"||f(A.id)}function F(A){const K=p(A);if(!(K!=null&&K.data))return;const fe={id:K.id,title:K.name,type:"geojson",data:K.data};d(fe,{},"add-data"),te({action:"activate",owner:"add-data",spec:fe})}function M(A,K){var ie,de,pe,ve,U;if(S(A)){r.value[A.id]=K;const ne=Ie(A.id);if(!K){(ie=ne==null?void 0:ne.setVisible)==null||ie.call(ne,!1);return}if((de=ne==null?void 0:ne.isMounted)!=null&&de.call(ne)){ne.setVisible(!0);return}F(A.id);return}if(A.isTemporary){if(!K){y(A.id,A.owner||void 0),delete r.value[A.id];return}r.value[A.id]=!0;const ne=A.handle||((pe=u.value.find(we=>we.id===A.id))==null?void 0:pe.handle);(ve=ne==null?void 0:ne.setVisible)==null||ve.call(ne,!0);return}r.value[A.id]=K;const fe=Ie(A.id);(U=fe==null?void 0:fe.setVisible)==null||U.call(fe,K)}function B(A,K){const fe=K.target;M(A,fe.checked)}function j(A){h.value.forEach(K=>M(K,A))}function X(){j(!x.value)}function he(A){return A.isTemporary?[{label:"Назва",value:A.name??null},{label:"Тип",value:"Тимчасовий шар"},A.owner==="add-data"?{label:"Джерело",value:"Завантажені дані"}:A.owner?{label:"Джерело",value:A.owner}:null].filter(Boolean):[{label:"Назва",value:A.name??null},{label:"Назва групи",value:A.group_name||null},{label:"Кількість",value:A.count??null},{label:"Балансоутримувач",value:A.holder??null}]}function Z(A){const K=A.trim();return K?!!(/^#[\da-fA-F]{3,8}$/.test(K)||/^rgb\s*\(/.test(K)||/^rgba\s*\(/.test(K)||/^hsl\s*\(/.test(K)||/^hsla\s*\(/.test(K)||/^[a-zA-Z]+$/.test(K)&&K.length<25):!1}function P(A){var K,fe,ie,de,pe,ve;if(!A)return null;if(typeof A=="string"){const U=A.trim();return!U||!Z(U)?null:U}if(Array.isArray(A)){for(const U of A){const ne=P(U);if(ne)return ne}return null}if(typeof A=="object"){const U=A;return P(U.color??U.fill??U.stroke??U.lineColor??U.fillColor??((K=U.paint)==null?void 0:K["fill-color"])??((fe=U.paint)==null?void 0:fe["line-color"])??((ie=U.paint)==null?void 0:ie["circle-color"])??((de=U.paint)==null?void 0:de.color)??((pe=U.paint)==null?void 0:pe.lineColor)??((ve=U.paint)==null?void 0:ve.fillColor)??U.paint??U.value)}return null}function q(A){const K=Array.isArray(A==null?void 0:A.legend)?A.legend[0]:A==null?void 0:A.legend,fe=P(K);return fe||P(A==null?void 0:A.style)||Id}function H(A){return{"--layers-panel-checkbox-color":q(A)}}function re(A){var de;const{id:K}=A,fe=A.owner||void 0;y(K,fe);const ie=Ie(K);(de=ie==null?void 0:ie.remove)==null||de.call(ie),(f(K)||fe==="add-data")&&(k(K),window.dispatchEvent(new CustomEvent(eo,{detail:{id:K}}))),delete r.value[K]}function I(){l.value=!l.value}function le(){s.value=window.innerWidth<=768}function me(A){var fe;if(!(A instanceof CustomEvent))return;const K=(fe=A.detail)==null?void 0:fe.id;K&&(r.value[K]=!0)}function be(A){var fe;if(!(A instanceof CustomEvent))return;const K=(fe=A.detail)==null?void 0:fe.id;K&&(y(K),delete r.value[K])}return e.onMounted(()=>{(async()=>{var A;await((A=c.ready)==null?void 0:A.call(c)),c.map.value&&(await T(!0),i.value=!0)})(),window.addEventListener(xl,J),window.addEventListener(kn,me),window.addEventListener(eo,be),le(),s.value&&(l.value=!1),window.addEventListener("resize",le)}),e.watch(()=>o.layers.map(A=>_(A)).join("|"),()=>{i.value&&T(!1)}),e.onBeforeUnmount(()=>{window.removeEventListener(xl,J),window.removeEventListener(kn,me),window.removeEventListener(eo,be),window.removeEventListener("resize",le)}),(A,K)=>(e.openBlock(),e.createElementBlock("div",kd,[e.createElementVNode("div",wd,[e.createElementVNode("div",_d,[e.createElementVNode("div",Ed,[K[0]||(K[0]=e.createElementVNode("h2",{class:"layers-panel__title"},"Шари",-1)),e.createElementVNode("span",Cd," ("+e.toDisplayString(b.value)+" з "+e.toDisplayString(g.value)+") ",1),e.createElementVNode("div",Nd,[h.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__header-link",onClick:X},e.toDisplayString(x.value?"Вимкнути всі":"Увімкнути всі"),1)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",Vd,[e.createElementVNode("div",$d,[h.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__toggle-button",onClick:I,"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":l.value})},[...K[1]||(K[1]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",{class:e.normalizeClass(["layers-panel__content",{"layers-panel__content--collapsed":!l.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,fe=>{var ie;return e.openBlock(),e.createElementBlock("div",{key:fe.id,class:"layers-panel__item"},[e.createElementVNode("label",Bd,[e.createElementVNode("div",Sd,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:ue(fe.id),style:e.normalizeStyle(H(fe)),onChange:de=>B(fe,de)},null,44,vd),e.createElementVNode("div",Ld,[e.createElementVNode("span",Td,e.toDisplayString(fe.name),1)]),e.createElementVNode("div",Ad,[fe.isTemporary?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__remove","aria-label":"Видалити шар",onClick:e.withModifiers(de=>re(fe),["stop"])},[...K[2]||(K[2]=[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"},[e.createElementVNode("path",{d:"M18 6 6 18"}),e.createElementVNode("path",{d:"m6 6 12 12"})],-1)])],8,Md)):e.createCommentVNode("",!0),ue(fe.id)&&!fe.isTemporary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(bl,{"layer-id":fe.id,class:"flex"},{trigger:e.withCtx(({toggle:de})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(de,["prevent","stop"])},[e.createElementVNode("div",Dd,[e.createVNode(e.unref(ye.Contrast))])],8,Fd)]),_:1},8,["layer-id"]),e.createVNode(to,{count:Array.isArray(fe.filters)?fe.filters.length:0,layer:fe},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(Go,{items:he(fe)},null,8,["items"])])])]),(ie=fe.actions)!=null&&ie.length?(e.openBlock(),e.createElementBlock("div",Pd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(fe.actions,de=>(e.openBlock(),e.createElementBlock("button",{key:de.widget||de.id||de.icon,type:"button",class:"layers-panel__action",innerHTML:de.icon,onClick:pe=>C("action",{layerId:de.widget})},null,8,zd))),128))])):e.createCommentVNode("",!0)])}),128))],2)]))}}),[["__scopeId","data-v-3c399929"]]);function jd(){const{map:t,ready:n}=Qe(),o=e.ref(null),r=e.ref(null),l=e.ref(null),s=e.ref(null);let i=[];function c(){i.forEach(f=>f()),i=[]}const u=f=>{const p=(f==null?void 0:f.properties)||{};return!!(p.cluster||p.point_count||p.point_count_abbreviated)},d=f=>{var g,b;o.value=[f.point.x,f.point.y];const p=t.value.queryRenderedFeatures(f.point);if(!(p!=null&&p.length)){y();return}const k=p.find(x=>!u(x));if(!k){y();return}const h=Ie(k.source)||Ie((g=k.layer)==null?void 0:g.id);h!=null&&h.popup&&(r.value=((b=h.popup)==null?void 0:b.fields)||h.popup,s.value=k.properties)},y=()=>{r.value=null,s.value=null,o.value=null};async function a(){await n(),t.value&&(c(),t.value.on("mousemove",d),t.value.on("mouseleave",y))}function m(){c(),r.value=null,s.value=null,o.value=null}return n().then(a),{popupCoords:o,popupFields:r,popupValues:s,disable:m,title:l}}const Rd={class:"min-w-[200px] max-w-[280px] rounded-lg border border-slate-200 bg-white/90 p-3 text-xs shadow-lg backdrop-blur"},Od={class:"space-y-1.5"},Ud={class:"font-bold text-slate-700"},qd={class:"text-slate-700"},kl=e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,popupFields:o,popupValues:r,disable:l}=jd(),{map:s}=Qe(),i=e.ref(null),c=e.ref({left:"-9999px",top:"-9999px"}),u=e.ref({}),d=new Set,y=new Intl.NumberFormat("uk-UA",{maximumFractionDigits:2});function a(g,b){if(b==null||b==="")return b;if((g==null?void 0:g.type)==="number"){const x=typeof b=="number"?b:Number(b);if(Number.isFinite(x))return y.format(x)}return b}function m(g,b,x){const C=g.name||g.label||g.title||`field-${x}`,V=g.label||g.title||g.name||C,E=g.name?b[g.name]:void 0,_=g.name?b[`${g.name}_text`]:void 0;let N;if((g.format==="select"||g.format==="autocomplete")&&g.data&&E!=null){const Y=u.value[g.data];Y&&(N=Y[String(E)])}const T=N??_??E??g.value??null;return{key:C,label:V,value:a(g,T)}}const f=e.computed(()=>{const g=o.value||[],b=r.value||{};return g.filter(x=>(x==null?void 0:x.meta)!=="title").map((x,C)=>m(x,b,C)).filter(x=>x.label)});e.watch([o,r],([g,b])=>{!g||!b||g.forEach(async x=>{if(x.format==="select"||x.format==="autocomplete"){const C=x.data;if(!C)return;if(!u.value[C]&&!d.has(C)){d.add(C);try{const V=await fetch(`/api/suggest/${C}`);if(V.ok){const E=await V.json();if(E!=null&&E.data&&Array.isArray(E.data)){const _={};E.data.forEach(N=>{_[String(N.id)]=N.text}),u.value[C]=_}}}catch(V){console.error(`Failed to fetch suggest for ${C}`,V)}}}})},{deep:!0,immediate:!0});const p=e.computed(()=>{const g=o.value||[],b=r.value||{},x=g.find(C=>(C==null?void 0:C.meta)==="title");return x?m(x,b,0):null}),k=e.computed(()=>{var b;const g=f.value;return(b=p.value)!=null&&b.value?[{...p.value,key:`${p.value.key}-title`,label:"Назва"},...g]:g});function h(){var M,B;if(!k.value.length||!n.value||!i.value){c.value={left:"-9999px",top:"-9999px"};return}const g=i.value,b=g.offsetParent||null,x=(b==null?void 0:b.getBoundingClientRect())??{left:0,top:0,width:window.innerWidth,height:window.innerHeight},C=((B=(M=s.value)==null?void 0:M.getContainer)==null?void 0:B.call(M))||void 0,V=(C==null?void 0:C.getBoundingClientRect())??x,E=V.left-x.left,_=V.top-x.top,N=g.offsetWidth||0,T=g.offsetHeight||0,Y=12,ee=8,[R,ae]=n.value;let ue=E+R+Y,oe=_+ae+Y;ue+N+ee>x.width&&(ue=E+R-N-Y),oe+T+ee>x.height&&(oe=_+ae-T-Y);const te=ee,J=ee,S=Math.max(ee,x.width-N-ee),F=Math.max(ee,x.height-T-ee);ue=Math.min(Math.max(ue,te),S),oe=Math.min(Math.max(oe,J),F),c.value={left:`${ue}px`,top:`${oe}px`}}return e.watch([n,k],()=>{e.nextTick(()=>h())}),e.onMounted(()=>{window.addEventListener("resize",h)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",h),l()}),(g,b)=>k.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popupRef",ref:i,class:"absolute pointer-events-none z-[130]",style:e.normalizeStyle(c.value)},[e.createElementVNode("div",Rd,[e.createElementVNode("div",Od,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value,x=>(e.openBlock(),e.createElementBlock("div",{key:x.key,class:"flex flex-col"},[e.createElementVNode("span",Ud,e.toDisplayString(x.label),1),e.createElementVNode("span",qd,e.toDisplayString(x.value??"—"),1)]))),128))])])],4)):e.createCommentVNode("",!0)}});function Hd(){const t=Oe.useRoute(),n=Oe.useRouter(),o=e.ref(null),r=e.ref(null),l=e.ref(null),s=e.ref(!1),i=e.ref([]),c=e.ref(0),u=e.computed(()=>i.value.length),d=e.computed(()=>s.value||!!o.value||!!l.value);let y=!1;function a(){o.value=null,r.value=null,l.value=null,s.value=!1,i.value=[],c.value=0}function m(_,N=0){if(!_.length){a(),V(null);return}i.value=_,f(N)}function f(_){const N=i.value[_];if(!N)return;c.value=_;const T=Ie(N.source);h(N,T==null?void 0:T.card)}function p(){c.value>=i.value.length-1||f(c.value+1)}function k(){c.value<=0||f(c.value-1)}async function h(_,N){var ee,R,ae,ue,oe;if(!((ee=_==null?void 0:_.properties)!=null&&ee.id))return;const T=new URLSearchParams;T.set("layer",_.source),T.set("id",String((R=_.properties)==null?void 0:R.id));const Y=Array.isArray(N)&&N.length>0;s.value=Y,l.value=null,o.value=null,r.value=_||null;try{const te=await fetch(`/api/map-format?${T.toString()}`);if(!te.ok)throw new Error(`Failed (${te.status})`);const J=await te.json(),S=Array.isArray(J.columns)?J.columns:[],F=Array.isArray(N)?N:[];if(!S.length&&!F.length){console.error("Configure layer in admin"),g();return}const M=J.rows??J.data??{};o.value={rows:M,fields:F,columns:S,html:J.html||null},y||V(r.value);const B=((ae=J.rows)==null?void 0:ae.geom)??((ue=J.data)==null?void 0:ue.geom);if(B){const j=typeof B=="string"?JSON.parse(B):B;j&&(r.value={...r.value,geometry:j,properties:{...((oe=r.value)==null?void 0:oe.properties)||{},geom:j,geom_4326:j}})}}catch(te){console.error("Failed to load feature card:",te),g()}finally{s.value=!1}}function g(){a(),V(null)}function b(){a()}E(x()),e.onBeforeUnmount(()=>b());function x(){const _=Array.isArray(t.query.info)?t.query.info[0]:t.query.info;if(typeof _!="string")return null;const N=_.trim();return N.startsWith("external:")?null:N||null}function C(_){var ee,R;const N=(_==null?void 0:_.source)??((ee=_==null?void 0:_.layer)==null?void 0:ee.id),T=(R=_==null?void 0:_.properties)==null?void 0:R.id;return!N||T===void 0||T===null?null:`${N},${T}`.trim()||null}function V(_){const N=C(_),T=x();if(N===T)return;const Y={...t.query};N?Y.info=N:delete Y.info,n.push({query:Y}).catch(()=>{})}async function E(_){if(!_){a();return}if(_===C(r.value))return;const[N,T]=_.split(","),Y=N==null?void 0:N.trim(),ee=T==null?void 0:T.trim();if(!Y||!ee){a(),V(null);return}y=!0;try{m([{source:Y,properties:{id:ee}}],0)}finally{y=!1}}return e.watch(()=>x(),_=>{_!==C(r.value)&&(y=!0,E(_).finally(()=>{y=!1}))}),{card:o,cardFeature:r,cardError:l,cardLoading:s,isOpen:d,close:g,openFeature:_=>m(_?[_]:[],0),openFeatures:m,next:p,prev:k,count:u,index:c}}function Wd(){const{map:t,ready:n}=Qe(),o=e.ref([]),r=e.ref(0),l=e.ref(0),s=e.ref(!1),i=e.ref(null),c=e.ref({}),u=e.ref(null),d=e.ref([]),y=e.computed(()=>o.value[l.value]||null),a=e.computed(()=>o.value.length>0);let m=null;const f=()=>{m==null||m.remove(),m=null},p=N=>N?N.type==="FeatureCollection"?N:N.type==="Feature"?{type:"FeatureCollection",features:[N]}:N.type&&Array.isArray(N.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:N,properties:{}}]}:Array.isArray(N.features)?{type:"FeatureCollection",features:N.features}:N.geometry?p(N.geometry):null:null,k=()=>({type:"line",color:"#0a57ff",width:4,opacity:.95}),h=N=>Number(N.toFixed(5)),g=async N=>{if(await n(),!t.value)return;const T=p(N);T&&(f(),m=Ie("feature-highlight",{source:{type:"geojson",data:T},style:k()},t))},b=async(N,T,Y)=>{var ae,ue;const[ee,R]=[h(N),h(T)];u.value={x:ee,y:R},d.value=Y,s.value=!0,i.value=null,o.value=[],c.value={},l.value=0;try{const oe=Y.map(async M=>{const B=`/api/map-info-point?x=${ee}&y=${R}&layers=${M}`,j=await fetch(B);if(!j.ok)return null;const X=await j.json();if(!X.count)return null;const Z=await(await fetch(`${B}&index=0`)).json();return{layerId:M,data:Z,count:X.count}}),J=(await Promise.all(oe)).filter(Boolean);if(J.length===0){r.value=0;return}o.value=J.map(M=>M.data);const[S]=o.value;r.value=J.reduce((M,B)=>M+(B.count||0),0),c.value[0]=S;const F=((ae=S==null?void 0:S.data)==null?void 0:ae.geom_4326)??((ue=S==null?void 0:S.data)==null?void 0:ue.geom);await g(F)}catch(oe){i.value=oe.message}finally{s.value=!1}},x=async N=>{if(!u.value||!d.value.length)return;if(c.value[N]){o.value[N]=c.value[N];return}const{x:T,y:Y}=u.value,ee=d.value.join(","),R=`/api/map-info-point?x=${T}&y=${Y}&index=${N}&layers=${ee}`;try{s.value=!0;const ae=await fetch(R);if(!ae.ok)throw new Error("Failed to fetch feature by index");const ue=await ae.json();o.value[N]=ue,c.value[N]=ue}catch(ae){i.value=ae.message}finally{s.value=!1}},C=async()=>{l.value<r.value-1&&(l.value+=1,c.value[l.value]||await x(l.value))},V=async()=>{l.value>0&&(l.value-=1,c.value[l.value]||await x(l.value))},E=()=>{o.value=[],r.value=0,l.value=0,c.value={},u.value=null,d.value=[],f()};e.watch(l,async()=>{var T,Y;const N=y.value;if(N){const ee=((T=N==null?void 0:N.data)==null?void 0:T.geom_4326)??((Y=N==null?void 0:N.data)==null?void 0:Y.geom);await g(ee)}});let _=null;return e.onMounted(async()=>{await n(),t.value&&(_=async N=>{const{lng:T,lat:Y}=N.lngLat,ee=Ie(),ae=Object.entries(ee).map(([ue,oe])=>{var te,J,S,F;return{id:ue,service:((te=oe==null?void 0:oe.opts)==null?void 0:te.service)??((S=(J=oe==null?void 0:oe.opts)==null?void 0:J.source)==null?void 0:S.service)??null,count:((F=oe==null?void 0:oe.opts)==null?void 0:F.count)??null,visible:(()=>{var M;try{return((M=t.value)==null?void 0:M.getLayer(ue))?t.value.getLayoutProperty(ue,"visibility")!=="none":!0}catch{return!0}})()}}).filter(ue=>ue.service==="ogc"&&ue.visible).map(ue=>ue.id);ae.length>0&&await b(T,Y,ae)},t.value.on("dblclick",_))}),e.onBeforeUnmount(()=>{t.value&&_&&t.value.off("dblclick",_),f()}),{features:o,count:r,index:l,current:y,loading:s,error:i,active:a,next:C,prev:V,close:E}}const wl=e.defineComponent({__name:"LayerSwitcher",props:{title:{},url:{},id:{},buttonText:{}},emits:["activate"],setup(t,{emit:n}){const o=t,r=n;function l(d){const y=d.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(y)return y;const a=Array.from(d).map(m=>m.charCodeAt(0).toString(16)).join("").slice(0,8);return a?`layer-${a}`:"layer-temp"}const s=e.computed(()=>{var d;return((d=o.id)==null?void 0:d.trim())||l(o.title)}),i=e.computed(()=>o.buttonText||"Показати шар");function c(){return{id:s.value,title:o.title,url:o.url}}function u(){r("activate",c())}return(d,y)=>(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(d.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(i.value),1)])]))}}),er="map-card:external-payload",no="map-card:click-results",_l=t=>t?typeof t.html=="string"&&t.html.trim().length>0?!0:Array.isArray(t.items)&&t.items.some(n=>typeof(n==null?void 0:n.html)=="string"&&n.html.trim().length>0):!1,Yd={key:0,class:"card pointer-events-auto absolute top-4 lg:left-auto right-[52px] md:left-4 z-[130] w-[calc(100%-60px)] 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"},Gd={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},Kd={class:"min-w-0 flex-1"},Zd={class:"text-base font-semibold text-slate-900 truncate"},Xd={key:0,class:"flex gap-1 mt-1"},Jd=["disabled"],Qd=["disabled"],eu={key:1,class:"flex gap-1 mt-1"},tu=["disabled"],nu=["disabled"],ou={class:"flex-1 overflow-y-auto px-4 py-3 space-y-4 text-sm text-slate-700"},ru={key:0,class:"text-center text-xs text-slate-500"},lu={key:1,class:"text-center text-xs text-red-500"},au={key:0,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},su={class:"divide-y divide-gray-100 py-[5px]"},iu={class:"text-gray-900 sm:col-span-4 font-normal"},cu={key:0,class:"flex gap-1 flex-wrap"},du={key:1,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},uu=["innerHTML"],fu=["innerHTML"],mu={key:2,class:"space-y-3 border-t border-slate-200 pt-3"},pu={key:3,class:"border-t border-slate-100 px-4 py-2 text-right text-xs text-slate-500"},gu={class:"text-xs tracking-[0.02em] leading-none"},yu={key:4,class:"space-y-3 border-t border-slate-200 pt-3"},hu={class:"space-y-1"},bu={class:"flex items-center cursor-pointer gap-2 flex-1"},xu=["checked","onChange"],ku={class:"text-[13px] text-gray-600"},wu={key:0,class:"text-right text-xs text-gray-400 truncate max-w-[40%]"},_u={key:5,class:"text-center text-xs text-slate-400"},Eu="map:temporary-layer-request",El="cardHideEmpty",Cu=14,tr=Ae(e.defineComponent({__name:"MapCardWidget",props:{mapId:{}},setup(t){const n=t,o=Hd(),r=Wd(),l=Oe.useRouter(),s=e.ref([]),i=e.ref(0),c=e.computed(()=>s.value[i.value]||null),u=e.computed(()=>{var w;return((w=c.value)==null?void 0:w.type)==="external"?c.value:null}),d=e.computed(()=>s.value.length>0),y=e.computed(()=>{var w,L;return!!((L=(w=u.value)==null?void 0:w.html)!=null&&L.trim())}),a=e.computed(()=>{var w;return((w=u.value)==null?void 0:w.geometry)??null});function m(){s.value=[],i.value=0}function f(w){if(!w)return null;if(typeof w=="string")try{return JSON.parse(w)}catch{return null}return w}function p(){const w=Array.isArray(oe.query.info)?oe.query.info[0]:oe.query.info;return typeof w!="string"?null:w.trim()||null}function k(w){if(!w||!w.startsWith("external:"))return null;const L=w.slice(9),[G,ce]=L.split(","),xe=G==null?void 0:G.trim(),Ve=ce==null?void 0:ce.trim();return!xe||!Ve?null:{layer:xe,id:Ve,token:`external:${xe},${Ve}`}}function h(w){const L=p(),G=(w==null?void 0:w.trim())||null;if(L===G)return;const ce={...oe.query};if(G)ce.info=G;else if(L!=null&&L.startsWith("external:"))delete ce.info;else return;l.push({query:ce}).catch(()=>{})}function g(w){var G;const L=s.value[w];if(!L){m(),o.close(),Je();return}if(i.value=w,L.type==="feature"){o.openFeature(L.feature);return}o.close(),h(L.infoToken??null),(G=L.html)!=null&&G.trim()?C():Je()}function b(w,L=0){if(r.close(),s.value=w.map(G=>({type:"external",...G})),!s.value.length){o.close(),h(null),Je();return}g(Math.min(Math.max(L,0),s.value.length-1))}function x(w){r.close();const L=Array.isArray(w==null?void 0:w.features)?w.features.filter(Boolean):[],G=Array.isArray(w==null?void 0:w.externalItems)?w.externalItems.filter(ce=>typeof(ce==null?void 0:ce.html)=="string"&&ce.html.trim()):[];if(s.value=[...L.map(ce=>({type:"feature",feature:ce})),...G.map(ce=>({type:"external",...ce}))],!s.value.length){o.close(),h(null),Je();return}g(0)}function C(){return y.value?a.value?(Se(a.value),!0):(Je(),!0):(Je(),!1)}const V=w=>{var ce,xe,Ve,Ne;const L=w,G=Array.isArray((ce=L.detail)==null?void 0:ce.items)?(xe=L.detail)==null?void 0:xe.items.filter(ze=>typeof(ze==null?void 0:ze.html)=="string"&&ze.html.trim()):[];G.length?b(G,Number(((Ve=L.detail)==null?void 0:Ve.index)??0)):typeof((Ne=L.detail)==null?void 0:Ne.html)=="string"&&L.detail.html.trim()?b([{html:L.detail.html,geometry:L.detail.geometry??null,infoToken:L.detail.infoToken??null}],0):(m(),o.close(),h(null),Je())},E=w=>{x(w.detail)};e.onMounted(()=>{typeof window>"u"||(window.addEventListener(no,E),window.addEventListener(er,V))}),e.onBeforeUnmount(()=>{typeof window>"u"||(window.removeEventListener(no,E),window.removeEventListener(er,V))});const _=e.computed(()=>r.active.value),N=e.computed(()=>_.value||o.isOpen.value||y.value),T=e.computed(()=>_.value?r.loading.value:o.cardLoading.value),Y=e.computed(()=>_.value?r.error.value:o.cardError.value),ee=e.computed(()=>{var w,L,G;return _.value?((w=r.current.value)==null?void 0:w.html)||null:y.value?((L=u.value)==null?void 0:L.html)||null:((G=o.card.value)==null?void 0:G.html)||null}),R=Qe(),ae=Oo(),ue=e.computed(()=>{var w,L;return((L=(w=ae.value)==null?void 0:w.map)==null?void 0:L.cardHideEmpty)??null}),oe=Oe.useRoute(),{activateTemporaryLayer:te,deactivateTemporaryLayer:J,clearTemporaryLayers:S,isTemporaryLayerActive:F}=xn(R.map);function M(w){window.dispatchEvent(new CustomEvent(Eu,{detail:w}))}const B=e.computed(()=>{var w;return((w=o.cardFeature.value)==null?void 0:w.source)??null}),j=e.computed(()=>B.value?`map-card:${B.value}`:"map-card"),X=e.computed(()=>{var ce,xe;const w=o.cardFeature.value,L=(w==null?void 0:w.source)||((ce=w==null?void 0:w.layer)==null?void 0:ce.id),G=((xe=w==null?void 0:w.properties)==null?void 0:xe.id)??(w==null?void 0:w.id);return L&&G!=null?`${L}:${G}`:null}),he=e.ref(null),Z=e.ref([]),P=e.ref(0),q=new Map;function H(){if(typeof window>"u")return null;const L=(window.location.pathname||"").match(/\/maps?\/([^/]+)/i);return L&&L[1]?L[1]:null}const re=e.computed(()=>{const w=typeof n.mapId=="string"?n.mapId.trim():"";if(w.length)return w;const L=typeof oe.params.slug=="string"?oe.params.slug.trim():"";if(L.length)return L;const G=typeof oe.query.slug=="string"?oe.query.slug.trim():"";return G.length?G:H()}),I=e.ref(null),le=e.ref(null),me=new Map;function be(w){const L=w.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(L)return L;const G=Array.from(w).map(ce=>ce.charCodeAt(0).toString(16)).join("").slice(0,8);return G?`layer-${G}`:`layer-${Math.random().toString(36).slice(2,8)}`}function A(w){if(typeof w!="string")return"";const L=w.trim();if(!L)return"";if(/^https?:\/\//i.test(L))return L;if(L.startsWith("//"))return typeof window>"u"?`https:${L}`:`${window.location.protocol}${L}`;const G=typeof window<"u"?window.location.origin:"";return L.startsWith("/")?G?`${G}${L}`:L:G?`${G}/${L}`:L}function K(w){if(w==null)return[];if(Array.isArray(w))return w.flatMap(L=>K(L));if(typeof w=="number")return Number.isFinite(w)?[w]:[];if(typeof w=="string"){const L=w.match(/-?\d+(?:\.\d+)?/g);return!L||!L.length?[]:L.map(G=>Number(G)).filter(G=>Number.isFinite(G))}return[]}function fe(w){const L=K(w);if(L.length<4)return null;const[G,ce,xe,Ve]=L;return[G,ce,xe,Ve].every(Ne=>Number.isFinite(Ne))?[G,ce,xe,Ve]:null}function ie(w){if(!w)return null;const L=w.trim();if(!L.length)return null;try{const xe=JSON.parse(L),Ve=fe(xe);if(Ve)return Ve}catch{}const G=L.match(/-?\d+(?:\.\d+)?/g);if(!G||G.length<4)return null;const ce=G.slice(0,4).map(xe=>Number(xe));return ce.every(xe=>Number.isFinite(xe))?[ce[0],ce[1],ce[2],ce[3]]:null}function de(w){const L={},G=/([:@\w-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;let ce;for(;(ce=G.exec(w))!==null;){const xe=ce[1],Ve=ce[2]??ce[3]??ce[4]??"";xe&&(L[xe]=Ve)}return L}function pe(w,L){for(const G of L)if(w[G]!=null&&String(w[G]).trim().length)return String(w[G]).trim();return""}function ve(w){if(!(w!=null&&w.length))return;const L=Number(w);return Number.isFinite(L)?L:void 0}function U(w){if(typeof w!="string"||!w.length)return[];const L=[],G=/<LayerSwitcher\b([^>]*)>([\s\S]*?)<\/LayerSwitcher>/gi;let ce=0,xe;const Ve=new Set,Ne=ze=>{let Re=ze,qe=2;for(;Ve.has(Re);)Re=`${ze}-${qe}`,qe+=1;return Ve.add(Re),Re};for(;(xe=G.exec(w))!==null;){const[ze,Re="",qe=""]=xe,Ge=xe.index;if(Ge>ce){const Ga=w.slice(ce,Ge);Ga.trim().length&&L.push({type:"html",content:Ga})}const tt=de(Re),pt=pe(tt,["title"])||"Тимчасовий шар",zt=A(pe(tt,["url"]));if(!zt){L.push({type:"html",content:ze}),ce=Ge+ze.length;continue}const Yn=pe(tt,["id"]),el=pe(tt,["button-text","buttonText","show","show-label","showLabel"]),b$=ve(pe(tt,["tile-size","tileSize"])),x$=ve(pe(tt,["minzoom","minZoom"])),k$=ve(pe(tt,["maxzoom","maxZoom"])),w$=ve(pe(tt,["opacity"])),_$=ie(pe(tt,["bounds","data-bounds","bbox"])),E$=Yn||be(`${pt}-${zt}`)||be(pt),Wa=Ne(E$||`layer-${L.length+1}`),tl=qe.trim(),Ya=/<[^>]+>/.test(tl),C$=Ya?tl:null,nl=Ya?null:tl,N$=el&&el.trim().length?el.trim():nl&&nl.trim().length?nl.trim():void 0;L.push({type:"layer",spec:{id:Wa,title:pt,url:zt,tileSize:b$,minzoom:x$,maxzoom:k$,opacity:w$,bounds:_$},componentProps:{title:pt,url:zt,id:Wa,buttonText:N$},slotText:C$}),ce=Ge+ze.length}if(ce<w.length){const ze=w.slice(ce);ze.trim().length&&L.push({type:"html",content:ze})}return!L.length&&w.trim().length&&L.push({type:"html",content:w}),L}function ne(w){if(!w)return null;const L=typeof w.id=="string"?w.id.trim():"",G=typeof w.title=="string"?w.title.trim():"",ce=A(typeof w.url=="string"?w.url:"");return!L||!ce?null:{id:L,title:G||L,url:ce,tileSize:w.tileSize,minzoom:w.minzoom,maxzoom:w.maxzoom,opacity:w.opacity,bounds:w.bounds}}const we=e.computed(()=>{if(_.value&&r.current.value)return r.current.value.data??{};const w=o.card.value;return(w==null?void 0:w.rows)??{}}),$e=e.computed(()=>{if(_.value&&r.current.value){const ce=r.current.value,xe=Array.isArray(ce.columns)?ce.columns:[];return xe.length?xe:ce.fields??[]}const w=o.card.value;if(!w)return[];const L=Array.isArray(w.columns)?w.columns:[];return L.length?L:Array.isArray(w.fields)?w.fields:[]}),Pe=e.computed(()=>{const w=$e.value;if(!w.length)return[];const L=we.value;return w.map(G=>({key:G.name,label:G.ua||G.label||G.title||G.name,value:et(L[G.name],G.format||"text",G.type||"text"),format:G.format||"text"}))}),Le=new Set(["—","-","–","−"]);function Ue(w){const L=w.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!L)return w;const[,G,ce,xe]=L;return`${xe}.${ce}.${G}`}function We(w){return Number.isFinite(w)?new Intl.NumberFormat("uk-UA").format(w):"—"}function et(w,L,G){if(w==null)return"—";if(L==="tags")return w;if(Array.isArray(w))return w.length?w.map(ce=>et(ce,"text","text")).join(", "):"—";if(typeof w=="boolean")return w?"так":"ні";if(G==="number"&&typeof w=="number")return We(w);if(typeof w=="string"){const ce=w.trim();if(!ce.length)return"—";if(/^\d{4}-\d{2}-\d{2}$/.test(ce))return Ue(ce);if(G==="number"&&/^-?\d+(?:\.\d+)?$/.test(ce)){const xe=Number(ce);return Number.isFinite(xe)?We(xe):ce}return ce}return String(w)}function Q(w){if(w==null)return!0;if(typeof w=="string"){const L=w.trim();return L.length?Le.has(L):!0}return!1}function $(w){if(!w)return[];if(Array.isArray(w))return w;if(typeof w=="string"){const L=w.trim();if(L.startsWith("{")&&L.endsWith("}")){const ce=L.slice(1,-1).match(/"((?:[^"\\]|\\.)*)"/g);return ce?ce.map(xe=>xe.slice(1,-1).replace(/\\"/g,'"')):[]}}return[]}const D=e.ref(!1),v=e.ref(!0),z=()=>{var w,L;return typeof window>"u"?null:((L=(w=window.localStorage)==null?void 0:w.getItem)==null?void 0:L.call(w,El))??null},W=e.ref(z()),ge=w=>{const L=typeof w=="string"&&w.toLowerCase()==="true";D.value=L,v.value=!L},ke=w=>{W.value=w};if(typeof window<"u"){const w=L=>{L.key===El&&ke(L.newValue)};window.addEventListener("storage",w),e.onBeforeUnmount(()=>{window.removeEventListener("storage",w)})}const _e=e.computed(()=>typeof W.value=="string");e.watch(W,w=>{ge(typeof w=="string"?w:ue.value)},{immediate:!0}),e.watch(ue,w=>{_e.value||ge(w)},{immediate:!0});const Be=e.computed(()=>Pe.value.filter(w=>Q(w.value)).length),Te=e.computed(()=>D.value&&!v.value?Pe.value.filter(w=>!Q(w.value)):Pe.value);function Ye(w){const L=typeof w=="string"?w:"";if(!L.length)return{sanitized:"",hiddenCount:0};if(typeof DOMParser>"u")return{sanitized:L,hiddenCount:0};const ce=new DOMParser().parseFromString(L,"text/html");let xe=0;return ce.querySelectorAll("dd").forEach(Ve=>{var Re;const Ne=((Re=Ve.textContent)==null?void 0:Re.trim())??"",ze=Ve.closest("div");if(Q(Ne)){xe+=1,ze?ze.remove():Ve.remove();return}}),{sanitized:ce.body.innerHTML,hiddenCount:xe}}const Xe=e.computed(()=>Ye(ee.value)),nt=e.computed(()=>ee.value?Xe.value.hiddenCount:0),mt=e.computed(()=>Be.value+nt.value),Yt=e.computed(()=>{var w;return D.value&&!v.value&&!!((w=ee.value)!=null&&w.trim())}),Rr=e.computed(()=>D.value&&mt.value>0),xt=e.computed(()=>v.value?"Приховати пусті значення":"Показати пусті значення"),Or=e.computed(()=>v.value?ye.ChevronUp:ye.ChevronDown);function Mo(){v.value=!v.value}const Gt=e.computed(()=>{const w=Yt.value?Xe.value.sanitized:ee.value??"";return U(w)}),In=e.computed(()=>Gt.value.filter(w=>w.type==="layer"));function Ur(w){return Array.isArray(w)?w.map((L,G)=>{const ce=A(typeof(L==null?void 0:L.url)=="string"?L.url:""),xe=typeof(L==null?void 0:L.geohub)=="string"&&L.geohub.trim().length?`/api-hub/tms/${L.geohub.trim()}/ua/{z}/{x}/{y}.png`:"",Ve=((L==null?void 0:L.name)||(L==null?void 0:L.title)||(L==null?void 0:L.label)||`Шар ${G+1}`).toString(),Ne=(L==null?void 0:L.id)!=null?String(L.id):be(`${Ve}-${G+1}`),ze=(L==null?void 0:L.buttonText)||(L==null?void 0:L.button_text)||null,Re=(L==null?void 0:L.description)||(L==null?void 0:L.subtitle)||null,qe=ce||A(xe)||"";if(!qe)return null;const Ge={id:Ne,title:Ve,url:qe,subtitle:Re,buttonText:ze||void 0};typeof(L==null?void 0:L.tileSize)=="number"&&(Ge.tileSize=L.tileSize),typeof(L==null?void 0:L.tile_size)=="number"&&(Ge.tileSize=L.tile_size),typeof(L==null?void 0:L.minzoom)=="number"&&(Ge.minzoom=L.minzoom),typeof(L==null?void 0:L.maxzoom)=="number"&&(Ge.maxzoom=L.maxzoom),typeof(L==null?void 0:L.opacity)=="number"&&(Ge.opacity=L.opacity);const tt=fe((L==null?void 0:L.bounds)??(L==null?void 0:L.bbox)??null);return tt&&(Ge.bounds=tt),Ge}).filter(Boolean):[]}const un=e.computed(()=>{var ce,xe;const w=o.card.value,L=r.current.value,G=[(ce=w==null?void 0:w.rows)==null?void 0:ce.layers,w==null?void 0:w.layers,(xe=L==null?void 0:L.data)==null?void 0:xe.layers,L==null?void 0:L.layers];for(const Ve of G){const Ne=Ur(Ve);if(Ne.length)return Ne}return[]}),qr=e.computed(()=>Gt.value.length>0||Pe.value.length>0||un.value.length>0),Fo=e.computed(()=>!o.cardLoading.value&&!!o.card.value);function Hr(){const w={},L=I.value;if(L&&typeof L=="object"&&Object.entries(L).forEach(([G,ce])=>{typeof ce=="string"&&(w[G]=ce)}),B.value&&(w.layer=B.value),!w.geohub){const G=typeof(L==null?void 0:L.geohub)=="string"?L.geohub:null,ce=typeof(L==null?void 0:L.geohub_key)=="string"?L.geohub_key:null,xe=typeof(L==null?void 0:L.geohubId)=="string"?L.geohubId:null;w.geohub=G||ce||xe||w.layer||""}return w}async function Wr(){const w=B.value;if(!w)return I.value=null,le.value=null,null;if(le.value===w&&I.value)return I.value;if(me.has(w)){const L=me.get(w);return I.value=L,le.value=w,L}try{const L=await fetch(`/api/gis-service/${encodeURIComponent(w)}`);if(!L.ok)return null;const G=await L.json();return me.set(w,G),I.value=G,le.value=w,G}catch{return null}}async function jn(w){if(!(w!=null&&w.id))return;await Wr();const L=Hr(),G=In.value.find(ze=>ze.spec.id===w.id),ce=un.value.find(ze=>ze.id===w.id),xe=(G==null?void 0:G.spec)||ne(ce)||ne(w),Ve=(G==null?void 0:G.spec.bounds)??(ce==null?void 0:ce.bounds);if(!xe||F(xe.id,j.value))return;const Ne=j.value||void 0;he.value=Ne??null,te(xe,L,Ne),M({action:"activate",owner:Ne,spec:xe,context:L}),Yr(Ve)}async function Yr(w){var Ve;if(!(w!=null&&w.length))return;const[L,G,ce,xe]=w;[L,G,ce,xe].every(Ne=>Number.isFinite(Ne))&&typeof R.fitBounds=="function"&&(await((Ve=R.ready)==null?void 0:Ve.call(R)),R.fitBounds([[L,G],[ce,xe]],{padding:48,maxZoom:18}))}function Gr(w){if(!w)return;const L=Rn()||void 0;J(w,L),M({action:"deactivate",owner:L,spec:{id:w}})}function Kr(w){return F(w,Rn())}function Zr(w,L){const G=L.target;!!(G!=null&&G.checked)?jn(w):Gr(w.id)}function Rn(){return he.value||j.value||null}e.watch(B,(w,L)=>{w!==L&&(I.value=null,le.value=null)});const{next:Do,prev:On,count:Un,index:fn}=r,Po=e.computed(()=>o.count.value),Xr=e.computed(()=>o.index.value),zo=e.computed(()=>_.value?!1:d.value?s.value.length>1:Po.value>1),qn=e.computed(()=>_.value?Un.value:d.value?s.value.length:Po.value),mn=e.computed(()=>_.value?fn.value:d.value?i.value:Xr.value),Jr=()=>{if(d.value){if(i.value>=s.value.length-1)return;g(i.value+1);return}o.next()},Qr=()=>{if(d.value){if(i.value<=0)return;g(i.value-1);return}o.prev()};function vt(){const w=Rn();w&&(S(w),M({action:"clear",owner:w}),he.value=null)}function Hn(){m(),o.close(),r.close(),vt(),h(null)}e.watch(N,(w,L)=>{!w&&L&&(vt(),Je())});function pn(){!o.isOpen.value&&!r.active.value&&vt()}e.watch(()=>o.isOpen.value,()=>{pn()}),e.watch(()=>r.active.value,()=>{pn()}),e.watch(B,(w,L)=>{w&&L&&w!==L&&vt()}),e.watch(fn,(w,L)=>{w!==L&&vt()}),e.watch(X,(w,L)=>{w&&L&&w!==L&&vt()});function Kt(w){if(!w)return null;if(w.geometry)return w.geometry;const L=(w==null?void 0:w.data)??(w==null?void 0:w.properties);return L!=null&&L.geom_4326?L.geom_4326:L!=null&&L.geom?L.geom:null}function Je(){Z.value.length&&(Z.value.forEach((w,L)=>{var G;(G=w==null?void 0:w.remove)==null||G.call(w,L===0)}),Z.value=[])}function Io(w){var G,ce,xe;const L=(w==null?void 0:w.type)||((xe=(ce=(G=w==null?void 0:w.features)==null?void 0:G[0])==null?void 0:ce.geometry)==null?void 0:xe.type)||"";return L.includes("Polygon")?[{type:"fill",paint:{"fill-color":"#A91A9E","fill-opacity":.18}},{type:"line",paint:{"line-color":"#ffffff","line-width":6,"line-opacity":.95}},{type:"line",paint:{"line-color":"#A91A9E","line-width":3,"line-opacity":1}}]:L.includes("LineString")?[{type:"line",paint:{"line-color":"#ffffff","line-width":7,"line-opacity":.95}},{type:"line",paint:{"line-color":"#A91A9E","line-width":4,"line-opacity":1}}]:[{type:"circle",paint:{"circle-color":"#ffffff","circle-opacity":.95,"circle-radius":10}},{type:"circle",paint:{"circle-color":"#A91A9E","circle-opacity":1,"circle-radius":7}}]}let gn=null;function Wn(){return p()}function jo(w){var xe,Ve;if(!w)return null;const L=(w==null?void 0:w.source)??((xe=w==null?void 0:w.layer)==null?void 0:xe.id),G=((Ve=w==null?void 0:w.properties)==null?void 0:Ve.id)??(w==null?void 0:w.id);return!L||G===void 0||G===null?null:`${L},${G}`.trim()||null}function Zt(w,L){if(w){if(Array.isArray(w)){if(w.length>=2&&typeof w[0]=="number"&&typeof w[1]=="number"){L.push([w[0],w[1]]);return}w.forEach(G=>Zt(G,L));return}typeof w=="object"&&(Array.isArray(w.coordinates)&&Zt(w.coordinates,L),Array.isArray(w.features)&&w.features.forEach(G=>Zt(G==null?void 0:G.geometry,L)))}}function O(w){var ze,Re;if(!w)return null;const L=w.type==="FeatureCollection"?(Re=(ze=w.features)==null?void 0:ze[0])==null?void 0:Re.geometry:w.type==="Feature"?w.geometry:w,G=[];if(Zt(L,G),!G.length)return null;let ce=G[0][0],xe=G[0][0],Ve=G[0][1],Ne=G[0][1];return G.forEach(([qe,Ge])=>{qe<ce&&(ce=qe),qe>xe&&(xe=qe),Ge<Ve&&(Ve=Ge),Ge>Ne&&(Ne=Ge)}),[(ce+xe)/2,(Ve+Ne)/2]}async function se(w,L){var Ve;const G=Wn();if(!G||G.startsWith("external:"))return;const ce=jo(w);if(!ce||ce!==G||gn===G)return;const xe=O(L);xe&&(await((Ve=R.ready)==null?void 0:Ve.call(R)),R.flyTo({center:xe,zoom:Cu}),gn=G)}function Se(w){var xe;if(!w){Je();return}const L=(xe=R.map)==null?void 0:xe.value,G={type:"FeatureCollection",features:[{type:"Feature",geometry:w,properties:{}}]};Je();const ce=Io(w);if(Z.value=ce.map((Ve,Ne)=>Ie(`feature-card-highlight${Ne||""}`,{...Ne===0?{source:{type:"geojson",data:G}}:{},sourceId:"feature-card-highlight",layer:{id:`feature-card-highlight${Ne||""}`,type:Ve.type,source:"feature-card-highlight",paint:Ve.paint}},R.map)),L!=null&&L.moveLayer){const Ve=()=>{try{Z.value.forEach(qe=>{var tt;const Ge=(tt=qe==null?void 0:qe.ids)==null?void 0:tt.layerId;Ge&&L.moveLayer(Ge)})}catch{}},Ne=()=>{typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame(()=>{window.requestAnimationFrame(Ve)}):setTimeout(Ve,0)};Ne();const ze=()=>Ne();L.once("styledata",ze);const Re=()=>{Ne(),L.off("styledata",ze),L.off("idle",Re)};L.on("idle",Re)}}function Me(w){var ce,xe;const L=(w==null?void 0:w.source)||((ce=w==null?void 0:w.layer)==null?void 0:ce.id)||"unknown",G=((xe=w==null?void 0:w.properties)==null?void 0:xe.id)??(w==null?void 0:w.id)??"unknown";return`${L}:${G}`}async function Ce(w){var Ve,Ne,ze,Re,qe;if(!w)return null;const L=Kt(w);if(L)return L;const G=((Ve=w==null?void 0:w.properties)==null?void 0:Ve.id)??(w==null?void 0:w.id);if(!G)return null;const ce=Me(w);if(q.has(ce))return q.get(ce);const xe=[re.value,w==null?void 0:w.source,(Ne=w==null?void 0:w.layer)==null?void 0:Ne.id].map(Ge=>typeof Ge=="string"?Ge.trim():"").filter(Boolean);for(const Ge of xe)try{const tt=await fetch(`/api/map-features/${encodeURIComponent(Ge)}/${encodeURIComponent(String(G))}`);if(!tt.ok)continue;const pt=await tt.json(),zt=((ze=pt==null?void 0:pt.data)==null?void 0:ze.geom)||((Re=pt==null?void 0:pt.data)==null?void 0:Re.geometry)||((qe=pt==null?void 0:pt.data)==null?void 0:qe.geom_4326)||null,Yn=typeof zt=="string"?JSON.parse(zt):zt;if(Yn)return q.set(ce,Yn),Yn}catch{continue}return null}async function De(w){P.value+=1;const L=P.value;if(C())return;if(!w||_.value){Je();return}if(!Fo.value){Je();return}const G=await Ce(w);if(L===P.value){if(!G){Je();return}Se(G),se(w,G)}}async function je(w){var G,ce,xe;const L=k(w);if(!L){(G=p())!=null&&G.startsWith("external:")&&(m(),Je());return}if(((ce=u.value)==null?void 0:ce.infoToken)===L.token){C();return}try{const Ve=await fetch(`/api/map-format?layer=${encodeURIComponent(L.layer)}&id=${encodeURIComponent(L.id)}`);if(!Ve.ok)throw new Error(`Failed (${Ve.status})`);const Ne=await Ve.json(),ze=typeof(Ne==null?void 0:Ne.html)=="string"?Ne.html:null,Re=f(((xe=Ne==null?void 0:Ne.data)==null?void 0:xe.geom)??(Ne==null?void 0:Ne.geom)??null);if(!ze&&!Re){m(),Je();return}b([{html:ze,geometry:Re,infoToken:L.token}],0)}catch{m(),Je()}}return e.watch(()=>o.cardFeature.value,w=>{De(w)},{immediate:!0}),e.watch(()=>o.index.value,()=>{_.value||De(o.cardFeature.value)}),e.watch(_,w=>{if(w){y.value||Je();return}if(y.value){C();return}De(o.cardFeature.value)}),e.watch(re,()=>{if(y.value){C();return}!_.value&&o.cardFeature.value&&De(o.cardFeature.value)}),e.watch(Fo,w=>{C()||(w?De(o.cardFeature.value):Je())}),e.watch(()=>Wn(),w=>{if(gn=null,w!=null&&w.startsWith("external:")){je(w);return}u.value&&(m(),Je())},{immediate:!0}),e.watch(u,w=>{var L;if(!((L=w==null?void 0:w.html)!=null&&L.trim())){Je();return}C()}),e.onBeforeUnmount(()=>{vt(),Je()}),(w,L)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[N.value?(e.openBlock(),e.createElementBlock("div",Yd,[e.createElementVNode("div",Gd,[e.createElementVNode("div",Kd,[e.createElementVNode("p",Zd,[_.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString(mn.value+1)+" / "+e.toDisplayString(qn.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[zo.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Об’єкт "+e.toDisplayString(mn.value+1)+" / "+e.toDisplayString(qn.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Інформація про об’єкт ")],64))],64))])]),_.value&&e.unref(Un)>1?(e.openBlock(),e.createElementBlock("div",Xd,[e.createElementVNode("button",{onClick:L[0]||(L[0]=(...G)=>e.unref(On)&&e.unref(On)(...G)),disabled:e.unref(fn)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ye.ArrowLeft),{class:"h-4 w-4"})],8,Jd),e.createElementVNode("button",{onClick:L[1]||(L[1]=(...G)=>e.unref(Do)&&e.unref(Do)(...G)),disabled:e.unref(fn)===e.unref(Un)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ye.ArrowRight),{class:"h-4 w-4"})],8,Qd)])):!_.value&&zo.value?(e.openBlock(),e.createElementBlock("div",eu,[e.createElementVNode("button",{onClick:Qr,disabled:mn.value===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ye.ArrowLeft),{class:"h-4 w-4"})],8,tu),e.createElementVNode("button",{onClick:Jr,disabled:mn.value>=qn.value-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ye.ArrowRight),{class:"h-4 w-4"})],8,nu)])):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:Hn}," ✕ ")]),e.createElementVNode("div",ou,[T.value?(e.openBlock(),e.createElementBlock("div",ru," Завантаження даних… ")):Y.value?(e.openBlock(),e.createElementBlock("div",lu,e.toDisplayString(Y.value),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[Pe.value.length?(e.openBlock(),e.createElementBlock("div",au,[e.createElementVNode("dl",su,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Te.value,G=>(e.openBlock(),e.createElementBlock("div",{key:G.key,class:"grid grid-cols-1 gap-1 py-3 sm:grid-cols-10 sm:gap-4 even:bg-gray-50 text-[12px]"},[e.createElementVNode("dt",iu,e.toDisplayString(G.label),1),e.createElementVNode("dd",{class:e.normalizeClass(["text-gray-700 sm:col-span-6 font-normal whitespace-pre-wrap",G.format==="badge"?"font-semibold text-yellow-800":""])},[G.format==="tags"?(e.openBlock(),e.createElementBlock("div",cu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($(G.value),(ce,xe)=>(e.openBlock(),e.createElementBlock("span",{key:xe,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold text-foreground"},e.toDisplayString(ce),1))),128))])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(G.value),1)],64))],2)]))),128))])])):Gt.value.length?(e.openBlock(),e.createElementBlock("div",du,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Gt.value,(G,ce)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:ce},[G.type==="html"?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:G.content},null,8,uu)):(e.openBlock(),e.createBlock(wl,{key:1,title:G.componentProps.title,url:G.componentProps.url,id:G.componentProps.id,"button-text":G.componentProps.buttonText,onActivate:jn},e.createSlots({_:2},[G.slotText?{name:"default",fn:e.withCtx(()=>[e.createElementVNode("span",{innerHTML:G.slotText},null,8,fu)]),key:"0"}:void 0]),1032,["title","url","id","button-text"]))],64))),128))])):e.createCommentVNode("",!0),In.value.length?(e.openBlock(),e.createElementBlock("div",mu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(In.value,G=>(e.openBlock(),e.createBlock(wl,{key:G.spec.id,title:G.componentProps.title,url:G.componentProps.url,id:G.spec.id,"button-text":G.componentProps.buttonText,onActivate:jn},null,8,["title","url","id","button-text"]))),128))])):e.createCommentVNode("",!0),Rr.value?(e.openBlock(),e.createElementBlock("div",pu,[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:Mo},[e.createElementVNode("span",gu,e.toDisplayString(xt.value),1),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(Or.value),{class:"h-3 w-3 stroke-[1.5px]"}))])])):e.createCommentVNode("",!0),un.value.length?(e.openBlock(),e.createElementBlock("div",yu,[L[3]||(L[3]=e.createElementVNode("p",{class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},"Шари",-1)),e.createElementVNode("div",hu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(un.value,G=>(e.openBlock(),e.createElementBlock("div",{key:G.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",bu,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:Kr(G.id),onChange:ce=>Zr(G,ce)},null,40,xu),L[2]||(L[2]=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",ku,e.toDisplayString(G.title),1)]),G.subtitle?(e.openBlock(),e.createElementBlock("div",wu,e.toDisplayString(G.subtitle),1)):e.createCommentVNode("",!0)]))),128))])])):e.createCommentVNode("",!0),qr.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",_u," Даних не знайдено. "))],64))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-86374b23"]]),Nu={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%"}},Vu={class:"flex flex-col gap-1 p-5"},$u={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},nr=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:r}=Qe(),l=e.ref([]);let s=null;function i(y){return y?y.map((a,m)=>{var k;const f=(a==null?void 0:a.name)||(a==null?void 0:a.label)||(a==null?void 0:a.title)||(a==null?void 0:a.id)||`Layer ${m+1}`,p=(a==null?void 0:a.color)||(a==null?void 0:a.fill)||((k=a==null?void 0:a.paint)==null?void 0:k.color)||"#3388ff";return{id:`${f}-${m}`,label:f,color:p}}):[]}function c(y){return y!=null&&y.layers?y.layers.filter(a=>{const m=a.paint||{};return m["fill-color"]||m["line-color"]||m["circle-color"]}).map((a,m)=>{var k;const f=a.paint||{},p=f["fill-color"]||f["line-color"]||f["circle-color"]||"#3388ff";return{id:a.id||`layer-${m}`,label:((k=a.metadata)==null?void 0:k.title)||a.id||`Layer ${m+1}`,color:p}}):[]}async function u(){var m;await r();const y=o.value;if(!y)return;const a=(m=y.getStyle)==null?void 0:m.call(y);l.value=c(a)}function d(){o.value&&(s==null||s())}return e.watch(()=>n.items,async y=>{y!=null?(l.value=i(y),s==null||s()):(await r(),d(),u())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await r(),d(),u())}),e.onBeforeUnmount(()=>{s==null||s(),s=null}),(y,a)=>l.value.length?(e.openBlock(),e.createElementBlock("div",Nu,[e.createElementVNode("div",Vu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,m=>(e.openBlock(),e.createElementBlock("div",{key:m.id,class:"flex items-center"},[e.createElementVNode("span",{class:"shrink-0 size-2.5 inline-block me-2.5 h-[10px] w-[10px] rounded-full",style:e.normalizeStyle({background:m.color})},null,4),e.createElementVNode("span",$u,[e.createElementVNode("span",null,e.toDisplayString(m.label),1)])]))),128))])])):e.createCommentVNode("",!0)}}),Bu={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"},or=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",Bu,[e.createVNode(to,{layer:{filters:t.filters,id:t.layerId},count:t.filters.length},null,8,["layer","count"])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-98772410"]]),oo=e.ref({}),ro=e.ref([]);function Su(t){const n={};t.forEach(o=>{o!=null&&o.id&&(n[o.id]=o)}),oo.value=n}function vu(t){ro.value=[...t]}function Lu(){oo.value={},ro.value=[]}function Tu(t){return t.legend?(Array.isArray(t.legend)?t.legend:[t.legend]).filter(Boolean):[]}const Cl=e.computed(()=>{const t=[];return ro.value.forEach(n=>{const o=oo.value[n];o&&Tu(o).forEach(r=>{t.push({...r,name:r.name??r.label??o.name,label:r.label??r.name??o.name})})}),t});function Au(t,n={}){const o=t==null?void 0:t.config;return Array.isArray(o)?o:o&&typeof o=="object"&&Array.isArray(o.items)?o.items:(o&&typeof o=="object"?o.source:void 0)==="catalog"||n.hasCatalogWidget?Cl.value:[]}function Nl(){return{layersById:oo,selectedLayerIds:ro,catalogLegendItems:Cl,registerCatalogLayers:Su,setCatalogSelectedLayerIds:vu,resetMapCatalogLegend:Lu,resolveMapLegendItems:Au}}const Mu={class:"catalog-tab__search relative mt-[10px]"},Fu={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%)"}},Du={class:"catalog-tab__list flex-1 overflow-y-auto mt-2"},Pu={key:0,class:"text-sm text-gray-400 text-center mt-6"},zu=["onClick"],Iu={class:"flex items-center gap-x-3"},ju={class:"max-w-[260px] text-[14px] text-[#4b5563]"},Ru={class:"text-xs opacity-60 text-[#4b5563]"},Ou={class:"flex items-center cursor-pointer gap-2 flex-1"},Uu=["checked","onChange"],qu={class:"text-[13px] text-gray-600 max-w-[260px]"},Hu={class:"flex items-center gap-2"},Wu=Ae(e.defineComponent({__name:"LayersCatalogTab",props:{catalog:{},selected:{},search:{}},emits:["toggle-layer","update:search","open-filter"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),s=e.ref(null),i=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0,layerId:null}),c=new Intl.Collator("uk",{sensitivity:"base"}),u=e.computed(()=>{const g=o.search.trim().toLowerCase();return o.catalog.groups.map(b=>{const x=b.layers.filter(C=>{const V=k(C);return V?g?V.toLowerCase().includes(g):!0:!1}).sort((C,V)=>c.compare(k(C),k(V)));return{...b,layers:x}}).filter(b=>b.layers.length>0).sort((b,x)=>c.compare(b.name,x.name))}),d=e.computed({get:()=>o.search,set:g=>r("update:search",g)});function y(g){l[g]=!l[g],fd()}function a(g){return!!l[g]}function m(g,b){if(o.selected.includes(b)){i.visible=!1,i.layerId=null;return}const x=g.currentTarget;if(!x)return;const C=x.getBoundingClientRect(),V=typeof window<"u"?window.scrollX:0,E=typeof window<"u"?window.scrollY:0;i.left=C.left+C.width/2+V,i.top=C.bottom+8+E,i.layerId=b,i.visible=!0}function f(){i.visible=!1,i.layerId=null}function p(g){return[{label:"Назва",value:h(g.name)},{label:"Сервіс",value:h(g.service)},{label:"Посилання",value:h(g.url),breakLine:!0}]}function k(g){return typeof(g==null?void 0:g.name)=="string"?g.name.trim():""}function h(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,b)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"catalogRef",ref:s,class:"catalog-tab"},[e.createElementVNode("div",Mu,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b[0]||(b[0]=x=>d.value=x),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,d.value]]),(e.openBlock(),e.createElementBlock("svg",Fu,[...b[1]||(b[1]=[e.createElementVNode("path",{d:"M11 19C15.4183 19 19 15.4183 19 11C19 6.5817 15.4183 3 11 3C6.5817 3 3 6.5817 3 11C3 15.4183 6.5817 19 11 19Z",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M21 21L16.7 16.7",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))]),e.createElementVNode("div",Du,[u.value.length===0?(e.openBlock(),e.createElementBlock("div",Pu," Нічого не знайдено ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,x=>(e.openBlock(),e.createElementBlock("div",{key:x.id,class:"mt-2"},[e.createElementVNode("div",{class:"hover:bg-gray-100 cursor-pointer p-[8px] rounded-lg flex justify-between items-center",onClick:C=>y(x.id)},[e.createElementVNode("div",Iu,[(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",a(x.id)?"rotate-90":""])},[...b[2]||(b[2]=[e.createElementVNode("path",{d:"M1 9L5 5L1 1",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2)),e.createElementVNode("div",ju,e.toDisplayString(x.name),1)]),e.createElementVNode("div",Ru,e.toDisplayString(x.layers.length),1)],8,zu),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(x.layers,C=>(e.openBlock(),e.createElementBlock("div",{key:C.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",Ou,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:t.selected.includes(C.id),onChange:V=>g.$emit("toggle-layer",C.id,V.target.checked,C)},null,40,Uu),b[3]||(b[3]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600 shrink-0"},[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",qu,e.toDisplayString(C.name),1)]),e.createElementVNode("div",Hu,[Array.isArray(C.filters)&&C.filters.length?(e.openBlock(),e.createBlock(to,{key:0,count:C.filters.length,layer:C,disabled:!t.selected.includes(C.id),onMouseenter:V=>m(V,C.id),onMouseleave:f,onFocus:V=>m(V,C.id),onBlur:f},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(Go,{items:p(C)},null,8,["items"])])]))),128))],512),[[e.vShow,a(x.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-36ed2aad"]]),Yu={class:"flex flex-col gap-0"},Gu={class:"text-xs text-slate-600 font-semibold"},Ku=e.defineComponent({__name:"MapLayerPopover",props:{items:{}},setup(t,{expose:n}){const o=t,r=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),l=e.ref(null),s=e.ref(null);let i=null;const c=e.computed(()=>{if(!r.open)return{display:"none"};const k=Math.min(460,window.innerWidth-24);return{position:"absolute",width:`${k}px`,maxWidth:`${k}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}});function u(){if(r.open){m();return}if(!l.value){m();return}r.open=!0,e.nextTick(()=>{d(),f(),requestAnimationFrame(()=>{d()})})}function d(){if(!r.open||!l.value||!s.value)return;const k=l.value.getBoundingClientRect(),h=12,g=window.scrollX+h,b=window.scrollX+window.innerWidth-h,x=window.scrollY+h,C=window.scrollY+window.innerHeight-h,V=s.value.offsetWidth||Math.min(460,window.innerWidth-24),E=s.value.offsetHeight||0;let _=k.left+window.scrollX+(k.width-V)/2;_<g&&(_=g),_+V>b&&(_=Math.max(g,b-V)),r.left=_;let N=k.bottom+window.scrollY+h;N+E>C&&(N=k.top+window.scrollY-E-h,N<x&&(N=Math.max(x,C-E))),N<x&&(N=x),N+E>C&&(N=Math.max(x,C-E)),r.top=N,r.transform="none"}function y(k){var g,b;if(!r.open)return;const h=k.target;(g=l.value)!=null&&g.contains(h)||(b=s.value)!=null&&b.contains(h)||m()}function a(k){k.key==="Escape"&&m()}function m(){p(),r.open=!1,l.value=null,s.value=null}function f(){p(),s.value&&(i=new ResizeObserver(()=>{d()}),i.observe(s.value))}function p(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",y,!0),document.addEventListener("keydown",a),window.addEventListener("scroll",d,!0),window.addEventListener("resize",d)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",y,!0),document.removeEventListener("keydown",a),window.removeEventListener("scroll",d,!0),window.removeEventListener("resize",d),p()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>d())},{deep:!0}),n({close:m}),(k,h)=>(e.openBlock(),e.createElementBlock("div",{class:"inline-flex relative",ref_key:"anchorEl",ref:l},[e.createElementVNode("div",{onClick:e.withModifiers(u,["prevent","stop"])},[e.renderSlot(k.$slots,"default")]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.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(c.value),ref_key:"popoverEl",ref:s,onClick:h[0]||(h[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Yu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,g=>(e.openBlock(),e.createElementBlock("div",{key:g.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",Gu,e.toDisplayString(g.label),1),e.createElementVNode("div",{class:e.normalizeClass(["text-sm text-gray-800",{"break-all":g.breakLine}])},e.toDisplayString(g.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),Zu={class:"selected-tab"},Xu={class:"selected-tab__actions"},Ju={key:0,class:"selected-tab__scroll"},Qu=["onDragstart","onDragover","onDrop"],ef={class:"selected-tab__item-header"},tf={class:"selected-tab__item-info"},nf=["checked","onChange"],of={class:"selected-tab__item-name"},rf={class:"selected-tab__item-controls"},lf=["onClick"],af={class:"selected-tab__menu-inner"},sf=Ae(e.defineComponent({__name:"LayersSelectedTab",props:{catalog:{},selected:{},clientLayers:{}},emits:["select-layer","reorder","remove","toggle-layer"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),s=e.ref(null),i=e.ref(null),c=new Map,u=e.reactive({top:0,left:0}),d=e.ref(null),y=e.reactive({top:0,left:0}),a=e.ref(null),m=new Map,f=e.reactive({});function p(S){var M,B;const F=(M=o.clientLayers)==null?void 0:M[S];if(F){const j=F.bounds?[F.bounds[0][0],F.bounds[0][1],F.bounds[1][0],F.bounds[1][1]]:null;return{id:F.id,name:F.name,service:"geojson",isClient:!0,extent:j}}for(const j of((B=o.catalog)==null?void 0:B.groups)??[]){const X=j.layers.find(he=>he.id===S);if(X)return X}return null}e.watch(()=>o.selected,S=>{S.forEach(F=>{l[F]==null&&(l[F]=100)})},{immediate:!0});function k(){if(!s.value)return;const S=c.get(s.value);if(!S)return;const F=S.getBoundingClientRect();u.top=F.bottom+8+window.scrollY,u.left=F.left+window.scrollX}e.watch(()=>o.selected,S=>{S.forEach(F=>{f[F]==null&&(f[F]=!0)})},{immediate:!0});function h(S,F){var B;if(f[S]=F,(B=o.clientLayers)!=null&&B[S]){r("toggle-layer",S,F);return}const M=Ie(S);M&&M.setVisible(F)}function g(S,F){F?m.set(S,F):m.delete(S)}function b(S){d.value=d.value===S?null:S,d.value&&e.nextTick(()=>{x(S),requestAnimationFrame(()=>{x(S)})})}function x(S){const F=m.get(S);if(!F||!a.value)return;const M=F.getBoundingClientRect(),B=12,j=6,X=window.scrollX+B,he=window.scrollX+window.innerWidth-B,Z=window.scrollY+B,P=window.scrollY+window.innerHeight-B,q=a.value.offsetWidth||190,H=a.value.offsetHeight||0;let re=M.bottom+window.scrollY+j,I=M.left+window.scrollX;I+q>he&&(I=M.right+window.scrollX-q,I<X&&(I=X)),I<X&&(I=X),re+H>P&&(re=M.top+window.scrollY-H-j,re<Z&&(re=Math.max(Z,P-H))),re<Z&&(re=Z),re+H>P&&(re=Math.max(Z,P-H)),y.top=re,y.left=I}function C(S){const F=Ie(S);F&&F.remove(),r("remove",S),d.value=null}function V(S){const F=S.target,M=s.value,B=d.value;if(M){const j=i.value,X=c.get(M);if(j&&j.contains(F)||X&&X.contains(F))return;s.value=null}if(B){const j=a.value,X=m.get(B);if(j&&j.contains(F)||X&&X.contains(F))return;d.value=null}}function E(){s.value&&k(),d.value&&x(d.value)}e.onMounted(()=>{document.addEventListener("click",V),window.addEventListener("resize",E),window.addEventListener("scroll",E,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",V),window.removeEventListener("resize",E),window.removeEventListener("scroll",E,!0)});const{map:_}=Qe();function N(S){var X,he,Z,P,q,H;if(!S)return;const F=Ie(S),M=p(S);if(!F&&!M)return;if(((X=M==null?void 0:M.extent)==null?void 0:X.length)===4&&((he=_.value)!=null&&he.fitBounds)){const re=M.extent.map(I=>Number(I));if(re.every(I=>Number.isFinite(I))){const[I,le,me,be]=re;_.value.fitBounds([[I,le],[me,be]],{padding:40}),d.value=null;return}}const B=(P=(Z=o.clientLayers)==null?void 0:Z[S])==null?void 0:P.bounds;if(B&&((q=_.value)!=null&&q.fitBounds)){_.value.fitBounds(B,{padding:40}),d.value=null;return}(H=F==null?void 0:F.getSource)!=null&&H.call(F)&&(d.value=null)}const T=e.ref(null),Y=e.ref(null);function ee(S,F){T.value=F,Y.value=F,S.dataTransfer&&(S.dataTransfer.effectAllowed="move",S.dataTransfer.setData("text/plain",String(F)))}function R(S){Y.value=S}function ae(S,F){if(S.preventDefault(),T.value===null||T.value===F){T.value=null,Y.value=null;return}const B=[...o.selected],[j]=B.splice(T.value,1);B.splice(F,0,j),r("reorder",B),T.value=null,Y.value=null}function ue(){T.value=null,Y.value=null}function oe(S){return S==null||S===""?null:String(S)}function te(S,F){return!Array.isArray(S)||S.length===0?null:`${S.length} ${F}`}function J(S){var re,I,le,me,be,A;const F=Ie(S),M=p(S);if(!F&&!M)return[];const B=(M==null?void 0:M.name)||((I=(re=F==null?void 0:F.opts)==null?void 0:re.layer)==null?void 0:I.name)||null,j=(M==null?void 0:M.service)||((le=F==null?void 0:F.opts)==null?void 0:le.service)||null,X=(me=F==null?void 0:F.getSource)==null?void 0:me.call(F),he=X&&"tiles"in X?(be=X.tiles)==null?void 0:be[0]:(M==null?void 0:M.url)||null,Z=(M==null?void 0:M.source_path)||null,P=(F==null?void 0:F.popup)||(M==null?void 0:M.popup),q=(F==null?void 0:F.card)||(M==null?void 0:M.card),H=(M==null?void 0:M.filters)||((A=F==null?void 0:F.opts)==null?void 0:A.filters);return[{label:"Назва",value:oe(B)},{label:"Сервіс",value:oe(M!=null&&M.isClient?"Завантажені дані":j)},{label:"Посилання",value:oe(he),breakLine:!0},{label:"Джерело",value:oe(Z),breakLine:!0},{label:"Popup",value:te(P,"полів")},{label:"Картка",value:te(q,"полів")},{label:"Фільтри",value:te(H,"фільтрів")}]}return(S,F)=>(e.openBlock(),e.createElementBlock("div",Zu,[e.createElementVNode("div",Xu,[e.createElementVNode("button",{class:"selected-tab__add",onClick:F[0]||(F[0]=M=>r("select-layer"))},[...F[3]||(F[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",Ju,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.selected,(M,B)=>{var j;return e.openBlock(),e.createElementBlock("div",{key:M,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":T.value===B,"selected-tab__item--over":Y.value===B}]),draggable:"true",onDragstart:X=>ee(X,B),onDragover:e.withModifiers(X=>R(B),["prevent"]),onDrop:X=>ae(X,B),onDragend:ue},[e.createElementVNode("div",ef,[e.createElementVNode("div",tf,[F[4]||(F[4]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox shrink-0",checked:f[M]??!0,onChange:X=>h(M,X.target.checked)},null,40,nf),e.createElementVNode("span",of,e.toDisplayString(((j=p(M))==null?void 0:j.name)||"Шар"),1)]),e.createElementVNode("div",rf,[e.createVNode(bl,{"layer-id":M},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:X=>g(M,X),onClick:e.withModifiers(X=>b(M),["stop"])},[...F[5]||(F[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,lf)])])],42,Qu)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[d.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:a,class:"selected-tab__menu",style:e.normalizeStyle({top:y.top+"px",left:y.left+"px"})},[e.createElementVNode("div",af,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:F[1]||(F[1]=M=>N(d.value))},[...F[6]||(F[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(Ku,{items:J(d.value)},{default:e.withCtx(()=>[...F[7]||(F[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"]),F[9]||(F[9]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:F[2]||(F[2]=M=>C(d.value))},[...F[8]||(F[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-32207ce7"]]),cf={class:"filter-tab"},df={key:0,class:"filter-tab__header"},uf={class:"filter-tab__title"},ff={key:1,class:"filter-tab__content rounded-md"},mf={class:"filter-tab__scroll"},pf={key:2,class:"filter-tab__empty"},gf=Ae(e.defineComponent({__name:"LayersFilterTab",props:{layer:{},value:{}},emits:["change"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/filter")),r=t,l=n,s=e.computed(()=>{var u;return((u=r.layer)==null?void 0:u.filters)??[]}),i=e.computed(()=>s.value.length>0);function c(u){l("change",u.data)}return(u,d)=>(e.openBlock(),e.createElementBlock("div",cf,[t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",df,[e.createElementVNode("div",null,[e.createElementVNode("p",uf,e.toDisplayString(t.layer.name),1)])])):e.createCommentVNode("",!0),t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",ff,[e.createElementVNode("div",mf,[e.createVNode(e.unref(o),{view:"vertical",schema:s.value,value:t.value,limit:5,class:"rounded-md pb-0",onChange:d[0]||(d[0]=y=>c(y))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",pf,[...d[1]||(d[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),yf={class:"flex items-center justify-between mb-1"},hf={class:"flex items-center gap-2"},bf={class:"text-lg font-semibold text-gray-800"},xf={key:0},kf={key:1,class:"block text-sm font-normal text-gray-500"},wf={class:"flex items-center gap-2"},_f={class:"flex mb-4 border-b border-gray-200"},Ef={class:"map-catalog-widget__body"},Vl=Ae(e.defineComponent({__name:"MapCatalogWidget",setup(t){const{registerCatalogLayers:n,setCatalogSelectedLayerIds:o,resetMapCatalogLegend:r}=Nl(),l=Oe.useRoute(),s=Oe.useRouter();function i(){const I=l.query["catalog-tab"];return(Array.isArray(I)?I[0]:I)==="selected"?"selected":"catalog"}const c=e.ref(i()),u=e.ref({groups:[]}),d=e.ref([]),y=e.ref(""),{map:a}=Qe(),{clientLayers:m,isClientLayer:f,getClientLayer:p,unregisterClientLayer:k,clearClientLayers:h}=Xo(),g=e.reactive({}),b=e.ref(null),x=e.ref(!0),C=e.ref(!1),{activateTemporaryLayer:V}=xn(a);function E(I){window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:{action:"activate",owner:"add-data",spec:I}}))}function _(I,le){var K,fe;const me=m.value[I]||p(I),be=Ie(I);if(!le){(K=be==null?void 0:be.setVisible)==null||K.call(be,!1);return}if((fe=be==null?void 0:be.isMounted)!=null&&fe.call(be)){be.setVisible(!0);return}if(!(me!=null&&me.data))return;const A={id:me.id,title:me.name,type:"geojson",data:me.data};V(A,{},"add-data"),E(A)}function N(I){const le=m.value[I];if(le){const me=le.bounds?[le.bounds[0][0],le.bounds[0][1],le.bounds[1][0],le.bounds[1][1]]:null;return{id:le.id,name:le.name,service:"geojson",isClient:!0,extent:me}}return u.value.groups.map(me=>me.layers.find(be=>be.id===I)).find(Boolean)||null}function T(I){return typeof(I==null?void 0:I.name)=="string"&&I.name.trim().length>0}function Y(){const I=b.value;if(!I)return;delete g[I];const le=Ie(I);le!=null&&le.setFilter&&le.setFilter("")}function ee(I,le){const me=Ie(I);if(g[I]={...le},!(me!=null&&me.setFilter))return;const be=Object.entries(le).filter(([,A])=>A!=null&&A!=="").map(([A,K])=>`${A}=${K}`);me.setFilter(be.join("|"))}function R(I){const le=b.value;le&&ee(le,I)}function ae(I){const le=I.url;let me=null;if(le&&(me=le.startsWith("http")?le:`${window.location.origin}${le}`),!me)return null;const be=(I.service||"").toString().toLowerCase(),A=I.count??null;return be&&be!=="vtile"?{service:be,count:A,source:{type:"raster",tiles:[me],tileSize:256,minzoom:0,maxzoom:20}}:{service:be,count:A,source:{type:"vector",tiles:[me],minzoom:0,maxzoom:14},layer:{style:I.style},card:I.card,popup:I.popup}}function ue(I,le,me){var fe;const be=me??N(I);if(!be)return;if(be.isClient){_(I,le),le&&!d.value.includes(I)&&d.value.push(I);return}const A=ae(be);if(!A)return;const K=Ie(be.id,A,a);if(K)if(K.setVisible(le),le){if(!d.value.includes(I)&&(d.value.push(I),(fe=a.value)!=null&&fe.getLayer(I)))try{a.value.moveLayer(I)}catch(ie){console.warn("Cannot move new layer",I,ie)}}else d.value=d.value.filter(ie=>ie!==I),b.value===I&&(Y(),b.value=null)}function oe(){d.value.forEach(I=>{var me;const le=Ie(I);le&&le.setVisible(!1),f(I)&&((me=le==null?void 0:le.remove)==null||me.call(le),k(I))}),d.value=[],h()}function te(I){var me;const le=Ie(I);(me=le==null?void 0:le.remove)==null||me.call(le),f(I)&&(k(I),window.dispatchEvent(new CustomEvent(eo,{detail:{id:I}})),window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:{action:"deactivate",spec:{id:I},owner:"add-data"}}))),d.value=d.value.filter(be=>be!==I),b.value===I&&(Y(),b.value=null)}function J(I){if(!(I instanceof CustomEvent))return;const{id:le}=I.detail||{};!le||typeof le!="string"||(d.value.includes(le)||d.value.push(le),c.value="selected")}function S(I){d.value=[...I],e.nextTick(()=>{var A;if(!a.value)return;const le=((A=a.value.getStyle())==null?void 0:A.layers)??[];let me;const be=K=>le.filter(fe=>{var ie,de;return(fe==null?void 0:fe.source)===K||(fe==null?void 0:fe.id)===K||((de=(ie=fe==null?void 0:fe.id)==null?void 0:ie.startsWith)==null?void 0:de.call(ie,`${K}`))}).map(fe=>fe.id);for(let K=I.length-1;K>=0;K-=1){const fe=I[K],ie=be(fe);ie.length&&(ie.forEach(de=>{var pe;if((pe=a.value)!=null&&pe.getLayer(de))try{a.value.moveLayer(de,me)}catch(ve){console.warn("Cannot move layer",de,ve)}}),me=ie[0])}})}function F(I){!I||!Array.isArray(I.filters)||I.filters.length===0||d.value.includes(I.id)&&(b.value=I.id,g[I.id]||(g[I.id]={}),c.value="filter")}function M(){c.value="catalog"}const B=e.computed(()=>b.value?N(b.value):null),j=e.computed(()=>{const I=b.value;return I?g[I]??{}:{}}),X=e.computed(()=>u.value.groups.reduce((I,le)=>I+le.layers.filter(T).length,0)),he=e.computed(()=>c.value==="selected"?"Вибрані шари":c.value==="filter"?"Фільтр шарів":"Каталог"),Z=e.computed(()=>c.value==="selected"?d.value.length:c.value==="catalog"?X.value:null),P=e.computed(()=>{var I;return c.value==="filter"?((I=B.value)==null?void 0:I.name)??"":""});async function q(){const le=await(await fetch("/api/gis-layer-list")).json(),me=new Map;le.forEach(K=>{const fe=K.group_id??"other";me.has(fe)||me.set(fe,{id:fe,name:K.group_name||"Інші шари",layers:[]}),me.get(fe).layers.push(K)}),u.value={groups:Array.from(me.values())},n(u.value.groups.flatMap(K=>K.layers)),o(d.value);const be=l.query.layers;if(!be)return;const A=Array.isArray(be)?be[0]:be;typeof A=="string"&&A.split(",").forEach(K=>{const fe=K.trim();if(!fe)return;const ie=N(fe);ie&&ue(fe,!0,ie)})}e.watch(b,I=>{!I&&c.value==="filter"&&(c.value="catalog")}),e.watch(B,I=>{!I&&b.value&&(b.value=null)}),e.watch(d,I=>{const le=I.filter(be=>!f(be));o(le);const me={...l.query};le.length?me.layers=le.join(","):delete me.layers,s.replace({query:me}).catch(()=>{})},{deep:!0});function H(){x.value=!x.value}function re(){C.value=window.innerWidth<=768}return e.onMounted(()=>{q(),re(),C.value&&(x.value=!1),window.addEventListener("resize",re),window.addEventListener(kn,J)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",re),window.removeEventListener(kn,J),r()}),(I,le)=>(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",x.value&&(c.value==="selected"||Z.value>1)?"min-h-[250px]":"min-h-[0px]"])},[e.createElementVNode("div",yf,[e.createElementVNode("div",hf,[le[4]||(le[4]=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",bf,[e.createTextVNode(e.toDisplayString(he.value)+" ",1),Z.value!==null?(e.openBlock(),e.createElementBlock("span",xf,"("+e.toDisplayString(Z.value)+")",1)):e.createCommentVNode("",!0),P.value?(e.openBlock(),e.createElementBlock("span",kf,e.toDisplayString(P.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",wf,[e.createElementVNode("button",{onClick:oe,class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers"},[...le[5]||(le[5]=[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-b81b0112><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-b81b0112></path><path d="M21 3v5h-5" data-v-b81b0112></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-b81b0112></path><path d="M8 16H3v5" data-v-b81b0112></path></svg>',1)])]),e.createElementVNode("button",{type:"button",class:"map-catalog-widget__toggle-button",onClick:H,"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":x.value})},[...le[6]||(le[6]=[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":!x.value}])},[e.createElementVNode("div",_f,[e.createElementVNode("button",{onClick:le[0]||(le[0]=me=>c.value="catalog"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",c.value==="catalog"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Каталог ",2),e.createElementVNode("button",{onClick:le[1]||(le[1]=me=>c.value="selected"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",c.value==="selected"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Вибрані шари ",2)]),e.createElementVNode("div",Ef,[c.value==="catalog"?(e.openBlock(),e.createBlock(Wu,{key:0,class:"map-catalog-widget__scroll",catalog:u.value,selected:d.value,search:y.value,"onUpdate:search":le[2]||(le[2]=me=>y.value=me),onToggleLayer:ue,onOpenFilter:F},null,8,["catalog","selected","search"])):c.value==="selected"?(e.openBlock(),e.createBlock(sf,{key:1,catalog:u.value,selected:d.value,"client-layers":e.unref(m),onToggleLayer:ue,onSelectLayer:le[3]||(le[3]=me=>c.value="catalog"),onReorder:S,onRemove:te},null,8,["catalog","selected","client-layers"])):(e.openBlock(),e.createBlock(gf,{key:2,layer:B.value,value:j.value,onChange:R,onClose:M},null,8,["layer","value"]))])],2)],2))}}),[["__scopeId","data-v-b81b0112"]]),Cf={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},Nf={class:"flex items-start justify-between gap-3 p-5 pb-3"},Vf={class:"inline-block text-xl font-semibold text-gray-800"},$f={key:0,class:"mt-1 text-sm text-gray-500"},Bf={class:"flex items-center gap-[6px]"},Sf={class:"px-5 pb-5 space-y-6"},vf={key:0,class:"space-y-2"},Lf={class:"flex flex-wrap gap-4"},Tf=["value"],Af={key:1,class:"text-sm text-gray-500"},Mf={key:2,class:"text-sm text-gray-500"},Ff={class:"text-4xl font-medium text-gray-800"},Df={class:"space-y-[14px]"},Pf={class:"flex items-center gap-[10px] text-gray-600"},zf={class:"font-medium text-gray-700"},If={class:"flex items-center justify-end text-end gap-3"},jf={class:"font-medium text-gray-800"},Rf={class:"min-w-[40px] font-medium text-[#3C3C4399]"},$l=Ae(e.defineComponent({__name:"MapAttributeWidget",props:{config:{}},setup(t){const n=["#3a7a57","#d970d5","#8e997b","#b4c039","#a855f7","#71823a","#f79d92","#8b5cf6","#a6514e","#6b7280"],o=t,r=e.ref(!0),l=e.ref(!1),s=e.ref([]),i=e.ref(null),c=e.ref(null),u=e.ref(null),d=e.ref(null),y=e.ref(null),a=e.ref({}),m=e.ref(null);function f(te){return te&&JSON.parse(JSON.stringify(te))}const p=e.computed(()=>{const te=o.config.layer;if(typeof te!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const J=te.trim();if(!J)throw new Error("MapAttributeWidget: `layer` must be non-empty");return J}),k=e.computed(()=>{const{list:te,attribute:J}=o.config;if(Array.isArray(te)&&te.length)return te.map(S=>({id:(S==null?void 0:S.id)!=null?String(S.id).trim():"",text:(S==null?void 0:S.text)!=null&&String(S.text).trim()||null})).filter(S=>S.id.length);if(Array.isArray(J))return J.map(S=>S!=null?String(S).trim():"").filter(S=>S.length).map(S=>({id:S,text:null}));if(typeof J=="string"){const S=J.trim();if(!S)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:S,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),h=e.computed(()=>k.value.map(te=>({id:te.id,label:te.text||a.value[te.id]||te.id})));e.watch(k,te=>{if(!te.length){m.value=null,s.value=[];return}(!m.value||!te.some(J=>J.id===m.value))&&(m.value=te[0].id)},{immediate:!0});const g=e.computed(()=>{var te;return m.value||((te=k.value[0])==null?void 0:te.id)||null});e.watch(p,()=>{var te,J;(J=(te=c.value)==null?void 0:te.remove)==null||J.call(te),c.value=null,u.value=null,d.value=null,y.value=null,a.value={}});const b=e.computed(()=>{var te;return(te=d.value)!=null&&te.length?{id:p.value,name:u.value,filters:d.value}:null}),x=e.computed(()=>{var te,J;return((J=(te=b.value)==null?void 0:te.filters)==null?void 0:J.length)||0});async function C(te){var F;const J=await fetch(`/api/gis-service/${encodeURIComponent(te)}`);if(!J.ok){let M="Не вдалося завантажити налаштування шару";try{const B=await J.json();M=((F=B==null?void 0:B.message)==null?void 0:F.error)||(B==null?void 0:B.message)||M}catch{}throw new Error(M)}const S=await J.json();return u.value=(S==null?void 0:S.name)||null,d.value=Array.isArray(S==null?void 0:S.filters)?S.filters:null,y.value=f((S==null?void 0:S.style)||{}),a.value=((S==null?void 0:S.attributes)||[]).reduce((M,B)=>{const j=typeof(B==null?void 0:B.name)=="string"?B.name.trim():"",X=typeof(B==null?void 0:B.ua)=="string"?B.ua.trim():"";return j&&(M[j]=X||j),M},{}),S}function V(te,J){let S=Ie(te);if(!S){const F=`${location.origin}/api/vtile/${te}/ua/{z}/{x}/{y}.vmt`;S=Ie(te,{source:{type:"vector",tiles:[F],minzoom:0,maxzoom:14},layer:{id:te,source:te,"source-layer":te,style:(J==null?void 0:J.style)||{}},card:J==null?void 0:J.card,popup:J==null?void 0:J.popup})}return c.value=S,S}async function E(te,J){var M;const S=`/api/gis-service/${encodeURIComponent(te)}/${encodeURIComponent(J)}`,F=await fetch(S);if(!F.ok){let B="Не вдалося отримати статистику";try{const j=await F.json();B=((M=j==null?void 0:j.message)==null?void 0:M.error)||(j==null?void 0:j.message)||B}catch{}throw new Error(B)}return F.json()}function _(te){const J=new Map;return te&&(te.rules||[]).forEach(F=>{const M=(F==null?void 0:F.value)??(F==null?void 0:F.id);M!=null&&J.set(String(M),F)}),J}function N(te,J,S,F,M){if(typeof(J==null?void 0:J.color)=="string"&&J.color.trim())return J.color.trim();const B=o.config.colors||{};if(B[te])return B[te];const X=_(S==null?void 0:S.style).get(te);return typeof(X==null?void 0:X.color)=="string"&&X.color.trim()?X.color.trim():n[M%n.length]}function T(te,J,S,F){var M;return(J==null?void 0:J.text)||(J==null?void 0:J.label)||(J==null?void 0:J.name)||(J==null?void 0:J[`${F}_text`])||((M=_(S==null?void 0:S.style).get(te))==null?void 0:M.label)||te}function Y(te,J,S,F){if(!te)return;const M=f((J==null?void 0:J.style)||y.value)||{},B=F.trim();if(!B)return;const j={...M.colors||{},...o.config.colors||{}};B===F&&S.forEach(X=>{X.color.trim()&&(j[X.id]=X.color)}),te.setStyle({...M,type:M.type||"polygon",colorAttr:B,opacity:.8,colors:j})}async function ee(){var B,j;s.value=[],i.value=null;const te=p.value,J=g.value;if(!J)return;l.value=!0;const S=await C(te);V(te,S);const F=await E(te,J),M=Array.isArray(F==null?void 0:F.rows)?F.rows.map((X,he)=>{const Z=(X==null?void 0:X.id)??(X==null?void 0:X.value),P=Z!=null?String(Z):"";if(!P)return null;const q=T(P,X,S,J),H=Number((X==null?void 0:X.count)??0)||0,re=N(P,X,S,J,he);return{id:P,label:q,count:H,color:re}}).filter(Boolean):[];s.value=M,i.value=((B=F==null?void 0:F.field)==null?void 0:B.label)||((j=F==null?void 0:F.field)==null?void 0:j.name)||null,Y(c.value,S,M,J),l.value=!1}e.watch(()=>[p.value,g.value],()=>{ee()},{immediate:!0});const R=e.computed(()=>"Набори даних"),ae=e.computed(()=>s.value.reduce((te,J)=>te+J.count,0)),ue=e.computed(()=>{var S;const te=g.value;return((S=h.value.find(F=>F.id===te))==null?void 0:S.label)||null||i.value||te||null});function oe(te){return ae.value?`${(te/ae.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var te,J;(J=(te=c.value)==null?void 0:te.remove)==null||J.call(te)}),(te,J)=>r.value?(e.openBlock(),e.createElementBlock("div",Cf,[e.createElementVNode("div",Nf,[e.createElementVNode("div",null,[e.createElementVNode("h2",Vf,e.toDisplayString(R.value),1),ue.value&&h.value.length===1?(e.openBlock(),e.createElementBlock("p",$f,e.toDisplayString(ue.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Bf,[b.value?(e.openBlock(),e.createBlock(to,{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:x.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:J[1]||(J[1]=S=>r.value=!1)},[...J[3]||(J[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",Sf,[h.value.length>1?(e.openBlock(),e.createElementBlock("div",vf,[e.createElementVNode("div",Lf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,S=>(e.openBlock(),e.createElementBlock("label",{key:S.id,class:"inline-flex items-center gap-2 text-sm text-gray-700"},[e.withDirectives(e.createElementVNode("input",{type:"radio",class:"text-sky-600 focus:ring-sky-500",value:S.id,"onUpdate:modelValue":J[2]||(J[2]=F=>m.value=F)},null,8,Tf),[[e.vModelRadio,m.value]]),e.createElementVNode("span",null,e.toDisplayString(S.label),1)]))),128))])])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",Af,"Завантаження…")):s.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",Ff,e.toDisplayString(ae.value),1),e.createElementVNode("ul",Df,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,S=>(e.openBlock(),e.createElementBlock("li",{key:S.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",Pf,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:S.color})},null,4),e.createElementVNode("span",zf,e.toDisplayString(S.label),1)]),e.createElementVNode("div",If,[e.createElementVNode("span",jf,e.toDisplayString(S.count),1),e.createElementVNode("span",Rf,e.toDisplayString(oe(S.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",Mf,"Дані відсутні"))])])):(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:J[0]||(J[0]=S=>r.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-9686ce7b"]]),Of=["title"],Uf={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"},qf=["onClick"],Hf=["placeholder"],Wf={class:"absolute inset-y-0 right-2 flex items-center gap-1"},Yf={class:"flex items-center justify-between gap-2 px-3 py-2 border-b border-gray-100"},Gf={class:"text-xs font-semibold uppercase tracking-wide text-gray-500"},Kf={class:"max-h-[60vh] overflow-auto"},Zf={key:0,class:"divide-y divide-gray-100"},Xf=["onClick"],Jf={key:1,class:"px-3 py-3 text-xs text-gray-500"},Bl="mapSearchAddressHistory",lo="search-marker-source",rr="search-marker-layer",_n="search-geom-source",En="search-geom-layer-fill",ao="search-geom-layer-line",Qf=12,em="https://data.softpro.ua/api-user/gis-url-proxy",tm="https://data.softpro.ua/api/parcel",nm="https://nominatim.openstreetmap.org/search",Sl=Ae(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n={mounted(v,z){if(typeof document>"u")return;let W=null;const ge=8,ke=()=>{const Be=String((z==null?void 0:z.value)??"");if(!Be)return;W=document.createElement("div"),W.textContent=Be,Object.assign(W.style,{position:"absolute",background:"#333",color:"#fff",padding:"4px 8px",borderRadius:"4px",fontSize:"12px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:"9999"}),document.body.appendChild(W);const Te=v.getBoundingClientRect();W.style.left=`${Te.right+window.scrollX+ge}px`,W.style.top=`${Te.top+window.scrollY+(Te.height-W.offsetHeight)/2}px`},_e=()=>{W!=null&&W.parentNode&&W.parentNode.removeChild(W),W=null};v.addEventListener("mouseenter",ke),v.addEventListener("mouseleave",_e),Object.assign(v,{tooltipRightHandlers:{show:ke,hide:_e}})},unmounted(v){if(typeof document>"u")return;const z=v.tooltipRightHandlers;z&&(v.removeEventListener("mouseenter",z.show),v.removeEventListener("mouseleave",z.hide))}},o=t,r=Qe(),l=e.getCurrentInstance();function s(){return typeof globalThis<"u"&&globalThis.proxy?globalThis.proxy:typeof window<"u"&&window.proxy?window.proxy:null}function i(){var ge,ke,_e;const v=(ge=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:ge.$settings,z=(ke=v==null?void 0:v.map)==null?void 0:ke.searchViewbox;if(z)return z;const W=s();return(_e=W==null?void 0:W.map)==null?void 0:_e.searchViewbox}function c(){var ke,_e,Be;const v=(ke=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:ke.$settings,z=(_e=v==null?void 0:v.map)==null?void 0:_e.addressSuggest;if(typeof z=="string"&&z.trim())return z.trim();const W=s(),ge=(Be=W==null?void 0:W.map)==null?void 0:Be.addressSuggest;if(typeof ge=="string"&&ge.trim())return ge.trim()}const u=!!c(),d=!!i(),y=e.computed(()=>{const v=["xy","parcel"];return u&&v.push("address"),d&&v.push("nominatim"),v}),a=e.computed(()=>{var W,ge;const v=y.value,z=(ge=(W=o.config)==null?void 0:W.tools)==null?void 0:ge.filter(ke=>v.includes(ke));return z&&z.length?z:v}),m=e.computed(()=>{var v,z;return((z=(v=o.config)==null?void 0:v.placeholder)==null?void 0:z.trim())||"Пошук…"}),f=e.ref(a.value[0]);e.watch(a,v=>{v.includes(f.value)||(f.value=v[0])});const p=e.ref(""),k=e.ref(!1),h=e.ref(null),g=e.ref(null),b=e.ref(null),x=e.ref(null),C=e.ref([]),V=e.ref(null),E=e.ref(!1),_=e.ref([]),N=e.computed(()=>(f.value==="address"||f.value==="nominatim")&&E.value),T=e.computed(()=>{var v;return((v=o.config)==null?void 0:v.addressDebounceMs)??1e3});let Y=null;const ee=e.ref(!1),R=e.computed(()=>p.value.trim().length>0?C.value:_.value),ae=e.computed(()=>p.value.trim().length?`Знайдено ${C.value.length}`:"Історія пошуку"),ue=e.computed(()=>p.value.trim().length?"Нічого не знайдено":"Історія порожня");function oe(){var v,z;if(typeof window>"u")return[];try{const W=(z=(v=window.localStorage)==null?void 0:v.getItem)==null?void 0:z.call(v,Bl);if(!W)return[];const ge=JSON.parse(W);return Array.isArray(ge)?ge:[]}catch{return[]}}function te(v){var z,W;typeof window>"u"||(W=(z=window.localStorage)==null?void 0:z.setItem)==null||W.call(z,Bl,JSON.stringify(v))}function J(v){const W=[v,..._.value.filter(ge=>ge.id!==v.id)].slice(0,10);_.value=W,te(W)}function S(){var z;const v=(z=r.map)==null?void 0:z.value;v&&(v.getLayer(rr)&&v.removeLayer(rr),v.getSource(lo)&&v.removeSource(lo))}function F(){var z;const v=(z=r.map)==null?void 0:z.value;v&&(v.getLayer(En)&&v.removeLayer(En),v.getLayer(ao)&&v.removeLayer(ao),v.getSource(_n)&&v.removeSource(_n))}function M(v){var ke,_e,Be,Te;if(!((ke=o.config)!=null&&ke.showMarker)||!v)return;const z=(_e=r.map)==null?void 0:_e.value;if(!z)return;F(),j();const W={type:"Feature",geometry:v,properties:{}};z.addSource(_n,{type:"geojson",data:W});const ge=((Be=o.config)==null?void 0:Be.geometryColor)||((Te=o.config)==null?void 0:Te.markerColor)||"#3B82F6";z.addLayer({id:En,type:"fill",source:_n,paint:{"fill-color":ge,"fill-opacity":.3}}),z.addLayer({id:ao,type:"line",source:_n,paint:{"line-color":ge,"line-width":1,"line-opacity":1}}),X(z)}let B=null;function j(){B&&(cancelAnimationFrame(B),B=null)}function X(v){const W=performance.now();function ge(ke){if(!v.getLayer(En))return;const Be=(ke-W)%1200/1200,Te=Math.sin(Be*Math.PI),Ye=.2+Te*.3,Xe=1+Te*1;v.setPaintProperty(En,"fill-opacity",Ye),v.setPaintProperty(ao,"line-width",Xe),B=requestAnimationFrame(ge)}B=requestAnimationFrame(ge)}function he(v,z){var ke,_e,Be;if(!((ke=o.config)!=null&&ke.showMarker))return;S(),F();const W=(_e=r.map)==null?void 0:_e.value;if(!W)return;if(z){M(z);return}const ge=((Be=o.config)==null?void 0:Be.markerColor)||"#3B82F6";W.addSource(lo,{type:"geojson",data:{type:"Feature",geometry:{type:"Point",coordinates:[v.lng,v.lat]},properties:{}}}),W.addLayer({id:rr,type:"circle",source:lo,paint:{"circle-radius":7,"circle-color":ge,"circle-stroke-width":2,"circle-stroke-color":"#ffffff"}})}const Z=e.reactive({position:"absolute",left:"0px",top:"0px",width:"100%",display:"none"});function P(){var _e;if(!x.value)return;const v=x.value.getBoundingClientRect(),z=(_e=b.value)==null?void 0:_e.getBoundingClientRect(),W=(z==null?void 0:z.width)??v.width,ge=((z==null?void 0:z.left)??v.left)+window.scrollX,ke=v.bottom+window.scrollY+Qf;Z.left=`${ge}px`,Z.top=`${ke}px`,Z.width=`${W}px`,Z.display="block"}const q=()=>{N.value&&P()};function H(){Y&&(clearTimeout(Y),Y=null)}e.watch(f,()=>{p.value="",k.value=!1,C.value=[],E.value=!1,H(),ee.value=!1,S(),F()}),e.watch(N,v=>{v?e.nextTick(()=>{P()}):Z.display="none"}),e.watch(p,v=>{if(f.value!=="address"&&f.value!=="nominatim"){C.value=[],H();return}if(!v.trim()){C.value=[],E.value=_.value.length>0,H();return}H(),E.value=!0,Y=window.setTimeout(()=>{Ue(v).catch(z=>{const W=(z==null?void 0:z.message)||"Помилка пошуку адреси";Ee.notify({type:"error",title:"Пошук адреси",message:W})})},T.value)});function re(v){var ge;const z=[];g.value&&z.push(g.value),v instanceof HTMLElement&&z.push(v);const W=(ge=h.value)==null?void 0:ge.querySelectorAll("li");W==null||W.forEach(ke=>{z.push(ke)}),z.forEach(ke=>{ke.dispatchEvent(new MouseEvent("mouseleave",{bubbles:!0}))})}function I(v){k.value&&re(v.target),k.value=!k.value}function le(v,z){re(z==null?void 0:z.target),f.value=v}function me(){p.value="",C.value=[],E.value=!1,ee.value=!1,S(),F()}function be(v){const z=v.target;if(k.value){const W=h.value;W&&!W.contains(z)&&(re(z),k.value=!1)}if(N.value){const W=V.value,ge=x.value;W&&!W.contains(z)&&(!ge||!ge.contains(z))&&(E.value=!1)}}e.onMounted(()=>{_.value=oe(),window.addEventListener("click",be,!0),window.addEventListener("scroll",q,!0),window.addEventListener("resize",q)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",be,!0),window.removeEventListener("scroll",q,!0),window.removeEventListener("resize",q),H(),S(),F()});function A(v){return v==="xy"?"Координати":v==="parcel"?"Кадастр":v==="nominatim"?"Nominatim":"Адресний"}function K(v){switch(v){case"xy":return"Пошук за географічними координатами. Введіть широту і довготу через пробіл або кому (lat lng або lng lat).";case"parcel":return"Пошук земельної ділянки за кадастровим номером у форматі 0000000000:00:000:0000 з відображенням меж ділянки на карті.";case"nominatim":return"Пошук адрес та обʼєктів через Nominatim з обмеженням у межах карти.";case"address":return"Пошук адрес через локальний сервіс addressSuggest (швидкі підказки з вашого геопорталу).";default:return""}}function fe(v){const z=v.replace(/[,]+/g," ").trim();if(!z)return null;const W=z.split(/\s+/).filter(Boolean);if(W.length<2)return null;const ge=W.slice(0,2).map(Number);if(!ge.every(nt=>Number.isFinite(nt)))return null;let[ke,_e]=ge,Be=ke,Te=_e;const Ye=nt=>Math.abs(nt)<=90,Xe=nt=>Math.abs(nt)<=180;if(!Ye(Be)||!Xe(Te))if(Ye(Te)&&Xe(Be))Be=_e,Te=ke;else return null;return{lat:Be,lng:Te}}function ie(v){return((v==null?void 0:v.items)||[]).map((W,ge)=>{var ke,_e,Be;return{id:String((W==null?void 0:W.id)??ge),title:(W==null?void 0:W.title)||((ke=W==null?void 0:W.address)==null?void 0:ke.label)||"Знайдений обʼєкт",lat:Number((_e=W==null?void 0:W.position)==null?void 0:_e.lat),lng:Number((Be=W==null?void 0:W.position)==null?void 0:Be.lng)}})}function de(v){const z=(v==null?void 0:v.result)||(v==null?void 0:v.data)||v;if(!z)return[];const W=z.geom_centroid;if(!W||!Array.isArray(W.coordinates))return[];const[ge,ke]=W.coordinates;return!Number.isFinite(ke)||!Number.isFinite(ge)?[]:[{id:"parcel",title:z.cadnum||z.cad_num||"Земельна ділянка",lat:ke,lng:ge,geom:z.geom||null}]}function pe(v){return(Array.isArray(v==null?void 0:v.features)?v.features:[]).map((W,ge)=>{var nt,mt,Yt;const ke=(nt=W==null?void 0:W.geometry)==null?void 0:nt.coordinates,_e=Number(ke==null?void 0:ke[0]),Be=Number(ke==null?void 0:ke[1]);if(!Number.isFinite(Be)||!Number.isFinite(_e))return null;const Te=(W==null?void 0:W.properties)||{},Ye=((mt=Te==null?void 0:Te.geocoding)==null?void 0:mt.label)||(Te==null?void 0:Te.display_name)||(Te==null?void 0:Te.label)||"Адреса";return{id:String(((Yt=Te==null?void 0:Te.geocoding)==null?void 0:Yt.place_id)||(Te==null?void 0:Te.place_id)||ge),title:Ye,lat:Be,lng:_e}}).filter(W=>!!W)}function ve(v){return Number.isFinite(v.lat)&&Number.isFinite(v.lng)}function U(v){const z=Number(v);return Number.isFinite(z)?z:null}function ne(v){var ke,_e,Be,Te,Ye,Xe;const z=U(v.lng)??U(v.lon)??U(v.longitude)??U(v.x),W=U(v.lat)??U(v.latitude)??U(v.y);if(z!=null&&W!=null)return{lat:W,lng:z};const ge=((ke=v==null?void 0:v.geometry)==null?void 0:ke.coordinates)??((_e=v==null?void 0:v.geom_centroid)==null?void 0:_e.coordinates)??((Be=v==null?void 0:v.centroid)==null?void 0:Be.coordinates)??((Ye=(Te=v==null?void 0:v.geojson)==null?void 0:Te.geometry)==null?void 0:Ye.coordinates)??((Xe=v==null?void 0:v.geom)==null?void 0:Xe.coordinates);if(Array.isArray(ge)&&ge.length>=2){const nt=U(ge[0]),mt=U(ge[1]);if(nt!=null&&mt!=null)return{lat:mt,lng:nt}}return null}function we(v){return(Array.isArray(v==null?void 0:v.data)?v.data:[]).map((W,ge)=>{const ke=ne(W),_e=String(W.text??W.title??W.label??W.name??W.address??W.display_name??W.id??"Адреса"),Be=String(W.id??W.code??W.value??ge);return ke?{id:Be,title:_e,...ke}:{id:Be,title:_e}}).filter(W=>!!(W!=null&&W.title))}function $e(v){const z=c();if(!z)return null;if(z.includes(":name"))return z.replace(":name",encodeURIComponent(v));try{const W=new URL(z,window.location.origin);return v.trim()&&W.searchParams.set("q",v),W.toString()}catch{return z}}async function Pe(v){const z=$e(v);if(!z)return[];const W=await fetch(z);if(!W.ok)throw new Error(`HTTP ${W.status}`);const ge=await W.json();return we(ge)}async function Le(v){const z=new URL(nm);z.searchParams.set("format","geojson"),z.searchParams.set("q",v),z.searchParams.set("addressdetails","1"),z.searchParams.set("bounded","1");const W=i();W&&z.searchParams.set("viewbox",W);const ge=await fetch(z.toString());if(!ge.ok)throw new Error(`HTTP ${ge.status}`);const ke=await ge.json();return pe(ke)}async function Ue(v){if(C.value=[],H(),f.value==="address"){if(!c()){Ee.notify({type:"warning",title:"Пошук адреси",message:"Не налаштовано addressSuggest"});return}const ge=await Pe(v);if(!ge.length){Ee.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}C.value=ge;return}const z=await Le(v);if(!z.length){Ee.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}C.value=z}async function We(v){if(ve(v)){$(v),J(v);return}Ee.notify({type:"warning",title:"Пошук адреси",message:"Геометрія для обраної адреси відсутня"})}function et(){f.value!=="address"&&f.value!=="nominatim"||p.value.trim().length||_.value.length&&(E.value=!0,e.nextTick(()=>{P()}))}function Q(v){const W=v.replace(/\s+/g,"").split(":");if(console.log(W),W.length!==4)return!1;const ge=[10,2,3,4];return W.every((ke,_e)=>ke.length===ge[_e]&&/^\d+$/.test(ke))}function $(v){var W,ge;const z=((W=o.config)==null?void 0:W.zoom)??17;(ge=r.flyTo)==null||ge.call(r,{center:[v.lng,v.lat],zoom:z}),he(v,v.geom),ee.value=!0}async function D(){const v=p.value.trim();if(v){if(f.value==="xy"){const z=fe(v);if(!z){Ee.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}$(z);return}if(f.value==="address"||f.value==="nominatim"){try{await Ue(v)}catch(z){const W=(z==null?void 0:z.message)||"Помилка пошуку адреси";Ee.notify({type:"error",title:"Пошук адреси",message:W})}return}try{const z=new URL(f.value==="here"?em:tm);if(f.value==="here")z.searchParams.set("searchtext",v);else{if(!Q(v)){Ee.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}z.searchParams.set("cadnum",v)}const W=await fetch(z.toString());if(!W.ok)throw new Error(`HTTP ${W.status}`);const ge=await W.json(),ke=f.value==="here"?ie(ge):de(ge);if(!ke.length)Ee.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const _e=ke[0];$(_e)}}catch(z){const W=(z==null?void 0:z.message)||"Помилка пошуку";Ee.notify({type:"error",title:"Пошук",message:W})}}}return(v,z)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"widgetRef",ref:b,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]"},[e.createElementVNode("form",{class:"flex gap-2",onSubmit:e.withModifiers(D,["prevent"])},[a.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:h,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:I},[e.withDirectives((e.openBlock(),e.createElementBlock("span",{ref_key:"selectedToolLabelRef",ref:g,class:"block w-full truncate",title:A(f.value)},[e.createTextVNode(e.toDisplayString(A(f.value)),1)],8,Of)),[[n,K(f.value)]]),(e.openBlock(),e.createElementBlock("svg",{class:e.normalizeClass(["w-4 h-4 text-gray-500 transition-transform",{"rotate-180":k.value}]),viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[...z[3]||(z[3]=[e.createElementVNode("path",{d:"M6 9l6 6 6-6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))]),k.value?(e.openBlock(),e.createElementBlock("div",Uf,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,W=>e.withDirectives((e.openBlock(),e.createElementBlock("li",{key:W,class:"px-3 py-2 cursor-pointer hover:bg-gray-100 text-gray-900",onClick:ge=>le(W,ge)},[e.createTextVNode(e.toDisplayString(A(W)),1)],8,qf)),[[n,K(W)]])),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"searchWrapperRef",ref:x,class:"relative flex-1 min-w-[140px]"},[f.value==="parcel"?(e.openBlock(),e.createBlock(e.unref(ol.VsInputMask),{key:0,modelValue:p.value,"onUpdate:modelValue":z[0]||(z[0]=W=>p.value=W),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",ee.value?"!pr-14":"!pr-8"])},null,8,["modelValue","class"])):e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:1,"onUpdate:modelValue":z[1]||(z[1]=W=>p.value=W),placeholder:m.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",ee.value?"!pr-14":"!pr-8"]),onFocus:et},null,42,Hf)),[[e.vModelText,p.value,void 0,{trim:!0}]]),e.createElementVNode("div",Wf,[ee.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"flex items-center text-gray-400 hover:text-gray-600","aria-label":"Очистити",onClick:me},[...z[4]||(z[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),z[5]||(z[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))]),N.value?(e.openBlock(),e.createBlock(e.Teleport,{key:2,to:"body"},[e.createElementVNode("div",{ref_key:"addressResultsRef",ref:V,class:"vs-select__options mt-1 bg-white border border-gray-300 rounded-lg shadow-lg text-sm text-gray-900 z-50",style:e.normalizeStyle(Z)},[e.createElementVNode("div",Yf,[e.createElementVNode("span",Gf,e.toDisplayString(ae.value),1),e.createElementVNode("button",{type:"button",class:"text-gray-400 hover:text-gray-600","aria-label":"Закрити",onClick:z[2]||(z[2]=W=>E.value=!1)}," ✕ ")]),e.createElementVNode("div",Kf,[R.value.length?(e.openBlock(),e.createElementBlock("ul",Zf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(R.value,W=>(e.openBlock(),e.createElementBlock("li",{key:W.id,class:"px-3 py-2 cursor-pointer hover:bg-gray-50",onClick:ge=>We(W)},e.toDisplayString(W.title),9,Xf))),128))])):(e.openBlock(),e.createElementBlock("div",Jf,e.toDisplayString(ue.value),1))])],4)])):e.createCommentVNode("",!0)],512)],32)],512))}}),[["__scopeId","data-v-c278e4f1"]]),om="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",rm="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",lm=Ae(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:r,removeControl:l}=Qe(),s=e.ref(null),i=e.ref(null),c=e.ref(null),u=e.ref(null);let d=null;function y(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function a(E){if(Array.from(document.styleSheets).some(T=>{var Y;return(Y=T==null?void 0:T.href)==null?void 0:Y.includes(E)}))return;const N=document.createElement("link");N.rel="stylesheet",N.href=E,document.head.appendChild(N)}function m(E){return new Promise((_,N)=>{const T=Array.from(document.scripts).find(ee=>ee.src===E);if(T){if(T._loaded)return _();T.addEventListener("load",()=>_()),T.addEventListener("error",()=>N(new Error(`Failed ${E}`)));return}const Y=document.createElement("script");Y.src=E,Y.async=!0,Y.onload=()=>{Y._loaded=!0,_()},Y.onerror=()=>N(new Error(`Failed ${E}`)),document.head.appendChild(Y)})}function f(){var _,N,T;const E=window;return E.MapboxExportControl||((_=E.mapboxgl)==null?void 0:_.MapboxExportControl)||((N=E.mapboxglExport)==null?void 0:N.MapboxExportControl)||((T=E.mapboxglExport)==null?void 0:T.default)||null}function p(){const E=document.createElementNS("http://www.w3.org/2000/svg","svg");return E.setAttribute("xmlns","http://www.w3.org/2000/svg"),E.setAttribute("viewBox","0 0 24 24"),E.setAttribute("width","18"),E.setAttribute("height","18"),E.setAttribute("fill","none"),E.setAttribute("stroke","currentColor"),E.setAttribute("stroke-width","2"),E.setAttribute("stroke-linecap","round"),E.setAttribute("stroke-linejoin","round"),E.classList.add("map-control-button__icon"),[{d:"M0 0h24v24H0z",stroke:"none",fill:"none"},{d:"M17 17h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-14a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2"},{d:"M17 9v-4a2 2 0 0 0 -2 -2h-6a2 2 0 0 0 -2 2v4"},{d:"M7 13m0 2a2 2 0 0 1 2 -2h6a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2z"}].forEach((N,T)=>{const Y=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries(N).forEach(([ee,R])=>{Y.setAttribute(ee,R)}),E.appendChild(Y)}),E}function k(){const E=document.createElement("button");E.id="print-btn",E.type="button",E.className=["group relative flex items-center justify-center","w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200","bg-white text-gray-700 hover:bg-gray-50 hover:scale-105","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2"].join(" "),E.setAttribute("aria-label","Друк карти");const _=p(),N=document.createElement("span");return N.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(" "),N.textContent="Друк карти",N.setAttribute("aria-hidden","true"),E.appendChild(_),E.appendChild(N),E.addEventListener("click",T=>{T.stopPropagation(),h()}),u.value=E,E}function h(){if(!c.value)return;c.value.style.display==="block"?b():g()}function g(){var E,_,N;c.value&&(c.value.style.display="block",(E=u.value)==null||E.classList.add("scale-105","shadow-xl"),(_=i.value)==null||_.toggleCrosshair(!0),(N=i.value)==null||N.togglePrintableArea(!0),document.addEventListener("click",x))}function b(){var E,_,N;c.value&&(c.value.style.display="none",(E=u.value)==null||E.classList.remove("scale-105","shadow-xl"),(_=i.value)==null||_.toggleCrosshair(!1),(N=i.value)==null||N.togglePrintableArea(!1),document.removeEventListener("click",x))}function x(E){const _=s.value;_&&(E.target&&_.contains(E.target)||b())}function C(E){const _={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};E.querySelectorAll("label, option").forEach(T=>{var ee;const Y=(ee=T.textContent)==null?void 0:ee.trim();Y&&_[Y]&&(T.textContent=_[Y])});const N=E.querySelector("button");N&&(N.textContent="Друкувати")}function V(E){const _=E.querySelector(".mapboxgl-export-list");if(!_||!s.value)return;c.value=_;const N=E.querySelector("button");if(N&&(N.style.display="none"),E.style.display="none",!u.value){const Y=k();s.value.appendChild(Y)}_.style.display="none";const T="_printControlBound";if(!_[T]){const Y=ee=>ee.stopPropagation();_.addEventListener("click",Y),_.addEventListener("mousedown",Y),_[T]=!0}s.value.appendChild(_),C(_)}return e.onMounted(async()=>{await(o==null?void 0:o());const E=n.value;if(!E)return;a(om),y();try{await m(rm)}catch(T){console.warn("[MapPrintControl] load error",T);return}const _=f();if(!_)return;const N=new _({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(i.value=N,typeof N.onAdd=="function"){const T=N.onAdd.bind(N);N.onAdd=Y=>{const ee=T(Y);return setTimeout(()=>ee&&V(ee),50),ee}}r?r(N,"top-right"):E.addControl(N,"top-right"),d=T=>{T.key==="Escape"&&b()},document.addEventListener("keyup",d)}),e.onBeforeUnmount(()=>{b(),d&&(document.removeEventListener("keyup",d),d=null);const E=n.value;if(i.value)try{l?l(i.value):E==null||E.removeControl(i.value)}catch{}i.value=null}),(E,_)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:s,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-4fae7635"]]),am=["aria-label"],sm={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"},im=e.defineComponent({__name:"MapCompareControl",props:{hasCompareOptions:{type:Boolean},isCompareOpen:{type:Boolean}},emits:["toggle"],setup(t){return(n,o)=>t.hasCompareOptions?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",t.isCompareOpen?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":t.isCompareOpen?"Вимкнути порівняння":"Порівняння підложок",onClick:o[0]||(o[0]=e.withModifiers(r=>n.$emit("toggle"),["stop"]))},[e.createElementVNode("span",sm,e.toDisplayString(t.isCompareOpen?"Вимкнути порівняння":"Порівняння підложок"),1),e.createVNode(e.unref(ye.Columns2),{class:"w-4 h-4"})],10,am)):e.createCommentVNode("",!0)}}),cm={class:"map-center-control"},dm=["aria-label"],um={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"},jt=Ae(e.defineComponent({name:"MapCenterControl",__name:"MapCenterControl",props:{center:{},zoom:{},targetCenter:{},targetZoom:{},targetLabel:{},targetAriaLabel:{}},setup(t){const n=t,{map:o,ready:r}=Qe(),l=e.ref(null),s=e.ref(null),i=e.ref(null),c=e.ref(null),u=Oo(),d=e.computed(()=>{var b;return((b=u.value)==null?void 0:b.map)??null});function y(b){if(Array.isArray(b)&&b.length>=2){const[x,C]=b.slice(0,2).map(V=>Number(V));return Number.isNaN(x)||Number.isNaN(C)?null:[x,C]}if(b&&typeof b=="object"){const x=b,C=x.lng??x.lon??x.long??x.x,V=x.lat??x.y;if(C!=null&&V!=null){const E=Number(C),_=Number(V);if(!Number.isNaN(E)&&!Number.isNaN(_))return[E,_]}}if(typeof b=="string"){const x=b.split(",").map(C=>Number(C.trim()));if(x.length>=2&&x.every(C=>!Number.isNaN(C)))return[x[0],x[1]]}return null}function a(b){const x=y(b);x&&(l.value=x)}function m(b){const x=Number(b);Number.isNaN(x)||(s.value=x)}e.watch(()=>n.center,b=>a(b),{immediate:!0}),e.watch(()=>n.zoom,b=>m(b),{immediate:!0}),e.watch(()=>n.targetCenter,b=>{i.value=y(b)},{immediate:!0}),e.watch(()=>n.targetZoom,b=>{const x=Number(b);c.value=Number.isNaN(x)?null:x},{immediate:!0}),e.watch(()=>{var b;return(b=d.value)==null?void 0:b.center},b=>{a(b)},{immediate:!0}),e.watch(()=>{var b;return(b=d.value)==null?void 0:b.zoom},b=>{m(b)},{immediate:!0});const f=e.computed(()=>{var b;return((b=n.targetLabel)==null?void 0:b.trim())||"Точка"}),p=e.computed(()=>n.targetAriaLabel||"Перейти до точки"),k=e.computed(()=>!!i.value);e.onMounted(async()=>{await(r==null?void 0:r());const b=o.value;if(b){if(!l.value){const x=b.getCenter();l.value=[x.lng,x.lat]}s.value==null&&(s.value=b.getZoom())}});function h(){const b=o.value;if(!b)return;const x=l.value||(()=>{const V=b.getCenter();return[V.lng,V.lat]})(),C=s.value??b.getZoom();b.flyTo({center:x,zoom:C})}function g(){const b=o.value;if(!b||!i.value)return;const x=c.value??s.value??b.getZoom();b.flyTo({center:i.value,zoom:x})}return(b,x)=>(e.openBlock(),e.createElementBlock("div",cm,[k.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"])},[x[0]||(x[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(ye.House),{class:"w-4 h-4"})])),k.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":p.value,onClick:e.withModifiers(g,["stop"])},[e.createElementVNode("span",um,e.toDisplayString(f.value),1),e.createVNode(e.unref(ye.MapPin),{class:"w-4 h-4"})],8,dm)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-03fa94f6"]]),fm={class:"map-navigation-control"},mm=["disabled"],pm=["disabled"],gm=["disabled"],ym=Ae(e.defineComponent({__name:"MapNavigationControl",setup(t){const{map:n,ready:o}=Qe(),r=e.ref(!1),l=e.ref(0),s=e.ref(0),i=e.computed(()=>({transform:`scale(${(1+s.value/70).toFixed(5)}) rotateZ(0deg) rotateX(${s.value}deg) rotateZ(${l.value}deg)`}));function c(){var m,f;const a=n.value;a&&(l.value=Number(((m=a.getBearing)==null?void 0:m.call(a))??0),s.value=Number(((f=a.getPitch)==null?void 0:f.call(a))??0))}e.onMounted(async()=>{var m,f,p;await(o==null?void 0:o());const a=n.value;r.value=!!a,c(),(m=a==null?void 0:a.on)==null||m.call(a,"rotate",c),(f=a==null?void 0:a.on)==null||f.call(a,"pitch",c),(p=a==null?void 0:a.on)==null||p.call(a,"load",c)}),e.onBeforeUnmount(()=>{var m,f,p;const a=n.value;(m=a==null?void 0:a.off)==null||m.call(a,"rotate",c),(f=a==null?void 0:a.off)==null||f.call(a,"pitch",c),(p=a==null?void 0:a.off)==null||p.call(a,"load",c)});function u(){const a=n.value;a!=null&&a.zoomIn&&a.zoomIn()}function d(){const a=n.value;a!=null&&a.zoomOut&&a.zoomOut()}function y(){const a=n.value;a!=null&&a.easeTo&&a.easeTo({bearing:0,pitch:0})}return(a,m)=>(e.openBlock(),e.createElementBlock("div",fm,[e.createElementVNode("button",{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",disabled:!r.value,"aria-label":"Zoom in",title:"Zoom in",onClick:e.withModifiers(u,["stop"])},[m[0]||(m[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(ye.Plus),{class:"w-4 h-4","stroke-width":2.25})],8,mm),e.createElementVNode("button",{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",disabled:!r.value,"aria-label":"Zoom out",title:"Zoom out",onClick:e.withModifiers(d,["stop"])},[m[1]||(m[1]=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(ye.Minus),{class:"w-4 h-4","stroke-width":2.25})],8,pm),e.createElementVNode("button",{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",disabled:!r.value,"aria-label":"Reset north",title:"Reset north",onClick:e.withModifiers(y,["stop"])},[m[2]||(m[2]=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(ye.Navigation2),{class:"w-4 h-4","stroke-width":2.25,"aria-hidden":"true",style:e.normalizeStyle(i.value)},null,8,["style"])],8,gm)]))}}),[["__scopeId","data-v-14b11a99"]]),hm={class:"cursor-coordinates"},bm={class:"cursor-coordinates__text"},xm=Ae(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",hm,[e.createElementVNode("span",bm,e.toDisplayString(t.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),km={class:"minimap__wrapper"},so="minimap-viewport",wm="minimap-viewport-layer",_m=Ae(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var x,C,V,E;const n=t,o=((C=(x=e.getCurrentInstance())==null?void 0:x.appContext.config.globalProperties)==null?void 0:C.$settings)||null,r=It((V=o==null?void 0:o.map)==null?void 0:V.center)||[30,50],l=e.ref(null),s=e.shallowRef(null),i=(E=n.options)==null?void 0:E.active,c=e.ref(i===void 0?!1:!!i);function u(_,N){return typeof _=="number"&&Number.isFinite(_)?_:N}const d=e.computed(()=>{var ee,R;const _=(ee=n.options)==null?void 0:ee.width,N=(R=n.options)==null?void 0:R.height,T=u(n.width??_,210),Y=u(n.height??N,150);return{width:`${T}px`,height:`${Y}px`}});function y(){var N,T;const _=(T=(N=n.mapContext)==null?void 0:N.map)==null?void 0:T.value;if(!_||typeof _.getStyle!="function")return null;try{const Y=_.getStyle();return Y?JSON.parse(JSON.stringify(Y)):null}catch{return null}}let a=null;function m(){var ee;if(typeof window>"u"||s.value||!l.value)return;const _=y(),N=r,T={container:l.value,style:_??{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:N,zoom:((ee=n.options)==null?void 0:ee.zoom)??3,interactive:!1,attributionControl:!1},Y={...T,...n.options??{}};Y.container=T.container,s.value=new maplibregl.Map(Y),s.value.on("load",()=>{p(),h()})}function f(){if(!s.value)return;const _=y();_&&(s.value.once("styledata",()=>{p(),h()}),s.value.setStyle(_))}function p(){if(s.value){if(typeof s.value.isStyleLoaded=="function"&&!s.value.isStyleLoaded()){s.value.once("styledata",()=>{p(),h()});return}s.value.getSource(so)||(s.value.addSource(so,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),s.value.addLayer({id:wm,type:"fill",source:so,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function k(){c.value=!c.value,c.value&&e.nextTick(()=>{var _;return(_=s.value)==null?void 0:_.resize()})}function h(){var ae,ue;const _=(ue=(ae=n.mapContext)==null?void 0:ae.map)==null?void 0:ue.value;if(!s.value||!_||!_.getBounds)return;if(typeof s.value.isStyleLoaded=="function"&&!s.value.isStyleLoaded()){s.value.once("styledata",()=>{h()});return}const N=_.getBounds();if(!N)return;const T=N.getNorthEast(),Y=N.getSouthWest();if(!T||!Y)return;const ee=[[Y.lng,T.lat],[T.lng,T.lat],[T.lng,Y.lat],[Y.lng,Y.lat],[Y.lng,T.lat]],R=s.value.getSource(so);if(!R){p();return}R.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[ee]},properties:{}})}function g(){var T;const _=n.mapContext,N=(T=_==null?void 0:_.map)==null?void 0:T.value;!(_!=null&&_.on)||!N||(a==null||a(),a=_.on("move",h),h())}async function b(){const _=n.mapContext;if(_){if(typeof _.ready=="function")try{await _.ready()}catch{return}g()}}return e.onMounted(()=>{m(),b()}),e.watch(()=>n.mapContext,()=>{b(),h()}),e.watch(()=>{var _,N;return(N=(_=n.mapContext)==null?void 0:_.map)==null?void 0:N.value},()=>{s.value&&(f(),b())}),e.watch(d,()=>{s.value&&e.nextTick(()=>{var _;return(_=s.value)==null?void 0:_.resize()})}),e.watch(()=>n.options,()=>{var N;a==null||a(),a=null,s.value&&(s.value.remove(),s.value=null);const _=(N=n.options)==null?void 0:N.active;typeof _=="boolean"&&(c.value=_),e.nextTick(()=>{m(),b()})},{deep:!0}),e.onBeforeUnmount(()=>{a==null||a(),a=null,s.value&&(s.value.remove(),s.value=null)}),(_,N)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["minimap",{"minimap--open":c.value}])},[e.createElementVNode("button",{type:"button",class:"minimap__button",onClick:k},[e.createVNode(e.unref(ye.ArrowUpLeft))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",km,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:l,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(d.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,c.value]])]),_:1})],2))}}),[["__scopeId","data-v-bc754c89"]]),Em={key:0,class:"pointer-events-none absolute inset-0 z-[90]"},Cm={class:"pointer-events-auto absolute right-[54px] top-[103px] z-[131] flex items-start gap-2"},Nm={class:"compare-panel min-w-[220px] overflow-hidden rounded-[10px]"},Vm={class:"max-h-[260px] overflow-auto pb-1"},$m=["onClick"],Bm={class:"mt-1 border-t border-slate-200 p-2"},Sm="https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-compare@0.5.0/dist/maplibre-gl-compare.min.css",vl="https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-compare@0.5.0/dist/maplibre-gl-compare.min.js",ct="compare-base",dt="compare-base-overlay",vm=Ae(e.defineComponent({__name:"MapCompare",props:{compareBasemaps:{},isCompareOpen:{type:Boolean},selectedBasemapId:{}},emits:["close"],setup(t,{emit:n}){const o=t,r=n,{map:l,ready:s}=Qe(),i=e.ref(null),c=e.ref(null),u=e.ref(null),d=e.ref(!1),y=e.ref(null);y.__layerStoreMode="isolated";const a=e.ref(null),m=e.ref(!1),f=e.ref(!1),p=e.ref(!1);let k=null,h=null,g=null,b=!1,x="";const C=new Map,V=e.computed(()=>o.compareBasemaps||[]);let E=null;function _(){var P;if(typeof window>"u"||(P=window.maplibregl)!=null&&P.Compare)return Promise.resolve();if(!Array.from(document.styleSheets).some(q=>{var H;return!!((H=q==null?void 0:q.href)!=null&&H.includes("maplibre-gl-compare.min.css"))})){const q=document.createElement("link");q.rel="stylesheet",q.href=Sm,document.head.appendChild(q)}return E||(E=new Promise((q,H)=>{var le;if((le=window.maplibregl)!=null&&le.Compare){q();return}const re=Array.from(document.querySelectorAll("script")).find(me=>me.src===vl);if(re){re.addEventListener("load",()=>q(),{once:!0}),re.addEventListener("error",()=>H(new Error("Failed to load map compare script")),{once:!0});return}const I=document.createElement("script");I.src=vl,I.async=!0,I.onload=()=>q(),I.onerror=()=>{I.remove(),H(new Error("Failed to load map compare script"))},document.head.appendChild(I)}),E)}function N(){var Z,P,q;k==null||k(),k=null,h==null||h(),h=null,g==null||g(),g=null,C.forEach(H=>{var re;return(re=H==null?void 0:H.remove)==null?void 0:re.call(H)}),C.clear(),f.value=!1,p.value=!1,x="",(Z=a.value)==null||Z.remove(),a.value=null,(q=(P=y.value)==null?void 0:P.remove)==null||q.call(P),y.value=null,m.value=!1}function T(Z){try{return JSON.stringify(Z??null)}catch{return""}}function Y(Z,P){var H;if(!Z||!P)return;(Array.isArray((H=Z.listImages)==null?void 0:H.call(Z))?Z.listImages():[]).forEach(re=>{var le,me,be;if(!re||(le=P.hasImage)!=null&&le.call(P,re))return;const I=(me=Z.getImage)==null?void 0:me.call(Z,re);if(I)try{(be=P.addImage)==null||be.call(P,re,I)}catch{}})}function ee(Z){var P;try{return((P=Z==null?void 0:Z.getStyle)==null?void 0:P.call(Z))??null}catch{return null}}function R(Z){if(Z==null)return Z;try{return JSON.parse(JSON.stringify(Z))}catch{return Z}}function ae(Z){if(!Z)return null;try{if(typeof Z.serialize=="function"){const P=Z.serialize();if((P==null?void 0:P.data)!=null)return P.data;if((P==null?void 0:P.tiles)!=null)return P.tiles}}catch{}return Z._data!=null?Z._data:Z.data!=null?Z.data:null}function ue(Z,P){const q=ee(Z),H=(q==null?void 0:q.sources)||{};Object.entries(H).forEach(([re,I])=>{var be,A;const le=(be=Z==null?void 0:Z.getSource)==null?void 0:be.call(Z,re),me=(A=P==null?void 0:P.getSource)==null?void 0:A.call(P,re);if(!(!le||!me)&&(I==null?void 0:I.type)==="geojson"&&typeof me.setData=="function"){const K=ae(le);K!=null&&me.setData(R(K))}})}function oe(Z,P){return!Z||["base","base-overlay",ct,dt].includes(Z)?!1:!!(P!=null&&P.opts)}function te(){const Z=y;if(!(Z!=null&&Z.value)||!m.value)return;const P=Ie(void 0,void 0,l);Object.entries(P).forEach(([q,H])=>{var le;if(!oe(q,H))return;const re=R(H.opts)||{},I=Ie(q,void 0,Z);if(!I){const me=Ie(q,re,Z);C.set(q,me);return}C.set(q,I),T(I.opts)!==T(re)&&((le=I.refresh)==null||le.call(I,re))})}function J(Z){var P;try{const q=(P=Z==null?void 0:Z.getStyle)==null?void 0:P.call(Z);return q?JSON.parse(JSON.stringify(q)):null}catch{return null}}function S(Z,P){const q=J(Z)||{version:8,sources:{},layers:[]};if(q.sources||(q.sources={}),q.layers||(q.layers=[]),P!=null&&P.url){q.sources[ct]={type:"raster",tiles:[P.url],tileSize:256};const H=q.layers.find(re=>re.id===ct);H?(H.type="raster",H.source=ct,H.layout||(H.layout={}),H.layout.visibility="visible"):q.layers.unshift({id:ct,type:"raster",source:ct})}if(P!=null&&P.overlayUrl){q.sources[dt]={type:"raster",tiles:[P.overlayUrl],tileSize:256};const H=q.layers.find(re=>re.id===dt);if(H)H.type="raster",H.source=dt,H.layout||(H.layout={}),H.layout.visibility="visible";else{const re=q.layers.findIndex(le=>le.id===ct),I=re>=0?re+1:0;q.layers.splice(I,0,{id:dt,type:"raster",source:dt})}}return q}function F(Z){var be,A,K,fe,ie,de,pe,ve,U,ne,we,$e,Pe,Le,Ue;if(!y.value)return;const P=y.value,q=(be=P.getSource)==null?void 0:be.call(P,ct),H=(A=P.getSource)==null?void 0:A.call(P,dt),re=!!((K=P.getLayer)!=null&&K.call(P,ct)),I=!!((fe=P.getLayer)!=null&&fe.call(P,dt)),le=ee(P),me=(de=(ie=le==null?void 0:le.layers)==null?void 0:ie[0])==null?void 0:de.id;if(!(Z!=null&&Z.url)){re&&((pe=P.setLayoutProperty)==null||pe.call(P,ct,"visibility","none")),I&&((ve=P.setLayoutProperty)==null||ve.call(P,dt,"visibility","none"));return}re&&((U=P.setLayoutProperty)==null||U.call(P,ct,"visibility","visible")),q!=null&&q.setTiles?q.setTiles([Z.url]):q||((ne=P.addSource)==null||ne.call(P,ct,{type:"raster",tiles:[Z.url],tileSize:256}),(we=P.addLayer)==null||we.call(P,{id:ct,type:"raster",source:ct},me)),Z.overlayUrl?(I&&(($e=P.setLayoutProperty)==null||$e.call(P,dt,"visibility","visible")),H!=null&&H.setTiles?H.setTiles([Z.overlayUrl]):H||((Pe=P.addSource)==null||Pe.call(P,dt,{type:"raster",tiles:[Z.overlayUrl],tileSize:256}),(Le=P.addLayer)==null||Le.call(P,{id:dt,type:"raster",source:dt}))):I&&((Ue=P.setLayoutProperty)==null||Ue.call(P,dt,"visibility","none")),(!q||typeof q.setTiles!="function")&&P.setStyle(S(ee(P),Z))}function M(){if(!y.value||!m.value)return;const Z=V.value.find(P=>P.id===u.value);F(Z)}async function B(){const Z=l.value,P=y.value;if(!Z||!P||!m.value)return;const q=V.value.find(le=>le.id===u.value),H=ee(Z),re=S(H,q),I=T(re);!I||I===x||(x=I,P.setStyle(re),Y(Z,P),ue(Z,P),p.value=!1,await new Promise(le=>{var me,be;if((me=P.isStyleLoaded)!=null&&me.call(P)){le();return}(be=P.once)==null||be.call(P,"load",()=>le())}),te())}function j(){p.value=!0,!b&&(b=!0,queueMicrotask(()=>{b=!1,B()}))}function X(){p.value&&B()}async function he(){var A,K,fe,ie,de,pe,ve,U;if(!o.isCompareOpen||a.value||y.value||(await(s==null?void 0:s()),await e.nextTick(),!l.value||!i.value||!c.value))return;await _();const Z=l.value,P=V.value.find(ne=>ne.id===u.value),q=S({},P),H=(A=Z.getCenter)==null?void 0:A.call(Z),re=(K=Z.getZoom)==null?void 0:K.call(Z),I=((fe=Z.getBearing)==null?void 0:fe.call(Z))??0,le=((ie=Z.getPitch)==null?void 0:ie.call(Z))??0;y.value=new maplibregl.Map({container:c.value,style:q,center:H,zoom:re,bearing:I,pitch:le,attributionControl:!1,interactive:!1}),m.value=!1,await new Promise(ne=>{var we,$e;if(!y.value){ne();return}if(($e=(we=y.value).isStyleLoaded)!=null&&$e.call(we)){m.value=!0,X(),ne();return}y.value.once("load",()=>{m.value=!0,X(),ne()})});const me=(de=window.maplibregl)==null?void 0:de.Compare;if(!me){N(),r("close");return}a.value=new me(Z,y.value,"#comparison-container",{mousemove:!1});const be=()=>{o.isCompareOpen&&j()};Z.on("styledata",be),Z.on("sourcedata",be),Z.on("idle",be),k=()=>Z.off("styledata",be),h=()=>Z.off("sourcedata",be),g=()=>Z.off("idle",be),await B(),Y(Z,y.value),ue(Z,y.value),(pe=Z.resize)==null||pe.call(Z),(U=(ve=y.value).resize)==null||U.call(ve)}return e.watch(()=>o.isCompareOpen,async Z=>{if(Z){await he();return}N()}),e.watch(()=>l.value,async(Z,P)=>{!o.isCompareOpen||!Z||Z===P||(N(),await he())}),e.watch(()=>[o.isCompareOpen,V.value,o.selectedBasemapId],([Z,P,q])=>{var re;if(!Z||u.value&&P.some(I=>I.id===u.value))return;const H=P.find(I=>I.id!==q);u.value=(H==null?void 0:H.id)||((re=P[0])==null?void 0:re.id)||null},{immediate:!0,deep:!0}),e.watch(()=>u.value,()=>{var Z,P,q,H;if(y.value){if((P=(Z=y.value).isStyleLoaded)!=null&&P.call(Z)){m.value=!0,M();return}(H=(q=y.value).once)==null||H.call(q,"load",()=>{m.value=!0,M()})}}),e.onBeforeUnmount(()=>{N()}),(Z,P)=>t.isCompareOpen?(e.openBlock(),e.createElementBlock("div",Em,[e.createElementVNode("div",Cm,[e.createElementVNode("div",Nm,[e.createElementVNode("button",{type:"button",class:"compare-panel__head",onClick:P[0]||(P[0]=q=>d.value=!d.value)},[P[3]||(P[3]=e.createStaticVNode('<span class="compare-panel__head-left" data-v-06bedfe8><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="opacity-70" data-v-06bedfe8><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" data-v-06bedfe8></path><path d="m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65" data-v-06bedfe8></path><path d="m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65" data-v-06bedfe8></path></svg><span class="text-[12px] font-semibold text-slate-900" data-v-06bedfe8>Підложки для порівняння</span></span>',1)),(e.openBlock(),e.createElementBlock("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:e.normalizeClass(["compare-panel__chevron shrink-0 text-slate-400",d.value?"compare-panel__chevron--collapsed":""])},[...P[2]||(P[2]=[e.createElementVNode("path",{d:"m6 9 6 6 6-6"},null,-1)])],2))]),e.withDirectives(e.createElementVNode("div",null,[P[5]||(P[5]=e.createElementVNode("div",{class:"px-3 pb-1 pt-2 text-[10px] font-bold uppercase tracking-[0.07em] text-slate-400"}," Базова карта ",-1)),e.createElementVNode("div",Vm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,q=>(e.openBlock(),e.createElementBlock("button",{key:q.id,type:"button",class:e.normalizeClass(["compare-panel__item",q.id===u.value?"compare-panel__item--active":""]),onClick:H=>u.value=q.id},[e.createElementVNode("span",{class:e.normalizeClass(["compare-panel__radio",q.id===u.value?"compare-panel__radio--active":""])},null,2),e.createElementVNode("span",{class:e.normalizeClass(["text-[12px]",q.id===u.value?"font-semibold text-slate-900":"font-normal text-slate-600"])},e.toDisplayString(q.title),3)],10,$m))),128))]),e.createElementVNode("div",Bm,[e.createElementVNode("button",{type:"button",class:"flex h-[30px] w-full items-center justify-center gap-1.5 rounded-[7px] border border-slate-200 bg-white text-[12px] font-medium text-slate-700 transition-colors hover:bg-slate-50",onClick:P[1]||(P[1]=q=>r("close"))},[...P[4]||(P[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M18 6 6 18"}),e.createElementVNode("path",{d:"m6 6 12 12"})],-1),e.createTextVNode(" Закрити ",-1)])])])],512),[[e.vShow,!d.value]])])]),e.createElementVNode("div",{id:"comparison-container",ref_key:"containerRef",ref:i,class:"absolute inset-0 overflow-hidden z-[90]"},[e.createElementVNode("div",{id:"after",ref_key:"afterRef",ref:c,class:"map-compare"},null,512)],512)])):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-06bedfe8"]]);function lr(t){return[t.lng,t.lat]}function Ll(t){if(!Array.isArray(t)||t.length<2)return null;const n=Number(t[0]),o=Number(t[1]);return Number.isFinite(n)&&Number.isFinite(o)?[n,o]:null}function ar(t){if(!t||typeof t!="object")return null;const n=t;if(n.type==="LineString"&&Array.isArray(n.coordinates)){const o=n.coordinates.map(r=>Ll(r)).filter(r=>!!r);return o.length>=2?{type:"LineString",coordinates:o}:null}if(n.type==="MultiLineString"&&Array.isArray(n.coordinates)){const o=n.coordinates.map(r=>Array.isArray(r)?r.map(l=>Ll(l)).filter(l=>!!l):[]).filter(r=>r.length>=2);return o.length?o.length===1?{type:"LineString",coordinates:o[0]}:{type:"MultiLineString",coordinates:o}:null}return null}function Lm(t){return t?t.type==="LineString"?t.coordinates:t.coordinates.flatMap(n=>n):[]}function Tm(t,n){for(const o of n){const r=t[t.length-1];r&&r[0]===o[0]&&r[1]===o[1]||t.push(o)}}function Am(t){const n=[];for(const o of t)Tm(n,Lm(o.geometry));return n.length>=2?{type:"LineString",coordinates:n}:null}function sr(t){const n=Math.max(0,t);return n>=1e3?`${(n/1e3).toFixed(1)} км`:`${Math.round(n)} м`}function Tl(t){const n=Math.max(0,Math.round(t));if(n<60)return`${n} с`;const o=Math.floor(n/60);if(o<60)return`${o} хв`;const r=Math.floor(o/60),l=o%60;return l>0?`${r} год ${l} хв`:`${r} год`}function Mm(t){const n=Number(t);return Number.isFinite(n)&&n>0?n:null}function Fm(t){const n=Number((t==null?void 0:t.totalDistanceMeters)??0);if(Number.isFinite(n)&&n>0)return sr(n);const o=(t==null?void 0:t.distance)??"",r=Number(o);if(Number.isFinite(r)&&r>0)return sr(r);const l=String(o).trim();return l||""}function Dm(t){const n=Number((t==null?void 0:t.time_for_route)??0);if(Number.isFinite(n)&&n>0)return Tl(n);const o=(t==null?void 0:t.time_for_route)??"",r=String(o).trim();return r||""}function Pm(t){const n=Mm(t);return n!=null?Tl(n):""}function zm(t){const n=Number(t);return Number.isFinite(n)&&n>0?sr(n):String(t??"").trim()}function Im(t){return t?{title:t.title,distanceText:"",durationText:"",icon:t.icon,tone:t.tone,geometry:null}:null}function io(t){const n=t.toLowerCase();return n.includes("left")||n.includes("slight left")||n.includes("sharp left")}function co(t){const n=t.toLowerCase();return n.includes("right")||n.includes("slight right")||n.includes("sharp right")}function jm(t,n){const o=t.toLowerCase(),r=n.toLowerCase();return o.includes("depart")?"depart":o.includes("arriv")?"arrive":o.includes("roundabout")||r.includes("uturn")||r.includes("u-turn")?"roundabout":io(r)||o.includes("left")?"left":co(r)||o.includes("right")?"right":o.includes("straight")||r.includes("straight")||o.includes("merge")||o.includes("new name")?"straight":"unknown"}function Rm(t){const n=t.maneuver&&typeof t.maneuver=="object"?t.maneuver:{},o=String(n.type??t.type??"").trim(),r=String(n.modifier??t.modifier??"").trim(),l=String(t.name??t.ref??"").trim(),s=String(t.text??t.instruction??t.description??"").trim();if(s)return{title:s,icon:jm(o,r),tone:o.toLowerCase().includes("arriv")?"end":o.toLowerCase().includes("depart")?"start":"neutral"};const i=o.toLowerCase(),c=r.toLowerCase(),u=l?` на ${l}`:"",d=l?` по ${l}`:"",y=io(c)?"ліворуч":co(c)?"праворуч":"",a=y?` ${y}`:"";return i.includes("depart")?{title:y?l?`Виїдьте${a}${u}`:`Виїдьте${a}`:l?`Виїдьте${u}`:"Почніть рух",icon:"depart",tone:"start"}:i.includes("arriv")?{title:"Ви прибули до пункту призначення",icon:"arrive",tone:"end"}:i.includes("roundabout")?{title:l?`На кільці${d}`:"На кільці",icon:"roundabout",tone:"neutral"}:c.includes("uturn")||c.includes("u-turn")?{title:l?`Розверніться${u}`:"Розверніться",icon:"roundabout",tone:"neutral"}:i.includes("merge")?{title:l?`Злийтеся${d}`:"Злийтеся з потоком",icon:"straight",tone:"neutral"}:i.includes("fork")?io(c)?{title:l?`На розвилці тримайтеся ліворуч${u}`:"На розвилці тримайтеся ліворуч",icon:"left",tone:"neutral"}:co(c)?{title:l?`На розвилці тримайтеся праворуч${u}`:"На розвилці тримайтеся праворуч",icon:"right",tone:"neutral"}:{title:l?`На розвилці${u}`:"На розвилці",icon:"straight",tone:"neutral"}:i.includes("new name")?{title:l?`Продовжуйте по ${l}`:"Продовжуйте прямо",icon:"straight",tone:"neutral"}:i.includes("end of road")?io(c)?{title:l?`У кінці дороги поверніть ліворуч${u}`:"У кінці дороги поверніть ліворуч",icon:"left",tone:"neutral"}:co(c)?{title:l?`У кінці дороги поверніть праворуч${u}`:"У кінці дороги поверніть праворуч",icon:"right",tone:"neutral"}:{title:l?`У кінці дороги${u}`:"У кінці дороги",icon:"straight",tone:"neutral"}:i.includes("turn")&&c.includes("left")?{title:l?`Поверніть ліворуч${u}`:"Поверніть ліворуч",icon:"left",tone:"neutral"}:i.includes("turn")&&c.includes("right")?{title:l?`Поверніть праворуч${u}`:"Поверніть праворуч",icon:"right",tone:"neutral"}:i.includes("straight")||c.includes("straight")?{title:l?`Продовжуйте${d}`:"Продовжуйте прямо",icon:"straight",tone:"neutral"}:{title:l?`Рухайтесь${d}`:"Рухайтесь далі",icon:"unknown",tone:"neutral"}}function Om(t){return(Array.isArray(t==null?void 0:t.instructions)?t.instructions:Array.isArray(t==null?void 0:t.instruction)?t.instruction:Array.isArray(t==null?void 0:t.legs)?t.legs.flatMap(o=>{const r=o&&typeof o=="object"?o:null;return Array.isArray(r==null?void 0:r.steps)?r.steps:[]}):[]).map(o=>{if(!o||typeof o!="object")return null;const r=o,l=r.maneuver&&typeof r.maneuver=="object"?r.maneuver:{},s=Rm(r),i=ar(r.geometry??null);return{title:s.title,distanceText:zm(r.distance??r.length??l.distance??0),durationText:Pm(r.duration??r.time??r.duration_seconds??r.durationSeconds??0),icon:s.icon,tone:s.tone,geometry:i}}).filter(o=>!!o)}function Um(t,n){const o=lr(t[0].coords),r=lr(t[t.length-1].coords),l=new URLSearchParams({from:`${o[0]},${o[1]}`,to:`${r[0]},${r[1]}`}),s=String((n==null?void 0:n.mode)??"").trim();if(s&&l.set("mode",s),t.length>2){const i=t.slice(1,-1).map(c=>{const[u,d]=lr(c.coords);return`${u},${d}`}).join(";");i&&l.set("via",i)}return l}async function qm(t,n){const o=await fetch(`/api/routes?${Um(t,n).toString()}`,{credentials:"include"});if(!o.ok)throw new Error(`Route API returned ${o.status}`);return await o.json()}async function Hm(t,n){if(t.length<2)return{geometry:null,source:"api",distanceText:"",durationText:"",durationSeconds:null,instructions:[],note:null};const o=await qm(t,n),r=Array.isArray(o)?o[0]:Array.isArray(o==null?void 0:o.routes)?o.routes[0]:o!=null&&o.route&&typeof o.route=="object"?o.route:o,l=Om(r),s=Number((r==null?void 0:r.time_for_route)??(o==null?void 0:o.time_for_route)??0),i=Am(l)??ar((r==null?void 0:r.geom)??(r==null?void 0:r.geom_simplify)??(r==null?void 0:r.geometry)??null)??ar((o==null?void 0:o.geom)??(o==null?void 0:o.geom_simplify)??(o==null?void 0:o.geometry)??null);return{geometry:i,source:"api",distanceText:Fm(r),durationText:Dm(r),durationSeconds:Number.isFinite(s)?s:null,startInstruction:Im(l[0]),instructions:l,note:i?null:"Сервер маршруту не повернув геометрію."}}const Wm={class:"bg-white/95 backdrop-blur-xl rounded-2xl shadow-[0_20px_50px_rgba(15,23,42,0.18)] border border-white/60 flex-shrink-0 overflow-hidden pointer-events-auto w-72"},Ym={class:"px-4 pt-4 pb-3"},Gm={class:"flex items-center justify-between gap-2 mb-3"},Km={class:"flex items-center gap-2 min-w-0"},Zm={class:"w-7 h-7 bg-blue-500 rounded-xl flex items-center justify-center flex-shrink-0"},Xm={class:"flex items-center gap-1.5 flex-shrink-0"},Jm={key:0,class:"flex items-center gap-1 px-2 py-1 bg-blue-50 rounded-lg border border-blue-100 animate-fade-in"},Qm={class:"text-xs font-bold text-blue-700 tabular-nums"},ep={class:"relative flex flex-col gap-2"},tp={class:"relative"},np={class:"flex items-center justify-center relative z-10"},op=["disabled"],rp={class:"relative"},lp={class:"flex items-stretch gap-0.5 rounded-xl border p-0.5 bg-gray-100 border-gray-200"},ap=["aria-label","aria-pressed","onClick"],sp={class:"text-[9px] font-semibold leading-none tabular-nums text-blue-500"},ip=["aria-label","aria-pressed"],cp={key:0,class:"text-xs text-gray-500"},dp={key:1,class:"text-xs text-rose-600"},up={key:2,class:"text-xs text-amber-700"},fp={class:"px-4 pb-4 flex gap-2"},mp=["disabled"],pp={key:0,class:"bg-white/95 backdrop-blur-xl rounded-2xl shadow-[0_20px_50px_rgba(15,23,42,0.18)] border border-white/60 flex min-h-0 h-auto max-h-[250px] flex-[1_1_auto] flex-col overflow-hidden pointer-events-auto animate-slide-up"},gp={class:"flex items-center justify-between px-4 py-2.5 border-b border-gray-100 flex-shrink-0"},yp={class:"text-xs text-gray-400"},hp={class:"min-h-0 flex-1 overflow-y-auto overflow-x-hidden pb-1 scrollbar-thin"},bp={class:"min-h-0 py-1 animate-fade-in"},xp={class:"flex flex-col gap-0.5"},kp=["onMouseenter"],wp={class:"flex-1 min-w-0"},_p={class:"flex items-start justify-between gap-2"},Ep={class:"text-sm leading-snug font-medium text-gray-700"},Cp={key:0,class:"text-xs flex-shrink-0 font-semibold mt-0.5 text-gray-400"},Np={key:0,class:"text-xs mt-0.5 text-gray-400"},Vp=e.defineComponent({name:"RoutePanel",__name:"index",emits:["close","points-change","instruction-hover","route-change"],setup(t,{expose:n,emit:o}){const r=o,l=[{id:"car",label:"Автомобіль",icon:ye.Car,factor:1},{id:"walk",label:"Пішохід",icon:ye.PersonStanding,factor:6.5},{id:"bike",label:"Велосипед",icon:ye.Bike,factor:2.2},{id:"transit",label:"Громадський транспорт",icon:ye.Bus,factor:1.8},{id:"flight",label:"Авіарейс",icon:ye.PlaneTakeoff,factor:.45}],s=e.ref([]),i=e.ref(""),c=e.ref(""),u=e.ref("car"),d=e.ref(!1),y=e.ref(""),a=e.ref(""),m=e.ref(""),f=e.ref(null),p=e.ref(null),k=e.ref([]),h=e.ref(null),g=e.ref(null),b=e.ref(null),x=e.ref(null),C=e.ref(null);let V=null;const E=e.computed(()=>{if(C.value!==null)return{height:`${C.value}px`,maxHeight:`${C.value}px`}});let _=1,N=0;const T=e.computed(()=>s.value.length>=2),Y=e.computed(()=>{const ie=[];return p.value&&ie.push(p.value),ie.push(...k.value),ie}),ee=e.computed(()=>Y.value.length);function R(ie){return ie?`${ie.coords.lng.toFixed(6)}, ${ie.coords.lat.toFixed(6)}`:""}function ae(){i.value=R(s.value[0]),c.value=R(s.value[1])}function ue(){return s.value.map(ie=>({id:ie.id,coords:{...ie.coords}}))}function oe(){r("points-change",ue())}function te(ie){r("instruction-hover",ie)}function J(ie){r("route-change",ie?{geometry:ie.geometry,source:ie.source,distanceText:ie.distanceText,durationText:ie.durationText,note:ie.note}:null)}function S({loading:ie=!1}={}){g.value=null,a.value="",m.value="",f.value=null,p.value=null,k.value=[],h.value=null,y.value="",d.value=ie,b.value=null,te(null),J(null)}function F(){const ie=_;return _+=1,ie}function M(ie){const de=ie.replace(/[^\d.,+\-\s]/g," ").match(/-?\d+(?:\.\d+)?/g);if(!de||de.length<2)return null;const pe=Number(de[0]),ve=Number(de[1]);return!Number.isFinite(pe)||!Number.isFinite(ve)||Math.abs(ve)>90||Math.abs(pe)>180?null:{lat:ve,lng:pe}}function B(ie,de){var ve,U;const pe=s.value.slice(0,2);ie===0?pe[0]={id:((ve=pe[0])==null?void 0:ve.id)??F(),coords:{lat:de.lat,lng:de.lng}}:pe[0]?pe[1]={id:((U=pe[1])==null?void 0:U.id)??F(),coords:{lat:de.lat,lng:de.lng}}:pe[0]={id:F(),coords:{lat:de.lat,lng:de.lng}},s.value=pe.filter(Boolean).slice(0,2),ae(),oe(),S()}function j(ie){s.value.length===0?s.value=[{id:F(),coords:{lat:ie.lat,lng:ie.lng}}]:s.value.length===1?s.value=[s.value[0],{id:F(),coords:{lat:ie.lat,lng:ie.lng}}]:s.value=[s.value[0],{id:s.value[1].id,coords:{lat:ie.lat,lng:ie.lng}}],ae(),oe(),S()}function X(ie){ie===0?s.value=s.value.length>1?[s.value[1]]:[]:s.value=s.value.slice(0,1),ae(),oe(),S()}function he(){s.value.length<2||(s.value=[s.value[1],s.value[0]],ae(),oe(),S())}function Z(ie){const de=ie===0?i.value:c.value,pe=M(de);if(!pe){ae();return}B(ie,pe)}async function P(){if(s.value.length<2){S();return}const ie=++N;d.value=!0,y.value="";const de=ue();try{const pe=await Hm(de,{mode:u.value});if(ie!==N)return;g.value=pe.geometry,a.value=pe.distanceText,m.value=pe.durationText,f.value=pe.durationSeconds,p.value=pe.startInstruction,k.value=pe.instructions,h.value=pe.note,d.value=!1,b.value=null,te(null),J(pe)}catch(pe){if(ie!==N)return;d.value=!1,y.value=pe instanceof Error?pe.message:"Не вдалося побудувати маршрут",h.value=null,g.value=null,p.value=null,b.value=null,te(null),J(null)}}const q=ie=>{const de=(ie??[]).map(pe=>({id:pe.id??F(),coords:{...pe.coords}}));s.value=de.slice(0,2),_=s.value.length?Math.max(...s.value.map(pe=>pe.id))+1:1,ae(),oe(),S()};function H(ie){var ve;const de=f.value;if(!de||!Number.isFinite(de))return ie==="car"&&m.value||"—";const pe=((ve=l.find(U=>U.id===ie))==null?void 0:ve.factor)??1;return be(de*pe)}function re(ie){switch(ie){case"depart":return ye.Navigation;case"arrive":return ye.MapPin;case"left":return ye.ArrowLeft;case"right":return ye.ArrowRight;case"straight":return ye.ArrowUp;case"roundabout":return ye.RotateCcw;default:return ye.Route}}function I(ie){return ie==="start"?{icon:"bg-emerald-50 text-emerald-600"}:ie==="end"?{icon:"bg-red-50 text-red-500"}:{icon:"bg-gray-100 text-gray-500"}}function le(ie){var de;b.value=ie,te(((de=k.value[ie-1])==null?void 0:de.geometry)??null)}function me(){b.value=null,te(null)}function be(ie){const de=Math.max(0,Math.round(ie));if(de<60)return`${de} с`;const pe=Math.floor(de/60);if(pe<60)return`${pe} хв`;const ve=Math.floor(pe/60),U=pe%60;return U>0?`${ve} год ${U} хв`:`${ve} год`}function A(){K(),r("close")}function K(){s.value=[],_=1,N+=1,ae(),S(),oe()}async function fe(){await e.nextTick();const ie=x.value,de=ie==null?void 0:ie.closest(".map-view-root");if(!ie||!de)return;const pe=de.getBoundingClientRect(),ve=ie.getBoundingClientRect();C.value=Math.max(0,Math.floor(pe.bottom-ve.top-8))}return e.onMounted(()=>{var de;ae(),oe(),fe();const ie=(de=x.value)==null?void 0:de.closest(".map-view-root");ie&&typeof ResizeObserver<"u"&&(V=new ResizeObserver(fe),V.observe(ie))}),e.onBeforeUnmount(()=>{V==null||V.disconnect(),V=null}),e.watch(()=>s.value,()=>{ae(),s.value.length<2&&(N+=1)},{deep:!0}),e.watch(()=>Y.value.length,()=>fe()),e.watch(u,()=>{s.value.length>=2&&(N+=1,S())}),n({addPoint:j,setPoints:q,clearPoints:K}),(ie,de)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"panelWrapRef",ref:x,class:"route-panel-wrap absolute top-0 right-full mr-2 z-20 flex h-auto max-h-none min-h-0 flex-col gap-2 overflow-hidden pointer-events-none animate-slide-up",style:e.normalizeStyle(E.value)},[e.createElementVNode("div",Wm,[e.createElementVNode("div",Ym,[e.createElementVNode("div",Gm,[e.createElementVNode("div",Km,[e.createElementVNode("div",Zm,[e.createVNode(e.unref(ye.Route),{size:14,"stroke-width":2,class:"text-white"})]),de[8]||(de[8]=e.createElementVNode("div",{class:"flex-1 min-w-0"},[e.createElementVNode("h2",{class:"text-sm font-bold text-gray-900 leading-none"},"Маршрутизатор"),e.createElementVNode("p",{class:"text-xs text-gray-400 mt-0.5"},"Введіть координати")],-1))]),e.createElementVNode("div",Xm,[a.value?(e.openBlock(),e.createElementBlock("div",Jm,[e.createVNode(e.unref(ye.Map),{size:10,"stroke-width":2,class:"text-blue-500"}),e.createElementVNode("span",Qm,e.toDisplayString(a.value),1)])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"w-7 h-7 rounded-xl flex items-center justify-center text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 flex-shrink-0","aria-label":"Закрити",onClick:A},[e.createVNode(e.unref(ye.X),{size:14,"stroke-width":2})])])]),e.createElementVNode("div",ep,[e.createElementVNode("div",tp,[de[9]||(de[9]=e.createElementVNode("div",{class:"absolute left-3 top-1/2 -translate-y-1/2 w-2.5 h-2.5 rounded-full bg-emerald-500 ring-2 ring-white z-10"},null,-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":de[0]||(de[0]=pe=>i.value=pe),type:"text",placeholder:"30.5234, 50.4501",class:"w-full px-3 py-2 text-sm pl-9 pr-8 rounded-xl border border-gray-200 bg-white text-gray-800 placeholder-gray-400 focus:border-blue-500 focus:outline-none transition-all disabled:opacity-50",onBlur:de[1]||(de[1]=pe=>Z(0)),onKeyup:de[2]||(de[2]=e.withKeys(e.withModifiers(pe=>Z(0),["prevent"]),["enter"]))},null,544),[[e.vModelText,i.value]]),e.createElementVNode("button",{type:"button",class:"absolute right-2 top-1/2 -translate-y-1/2 w-5 h-5 rounded-full flex items-center justify-center transition-all hover:scale-110 text-gray-400 hover:text-gray-600 hover:bg-gray-100","aria-label":"Очистити точку A",onClick:de[3]||(de[3]=pe=>X(0))},[e.createVNode(e.unref(ye.X),{size:11,"stroke-width":2})]),de[10]||(de[10]=e.createElementVNode("span",{class:"absolute left-8 -top-2 px-1 text-xs font-semibold text-gray-500 bg-white"},"A",-1))]),e.createElementVNode("div",np,[de[11]||(de[11]=e.createElementVNode("div",{class:"absolute w-full h-px bg-gray-100"},null,-1)),e.createElementVNode("button",{type:"button",class:"relative w-8 h-8 rounded-full border flex items-center justify-center transition-all disabled:opacity-40 hover:shadow-sm bg-white border-gray-200 text-gray-500 hover:text-blue-500 hover:border-blue-300",title:"Поміняти місцями",disabled:s.value.length<2,onClick:he},[e.createVNode(e.unref(ye.ArrowUpDown),{size:14,"stroke-width":2})],8,op)]),e.createElementVNode("div",rp,[de[12]||(de[12]=e.createElementVNode("div",{class:"absolute left-3 top-1/2 -translate-y-1/2 w-2.5 h-2.5 rounded-full bg-red-500 ring-2 ring-white z-10"},null,-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":de[4]||(de[4]=pe=>c.value=pe),type:"text",placeholder:"30.4947, 50.4271",class:"w-full px-3 py-2 text-sm pl-9 pr-8 rounded-xl border border-gray-200 bg-white text-gray-800 placeholder-gray-400 focus:border-blue-500 focus:outline-none transition-all disabled:opacity-50",onBlur:de[5]||(de[5]=pe=>Z(1)),onKeyup:de[6]||(de[6]=e.withKeys(e.withModifiers(pe=>Z(1),["prevent"]),["enter"]))},null,544),[[e.vModelText,c.value]]),e.createElementVNode("button",{type:"button",class:"absolute right-2 top-1/2 -translate-y-1/2 w-5 h-5 rounded-full flex items-center justify-center transition-all hover:scale-110 text-gray-400 hover:text-gray-600 hover:bg-gray-100","aria-label":"Очистити точку B",onClick:de[7]||(de[7]=pe=>X(1))},[e.createVNode(e.unref(ye.X),{size:11,"stroke-width":2})]),de[13]||(de[13]=e.createElementVNode("span",{class:"absolute left-8 -top-2 px-1 text-xs font-semibold text-gray-500 bg-white"},"B",-1))]),e.createElementVNode("div",lp,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,pe=>e.createElementVNode("div",{key:pe.id,class:"relative flex-1 flex flex-col justify-center"},[pe.id==="car"?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button","aria-label":pe.label,"aria-pressed":u.value===pe.id,class:"w-full flex flex-col items-center justify-center rounded-lg transition-all duration-200 gap-0.5 py-1.5 bg-white text-blue-600 shadow-sm border border-blue-200",onClick:ve=>u.value=pe.id},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(pe.icon),{size:16,"stroke-width":2})),e.createElementVNode("span",sp,e.toDisplayString(H(pe.id)),1)],8,ap)):(e.openBlock(),e.createElementBlock("button",{key:1,type:"button","aria-label":pe.label,"aria-pressed":u.value===pe.id,disabled:"",class:"w-full flex flex-col items-center justify-center rounded-lg transition-all duration-200 gap-0.5 py-1.5 text-gray-300 opacity-60 cursor-not-allowed"},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(pe.icon),{size:16,"stroke-width":2}))],8,ip))])),64))]),d.value?(e.openBlock(),e.createElementBlock("p",cp,"Прокладаємо маршрут...")):y.value?(e.openBlock(),e.createElementBlock("p",dp,e.toDisplayString(y.value),1)):h.value?(e.openBlock(),e.createElementBlock("p",up,e.toDisplayString(h.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",fp,[e.createElementVNode("button",{type:"button",class:"w-full h-9 rounded-xl bg-blue-600 hover:bg-blue-700 text-white text-xs font-semibold flex items-center justify-center gap-1.5 transition-colors disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-blue-600",disabled:!T.value,onClick:P},[e.createVNode(e.unref(ye.Route),{size:13,"stroke-width":2}),de[14]||(de[14]=e.createTextVNode(" Побудувати маршрут ",-1))],8,mp)])]),k.value.length?(e.openBlock(),e.createElementBlock("div",pp,[e.createElementVNode("div",gp,[de[15]||(de[15]=e.createElementVNode("span",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wide"},"Покрокові інструкції",-1)),e.createElementVNode("span",yp,e.toDisplayString(ee.value)+" кроків",1)]),e.createElementVNode("div",hp,[e.createElementVNode("div",bp,[e.createElementVNode("div",xp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Y.value,(pe,ve)=>(e.openBlock(),e.createElementBlock("div",{key:`${ve}-${pe.title}`,class:e.normalizeClass(["step-item flex items-start gap-3 rounded-xl cursor-pointer select-none transition-all px-3 py-2",[ve===0?"bg-emerald-50/60 cursor-default":b.value===ve?"bg-blue-50 ring-1 ring-blue-100":"hover:bg-gray-50"]]),onMouseenter:U=>le(ve),onMouseleave:me},[e.createElementVNode("div",{class:e.normalizeClass(["flex-shrink-0 w-7 h-7 rounded-lg flex items-center justify-center mt-0.5",I(pe.tone).icon])},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(re(pe.icon)),{size:14,"stroke-width":2}))],2),e.createElementVNode("div",wp,[e.createElementVNode("div",_p,[e.createElementVNode("p",Ep,e.toDisplayString(pe.title),1),pe.distanceText?(e.openBlock(),e.createElementBlock("span",Cp,e.toDisplayString(pe.distanceText),1)):e.createCommentVNode("",!0)]),pe.durationText?(e.openBlock(),e.createElementBlock("p",Np,e.toDisplayString(pe.durationText),1)):e.createCommentVNode("",!0)])],42,kp))),128))])])])])):e.createCommentVNode("",!0),de[16]||(de[16]=e.createElementVNode("div",{class:"bg-white/80 backdrop-blur-xl rounded-xl border border-white/60 px-3 py-2 flex-shrink-0 pointer-events-auto"},[e.createElementVNode("p",{class:"text-[10px] text-gray-400 leading-relaxed text-center"},[e.createElementVNode("kbd",{class:"px-1.5 py-0.5 rounded bg-gray-100 text-gray-500 text-[9px] font-mono"},"ЛКМ"),e.createTextVNode(" по карті заповнює точки маршруту ")])],-1))],4))}}),$p={class:"relative"},Bp=["aria-label"],Sp={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"},vp=e.defineComponent({name:"RouteControl",__name:"RouteControl",props:{active:{type:Boolean}},emits:["toggle","close","points-change","instruction-hover","route-change"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=e.ref(null);function i(d){var y;(y=s.value)==null||y.addPoint(d)}function c(d){var y;(y=s.value)==null||y.setPoints(d)}function u(){var d;(d=s.value)==null||d.clearPoints()}return n({addPoint:i,setPoints:c,clearPoints:u}),(d,y)=>(e.openBlock(),e.createElementBlock("div",$p,[t.active?(e.openBlock(),e.createBlock(Vp,{key:0,ref_key:"routePanelRef",ref:s,class:"absolute top-0 right-full mr-2",onClose:y[0]||(y[0]=a=>l("close")),onPointsChange:y[1]||(y[1]=a=>l("points-change",a)),onInstructionHover:y[2]||(y[2]=a=>l("instruction-hover",a)),onRouteChange:y[3]||(y[3]=a=>l("route-change",a))},null,512)):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",r.active?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":r.active?"Вимкнути побудову маршруту":"Побудова маршруту",onClick:y[4]||(y[4]=e.withModifiers(a=>l("toggle"),["stop"]))},[e.createElementVNode("span",Sp,e.toDisplayString(r.active?"Вимкнути побудову маршруту":"Побудова маршруту"),1),e.createVNode(e.unref(ye.Route),{class:"w-4 h-4"})],10,Bp)]))}}),Lt="route-builder-src",uo="route-builder-line",fo="route-builder-points",mo="route-builder-labels",en="route-builder-hover-src",po="route-builder-hover-line",Lp=e.defineComponent({__name:"RouteLayer",props:{points:{},routeGeometry:{},hoverGeometry:{}},setup(t){const n={"text-anchor":"center","text-offset":[0,0],"text-allow-overlap":!0,"text-ignore-placement":!0};function o(){return{type:"FeatureCollection",features:[]}}function r(m){return m?{type:"FeatureCollection",features:[{type:"Feature",properties:{role:"hover-line"},geometry:m}]}:o()}function l(m){if(!m)return null;if(m.type==="LineString"){const f=(m.coordinates||[]).filter(p=>Number.isFinite(p[0])&&Number.isFinite(p[1]));return f.length>=2?{type:"LineString",coordinates:f}:null}if(m.type==="MultiLineString"){const f=(m.coordinates||[]).map(p=>p.filter(k=>Number.isFinite(k[0])&&Number.isFinite(k[1]))).filter(p=>p.length>=2);return f.length?f.length===1?{type:"LineString",coordinates:f[0]}:{type:"MultiLineString",coordinates:f}:null}return null}function s(m,f){const p=[];return f&&p.push({type:"Feature",properties:{role:"line"},geometry:f}),m.forEach((k,h)=>{p.push({type:"Feature",properties:{role:"point",label:String(h+1),kind:h===0?"start":h===m.length-1?"end":"mid"},geometry:{type:"Point",coordinates:[k.coords.lng,k.coords.lat]}})}),{type:"FeatureCollection",features:p}}function i(m){m.getSource(Lt)||m.addSource(Lt,{type:"geojson",data:o()}),m.getSource(en)||m.addSource(en,{type:"geojson",data:o()}),m.getLayer(uo)||m.addLayer({id:uo,type:"line",source:Lt,filter:["==",["get","role"],"line"],layout:{"line-join":"round","line-cap":"round"},paint:{"line-color":"#2563eb","line-width":4,"line-opacity":.9}}),m.getLayer(po)||m.addLayer({id:po,type:"line",source:en,layout:{"line-join":"round","line-cap":"round"},paint:{"line-color":"#f59e0b","line-width":7,"line-opacity":.95}}),m.getLayer(fo)||m.addLayer({id:fo,type:"circle",source:Lt,filter:["==",["get","role"],"point"],paint:{"circle-radius":10,"circle-color":["match",["get","kind"],"start","#22c55e","end","#ef4444","#60a5fa"],"circle-stroke-width":2,"circle-stroke-color":"#0f172a"}}),m.getLayer(mo)||m.addLayer({id:mo,type:"symbol",source:Lt,filter:["==",["get","role"],"point"],layout:{"text-field":["to-string",["get","label"]],"text-size":12,"text-font":["Arial Unicode MS Bold","Open Sans Bold"],...n},paint:{"text-color":"#ffffff","text-halo-color":"#0f172a","text-halo-width":1}})}function c(m){if(m)try{m.getLayer(po)&&m.removeLayer(po),m.getLayer(mo)&&m.removeLayer(mo),m.getLayer(fo)&&m.removeLayer(fo),m.getLayer(uo)&&m.removeLayer(uo),m.getSource(en)&&m.removeSource(en),m.getSource(Lt)&&m.removeSource(Lt)}catch{}}const u=t,{map:d,ready:y}=Qe();function a(){y().then(()=>{const m=d.value;if(!m)return;i(m);const f=m.getSource(Lt);if(!(f!=null&&f.setData))return;f.setData(s(u.points,l(u.routeGeometry)));const p=m.getSource(en);p!=null&&p.setData&&p.setData(r(l(u.hoverGeometry??null)))})}return e.watch(()=>[u.points,u.routeGeometry,u.hoverGeometry],()=>a(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{y().then(()=>c(d.value))}),(m,f)=>null}}),Tp={class:"pt-1 border-t border-gray-100"},Ap={class:"space-y-1"},Mp=e.defineComponent({__name:"AddCoordinates",emits:["submit","cancel"],setup(t,{emit:n}){const o=n,r=e.ref(null),l=e.ref(null),s=(u,d,y)=>Math.min(Math.max(u,d),y),i=()=>{if(r.value===null||l.value===null||!Number.isFinite(r.value)||!Number.isFinite(l.value))return;const u=s(r.value,-90,90),d=s(l.value,-180,180);o("submit",{lat:u,lng:d}),r.value=null,l.value=null},c=()=>{r.value=null,l.value=null,o("cancel")};return(u,d)=>(e.openBlock(),e.createElementBlock("div",Tp,[d[2]||(d[2]=e.createElementVNode("p",{class:"text-xs text-gray-600 mb-1"},"Додати точку за координатами:",-1)),e.createElementVNode("div",Ap,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":d[0]||(d[0]=y=>r.value=y),type:"number",step:"0.0001",class:"w-full px-2 py-1 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Широта (50.4501)"},null,512),[[e.vModelText,r.value,void 0,{number:!0}]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":d[1]||(d[1]=y=>l.value=y),type:"number",step:"0.0001",class:"w-full px-2 py-1 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Довгота (30.5234)"},null,512),[[e.vModelText,l.value,void 0,{number:!0}]]),e.createElementVNode("div",{class:"flex gap-1.5"},[e.createElementVNode("button",{class:"flex-1 px-2 py-1 bg-blue-500 hover:bg-blue-600 text-white text-xs font-medium rounded transition-colors",type:"button",onClick:i}," Додати "),e.createElementVNode("button",{class:"px-2 py-1 bg-gray-200 hover:bg-gray-300 text-gray-700 text-xs font-medium rounded transition-colors",type:"button",onClick:c}," Скасувати ")])])]))}}),Fp=e.defineComponent({__name:"BtnAdd",emits:["click"],setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("button",{class:"flex-1 px-2 py-1.5 bg-blue-500 hover:bg-blue-600 text-white text-xs font-medium rounded transition-colors duration-150 flex items-center justify-center gap-1",onClick:o[0]||(o[0]=r=>n.$emit("click"))},[e.createVNode(e.unref(ye.Plus),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Додати ",-1))]))}}),Dp=e.defineComponent({__name:"BtnClear",emits:["click"],setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("button",{class:"w-full px-2 py-1.5 bg-rose-500 hover:bg-rose-600 text-white text-xs font-medium rounded transition-colors duration-150 flex items-center justify-center gap-1",onClick:o[0]||(o[0]=r=>n.$emit("click"))},[e.createVNode(e.unref(ye.Trash2),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Очистити ",-1))]))}}),Pp=e.defineComponent({__name:"BtnComplete",emits:["click"],setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("button",{class:"flex-1 px-2 py-1.5 bg-emerald-500 hover:bg-emerald-600 text-white text-xs font-medium rounded transition-colors duration-150 flex items-center justify-center gap-1",onClick:o[0]||(o[0]=r=>n.$emit("click"))},[e.createVNode(e.unref(ye.Circle),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode("Замкнути ",-1))]))}}),zp=new Intl.NumberFormat("uk-UA",{minimumFractionDigits:2,maximumFractionDigits:2});function Rt(t){return zp.format(t)}function Al(t){return t>=1e3?`${Rt(t/1e3)} км`:`${Rt(t)} м`}const Ip={class:"flex items-center gap-1.5 text-xs bg-gray-50 rounded p-1.5"},jp={key:0,class:"flex-1 flex gap-1"},Rp={key:1,class:"flex-1 font-mono text-gray-700"},Op=e.defineComponent({__name:"DotListItem",props:{id:{},index:{},coords:{}},emits:["update","delete"],setup(t,{emit:n}){const o=t,r=n,l=e.computed(()=>`${o.coords.lat.toFixed(4)}°, ${o.coords.lng.toFixed(4)}°`),s=e.ref(!1),i=e.ref(o.coords.lat),c=e.ref(o.coords.lng);e.watch(()=>o.coords,m=>{i.value=m.lat,c.value=m.lng},{deep:!0,immediate:!0});const u=(m,f,p)=>Math.min(Math.max(m,f),p),d=()=>{s.value=!0},y=()=>{if(!Number.isFinite(i.value)||!Number.isFinite(c.value))return;const m=u(i.value,-90,90),f=u(c.value,-180,180);r("update",{id:o.id,coords:{lat:m,lng:f}}),s.value=!1},a=()=>{r("delete",o.id)};return(m,f)=>(e.openBlock(),e.createElementBlock("div",Ip,[e.createVNode(e.unref(ye.MapPin),{size:12,"stroke-width":2,class:"text-gray-400 flex-shrink-0"}),s.value?(e.openBlock(),e.createElementBlock("div",jp,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":f[0]||(f[0]=p=>i.value=p),type:"number",step:"0.0001",min:"-90",max:"90",class:"flex-1 px-1.5 py-0.5 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Широта"},null,512),[[e.vModelText,i.value,void 0,{number:!0}]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":f[1]||(f[1]=p=>c.value=p),type:"number",step:"0.0001",min:"-180",max:"180",class:"flex-1 px-1.5 py-0.5 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Довгота"},null,512),[[e.vModelText,c.value,void 0,{number:!0}]]),e.createElementVNode("button",{class:"px-1.5 py-0.5 bg-emerald-500 text-white rounded hover:bg-emerald-600 text-xs",type:"button",onClick:y}," ✓ ")])):(e.openBlock(),e.createElementBlock("span",Rp,e.toDisplayString(l.value),1)),s.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:2,class:"text-blue-500 hover:text-blue-600 px-0.5",type:"button",onClick:d}," ✎ ")),e.createElementVNode("button",{class:"text-rose-500 hover:text-rose-600 px-0.5",type:"button",onClick:a}," ✕ ")]))}}),Up={class:"ruler-control px-3 py-2.5 space-y-2"},qp={type:"button",class:"ruler-row w-full flex items-center gap-2 cursor-pointer group text-left"},Hp={class:e.normalizeClass(["flex items-center justify-center w-5 h-5 rounded-full shrink-0 transition-colors pointer-events-none"]),title:"Сумарна довжина всіх відрізків","aria-hidden":"true"},Wp={class:"text-sm font-semibold text-slate-700"},Yp={class:"ruler-row"},Gp={type:"button",class:"w-full flex items-center gap-2 cursor-pointer group text-left"},Kp={class:e.normalizeClass(["flex items-center justify-center w-5 h-5 rounded-full shrink-0 transition-colors pointer-events-none"]),title:"Площа замкнутого контуру","aria-hidden":"true"},Zp={class:"inline-flex rounded-md overflow-hidden border border-gray-200 bg-gray-100"},Xp=["onClick"],Jp={class:"flex items-center gap-2 mt-0.5 pl-7"},Qp={key:0,class:"text-base font-semibold text-green-600"},eg={key:1,class:"text-xs text-gray-400"},tg={class:"ruler-row flex items-center gap-2 cursor-pointer"},ng={class:e.normalizeClass(["flex items-center justify-center w-5 h-5 rounded-full shrink-0 transition-colors pointer-events-none"]),title:"Список точок","aria-hidden":"true"},og={class:"text-xs font-medium text-gray-600 flex-1"},rg={key:0,class:"pt-1.5 border-t border-gray-100 max-h-32 overflow-y-auto space-y-1"},lg=e.defineComponent({__name:"ControlPanel",props:{points:{},isShapeClosed:{type:Boolean}},emits:["update-point","delete-point"],setup(t){const n=t,o=e.ref(!1),r=e.ref("km2"),l=[{id:"km2",label:"км²"},{id:"ha",label:"га"},{id:"m2",label:"м²"}],s=()=>{o.value=!o.value},i=(p,k)=>{const h=T=>T*Math.PI/180,g=h(k.lat-p.lat),b=h(k.lng-p.lng),x=h(p.lat),C=h(k.lat),V=Math.sin(g/2),E=Math.sin(b/2);return 6371e3*(2*Math.asin(Math.sqrt(V*V+Math.cos(x)*Math.cos(C)*E*E)))},c=e.computed(()=>{if(n.points.length<2)return 0;let p=0;for(let k=1;k<n.points.length;k+=1)p+=i(n.points[k-1].coords,n.points[k].coords);return n.isShapeClosed&&n.points.length>=2&&(p+=i(n.points[n.points.length-1].coords,n.points[0].coords)),p}),u=e.computed(()=>c.value>=1e3?`${Rt(c.value/1e3)} км`:`${Rt(c.value)} м`);function d(p){if(p.length<3)return 0;const k=p[0].lat,h=p[0].lng,g=(x,C)=>{const V=(x-k)*110574;return{x:(C-h)*111320*Math.cos(k*Math.PI/180),y:V}};let b=0;for(let x=0;x<p.length;x++){const C=(x+1)%p.length,V=g(p[x].lat,p[x].lng),E=g(p[C].lat,p[C].lng);b+=V.x*E.y-V.y*E.x}return Math.abs(b)*.5}const y=e.computed(()=>{if(!n.isShapeClosed||n.points.length<3)return 0;const p=n.points.map(k=>k.coords);return d(p)}),a=e.computed(()=>y.value>0),m=e.computed(()=>{const p=y.value;if(p===0)return"—";if(r.value==="km2"){const h=p/1e6;return`${Rt(h)} км²`}if(r.value==="ha"){const h=p/1e4;return`${Rt(h)} га`}const k=p>=1?Math.round(p):p;return`${Rt(k)} м²`}),f=e.computed(()=>{const p=n.points.length;return p===1?"1 точка":p>=2&&p<=4?`${p} точки`:`${p} точок`});return e.watch(()=>n.points.length,()=>{n.points.length===0&&(o.value=!1)}),(p,k)=>(e.openBlock(),e.createElementBlock("div",Up,[e.createElementVNode("button",qp,[e.createElementVNode("span",Hp,[e.createVNode(e.unref(ye.Info),{size:12,"stroke-width":2.5})]),k[1]||(k[1]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Загальна відстань",-1)),e.createElementVNode("span",Wp,e.toDisplayString(u.value),1)]),e.createElementVNode("div",Yp,[e.createElementVNode("button",Gp,[e.createElementVNode("span",Kp,[e.createVNode(e.unref(ye.Info),{size:12,"stroke-width":2.5})]),k[2]||(k[2]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Площа",-1)),e.createElementVNode("div",Zp,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,(h,g)=>e.createElementVNode("button",{key:h.id,type:"button",class:e.normalizeClass(["px-2.5 py-1 text-xs font-medium transition-colors border-r border-gray-200 last:border-r-0",g===0&&"rounded-l-md",g===l.length-1&&"rounded-r-md",r.value===h.id?"bg-white text-green-600 font-semibold shadow-sm":"text-gray-600 hover:bg-gray-50"]),onClick:e.withModifiers(b=>r.value=h.id,["stop"])},e.toDisplayString(h.label),11,Xp)),64))])]),e.createElementVNode("div",Jp,[a.value?(e.openBlock(),e.createElementBlock("span",Qp,e.toDisplayString(m.value),1)):(e.openBlock(),e.createElementBlock("span",eg,"—"))])]),e.createElementVNode("div",tg,[e.createElementVNode("span",ng,[e.createVNode(e.unref(ye.Info),{size:12,"stroke-width":2.5})]),e.createElementVNode("span",og,e.toDisplayString(f.value),1),e.createElementVNode("button",{type:"button",class:"text-xs text-blue-500 hover:text-blue-600 font-medium transition-colors",onClick:e.withModifiers(s,["stop"])}," Координати ")]),o.value?(e.openBlock(),e.createElementBlock("div",rg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.points,(h,g)=>(e.openBlock(),e.createBlock(Op,{key:h.id,id:h.id,index:g+1,coords:h.coords,onUpdate:k[0]||(k[0]=b=>p.$emit("update-point",b)),onDelete:b=>p.$emit("delete-point",h.id)},null,8,["id","index","coords","onDelete"]))),128))])):e.createCommentVNode("",!0)]))}}),ag={class:"px-3 py-3 bg-blue-50/50 border-b border-blue-100"},sg={class:"flex items-start gap-2"},ig=e.defineComponent({__name:"InfoHint",setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",ag,[e.createElementVNode("div",sg,[e.createVNode(e.unref(ye.Info),{size:16,"stroke-width":2,class:"text-blue-600 flex-shrink-0 mt-0.5"}),o[0]||(o[0]=e.createElementVNode("div",{class:"space-y-1"},[e.createElementVNode("p",{class:"text-xs font-medium text-blue-900"}," Натискайте на карту, щоб додати точки вимірювання "),e.createElementVNode("p",{class:"text-[10px] text-blue-700"},' Або скористайтесь кнопкою "Додати" внизу для введення координат вручну ')],-1))])]))}}),cg={class:"space-y-1.5"},dg={class:"space-y-1 max-h-40 overflow-y-auto"},ug={class:"text-gray-700"},fg={class:"font-semibold text-slate-800"},mg=e.defineComponent({__name:"ToPointList",props:{points:{},isShapeClosed:{type:Boolean}},setup(t){const n=t;function o(s,i){const c=f=>f*Math.PI/180,u=c(i.lat-s.lat),d=c(i.lng-s.lng),y=c(s.lat),a=c(i.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(u/2)**2+Math.cos(y)*Math.cos(a)*Math.sin(d/2)**2)))}function r(s){return Al(s)}const l=e.computed(()=>{const s=[],i=n.points;if(i.length<2)return s;for(let c=0;c<i.length;c++){const u=c===i.length-1&&n.isShapeClosed?0:c+1;if(u>=i.length)break;const d=o(i[c].coords,i[u].coords);s.push({from:c+1,to:u+1,label:r(d)})}return s});return(s,i)=>(e.openBlock(),e.createElementBlock("div",cg,[i[0]||(i[0]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-600 mb-1.5"},"Відстань між точками:",-1)),e.createElementVNode("div",dg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(c,u)=>(e.openBlock(),e.createElementBlock("div",{key:u,class:"flex items-center justify-between text-xs py-1 px-2 rounded bg-gray-50"},[e.createElementVNode("span",ug,"Точка "+e.toDisplayString(c.from)+" → Точка "+e.toDisplayString(c.to),1),e.createElementVNode("span",fg,e.toDisplayString(c.label),1)]))),128))])]))}}),pg={class:"ruler-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up"},gg={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},yg={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},hg={class:"flex items-center gap-2"},bg={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},xg={class:"flex border-b border-gray-200"},kg={key:1,class:"px-3 py-2.5"},wg={key:1,class:"text-xs text-gray-500"},_g={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},Eg={class:"flex gap-1.5"},Cg=e.defineComponent({name:"RulerPanel",__name:"index",emits:["close","tab-change","points-change","add-request","complete","shape-closed-change"],setup(t,{expose:n,emit:o}){const r=o,l=e.ref([]),s=e.computed(()=>l.value.length>0),i=e.ref(!1),c=e.ref(!1),u=e.ref("general");function d(ee){u.value=ee,r("tab-change",ee)}e.onMounted(()=>{r("tab-change",u.value)});const y=e.computed(()=>l.value.length>=3&&!c.value);let a=1;const m=()=>l.value.map(ee=>({id:ee.id,coords:{...ee.coords}})),f=()=>{l.value.length<3&&c.value&&(c.value=!1,r("shape-closed-change",!1)),r("points-change",m())},p=()=>{const ee=a;return a+=1,ee},k=ee=>{l.value=[...l.value,{id:p(),coords:{lat:ee.lat,lng:ee.lng}}],f()},h=({id:ee,coords:R})=>{const ae=l.value.findIndex(oe=>oe.id===ee);if(ae===-1)return;const ue=[...l.value];ue[ae]={id:ee,coords:{...R}},l.value=ue,f()},g=ee=>{l.value=l.value.filter(R=>R.id!==ee),f()},b=()=>{l.value=[],c.value&&(c.value=!1,r("shape-closed-change",!1)),f()},x=ee=>{h(ee)},C=ee=>{g(ee)},V=()=>{i.value=!0,r("add-request")},E=ee=>{k(ee),i.value=!1},_=()=>{i.value=!1},N=()=>{y.value&&(c.value=!0,r("complete"),r("shape-closed-change",!0))},T=ee=>{const R=(ee??[]).map(ae=>({id:ae.id??p(),coords:{...ae.coords}}));l.value=R,R.length===0?a=1:a=Math.max(...R.map(ae=>ae.id))+1,f()},Y=()=>{b(),i.value=!1,r("close")};return n({addPoint:k,setPoints:T,clearPoints:b}),(ee,R)=>(e.openBlock(),e.createElementBlock("div",pg,[e.createElementVNode("div",gg,[e.createElementVNode("div",yg,[e.createElementVNode("div",hg,[e.createElementVNode("div",bg,[e.createVNode(e.unref(ye.Ruler),{size:14,"stroke-width":2,class:"text-white"})]),R[2]||(R[2]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Вимірювання",-1))]),e.createElementVNode("button",{class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:Y},[e.createVNode(e.unref(ye.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",xg,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",u.value==="general"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:R[0]||(R[0]=ae=>d("general"))}," Загальна ",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",u.value==="topoint"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:R[1]||(R[1]=ae=>d("topoint"))}," До точки ",2)]),u.value==="general"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[s.value?(e.openBlock(),e.createBlock(lg,{key:1,points:l.value,"is-shape-closed":c.value,onUpdatePoint:x,onDeletePoint:C},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createBlock(ig,{key:0}))],64)):(e.openBlock(),e.createElementBlock("div",kg,[s.value?(e.openBlock(),e.createBlock(mg,{key:0,points:l.value,"is-shape-closed":c.value},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createElementBlock("p",wg,"Додайте точки на карті, щоб бачити відстані між ними."))])),e.createElementVNode("div",_g,[e.createElementVNode("div",Eg,[i.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Fp,{key:0,onClick:V})),y.value?(e.openBlock(),e.createBlock(Pp,{key:1,onClick:N})):e.createCommentVNode("",!0)]),i.value?(e.openBlock(),e.createBlock(Mp,{key:0,onSubmit:E,onCancel:_})):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createBlock(Dp,{key:1,onClick:b})):e.createCommentVNode("",!0)])])]))}}),yt="ruler-points",wt="ruler-line",_t="ruler-polygon",Et="ruler-segments",Ng=e.defineComponent({__name:"RulerLayer",props:{points:{},isShapeClosed:{type:Boolean},labelMode:{}},setup(t){function n(h,g){const b=N=>N*Math.PI/180,x=b(g.lat-h.lat),C=b(g.lng-h.lng),V=b(h.lat),E=b(g.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(x/2)**2+Math.cos(V)*Math.cos(E)*Math.sin(C/2)**2)))}function o(h){return Al(h)}const r=t,{map:l,ready:s}=Qe();function i(){return{type:"FeatureCollection",features:[]}}function c(h,g,b){const x=b??"general",C=[];let V=0;C.push(0);for(let E=1;E<h.length;E++)V+=n(h[E-1].coords,h[E].coords),C.push(V);return g&&h.length>=2&&(V+=n(h[h.length-1].coords,h[0].coords)),{type:"FeatureCollection",features:h.map((E,_)=>{const N=x==="general"?_===0?"0":o(C[_]):_===0?"0":o(n(h[_-1].coords,h[_].coords));return{type:"Feature",geometry:{type:"Point",coordinates:[E.coords.lng,E.coords.lat]},properties:{id:E.id,index:_+1,label:N}}})}}function u(h,g){if(h.length<2)return i();const b=[];for(let x=0;x<h.length;x++){const C=x===h.length-1&&g?0:x+1;if(C>=h.length)break;const V=h[x].coords,E=h[C].coords,_=n(V,E);b.push({type:"Feature",geometry:{type:"LineString",coordinates:[[V.lng,V.lat],[E.lng,E.lat]]},properties:{distance:o(_)}})}return{type:"FeatureCollection",features:b}}function d(h,g){if(h.length<2)return i();const b=h.map(x=>[x.coords.lng,x.coords.lat]);return g&&b.push(b[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"LineString",coordinates:b},properties:{}}]}}function y(h){if(h.length<3)return i();const g=h.map(b=>[b.coords.lng,b.coords.lat]);return g.push(g[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Polygon",coordinates:[g]},properties:{}}]}}let a=!1;function m(h){h.getSource(yt)||(h.addSource(yt,{type:"geojson",data:i()}),h.addLayer({id:`${yt}-circle`,type:"circle",source:yt,paint:{"circle-radius":5,"circle-color":"#1e293b","circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),h.addLayer({id:`${yt}-labels`,type:"symbol",source:yt,layout:{"text-field":["get","label"],"text-size":14,"text-offset":[0,1.3]},paint:{"text-color":"#0f172a","text-halo-color":"#ffffff","text-halo-width":1}})),h.getSource(Et)||(h.addSource(Et,{type:"geojson",data:i()}),h.addLayer({id:`${Et}-labels`,type:"symbol",source:Et,layout:{"text-field":["get","distance"],"text-size":13,"symbol-placement":"line-center","text-rotation-alignment":"map","text-pitch-alignment":"map"},paint:{"text-color":"#1e293b","text-halo-color":"#ffffff","text-halo-width":1.5}})),h.getSource(wt)||(h.addSource(wt,{type:"geojson",data:i()}),h.addLayer({id:`${wt}-layer`,type:"line",source:wt,paint:{"line-color":"#3b82f6","line-width":2}})),h.getSource(_t)||(h.addSource(_t,{type:"geojson",data:i()}),h.addLayer({id:`${_t}-layer`,type:"fill",source:_t,paint:{"fill-color":"#93c5fd","fill-opacity":.25}})),a=!0}function f(h){if(h){try{h.getLayer(`${_t}-layer`)&&h.removeLayer(`${_t}-layer`),h.getSource(_t)&&h.removeSource(_t),h.getLayer(`${wt}-layer`)&&h.removeLayer(`${wt}-layer`),h.getSource(wt)&&h.removeSource(wt),h.getLayer(`${Et}-labels`)&&h.removeLayer(`${Et}-labels`),h.getSource(Et)&&h.removeSource(Et),h.getLayer(`${yt}-labels`)&&h.removeLayer(`${yt}-labels`),h.getLayer(`${yt}-circle`)&&h.removeLayer(`${yt}-circle`),h.getSource(yt)&&h.removeSource(yt)}catch{}a=!1}}function p(h){if(!h)return;const g=h.getSource(yt),b=h.getSource(wt),x=h.getSource(_t),C=h.getSource(Et),V=r.points,E=r.labelMode??"general";g&&g.setData(c(V,r.isShapeClosed,E)),b&&b.setData(d(V,r.isShapeClosed)),x&&x.setData(y(V)),C&&C.setData(E==="topoint"?u(V,r.isShapeClosed):i())}function k(){s().then(()=>{const h=l.value;h&&(a||m(h),p(h))})}return e.watch(()=>[r.points,r.isShapeClosed,r.labelMode],()=>k(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{s().then(()=>f(l.value))}),(h,g)=>null}}),Vg={class:"geolocation-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up flex items-end gap-2"},$g={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},Bg={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},Sg={class:"flex items-center gap-2"},vg=["disabled"],Lg={class:"px-3 py-3 border-t border-gray-100 flex items-center justify-between gap-3"},Tg={class:"text-sm font-mono text-slate-700"},Ag={class:"flex items-center gap-2 shrink-0"},Mg={key:0,class:"text-xs font-[100] text-gray-500"},Fg=e.defineComponent({name:"GeolocationPanel",__name:"index",props:{position:{}},emits:["close","recenter"],setup(t,{emit:n}){const o=t,r=n,l=e.computed(()=>o.position!=null?o.position.lng.toFixed(6):"—"),s=e.computed(()=>o.position!=null?o.position.lat.toFixed(6):"—"),i=e.ref(!1);let c=null;function u(){if(o.position==null)return;const a=`${o.position.lat.toFixed(6)}, ${o.position.lng.toFixed(6)}`;navigator.clipboard.writeText(a).then(()=>{i.value=!0,c&&clearTimeout(c),c=setTimeout(()=>{i.value=!1,c=null},600)})}function d(){r("close")}function y(){o.position!=null&&r("recenter")}return(a,m)=>(e.openBlock(),e.createElementBlock("div",Vg,[e.createElementVNode("div",$g,[e.createElementVNode("div",Bg,[e.createElementVNode("div",Sg,[e.createElementVNode("button",{type:"button",class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center hover:bg-white/30 transition-colors disabled:opacity-50 disabled:cursor-not-allowed","aria-label":"Центрувати на моєму місці",disabled:t.position==null,onClick:y},[e.createVNode(e.unref(ye.MapPin),{size:14,"stroke-width":2,class:"text-white"})],8,vg),m[0]||(m[0]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Ваше розташування",-1))]),e.createElementVNode("button",{type:"button",class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:d},[e.createVNode(e.unref(ye.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",Lg,[e.createElementVNode("div",null,[m[4]||(m[4]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-500 mb-1"},"Координати",-1)),e.createElementVNode("p",Tg,[m[1]||(m[1]=e.createElementVNode("span",{class:"text-gray-500"},"x:",-1)),e.createTextVNode(" "+e.toDisplayString(l.value)+" ",1),m[2]||(m[2]=e.createElementVNode("br",null,null,-1)),m[3]||(m[3]=e.createElementVNode("span",{class:"text-gray-500"},"y:",-1)),e.createTextVNode(" "+e.toDisplayString(s.value),1)])]),e.createElementVNode("div",Ag,[i.value?(e.openBlock(),e.createElementBlock("span",Mg," Скопійовано! ")):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"flex items-center justify-center w-9 h-9 rounded-xl border border-gray-200 text-gray-500 hover:bg-gray-50 hover:text-gray-700 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/50 focus-visible:ring-offset-1","aria-label":"Копіювати координати",onClick:u},[e.createVNode(e.unref(ye.ClipboardPaste),{size:18,"stroke-width":2})])])])])]))}}),Ct="geolocation-marker",Dg=e.defineComponent({__name:"GeolocationMarkerLayer",props:{position:{}},setup(t){const n=t,{map:o,ready:r}=Qe();let l=!1;function s(){return{type:"FeatureCollection",features:[]}}function i(a){return{type:"Feature",geometry:{type:"Point",coordinates:[a.lng,a.lat]},properties:{}}}function c(a){a.getSource(Ct)||(a.addSource(Ct,{type:"geojson",data:s()}),a.addLayer({id:`${Ct}-circle`,type:"circle",source:Ct,paint:{"circle-radius":6,"circle-color":"#3b82f6","circle-stroke-width":2,"circle-stroke-color":"#dddddd"}}),l=!0)}function u(a){try{a.getLayer(`${Ct}-circle`)&&a.removeLayer(`${Ct}-circle`),a.getSource(Ct)&&a.removeSource(Ct)}catch{}l=!1}function d(a){const m=a.getSource(Ct);if(m){if(n.position==null){m.setData(s());return}m.setData({type:"FeatureCollection",features:[i(n.position)]})}}function y(){r().then(()=>{const a=o.value;if(a){if(n.position==null){l&&u(a);return}l||c(a),d(a)}})}return e.watch(()=>n.position,()=>y(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{r().then(()=>u(o.value))}),(a,m)=>null}});function Pg(t,n,o){const r=o||`HTTP ${n}`;if(t==null||typeof t!="object")return r;const l=t;return typeof l.message=="string"&&l.message.trim()?l.message.trim():typeof l.error=="string"&&l.error.trim()?l.error.trim():r}async function zg(t,n){const o=new URLSearchParams({lat:String(t),lng:String(n)}),r=await fetch(`/api/coords/height?${o}`),l=await r.json().catch(()=>null);if(!r.ok)throw new Error(Pg(l,r.status,r.statusText));return l}function Ig(){const t=e.ref(null),n=e.ref(null),o=e.ref(!1),r=e.ref(null);async function l(i){t.value=i,o.value=!0,r.value=null,n.value=null;try{const c=await zg(i.lat,i.lng);n.value=c.height,c.height==null&&(r.value="unavailable")}catch(c){n.value=null,r.value=c instanceof Error?c.message:"loadFailed"}finally{o.value=!1}}function s(){t.value=null,n.value=null,o.value=!1,r.value=null}return{point:t,height:n,loading:o,error:r,measureAt:l,reset:s}}let ir;function Ml(){return ir||(ir=Ig()),ir}const jg={class:"height-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up"},Rg={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},Og={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},Ug={class:"flex items-center gap-2"},qg={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},Hg={class:"px-3 py-3 space-y-3"},Wg={key:0,class:"flex items-center gap-2 text-xs text-gray-500"},Yg={key:1,class:"rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700"},Gg={key:0,class:"space-y-1.5"},Kg={class:"text-3xl font-bold text-blue-600 tabular-nums"},Zg={class:"text-xs text-gray-500"},Xg={key:1,class:"rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-800"},Jg={key:3,class:"rounded-md border border-dashed border-gray-200 bg-gray-50 px-3 py-3 text-xs leading-relaxed text-gray-500"},Qg=e.defineComponent({name:"HeightPanel",__name:"index",emits:["close"],setup(t,{emit:n}){const o=n,r=Ml(),l=e.computed(()=>r.point.value),s=e.computed(()=>r.loading.value),i=e.computed(()=>r.error.value),c=e.computed(()=>typeof r.height.value=="number"),u=e.computed(()=>{const{value:m}=r.height;if(m==null||!Number.isFinite(m))return"—";const f=Math.round(m*10)/10;return Number.isInteger(f)?String(f):f.toLocaleString("uk-UA",{minimumFractionDigits:1,maximumFractionDigits:1})}),d=e.computed(()=>l.value?`${l.value.lat.toFixed(6)}, ${l.value.lng.toFixed(6)}`:""),y=e.computed(()=>i.value==="unavailable"?"Не вдалося визначити висоту для цієї точки":"Не вдалося завантажити дані висоти");function a(){o("close")}return(m,f)=>(e.openBlock(),e.createElementBlock("div",jg,[e.createElementVNode("div",Rg,[e.createElementVNode("div",Og,[e.createElementVNode("div",Ug,[e.createElementVNode("div",qg,[e.createVNode(e.unref(ye.TrendingUp),{size:14,"stroke-width":2,class:"text-white"})]),f[0]||(f[0]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Висота точки",-1))]),e.createElementVNode("button",{type:"button",class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:a},[e.createVNode(e.unref(ye.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",Hg,[s.value?(e.openBlock(),e.createElementBlock("div",Wg,[e.createVNode(e.unref(ye.Loader2),{size:14,class:"animate-spin text-blue-500"}),f[1]||(f[1]=e.createElementVNode("span",null,"Визначаємо висоту…",-1))])):i.value&&!c.value?(e.openBlock(),e.createElementBlock("div",Yg,e.toDisplayString(y.value),1)):l.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[c.value?(e.openBlock(),e.createElementBlock("div",Gg,[f[3]||(f[3]=e.createElementVNode("div",{class:"text-[10px] uppercase tracking-wide text-gray-400"},"Висота",-1)),e.createElementVNode("div",Kg,[e.createTextVNode(e.toDisplayString(u.value)+" ",1),f[2]||(f[2]=e.createElementVNode("span",{class:"text-sm font-semibold text-gray-400"},"м",-1))]),e.createElementVNode("div",Zg,e.toDisplayString(d.value),1)])):(e.openBlock(),e.createElementBlock("div",Xg," Не вдалося визначити висоту для цієї точки "))],64)):(e.openBlock(),e.createElementBlock("div",Jg," Клацніть по карті, щоб отримати висоту точки. "))])])]))}}),ey={"aria-hidden":"true",style:{display:"none"}},Nt="height-marker",ty=e.defineComponent({__name:"HeightMarkerLayer",props:{point:{}},setup(t){const n=t,{map:o,ready:r}=Qe();let l=!1;function s(){return{type:"FeatureCollection",features:[]}}function i(a){return{type:"Feature",geometry:{type:"Point",coordinates:[a.lng,a.lat]},properties:{}}}function c(a){a.getSource(Nt)||(a.addSource(Nt,{type:"geojson",data:s()}),a.addLayer({id:`${Nt}-circle`,type:"circle",source:Nt,paint:{"circle-radius":7,"circle-color":"#2563eb","circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),l=!0)}function u(a){try{a.getLayer(`${Nt}-circle`)&&a.removeLayer(`${Nt}-circle`),a.getSource(Nt)&&a.removeSource(Nt)}catch{}l=!1}function d(a){const m=a.getSource(Nt);if(m){if(n.point==null){m.setData(s());return}m.setData({type:"FeatureCollection",features:[i(n.point)]})}}function y(){r().then(()=>{const a=o.value;if(a){if(n.point==null){l&&u(a);return}l||c(a),d(a)}})}return e.watch(()=>n.point,()=>y(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{r().then(()=>u(o.value))}),(a,m)=>(e.openBlock(),e.createElementBlock("div",ey))}}),ny={class:"animate-slide-up"},oy={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},ry={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},ly={class:"flex items-center gap-2"},ay={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},sy={class:"px-3 py-2.5 border-b border-gray-200"},iy={class:"flex gap-1 flex-nowrap"},cy=["title","onClick"],dy={class:"px-3 py-2.5 border-b border-gray-200"},uy={class:"flex items-center gap-4"},fy={class:"flex items-center gap-2 cursor-pointer shrink-0"},my={class:"flex items-center gap-2 cursor-pointer flex-1 min-w-0"},py={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},gy={class:"flex items-center gap-1.5"},yy=Ae(e.defineComponent({name:"DrawingPanel",__name:"index",emits:["close","clear","download","finish-polygon","undo","update:tool","update:stroke-color","update:stroke-width"],setup(t,{expose:n,emit:o}){const r=o,l=[{id:"pen",icon:ye.Pen,title:"Олівець"},{id:"line",icon:ye.Minus,title:"Лінія"},{id:"rect",icon:ye.Square,title:"Прямокутник"},{id:"circle",icon:ye.Circle,title:"Коло"},{id:"polygon",icon:ye.Pentagon,title:"Полігон"},{id:"paint",icon:ye.PaintBucket,title:"Балончик"},{id:"eraser",icon:ye.Eraser,title:"Стирачка"}],s=e.ref("pen"),i=e.ref("#2563eb"),c=e.ref(3),u=()=>r("update:stroke-color",i.value),d=()=>r("update:stroke-width",c.value);e.watch(s,k=>r("update:tool",k)),e.watch(i,k=>r("update:stroke-color",k)),e.watch(c,k=>r("update:stroke-width",k));function y(){r("close")}function a(){r("undo")}function m(){r("finish-polygon")}function f(){r("clear")}function p(){r("download")}return n({tool:s,strokeColor:i,strokeWidth:c}),(k,h)=>(e.openBlock(),e.createElementBlock("div",ny,[e.createElementVNode("div",oy,[e.createElementVNode("div",ry,[e.createElementVNode("div",ly,[e.createElementVNode("div",ay,[e.createVNode(e.unref(ye.Pen),{size:14,"stroke-width":2,class:"text-white"})]),h[2]||(h[2]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Малювання",-1))]),e.createElementVNode("button",{type:"button",class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:y},[e.createVNode(e.unref(ye.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("section",sy,[h[3]||(h[3]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Інструмент ",-1)),e.createElementVNode("div",iy,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,g=>e.createElementVNode("button",{key:g.id,type:"button",class:e.normalizeClass(["w-8 h-8 shrink-0 flex items-center justify-center rounded-lg border transition-all",s.value===g.id?"bg-blue-50 text-blue-600 border-blue-200 ring-2 ring-blue-200":"bg-gray-50 text-gray-500 border-gray-200 hover:bg-gray-100 hover:text-gray-700 hover:border-gray-300"]),title:g.title,onClick:b=>s.value=g.id},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(g.icon),{size:16,"stroke-width":2}))],10,cy)),64))])]),e.createElementVNode("section",dy,[h[6]||(h[6]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Стиль ",-1)),e.createElementVNode("div",uy,[e.createElementVNode("label",fy,[h[4]||(h[4]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600"},"Колір",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[0]||(h[0]=g=>i.value=g),type:"color",class:"w-9 h-9 p-0.5 border-2 border-gray-200 rounded-lg cursor-pointer bg-white [&::-webkit-color-swatch-wrapper]:p-0 [&::-webkit-color-swatch]:border-none [&::-webkit-color-swatch]:rounded-md",onChange:u},null,544),[[e.vModelText,i.value]])]),e.createElementVNode("label",my,[h[5]||(h[5]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 shrink-0 w-14"},"Товщина",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[1]||(h[1]=g=>c.value=g),type:"range",min:"1",max:"12",class:"drawing-panel-range w-full min-w-[100px] h-2 bg-gray-200 rounded-full appearance-none cursor-pointer",onInput:d},null,544),[[e.vModelText,c.value,void 0,{number:!0}]])])])]),e.createElementVNode("footer",py,[e.createElementVNode("div",gy,[e.createElementVNode("button",{type:"button",class:"w-9 h-9 shrink-0 flex items-center justify-center rounded-lg bg-gray-100 text-gray-700 hover:bg-gray-200 transition-colors",title:"Відкотити дію","aria-label":"Відкотити дію",onClick:a},[e.createVNode(e.unref(ye.Undo2),{size:14,"stroke-width":2})]),e.createElementVNode("button",{type:"button",class:"flex-1 flex items-center justify-center gap-1.5 px-2 py-2 text-xs font-medium rounded-lg bg-red-50 text-red-600 hover:bg-red-100 hover:text-red-700 transition-colors",onClick:f},[e.createVNode(e.unref(ye.Trash2),{size:14,"stroke-width":2}),h[7]||(h[7]=e.createTextVNode(" Очистити ",-1))])]),s.value==="polygon"?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"w-full flex items-center justify-center gap-2 px-3 py-2 text-xs font-medium rounded-lg bg-blue-50 text-blue-600 hover:bg-blue-100 transition-colors",onClick:m},[e.createVNode(e.unref(ye.Pentagon),{size:14,"stroke-width":2}),h[8]||(h[8]=e.createTextVNode(" Замкнути полігон ",-1))])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"w-full flex items-center justify-center gap-2 px-3 py-2 text-xs font-medium rounded-lg bg-gradient-to-r from-blue-400 to-blue-500 text-white shadow-sm hover:brightness-105 transition-[filter]",onClick:p},[e.createVNode(e.unref(ye.Download),{size:14,"stroke-width":2}),h[9]||(h[9]=e.createTextVNode(" Завантажити як фото ",-1))])])])]))}}),[["__scopeId","data-v-4cee5a30"]]),hy=Ae(e.defineComponent({name:"DrawingCanvas",__name:"DrawingCanvas",props:{tool:{default:"pen"},strokeColor:{default:"#2563eb"},strokeWidth:{default:3}},setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),l=e.ref(null),s=e.ref({x:0,y:0}),i=e.ref(!1),c=t,u=e.computed(()=>Math.max(c.strokeWidth*3,12)),d=e.computed(()=>({width:`${u.value}px`,height:`${u.value}px`,left:`${s.value.x}px`,top:`${s.value.y}px`,transform:"translate(-50%, -50%)"})),{ready:y}=Qe(),a=e.ref(!1),m=e.ref([]),f=e.ref([]);let p=0,k=0,h=0,g=0,b=null;function x(){const B=r.value,j=l.value,X=o.value;if(!B||!X)return;const he=X.parentElement;if(!he)return;const Z=he.clientWidth,P=he.clientHeight;if(Z<=0||P<=0)return;const q=window.devicePixelRatio||1;B.width=Z*q,B.height=P*q,B.style.width=`${Z}px`,B.style.height=`${P}px`;const H=B.getContext("2d");if(H&&H.scale(q,q),j){j.width=Z*q,j.height=P*q,j.style.width=`${Z}px`,j.style.height=`${P}px`;const re=j.getContext("2d");re&&re.scale(q,q)}}function C(B){const j=r.value;if(!j)return{x:0,y:0};const X=j.getBoundingClientRect();return{x:B.clientX-X.left,y:B.clientY-X.top}}function V(){const B=r.value;return B?B.getContext("2d"):null}function E(){const B=l.value;return B?B.getContext("2d"):null}function _(){const B=l.value;if(!B)return;const j=window.devicePixelRatio||1,X=B.getContext("2d");X&&X.clearRect(0,0,B.width/j,B.height/j)}function N(){const B=E();if(B){if(_(),B.globalCompositeOperation="source-over",B.strokeStyle=c.strokeColor,B.lineWidth=c.strokeWidth,B.lineCap="round",B.lineJoin="round",c.tool==="line")B.beginPath(),B.moveTo(p,k),B.lineTo(h,g),B.stroke();else if(c.tool==="rect"){const j=Math.min(p,h),X=Math.min(k,g),he=Math.abs(h-p),Z=Math.abs(g-k);B.strokeRect(j,X,he,Z)}else if(c.tool==="circle"){const j=Math.sqrt((h-p)**2+(g-k)**2);B.beginPath(),B.arc(p,k,Math.max(j,1),0,2*Math.PI),B.stroke()}else if(c.tool==="polygon"&&m.value.length>0){const j=m.value;B.beginPath(),B.moveTo(j[0].x,j[0].y);for(let X=1;X<j.length;X++)B.lineTo(j[X].x,j[X].y);B.lineTo(h,g),B.stroke()}}}function T(B){B.strokeStyle=c.strokeColor,B.lineWidth=c.strokeWidth,B.lineCap="round",B.lineJoin="round"}function Y(){const B=r.value;if(!B)return;const j=B.getContext("2d");if(!j)return;const X=j.getImageData(0,0,B.width,B.height);f.value=[...f.value.slice(-19),X]}function ee(B){if(!r.value)return;const{x:j,y:X}=C(B);p=j,k=X,h=j,g=X;const he=V();if(he){if(c.tool==="pen"||c.tool==="eraser"){Y(),a.value=!0,c.tool==="eraser"?(he.globalCompositeOperation="destination-out",he.lineWidth=u.value):(he.globalCompositeOperation="source-over",T(he)),he.beginPath(),he.moveTo(j,X);return}if(c.tool==="paint"){Y(),a.value=!0,he.globalCompositeOperation="source-over",he.fillStyle=c.strokeColor,oe(he,j,X);return}if(c.tool==="line"||c.tool==="rect"||c.tool==="circle"){Y(),a.value=!0;return}if(c.tool==="polygon"){m.value=[...m.value,{x:j,y:X}],h=j,g=X,N();return}}}function R(B){const{x:j,y:X}=C(B);h=j,g=X,c.tool==="eraser"&&(s.value={x:j,y:X},i.value=!0);const he=V();if(he){if(c.tool==="pen"&&a.value){he.globalCompositeOperation="source-over",T(he),he.lineTo(j,X),he.stroke();return}if(c.tool==="eraser"&&a.value){he.globalCompositeOperation="destination-out",he.lineWidth=u.value,he.lineTo(j,X),he.stroke();return}if(c.tool==="paint"&&a.value){he.globalCompositeOperation="source-over",he.fillStyle=c.strokeColor,oe(he,j,X);return}a.value&&(c.tool==="line"||c.tool==="rect"||c.tool==="circle")&&N(),c.tool==="polygon"&&m.value.length>0&&N()}}function ae(){i.value=!1}function ue(){c.tool==="polygon"&&J()}function oe(B,j,X){const he=Math.max(c.strokeWidth*2.5,8),Z=12+Math.floor(c.strokeWidth);for(let P=0;P<Z;P++){const q=Math.random()*2*Math.PI,H=he*Math.random(),re=j+Math.cos(q)*H,I=X+Math.sin(q)*H,le=1+Math.random()*2;B.beginPath(),B.arc(re,I,le,0,2*Math.PI),B.fill()}}function te(){if(!a.value)return;const B=V();if(!B){a.value=!1;return}if(c.tool==="paint"){_(),a.value=!1,B.globalCompositeOperation="source-over";return}if(c.tool==="line")B.globalCompositeOperation="source-over",T(B),B.beginPath(),B.moveTo(p,k),B.lineTo(h,g),B.stroke();else if(c.tool==="rect"){B.globalCompositeOperation="source-over",T(B);const j=Math.min(p,h),X=Math.min(k,g),he=Math.abs(h-p),Z=Math.abs(g-k);B.strokeRect(j,X,he,Z)}else if(c.tool==="circle"){B.globalCompositeOperation="source-over",T(B);const j=Math.sqrt((h-p)**2+(g-k)**2);B.beginPath(),B.arc(p,k,Math.max(j,1),0,2*Math.PI),B.stroke()}_(),a.value=!1,B.globalCompositeOperation="source-over"}function J(){const B=V(),j=m.value;if(!B||j.length<2){m.value=[],_();return}Y(),B.globalCompositeOperation="source-over",T(B),B.beginPath(),B.moveTo(j[0].x,j[0].y);for(let X=1;X<j.length;X++)B.lineTo(j[X].x,j[X].y);B.closePath(),B.stroke(),m.value=[],_(),B.globalCompositeOperation="source-over"}function S(){const B=r.value;if(!B||f.value.length===0)return;const j=B.getContext("2d");if(!j)return;const X=f.value[f.value.length-1];f.value=f.value.slice(0,-1),j.putImageData(X,0,0)}function F(){const B=r.value;if(!B)return;const j=B.getContext("2d");if(!j)return;const X=window.devicePixelRatio||1;j.clearRect(0,0,B.width/X,B.height/X),m.value=[],f.value=[],_()}function M(){return r.value}return e.watch(()=>c.tool,(B,j)=>{j==="polygon"&&B!=="polygon"&&(m.value=[],_())}),e.onMounted(()=>{y().then(()=>{var j;x();const B=(j=o.value)==null?void 0:j.parentElement;B&&typeof ResizeObserver<"u"&&(b=new ResizeObserver(x),b.observe(B))})}),e.onBeforeUnmount(()=>{b==null||b.disconnect(),b=null}),n({clear:F,getCanvas:M,finishPolygon:J,undo:S,canUndo:()=>f.value.length>0}),(B,j)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"wrapRef",ref:o,class:e.normalizeClass(["drawing-canvas-wrap",{"drawing-canvas-wrap--eraser":t.tool==="eraser"}]),onMousedown:ee,onMousemove:R,onMouseup:te,onDblclick:ue,onMouseleave:j[0]||(j[0]=()=>{ae(),te()})},[e.createElementVNode("canvas",{ref_key:"canvasRef",ref:r,class:"drawing-canvas"},null,512),e.createElementVNode("canvas",{ref_key:"previewRef",ref:l,class:"drawing-canvas drawing-canvas--preview"},null,512),e.withDirectives(e.createElementVNode("div",{class:"drawing-canvas__eraser-cursor",style:e.normalizeStyle(d.value)},null,4),[[e.vShow,t.tool==="eraser"&&i.value]])],34))}}),[["__scopeId","data-v-7f5e8365"]]),by={class:"add-data-modal__dialog bg-white rounded-2xl shadow-2xl border border-slate-200 w-full max-w-5xl max-h-[90vh] flex flex-col overflow-hidden"},xy={class:"flex items-center justify-between px-6 py-4 border-b border-slate-200"},ky={class:"grid grid-cols-1 lg:grid-cols-2 min-h-0 flex-1"},wy={class:"px-6 py-5 border-b lg:border-b-0 lg:border-r border-slate-200 overflow-y-auto"},_y={class:"block mb-4"},Ey={class:"block mb-4"},Cy={key:0,class:"mb-4"},Ny={key:1,class:"mb-4"},Vy={class:"block mb-4"},$y={class:"relative"},By={key:0,class:"absolute left-0 right-0 top-full z-10 mt-1 max-h-48 overflow-y-auto rounded-lg border border-slate-200 bg-white shadow-lg"},Sy=["onMousedown"],vy={key:0,class:"px-3 py-2 text-sm text-slate-500"},Ly={key:1,class:"px-3 py-2 text-sm text-slate-500"},Ty={class:"flex flex-col items-center text-center gap-3 px-4 py-8"},Ay={class:"w-12 h-12 rounded-xl bg-blue-50 text-blue-600 flex items-center justify-center"},My={class:"text-sm text-slate-600 leading-relaxed"},Fy={key:0,class:"text-sm font-medium text-slate-700"},Dy=["accept"],Py={key:2,class:"mb-4 text-sm text-red-600"},zy={class:"flex items-center gap-3"},Iy=["disabled"],jy=["disabled"],Ry={class:"px-6 py-5 bg-slate-50 overflow-y-auto flex flex-col justify-center"},Oy={class:"rounded-xl border border-slate-200 bg-white p-4 space-y-2"},Uy={class:"text-sm text-slate-700"},qy={class:"text-sm text-slate-700"},Hy={key:0,class:"text-sm text-slate-700"},Wy={class:"text-sm text-slate-500 leading-relaxed"},cr="client-layer-preview",go="add-data-preview",Fl="add-data",yo="4326",Yy=Ae(e.defineComponent({name:"MapAddDataPanel",__name:"index",emits:["close"],setup(t,{emit:n}){const o=n,r=Qe(),{registerClientLayer:l}=Xo(),{activateTemporaryLayer:s,deactivateTemporaryLayer:i,clearTemporaryLayers:c}=xn(r.map),u=e.ref("file"),d=rd,y=hl(),a=e.ref(""),m=e.ref(""),f=e.ref(null),p=e.ref(yo),k=e.ref("EPSG:4326"),h=e.ref([{id:yo,text:"EPSG:4326"}]),g=e.ref(null),b=e.ref(""),x=e.ref(!1),C=e.ref(!1),V=e.ref(!1),E=e.ref(!1),_=e.ref(null);let N=null;const T=e.computed(()=>a.value.trim()?u.value==="geometry"?!!m.value.trim():!!(f.value&&p.value):!1),Y=e.computed(()=>T.value),ee=e.computed(()=>{if(!g.value)return null;const q=Array.isArray(g.value.features)?g.value.features:[],H=[...new Set(q.map(le=>{var me;return(me=le==null?void 0:le.geometry)==null?void 0:me.type}).filter(Boolean))].join(", ")||"—",re=Ko(g.value),I=re?`${re[0][1].toFixed(5)}, ${re[0][0].toFixed(5)} — ${re[1][1].toFixed(5)}, ${re[1][0].toFixed(5)}`:null;return{featureCount:q.length,geometryTypes:H,boundsText:I}});function R(q){window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:q}))}function ae(){i(cr,go),R({action:"deactivate",owner:go,spec:{id:cr}})}function ue(q){const H={id:cr,title:a.value.trim()||"Попередній перегляд",type:"geojson",data:q};s(H,{},go),R({action:"activate",owner:go,spec:H});const re=Ko(q);re&&r.fitBounds&&r.fitBounds(re,{padding:48,duration:600})}function oe(q){if(!q||typeof q!="object")return null;const H=q,re=H.id??H.srid??H.code??H.value;if(re==null||re==="")return null;const I=String(re),le=H.text??H.name??H.title??H.label,me=le?String(le):`EPSG:${I}`;return{id:I,text:me.includes(I)?me:`${me} (${I})`}}async function te(q="",H=!1){try{V.value=!0;const re=q.trim(),I=re?`/api/suggest/srid?key=${encodeURIComponent(re)}`:"/api/suggest/srid",le=await fetch(I);if(!le.ok){h.value=[];return}const me=await le.json(),A=(Array.isArray(me==null?void 0:me.data)?me.data:Array.isArray(me)?me:[]).map(oe).filter(Boolean);if(A.length){if(h.value=A,H){const K=A.find(fe=>fe.id===yo)||A[0];J(K,!1)}return}h.value=[]}catch(re){console.error("Failed to load SRID classifier:",re)}finally{V.value=!1}}function J(q,H=!0){p.value=q.id,k.value=q.text,H&&(C.value=!1)}function S(){const q=k.value.trim(),H=h.value.find(re=>re.id===p.value);(!H||q!==H.id&&q!==H.text)&&(p.value=""),C.value=!0,N&&clearTimeout(N),N=setTimeout(()=>{te(q)},300)}function F(){setTimeout(()=>{C.value=!1},150)}function M(q){var re;const H=[q,q==null?void 0:q.data,q==null?void 0:q.result,q==null?void 0:q.geojson];for(const I of H){const le=pl(I);if((re=le==null?void 0:le.features)!=null&&re.length)return le}return null}async function B(){var re,I;if(b.value="",u.value==="geometry"){let le;try{le=JSON.parse(m.value.trim())}catch{throw new Error("Некоректний JSON у полі геометрії")}const me=pl(le);if(!((re=me==null?void 0:me.features)!=null&&re.length))throw new Error("Не вдалося розпізнати геометрію GeoJSON");return me}if(!f.value)throw new Error(`Оберіть файл (${y})`);const q=await id(f.value,p.value),H=M(q);if(!((I=H==null?void 0:H.features)!=null&&I.length))throw new Error("Не вдалося розпізнати геометрію у файлі");return H}async function j(){x.value=!0,b.value="";try{const q=await B();g.value=q,ae(),ue(q)}catch(q){g.value=null,ae(),b.value=(q==null?void 0:q.message)||"Не вдалося підготувати попередній перегляд"}finally{x.value=!1}}async function X(){if(!g.value&&(await j(),!g.value))return;const q=`client-layer-${Date.now()}`,H={id:q,title:a.value.trim(),type:"geojson",data:g.value};ae(),s(H,{},Fl),R({action:"activate",owner:Fl,spec:H});const re=Ko(g.value),I=a.value.trim();l({id:q,name:I,bounds:re,data:g.value}),window.dispatchEvent(new CustomEvent(kn,{detail:{id:q,name:I,bounds:re}})),re&&r.fitBounds&&r.fitBounds(re,{padding:48,duration:600}),o("close")}function he(q){if(!q){f.value=null;return}if(!yl(q)){b.value=`Підтримуються формати: ${y}`,f.value=null,g.value=null,ae();return}f.value=q,g.value=null,ae(),b.value=""}function Z(q){var re;const H=q.target;he(((re=H.files)==null?void 0:re[0])||null)}function P(q){var H,re;E.value=!1,he(((re=(H=q.dataTransfer)==null?void 0:H.files)==null?void 0:re[0])||null)}return e.watch(u,()=>{g.value=null,b.value="",ae()}),e.onMounted(()=>{te(yo,!0)}),e.onBeforeUnmount(()=>{N&&clearTimeout(N),ae()}),(q,H)=>(e.openBlock(),e.createElementBlock("div",{class:"add-data-modal fixed inset-0 z-[1200] flex items-center justify-center p-4 pointer-events-auto",onClick:H[9]||(H[9]=e.withModifiers(re=>o("close"),["self"]))},[e.createElementVNode("div",by,[e.createElementVNode("div",xy,[H[10]||(H[10]=e.createElementVNode("h2",{class:"text-lg font-semibold text-slate-800"},"Додавання даних",-1)),e.createElementVNode("button",{type:"button",class:"w-8 h-8 inline-flex items-center justify-center rounded-lg text-slate-500 hover:bg-slate-100 hover:text-slate-700","aria-label":"Закрити",onClick:H[0]||(H[0]=re=>o("close"))},[e.createVNode(e.unref(ye.X),{size:18})])]),e.createElementVNode("div",ky,[e.createElementVNode("div",wy,[e.createElementVNode("label",_y,[H[12]||(H[12]=e.createElementVNode("span",{class:"block text-sm font-medium text-slate-700 mb-1.5"},[e.createTextVNode(" Формат даних "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":H[1]||(H[1]=re=>u.value=re),class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm text-slate-800 bg-white focus:outline-none focus:ring-2 focus:ring-blue-400/50"},[...H[11]||(H[11]=[e.createElementVNode("option",{value:"file"},"Файл",-1),e.createElementVNode("option",{value:"geometry"},"Геометрія",-1)])],512),[[e.vModelSelect,u.value]])]),e.createElementVNode("label",Ey,[H[13]||(H[13]=e.createElementVNode("span",{class:"block text-sm font-medium text-slate-700 mb-1.5"},[e.createTextVNode(" Назва "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":H[2]||(H[2]=re=>a.value=re),type:"text",class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm text-slate-800 focus:outline-none focus:ring-2 focus:ring-blue-400/50",placeholder:"Введіть назву"},null,512),[[e.vModelText,a.value]])]),u.value==="geometry"?(e.openBlock(),e.createElementBlock("div",Cy,[H[14]||(H[14]=e.createElementVNode("span",{class:"block text-sm font-medium text-slate-700 mb-1.5"},[e.createTextVNode(" Геометрія (GeoJSON) "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":H[3]||(H[3]=re=>m.value=re),rows:"10",class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm font-mono text-slate-800 focus:outline-none focus:ring-2 focus:ring-blue-400/50 resize-y",placeholder:'{"type":"Polygon","coordinates":[[[30.5,50.4],[30.6,50.4],[30.6,50.5],[30.5,50.5],[30.5,50.4]]]}'},null,512),[[e.vModelText,m.value]]),H[15]||(H[15]=e.createElementVNode("p",{class:"mt-1.5 text-xs text-slate-500"}," Вставте GeoJSON-геометрію, Feature або FeatureCollection. ",-1))])):(e.openBlock(),e.createElementBlock("div",Ny,[e.createElementVNode("label",Vy,[H[16]||(H[16]=e.createElementVNode("span",{class:"block text-sm font-medium text-slate-700 mb-1.5"},[e.createTextVNode(" Проекція "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.createElementVNode("div",$y,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":H[4]||(H[4]=re=>k.value=re),type:"text",class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm text-slate-800 bg-white focus:outline-none focus:ring-2 focus:ring-blue-400/50",placeholder:"EPSG:4326",autocomplete:"off",onFocus:H[5]||(H[5]=re=>C.value=!0),onInput:S,onBlur:F},null,544),[[e.vModelText,k.value]]),C.value?(e.openBlock(),e.createElementBlock("div",By,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,re=>(e.openBlock(),e.createElementBlock("button",{key:re.id,type:"button",class:"block w-full px-3 py-2 text-left text-sm text-slate-700 hover:bg-blue-50 hover:text-blue-700",onMousedown:e.withModifiers(I=>J(re),["prevent"])},e.toDisplayString(re.text),41,Sy))),128)),!h.value.length&&!V.value?(e.openBlock(),e.createElementBlock("p",vy," Нічого не знайдено ")):e.createCommentVNode("",!0),V.value?(e.openBlock(),e.createElementBlock("p",Ly," Пошук... ")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:e.normalizeClass(["add-data-modal__dropzone",{"add-data-modal__dropzone--active":E.value}]),onDragover:H[6]||(H[6]=e.withModifiers(re=>E.value=!0,["prevent"])),onDragleave:H[7]||(H[7]=e.withModifiers(re=>E.value=!1,["prevent"])),onDrop:e.withModifiers(P,["prevent"]),onClick:H[8]||(H[8]=re=>{var I;return(I=_.value)==null?void 0:I.click()})},[e.createElementVNode("div",Ty,[e.createElementVNode("div",Ay,[e.createVNode(e.unref(ye.Upload),{size:22})]),e.createElementVNode("p",My," Ви можете підключити власний файл у форматах "+e.toDisplayString(e.unref(y))+". Для цього перетягніть файл зі свого сховища у цю область або завантажте з комп'ютера ",1),H[17]||(H[17]=e.createElementVNode("p",{class:"text-xs text-slate-400"},"Максимальний розмір: 50MB",-1)),f.value?(e.openBlock(),e.createElementBlock("p",Fy,e.toDisplayString(f.value.name),1)):e.createCommentVNode("",!0)]),e.createElementVNode("input",{ref_key:"fileInputRef",ref:_,type:"file",accept:e.unref(d),class:"hidden",onChange:Z},null,40,Dy)],34)])),b.value?(e.openBlock(),e.createElementBlock("p",Py,e.toDisplayString(b.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",zy,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center px-4 py-2 rounded-lg text-sm font-medium text-white bg-slate-800 hover:bg-slate-900 disabled:opacity-50 disabled:cursor-not-allowed",disabled:!Y.value||x.value,onClick:X}," Додати ",8,Iy),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center px-4 py-2 rounded-lg text-sm font-medium text-slate-700 border border-slate-300 bg-white hover:bg-slate-50 disabled:opacity-50 disabled:cursor-not-allowed",disabled:!T.value||x.value,onClick:j}," Попередній перегляд ",8,jy)])]),e.createElementVNode("div",Ry,[ee.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[H[21]||(H[21]=e.createElementVNode("p",{class:"text-xs font-semibold tracking-wide text-slate-500 uppercase mb-2"}," Попередній перегляд ",-1)),e.createElementVNode("div",Oy,[e.createElementVNode("p",Uy,[H[18]||(H[18]=e.createElementVNode("span",{class:"font-medium"},"Об'єктів:",-1)),e.createTextVNode(" "+e.toDisplayString(ee.value.featureCount),1)]),e.createElementVNode("p",qy,[H[19]||(H[19]=e.createElementVNode("span",{class:"font-medium"},"Тип:",-1)),e.createTextVNode(" "+e.toDisplayString(ee.value.geometryTypes),1)]),ee.value.boundsText?(e.openBlock(),e.createElementBlock("p",Hy,[H[20]||(H[20]=e.createElementVNode("span",{class:"font-medium"},"Межі:",-1)),e.createTextVNode(" "+e.toDisplayString(ee.value.boundsText),1)])):e.createCommentVNode("",!0)])],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[H[22]||(H[22]=e.createElementVNode("p",{class:"text-xs font-semibold tracking-wide text-slate-500 uppercase mb-2"}," Немає даних для попереднього перегляду ",-1)),e.createElementVNode("p",Wy,[u.value==="file"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Для продовження завантажте файл та заповніть необхідні поля. Якщо бажаєте попередньо переглянути Ваші дані, натисніть кнопку «Попередній перегляд». ")],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Для продовження вставте геометрію та заповніть необхідні поля. Якщо бажаєте попередньо переглянути Ваші дані, натисніть кнопку «Попередній перегляд». ")],64))])],64))])])])]))}}),[["__scopeId","data-v-d53011ce"]]),Dl=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var m,f;const n=t,o=((f=(m=e.getCurrentInstance())==null?void 0:m.appContext.config.globalProperties)==null?void 0:f.$settings)||null,{map:r,ready:l}=Qe();let s=null;function i(){s==null||s.remove(),s=null}function c(p){if(!p)return null;if(typeof p=="string")try{p=JSON.parse(p)}catch{return null}return p.type==="FeatureCollection"?p:p.type==="Feature"?{type:"FeatureCollection",features:[p]}:p.type&&Array.isArray(p.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:p,properties:{}}]}:Array.isArray(p.features)?{type:"FeatureCollection",features:p.features}:p.geometry?c(p.geometry):null}function u(p){var g,b,x;return{type:"line",color:"#8e4484",width:2,opacity:((((x=(b=(g=p==null?void 0:p.features)==null?void 0:g[0])==null?void 0:b.geometry)==null?void 0:x.type)||"").includes("Polygon"),.95)}}async function d(p){const k=await fetch(p);if(!k.ok)throw new Error(String(k.status));return k.json()}async function y(p,k){if(p){const h=/^https?:\/\//.test(p)?p:new URL(p,location.origin).toString(),g=await d(h).catch(()=>null),b=c(g);if(b)return b}if(k){const h=await d(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(k)}`).catch(()=>null),g=c(h);if(g)return g}return null}async function a(){var g,b,x,C;if(!n.layerId||!r.value){i();return}typeof l=="function"&&await l().catch(()=>{});const p=n.boundary??((g=n.settingsMap)==null?void 0:g.boundary)??((b=o==null?void 0:o.map)==null?void 0:b.boundary)??null,k=n.katottg??((x=n.settingsMap)==null?void 0:x.katottg)??((C=o==null?void 0:o.map)==null?void 0:C.katottg)??null;if(!p&&!k){i();return}const h=await y(p,k);if(!h){i();return}i(),s=Ie(`${n.layerId}-boundary`,{source:{type:"geojson",data:h},style:u(h)},r)}return e.watch(()=>{var p,k;return[n.layerId,n.boundary,n.katottg,(p=n.settingsMap)==null?void 0:p.boundary,(k=n.settingsMap)==null?void 0:k.katottg,r.value]},()=>{a()},{immediate:!0}),e.onBeforeUnmount(i),(p,k)=>null}}),Gy={key:3,class:"absolute bottom-16 right-4 z-[120] pointer-events-auto"},Ky={key:4,class:"absolute bottom-4 right-4 z-[120] flex items-end gap-2 pointer-events-auto"},Zy={class:"absolute top-[6.5px] right-[6.5px] z-[130] flex flex-col items-end gap-1 pointer-events-auto"},Xy=["aria-label","disabled"],Jy={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"},Qy=["aria-label"],eh={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"},th=["aria-label"],nh={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"},oh=["aria-label"],rh={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"},lh=["aria-label"],ah={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"},sh={class:"map-widget__overlay-grid"},ih={key:0,id:"map-filter-popover-host",class:"map-widget__filter-host"},ch={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},dh={class:"map-widget__stack"},uh={key:2,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom xl:mb-5 mb-2"},fh={class:"map-widget__stack map-widget__stack--bottom"},mh={key:0,class:"map-widget__state"},ph={key:1,class:"map-widget__state map-widget__state--error"},ho=Ae(e.defineComponent({__name:"MapWidget",props:{id:{},height:{},minZoom:{},maxZoom:{},data:{}},setup(t){var gn,Wn,jo,Zt;const n=t;console.log("props.data",n.data);const o=Oe.useRoute(),r=Oe.useRouter(),l=e.ref(null),s=e.ref({}),i=e.ref(null),c=e.ref(!1),u=e.ref(null),d=e.ref(!1),y=e.ref([]),a=e.ref([]),m=e.ref(null),f=e.ref(!1),{resolveMapLegendItems:p}=Nl(),k=Ml(),h=e.ref(null),g=e.computed(()=>h.value==="route"),b=e.computed(()=>h.value==="ruler"),x=e.computed(()=>h.value==="height"),C=e.computed(()=>h.value==="draw"),V=e.computed(()=>h.value==="geolocation"),E=e.computed(()=>h.value==="add-data"),_=e.ref(null),N=e.ref("general"),T=e.ref(null),Y=e.ref(null),ee=e.ref(null),R=e.ref("pen"),ae=e.ref("#2563eb"),ue=e.ref(3),oe=e.ref([]),te=e.ref(null),J=e.ref(null),S=e.ref([]),F=e.ref(!1),M=e.ref(null),B=e.ref(!1),j=e.ref(null),X=e.computed(()=>n.id||"main"),he=e.computed(()=>{var O,se;return{height:((O=n.height)==null?void 0:O.trim())||((se=s.value)==null?void 0:se.height)||"calc(100vh - 65px)"}}),Z=e.computed(()=>{var O;return((O=s.value)==null?void 0:O.name)??null}),P=e.computed(()=>{var O;return((O=s.value)==null?void 0:O.description)??null}),q=e.computed(()=>{var O;return $e((O=s.value)==null?void 0:O.maps)}),H=e.computed(()=>{var se,Se;const O=((se=s.value)==null?void 0:se.minZoom)??((Se=s.value)==null?void 0:Se.minzoom)??null;return typeof O=="number"?O:null}),re=e.computed(()=>{var se,Se;const O=((se=s.value)==null?void 0:se.maxZoom)??((Se=s.value)==null?void 0:Se.maxzoom)??null;return typeof O=="number"?O:typeof n.maxZoom=="number"?n.maxZoom:20}),I=e.ref(null),le=e.computed(()=>{if(!I.value)return null;const{lng:O,lat:se}=I.value;return`${se.toFixed(6)}, ${O.toFixed(6)}`}),me=e.computed(()=>{var O;return((O=l.value)==null?void 0:O.ctx)??null}),be=e.computed(()=>{var O;return((O=s.value)==null?void 0:O.minimap)??null});function A(O){a.value=O.basemaps,m.value=O.selectedId}function K(){f.value=!f.value}function fe(){f.value=!1}function ie(O){if(!O||typeof O!="object")return O;const se=It(O.center);return se?{...O,center:se}:O}const de=((Wn=(gn=e.getCurrentInstance())==null?void 0:gn.appContext.config.globalProperties)==null?void 0:Wn.$settings)||null;function pe(O){if(O==null)return null;const se=Number(typeof O=="string"?O.trim():O);return Number.isFinite(se)?se:null}const ve=It((jo=de==null?void 0:de.map)==null?void 0:jo.center),U=pe((Zt=de==null?void 0:de.map)==null?void 0:Zt.zoom),ne=e.computed(()=>{const O=(de==null?void 0:de.map)||null,se=(O==null?void 0:O.boundary)??null,Se=(O==null?void 0:O.katottg)??null;return!se&&!Se?null:{boundary:se,katottg:Se}});function we(O){return typeof O=="string"&&O.trim()?O.trim().toLowerCase():"top-left"}function $e(O){return Array.isArray(O)?O:O&&typeof O=="object"?Object.values(O).filter(Boolean):[]}const Pe=e.computed(()=>{var O;return $e((O=s.value)==null?void 0:O.widgets)}),Le=e.computed(()=>Pe.value.some(O=>(O==null?void 0:O.type)==="catalog"));function Ue(O){return p(O,{hasCatalogWidget:Le.value})}const We=e.computed(()=>Pe.value.some(O=>(O==null?void 0:O.type)==="basemaps")),et=e.computed(()=>Pe.value.some(O=>(O==null?void 0:O.type)==="layers")),Q=["left","right"],$=e.computed(()=>{const O={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},se={"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 Pe.value.forEach(Se=>{const Me=we(Se.position),Ce=se[Me]??{side:"left",align:"top"};O[Ce.side][Ce.align].push(Se)}),O});function D(O){return Array.isArray(O)?O[0]??null:typeof O=="string"?O:null}async function v(){var se;await e.nextTick();const O=(se=l.value)==null?void 0:se.ctx;return O?(O.ready&&await O.ready(),O):null}function z(){var O,se,Se;return((Se=(se=(O=l.value)==null?void 0:O.ctx)==null?void 0:se.map)==null?void 0:Se.value)??null}function W(){const O=z();if(!O)return null;const se=O.getCenter();return{z:O.getZoom().toFixed(2),x:se.lng.toFixed(5),y:se.lat.toFixed(5)}}async function ge(){var Se;const O=await v(),se=(Se=O==null?void 0:O.map)==null?void 0:Se.value;se&&(typeof H.value=="number"&&se.setMinZoom(H.value),typeof re.value=="number"&&se.setMaxZoom(re.value))}async function ke(){var Ce;if(i.value)return;const O=await v(),se=(Ce=O==null?void 0:O.map)==null?void 0:Ce.value;if(!se)return;const Se=se.getCenter(),Me=se.getZoom();i.value={center:[Se.lng,Se.lat],zoom:Me}}function _e(){if(nt.value)return;const O=W();if(!O)return;const se=D(o.query.x),Se=D(o.query.y),Me=D(o.query.z);se===O.x&&Se===O.y&&Me===O.z||(mt.value=O,r.replace({query:{...o.query,...O}}).catch(()=>{}))}function Be(O,se,Se=1e-6){return Math.abs(O-se)<=Se}async function Te(){var G;if(Yt())return;const O=await v(),se=(G=O==null?void 0:O.map)==null?void 0:G.value;if(!O||!se)return;const Se=parseFloat(D(o.query.x)??""),Me=parseFloat(D(o.query.y)??""),Ce=parseFloat(D(o.query.z)??""),De=!Number.isNaN(Se),je=!Number.isNaN(Me),w=!Number.isNaN(Ce);let L=!1;nt.value=!0;try{if(De&&je){const ce=se.getCenter();(!Be(ce.lng,Se)||!Be(ce.lat,Me))&&(se.setCenter([Se,Me]),L=!0)}if(w){const ce=se.getZoom();Be(ce,Ce,.001)||(se.setZoom(Ce),L=!0)}(!De||!je||!w||L)&&_e()}finally{nt.value=!1}}let Ye=null,Xe=null;const nt=e.ref(!1),mt=e.ref(null);function Yt(){const O=mt.value;if(!O)return!1;const se=D(o.query.x),Se=D(o.query.y),Me=D(o.query.z);return se===O.x&&Se===O.y&&Me===O.z?(mt.value=null,!0):!1}function Rr(O){const se=O==null?void 0:O.lngLat;se&&(I.value={lng:se.lng,lat:se.lat})}let xt=null;function Or(O){typeof window>"u"||window.dispatchEvent(new CustomEvent(no,{detail:O}))}function Mo(O){if(!O)return null;if(typeof O=="string")try{return JSON.parse(O)}catch{return null}return O}async function Gt(O){const se=await fetch(`/api/map-format?${O.toString()}`);if(!se.ok)throw new Error(`API returned ${se.status}`);return se.json()}function In(){const O=z();return O?Object.entries(Ie()).filter(([,se])=>{var ce,xe,Ve,Ne,ze,Re,qe;const Se=(xe=(ce=se==null?void 0:se.opts)==null?void 0:ce.source)==null?void 0:xe.type,Me=(Ne=(Ve=se==null?void 0:se.opts)==null?void 0:Ve.layer)==null?void 0:Ne.type,Ce=(((ze=se==null?void 0:se.opts)==null?void 0:ze.service)||"").toString().toLowerCase(),De=Array.isArray(se==null?void 0:se.card)?se.card.length>0:!!(se!=null&&se.card),je=Array.isArray(se==null?void 0:se.popup)?se.popup.length>0:!!(se!=null&&se.popup),w=(Re=se==null?void 0:se.ids)==null?void 0:Re.sourceId;if(Se!=="raster"&&Me!=="raster"||Ce!=="cartocss"&&!De&&!je||!w||!O.getSource(w))return!1;const G=(((qe=O.getStyle())==null?void 0:qe.layers)||[]).filter(Ge=>Ge.source===w);return G.length?G.some(Ge=>{try{return O.getLayoutProperty(Ge.id,"visibility")!=="none"}catch{return!0}}):!1}).map(([se])=>se):[]}function Ur(O){const se=z();return se?(se.queryRenderedFeatures(O==null?void 0:O.point)||[]).filter(Me=>{var w,L,G,ce,xe;if(!((w=Me==null?void 0:Me.properties)!=null&&w.id))return!1;const Ce=Ie(Me.source);if(!Ce)return!1;const De=(G=(L=Ce==null?void 0:Ce.opts)==null?void 0:L.source)==null?void 0:G.type,je=(xe=(ce=Ce==null?void 0:Ce.opts)==null?void 0:ce.layer)==null?void 0:xe.type;return De!=="raster"&&je!=="raster"}):[]}async function un(O){var De,je,w,L,G;const se=(De=O==null?void 0:O.lngLat)==null?void 0:De.lng,Se=(je=O==null?void 0:O.lngLat)==null?void 0:je.lat;if(typeof se!="number"||typeof Se!="number")return[];const Me=In();if(!Me.length)return[];const Ce=[];for(let ce=0;ce<Me.length;ce+=1){const xe=Me[ce],Ve=new URLSearchParams({layer:xe,lat:Se.toFixed(6),lng:se.toFixed(6)});try{const Ne=await Gt(Ve),ze=Mo(((w=Ne==null?void 0:Ne.data)==null?void 0:w.geom)??(Ne==null?void 0:Ne.geom)??null),Re=((L=Ne==null?void 0:Ne.data)==null?void 0:L.id)??(Ne==null?void 0:Ne.id);if(Re!=null){const qe=await Gt(new URLSearchParams({layer:xe,id:String(Re)})),Ge=typeof(qe==null?void 0:qe.html)=="string"?qe.html:null,tt=Mo(((G=qe==null?void 0:qe.data)==null?void 0:G.geom)??(qe==null?void 0:qe.geom)??null);if(Ge||tt){Ce.push({html:Ge,geometry:tt??ze,infoToken:`external:${xe},${String(Re)}`});continue}}_l({html:Ne==null?void 0:Ne.html})&&Ce.push({html:Ne.html,geometry:ze,infoToken:null})}catch{}}return Ce}async function qr(O){var Ce,De;const se=O==null?void 0:O.lngLat;if(h.value==="height"&&se){await k.measureAt({lat:se.lat,lng:se.lng});return}y.value.includes("route")&&g.value&&se&&((Ce=_.value)==null||Ce.addPoint({lat:se.lat,lng:se.lng})),y.value.includes("ruler")&&b.value&&se&&((De=T.value)==null||De.addPoint({lat:se.lat,lng:se.lng}));const Se=Ur(O),Me=await un(O).catch(()=>[]);Or({features:Se,externalItems:Me})}function Fo(){var O,se;h.value==="ruler"?(S.value=[],F.value=!1,(O=T.value)==null||O.clearPoints(),h.value=null):(h.value==="route"&&(oe.value=[],te.value=null,(se=_.value)==null||se.clearPoints()),M.value=null,j.value=null,h.value="ruler")}function Hr(){if(h.value==="height"){k.reset(),h.value=null;return}k.reset(),h.value="height"}function Wr(){var O,se,Se;h.value==="route"?(oe.value=[],te.value=null,(O=_.value)==null||O.clearPoints(),h.value=null):(h.value==="ruler"&&(S.value=[],F.value=!1,(se=T.value)==null||se.clearPoints()),M.value=null,j.value=null,oe.value=[],te.value=null,(Se=_.value)==null||Se.clearPoints(),h.value="route")}function jn(){h.value=null,S.value=[],F.value=!1}function Yr(){k.reset(),h.value=null}function Gr(){h.value=null,oe.value=[],te.value=null,J.value=null}function Kr(){var O;h.value==="draw"?h.value=null:(h.value==="route"&&(oe.value=[],te.value=null,(O=_.value)==null||O.clearPoints()),M.value=null,j.value=null,h.value="draw")}function Zr(){h.value==="add-data"?h.value=null:(M.value=null,j.value=null,h.value="add-data")}function Rn(){var O;if(h.value==="geolocation"&&M.value!=null){On();return}if(h.value==="route"&&(oe.value=[],te.value=null,(O=_.value)==null||O.clearPoints()),j.value=null,B.value=!0,!navigator.geolocation){j.value="Геолокація не підтримується браузером",B.value=!1;return}navigator.geolocation.getCurrentPosition(se=>{const Se=se.coords.latitude,Me=se.coords.longitude;M.value={lat:Se,lng:Me},j.value=null,B.value=!1,h.value="geolocation",v().then(Ce=>{Ce!=null&&Ce.flyTo&&Ce.flyTo({center:[Me,Se],zoom:15})})},()=>{j.value="Не вдалося визначити місце розташування",B.value=!1},{enableHighAccuracy:!0})}function Do(){h.value=null,M.value=null,j.value=null}function On(){const O=M.value;O!=null&&v().then(se=>{se!=null&&se.flyTo&&se.flyTo({center:[O.lng,O.lat],zoom:15})})}function Un(O){S.value=O}function fn(O){oe.value=O}function Po(O){te.value=(O==null?void 0:O.geometry)??null,J.value=null}function Xr(O){J.value=O}function zo(O){if(!O)return;const se=[];if(O.type==="LineString"?se.push(...O.coordinates):O.coordinates.forEach(Me=>se.push(...Me)),!se.length)return;const Se=se.reduce((Me,[Ce,De])=>(Me[0]=[Math.min(Me[0][0],Ce),Math.min(Me[0][1],De)],Me[1]=[Math.max(Me[1][0],Ce),Math.max(Me[1][1],De)],Me),[[se[0][0],se[0][1]],[se[0][0],se[0][1]]]);v().then(Me=>{var Ce;(Ce=Me==null?void 0:Me.fitBounds)==null||Ce.call(Me,Se,{padding:72,duration:600,maxZoom:16})})}function qn(){var O;(O=ee.value)==null||O.clear()}function mn(){var O;(O=ee.value)==null||O.finishPolygon()}function Jr(){var O;(O=ee.value)==null||O.undo()}function Qr(){var Ce,De,je,w;const O=(je=(De=(Ce=l.value)==null?void 0:Ce.ctx)==null?void 0:De.map)==null?void 0:je.value,se=(w=ee.value)==null?void 0:w.getCanvas();if(!O||!se)return;const Se=(L,G)=>{const ce=document.createElement("a");ce.download=G,ce.rel="noopener",typeof L=="string"?ce.href=L:(ce.href=URL.createObjectURL(L),setTimeout(()=>URL.revokeObjectURL(ce.href),100)),document.body.appendChild(ce),ce.click(),document.body.removeChild(ce)},Me=()=>{const L=O.getCanvas();if(!L)return;const G=L.width,ce=L.height;if(G<=0||ce<=0)return;const xe=document.createElement("canvas");xe.width=G,xe.height=ce;const Ve=xe.getContext("2d");if(!Ve)return;Ve.drawImage(L,0,0),Ve.drawImage(se,0,0,se.width,se.height,0,0,G,ce);const Ne=`map-drawing-${Date.now()}.png`;xe.toBlob(ze=>{if(ze){Se(ze,Ne);return}try{const Re=xe.toDataURL("image/png");Se(Re,Ne)}catch{const Re=document.createElement("canvas");Re.width=se.width,Re.height=se.height;const qe=Re.getContext("2d");qe&&(qe.drawImage(se,0,0),Re.toBlob(Ge=>Ge&&Se(Ge,Ne),"image/png"))}},"image/png")};requestAnimationFrame(()=>requestAnimationFrame(Me))}async function vt(){const O=await v();O!=null&&O.on&&(Ye==null||Ye(),Ye=O.on("moveend",_e),Xe==null||Xe(),Xe=O.on("mousemove",Rr),xt==null||xt(),xt=O.on("click",qr))}e.onUnmounted(()=>{Ye==null||Ye(),Ye=null,Xe==null||Xe(),Xe=null,xt==null||xt(),xt=null});async function Hn(O=!1,se=!1){var Me,Ce;se||(d.value=!1,u.value=null,I.value=null);const Se=O||!n.data;se||(c.value=Se);try{const De=Se?await(async()=>{const ce=await fetch(`/api/gis-map/${encodeURIComponent(X.value)}`);if(!ce.ok)throw new Error(`Помилка завантаження (${ce.status})`);return ce.json()})():n.data;Se||(d.value=!0);const je=It(De.center)??ve,w=$e(De.layers).map(ce=>ie(ce)),L=pe(De.zoom)??U;s.value={...De,center:je??null,zoom:L??De.zoom??null,layers:w,widgets:De.widgets},y.value=De.tools||["home","print","ruler","draw","add-data"];const G=await v();G&&(je&&((Me=G.setCenter)==null||Me.call(G,je)),L!=null&&((Ce=G.setZoom)==null||Ce.call(G,L)),i.value||await ke()),await ge(),await Te(),se||await vt(),d.value=!0}catch(De){u.value=(De==null?void 0:De.message)||"Не вдалося завантажити карту"}finally{Se&&!se&&(c.value=!1)}}const pn=e.computed(()=>{var Me;const O=new Map;return $e((Me=s.value)==null?void 0:Me.layers).forEach(Ce=>{if(!(Ce!=null&&Ce.id))return;const De=ie(Ce)||Ce;O.set(Ce.id,{...De})}),Pe.value.filter(Ce=>(Ce==null?void 0:Ce.type)==="layers").flatMap(Ce=>{var De;return $e((De=Ce==null?void 0:Ce.config)==null?void 0:De.layers)}).forEach(Ce=>{if(!(Ce!=null&&Ce.id))return;const De=O.get(Ce.id)||{},je=ie(Ce)||Ce;O.set(Ce.id,{...De,...je,actions:Ce.actions||De.actions||null,name:De.name||Ce.name||Ce.title||De.title||Ce.id,title:De.title||Ce.title||De.name||null,visible:De.visible??Ce.visible??!0})}),Array.from(O.values())}),Kt=e.ref([]);function Je(O){Kt.value.includes(O)?Kt.value=Kt.value.filter(se=>se!==O):Kt.value.push(O)}const Io=e.computed(()=>O=>Kt.value.includes(O.id));return e.watch([H,re],()=>{ge()},{immediate:!0}),e.watch(X,()=>{Hn(!0)}),e.watch(()=>n.data,O=>{O&&Hn(!1,!0)},{deep:!0}),e.onMounted(()=>{Hn()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{Te()}),e.watch(()=>te.value,O=>{!O||!g.value||zo(O)},{deep:!0}),(O,se)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(he.value)},[se[10]||(se[10]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createVNode(Zn,{ref_key:"mapViewRef",ref:l,class:"map-widget__view"},{default:e.withCtx(()=>{var Se,Me,Ce,De;return[We.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Qt,{key:0,class:"hidden",onStateChange:A})),d.value&&!c.value&&!et.value?e.withDirectives((e.openBlock(),e.createBlock(Qo,{key:1,layers:pn.value,onAction:se[0]||(se[0]=je=>Je(je.layerId))},null,8,["layers"])),[[e.vShow,!1]]):e.createCommentVNode("",!0),ne.value?(e.openBlock(),e.createBlock(Dl,{key:2,"layer-id":"app-boundary",boundary:ne.value.boundary,katottg:ne.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),me.value&&y.value.includes("draw")&&C.value?(e.openBlock(),e.createElementBlock("div",Gy,[e.createVNode(yy,{ref_key:"drawingPanelRef",ref:Y,onClose:se[1]||(se[1]=je=>h.value=null),onClear:qn,onDownload:Qr,onFinishPolygon:mn,onUndo:Jr,"onUpdate:tool":se[2]||(se[2]=je=>R.value=je),"onUpdate:strokeColor":se[3]||(se[3]=je=>ae.value=je),"onUpdate:strokeWidth":se[4]||(se[4]=je=>ue.value=je)},null,512)])):e.createCommentVNode("",!0),me.value?(e.openBlock(),e.createElementBlock("div",Ky,[le.value?(e.openBlock(),e.createBlock(xm,{key:0,coordinates:le.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(_m,{"map-context":me.value,options:be.value},null,8,["map-context","options"]),y.value.includes("ruler")&&b.value?(e.openBlock(),e.createBlock(Cg,{key:1,ref_key:"rulerPanelRef",ref:T,onClose:jn,onTabChange:se[5]||(se[5]=je=>N.value=je),onPointsChange:Un,onShapeClosedChange:se[6]||(se[6]=je=>F.value=je)},null,512)):e.createCommentVNode("",!0),x.value?(e.openBlock(),e.createBlock(Qg,{key:2,onClose:Yr})):e.createCommentVNode("",!0),y.value.includes("geolocation")&&V.value?(e.openBlock(),e.createBlock(Fg,{key:3,position:M.value,onClose:Do,onRecenter:On},null,8,["position"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Zy,[e.createVNode(ym),y.value.includes("home")?(e.openBlock(),e.createBlock(jt,{key:0,center:((Se=s.value)==null?void 0:Se.center)||((Me=i.value)==null?void 0:Me.center)||null,zoom:((Ce=s.value)==null?void 0:Ce.zoom)??((De=i.value)==null?void 0:De.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),y.value.includes("compare")?(e.openBlock(),e.createBlock(im,{key:1,"has-compare-options":a.value.length>1,"is-compare-open":f.value,onToggle:K},null,8,["has-compare-options","is-compare-open"])):e.createCommentVNode("",!0),y.value.includes("print")?(e.openBlock(),e.createBlock(lm,{key:2})):e.createCommentVNode("",!0),y.value.includes("route")?(e.openBlock(),e.createBlock(vp,{key:3,ref_key:"routePanelRef",ref:_,active:g.value,onToggle:Wr,onClose:Gr,onPointsChange:fn,onInstructionHover:Xr,onRouteChange:Po},null,8,["active"])):e.createCommentVNode("",!0),y.value.includes("geolocation")?(e.openBlock(),e.createElementBlock("button",{key:4,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",V.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":V.value?"Вимкнути геолокацію":"Ваше розташування",disabled:B.value,onClick:e.withModifiers(Rn,["stop"])},[e.createElementVNode("span",Jy,e.toDisplayString(V.value?"Вимкнути геолокацію":"Ваше розташування"),1),e.createVNode(e.unref(ye.MapPin),{class:"w-4 h-4"})],10,Xy)):e.createCommentVNode("",!0),y.value.includes("ruler")?(e.openBlock(),e.createElementBlock("button",{key:5,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",b.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":b.value?"Вимкнути вимірювання":"Вимірювання",onClick:e.withModifiers(Fo,["stop"])},[e.createElementVNode("span",eh,e.toDisplayString(b.value?"Вимкнути вимірювання":"Вимірювання"),1),e.createVNode(e.unref(ye.Ruler),{class:"w-4 h-4"})],10,Qy)):e.createCommentVNode("",!0),y.value.includes("height")?(e.openBlock(),e.createElementBlock("button",{key:6,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",x.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":x.value?"Вимкнути вимірювання висоти":"Вимірювання висоти",onClick:e.withModifiers(Hr,["stop"])},[e.createElementVNode("span",nh,e.toDisplayString(x.value?"Вимкнути вимірювання висоти":"Вимірювання висоти"),1),e.createVNode(e.unref(ye.TrendingUp),{class:"w-4 h-4"})],10,th)):e.createCommentVNode("",!0),y.value.includes("draw")?(e.openBlock(),e.createElementBlock("button",{key:7,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",C.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":C.value?"Вимкнути малювання":"Малювання",onClick:e.withModifiers(Kr,["stop"])},[e.createElementVNode("span",rh,e.toDisplayString(C.value?"Вимкнути малювання":"Малювання"),1),e.createVNode(e.unref(ye.Pen),{class:"w-4 h-4"})],10,oh)):e.createCommentVNode("",!0),y.value.includes("add-data")?(e.openBlock(),e.createElementBlock("button",{key:8,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",E.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":E.value?"Закрити додавання даних":"Додавання даних",onClick:e.withModifiers(Zr,["stop"])},[e.createElementVNode("span",ah,e.toDisplayString(E.value?"Закрити додавання даних":"Додавання даних"),1),e.createVNode(e.unref(ye.Upload),{class:"w-4 h-4"})],10,lh)):e.createCommentVNode("",!0)]),d.value&&b.value&&S.value.length>0?(e.openBlock(),e.createBlock(Ng,{key:5,points:S.value,"is-shape-closed":F.value,"label-mode":N.value},null,8,["points","is-shape-closed","label-mode"])):e.createCommentVNode("",!0),d.value&&y.value.includes("height")&&x.value?(e.openBlock(),e.createBlock(ty,{key:6,point:e.unref(k).point.value},null,8,["point"])):e.createCommentVNode("",!0),d.value&&oe.value.length>0?(e.openBlock(),e.createBlock(Lp,{key:7,points:oe.value,"route-geometry":te.value,"hover-geometry":J.value},null,8,["points","route-geometry","hover-geometry"])):e.createCommentVNode("",!0),d.value&&M.value!=null?(e.openBlock(),e.createBlock(Dg,{key:8,position:M.value},null,8,["position"])):e.createCommentVNode("",!0),d.value&&C.value?(e.openBlock(),e.createBlock(hy,{key:9,ref_key:"drawingCanvasRef",ref:ee,tool:R.value,"stroke-color":ae.value,"stroke-width":ue.value},null,8,["tool","stroke-color","stroke-width"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[E.value?(e.openBlock(),e.createBlock(Yy,{key:0,onClose:se[7]||(se[7]=je=>h.value=null)})):e.createCommentVNode("",!0)])),d.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:10},[e.createElementVNode("div",sh,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(Q,je=>e.createElementVNode("div",{key:je,class:e.normalizeClass(["map-widget__side",`map-widget__side--${je}`])},[je==="left"?(e.openBlock(),e.createElementBlock("div",ih)):e.createCommentVNode("",!0),$.value[je].top.length?(e.openBlock(),e.createElementBlock("div",ch,[e.createElementVNode("div",dh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.value[je].top,w=>{var L,G,ce,xe,Ve,Ne,ze;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:w.id||w.type,class:"map-overlay__item"},[w.type==="info"?(e.openBlock(),e.createBlock(ml,{key:0,title:((L=w.config)==null?void 0:L.title)||w.title||null,content:((G=w.config)==null?void 0:G.content)||"",links:q.value,"map-name":Z.value,"map-description":P.value},null,8,["title","content","links","map-name","map-description"])):w.type==="catalog"?(e.openBlock(),e.createBlock(Vl,{key:1,api:((ce=w.config)==null?void 0:ce.api)||null},null,8,["api"])):w.type==="layers"&&!c.value?(e.openBlock(),e.createBlock(Qo,{key:2,layers:pn.value,onAction:se[8]||(se[8]=Re=>Je(Re.layerId)),config:w.config},null,8,["layers","config"])):w.type==="basemaps"?(e.openBlock(),e.createBlock(Qt,{key:3,layers:((xe=w.config)==null?void 0:xe.layers)||null,"default-layer":((Ve=w.config)==null?void 0:Ve.default)||null,title:w.title||((Ne=w.config)==null?void 0:Ne.title)||null,onStateChange:A},null,8,["layers","default-layer","title"])):w.type==="legend"?(e.openBlock(),e.createBlock(nr,{key:4,items:Ue(w)},null,8,["items"])):w.type==="filters"&&Io.value(w)?(e.openBlock(),e.createBlock(or,{key:5,"layer-id":(ze=w.config)==null?void 0:ze.layer,onClose:Je},null,8,["layer-id"])):w.type==="dataset"||w.type==="attribute"?(e.openBlock(),e.createBlock($l,{key:6,config:w.config},null,8,["config"])):w.type==="search"?(e.openBlock(),e.createBlock(Sl,{key:7,config:w.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,w.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),$.value[je].bottom.length?(e.openBlock(),e.createElementBlock("div",uh,[e.createElementVNode("div",fh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.value[je].bottom,w=>{var L,G,ce,xe,Ve,Ne,ze;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:w.id||w.type,class:"map-overlay__item"},[w.type==="info"?(e.openBlock(),e.createBlock(ml,{key:0,title:((L=w.config)==null?void 0:L.title)||w.title||null,content:((G=w.config)==null?void 0:G.content)||"",links:q.value,"map-name":Z.value,"map-description":P.value},null,8,["title","content","links","map-name","map-description"])):w.type==="catalog"?(e.openBlock(),e.createBlock(Vl,{key:1,api:((ce=w.config)==null?void 0:ce.api)||null},null,8,["api"])):w.type==="layers"&&!c.value?(e.openBlock(),e.createBlock(Qo,{key:2,layers:pn.value,onAction:se[9]||(se[9]=Re=>Je(Re.layerId)),config:w.config},null,8,["layers","config"])):w.type==="basemaps"?(e.openBlock(),e.createBlock(Qt,{key:3,layers:((xe=w.config)==null?void 0:xe.layers)||null,"default-layer":((Ve=w.config)==null?void 0:Ve.default)||null,title:w.title||((Ne=w.config)==null?void 0:Ne.title)||null,onStateChange:A},null,8,["layers","default-layer","title"])):w.type==="legend"?(e.openBlock(),e.createBlock(nr,{key:4,items:Ue(w)},null,8,["items"])):w.type==="filters"&&Io.value(w)?(e.openBlock(),e.createBlock(or,{key:5,"layer-id":(ze=w.config)==null?void 0:ze.layer,onClose:Je},null,8,["layer-id"])):w.type==="dataset"||w.type==="attribute"?(e.openBlock(),e.createBlock($l,{key:6,config:w.config},null,8,["config"])):w.type==="search"?(e.openBlock(),e.createBlock(Sl,{key:7,config:w.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,w.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(kl),e.createVNode(tr,{"map-id":X.value},null,8,["map-id"]),y.value.includes("compare")?(e.openBlock(),e.createBlock(vm,{key:0,"compare-basemaps":a.value,"is-compare-open":f.value,"selected-basemap-id":m.value,onClose:fe},null,8,["compare-basemaps","is-compare-open","selected-basemap-id"])):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0)]}),_:1},512),c.value?(e.openBlock(),e.createElementBlock("div",mh,"Завантаження карти…")):u.value?(e.openBlock(),e.createElementBlock("div",ph,e.toDisplayString(u.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-b88845f8"]]),gh=["","січня","лютого","березня","квітня","травня","червня","липня","серпня","вересня","жовтня","листопада","грудня"];function Cn(t){if(!t)return"";const[n,o]=t.split(" ");if(!n)return t;const[r,l,s]=n.split("-");if(!r||!l||!s)return t;const i=parseInt(l,10),c=gh[i]||l;let u=`${parseInt(s,10)} ${c} ${r}`;if(o){const d=o.split(".")[0],[y,a,m]=d.split(":");y&&a&&m?u+=`, ${y}:${a}:${m}`:y&&a?u+=`, ${y}:${a}`:y&&(u+=`, ${y}`)}return u}function Nn(t,n={dateStyle:"short"}){if(t==null||t==="")return"";const o=new Date(t);return Number.isNaN(o.getTime())?"":new Intl.DateTimeFormat(void 0,n).format(o)}const yh={class:"flex flex-col md:flex-row md:justify-between lg:flex-row lg:justify-between p-3 md:p-3.5 lg:p-4 pb-2 bg-slate-50 gap-3 md:gap-3.5 lg:gap-4"},hh={class:"flex flex-col gap-2 md:flex-row md:items-center md:justify-between md:gap-3 lg:flex-row lg:items-center lg:justify-between lg:gap-0"},bh={class:"flex flex-col gap-2 md:flex-row md:items-center"},xh={class:"text-base md:text-base lg:text-lg font-bold line-clamp-2"},kh={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2 md:ml-2 lg:ml-2"},wh={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 text-foreground whitespace-nowrap","data-v0-t":"badge"},_h={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2"},Eh={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 text-foreground whitespace-nowrap"},Ch={class:"p-3 md:p-3.5 lg:p-4 pt-2"},Nh={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-2 md:gap-2.5 lg:gap-3 text-sm"},Vh={class:"text-gray-500 shrink-0 md:max-w-[50%]"},$h={class:"font-medium flex flex-wrap gap-1"},Bh={class:"items-center p-3 bg-slate-50 flex flex-col md:flex-row justify-end gap-2"},Sh=["href"],vh=["href"],Pl=e.defineComponent({__name:"template-1",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=a=>(a==null?void 0:a.service_id)&&(a==null?void 0:a.is_map)&&a[n.id_key]&&(a==null?void 0:a.geom),l=e.computed(()=>n.columns.find(a=>a.meta==="title")),s=e.computed(()=>n.columns.filter(a=>a.meta==="category")),i=e.computed(()=>n.columns.filter(a=>a.meta==="tags")),c=e.computed(()=>n.columns.filter(a=>a.meta!=="title")),u=(a,m)=>{if(m)return a[m]},d=a=>{const m=u(a,n.id_key);return`${n.path}?id=${m}`},y=(a,m)=>{const f=u(a,n.id_key);return`/map?layers=${m}&info=${m},${f}`};return(a,m)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,f=>{var p,k,h;return e.openBlock(),e.createElementBlock("div",{key:f.id,class:"rounded-lg border bg-card text-card-foreground overflow-hidden border-none shadow-md relative","data-v0-t":"card"},[e.createElementVNode("div",yh,[e.createElementVNode("div",hh,[e.createElementVNode("div",bh,[e.createElementVNode("h2",xh,e.toDisplayString(f[`${(p=l.value)==null?void 0:p.name}_text`]||f[(k=l.value)==null?void 0:k.name]||f[(h=l.value)==null?void 0:h.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",kh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,g=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:g.name},[f[g.name]?(e.openBlock(),e.createElementBlock("div",wh,e.toDisplayString(f[`${g.name}_text`]||f[g.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])]),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",_h,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,g=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:g.name},[f[g.name]?(e.openBlock(),e.createElementBlock("span",Eh,e.toDisplayString(f[`${g.name}_text`]||f[g.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Ch,[e.createElementVNode("div",Nh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,g=>{var b;return e.openBlock(),e.createElementBlock("div",{key:g.name,class:"flex flex-col md:flex-row md:items-center lg:flex-row lg:items-center gap-1 md:gap-1.5 lg:gap-1.5"},[e.createElementVNode("span",Vh,e.toDisplayString((g==null?void 0:g.ua)||g.label||g.name)+": ",1),e.createElementVNode("span",$h,[Array.isArray(f[g==null?void 0:g.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(f[(g==null?void 0:g.name)+"_text"]||f[g==null?void 0:g.name],(x,C)=>(e.openBlock(),e.createElementBlock("span",{key:C,class:"bg-gray-100 px-2 py-0 border-[0.01rem] border-gray-300 rounded-lg whitespace-nowrap"},e.toDisplayString(x),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[g.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Nn)(f[g==null?void 0:g.name])||"Немає даних"),1)],64)):g.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Cn)(f[g==null?void 0:g.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=f[(g==null?void 0:g.name)+"_data"])==null?void 0:b.text)||f[(g==null?void 0:g.name)+"_text"]||f[g==null?void 0:g.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Bh,[!t.hideDetailsButton&&r(f)?(e.openBlock(),e.createElementBlock("a",{key:0,href:y(f,f==null?void 0:f.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...m[0]||(m[0]=[e.createTextVNode(" На карті ",-1),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-map-pin-check-inside ml-1 h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"}),e.createElementVNode("path",{d:"m9 10 2 2 4-4"})],-1)])],8,Sh)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:d(f),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...m[1]||(m[1]=[e.createTextVNode(" Детальніше ",-1),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-arrow-right ml-1 h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M5 12h14"}),e.createElementVNode("path",{d:"m12 5 7 7-7 7"})],-1)])],8,vh))])])}),128))}}),Lh={class:"p-0"},Th={class:"border-l-4 border-l-slate-400"},Ah={class:"p-4"},Mh={class:"flex flex-wrap items-center gap-2 mb-3"},Fh={class:"text-lg font-bold"},Dh={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent bg-green-100 text-green-800 hover:bg-green-100","data-v0-t":"badge"},Ph={key:1,class:"flex"},zh={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold border-transparent bg-gray-100 text-gray-800"},Ih={class:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3 text-sm border-t pt-3"},jh={class:"text-xs text-gray-500 mb-1"},Rh={class:"font-medium"},Oh={class:"flex justify-end gap-2 mt-3 border-t pt-3"},Uh=["href"],qh=["href"],zl=e.defineComponent({__name:"template-2",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=a=>(a==null?void 0:a.service_id)&&(a==null?void 0:a.is_map)&&a[n.id_key]&&(a==null?void 0:a.geom),l=e.computed(()=>n.columns.find(a=>a.meta==="title")),s=e.computed(()=>n.columns.filter(a=>a.meta==="category")),i=e.computed(()=>n.columns.filter(a=>a.meta==="tags")),c=e.computed(()=>n.columns.filter(a=>a.meta!=="title")),u=(a,m)=>{if(m)return a[m]},d=a=>{const m=u(a,n.id_key);return`${n.path}?id=${m}`},y=(a,m)=>{const f=u(a,n.id_key);return`/map?layers=${m}&info=${m},${f}`};return(a,m)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,f=>{var p,k,h;return e.openBlock(),e.createElementBlock("div",{key:f.id,class:"rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden","data-v0-t":"card"},[e.createElementVNode("div",Lh,[e.createElementVNode("div",Th,[e.createElementVNode("div",Ah,[e.createElementVNode("div",Mh,[e.createElementVNode("h2",Fh,e.toDisplayString(f[`${(p=l.value)==null?void 0:p.name}_text`]||f[(k=l.value)==null?void 0:k.name]||f[(h=l.value)==null?void 0:h.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,g=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:g.name},[f[g.name]?(e.openBlock(),e.createElementBlock("div",Dh,e.toDisplayString(f[`${g.name}_text`]||f[g.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",Ph,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,g=>(e.openBlock(),e.createElementBlock("div",{key:g.name,class:"flex flex-wrap gap-1 ml-2"},[f[g.name]?(e.openBlock(),e.createElementBlock("span",zh,e.toDisplayString(f[`${g.name}_text`]||f[g.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Ih,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,g=>{var b;return e.openBlock(),e.createElementBlock("div",{key:g.name},[e.createElementVNode("p",jh,e.toDisplayString(g.ua),1),e.createElementVNode("p",Rh,[Array.isArray(f[g==null?void 0:g.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(f[g==null?void 0:g.name],(x,C)=>(e.openBlock(),e.createElementBlock("span",{key:C,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1"},e.toDisplayString(x),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[g.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Nn)(f[g==null?void 0:g.name])||"Немає даних"),1)],64)):g.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Cn)(f[g==null?void 0:g.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=f[(g==null?void 0:g.name)+"_data"])==null?void 0:b.text)||f[(g==null?void 0:g.name)+"_text"]||f[g==null?void 0:g.name]||"Немає даних"),1)],64))],64))])])}),128))]),e.createElementVNode("div",Oh,[!t.hideDetailsButton&&r(f)?(e.openBlock(),e.createElementBlock("a",{key:0,href:y(f,f==null?void 0:f.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...m[0]||(m[0]=[e.createTextVNode(" На карті ",-1),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-map-pin-check-inside ml-1 h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"}),e.createElementVNode("path",{d:"m9 10 2 2 4-4"})],-1)])],8,Uh)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:d(f),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...m[1]||(m[1]=[e.createTextVNode(" Детальніше ",-1),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-external-link ml-1 h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M15 3h6v6"}),e.createElementVNode("path",{d:"M10 14 21 3"}),e.createElementVNode("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"})],-1)])],8,qh))])])])])])}),128))}}),Hh={class:"space-y-4"},Wh={class:"flex flex-col lg:flex-row lg:items-center py-2 px-2 lg:px-3"},Yh={class:"flex-1"},Gh={class:"grid grid-cols-1 lg:grid-cols-12 gap-2 w-full text-xs"},Kh={class:"col-span-1 lg:col-span-4"},Zh={class:"flex items-start"},Xh={class:"flex flex-col"},Jh={class:"font-bold text-xs lg:text-sm"},Qh={key:0,class:"flex flex-wrap gap-1 mt-1"},e0={key:0,class:"inline-flex items-center rounded-full bg-secondary text-secondary-foreground text-[9px] lg:text-[10px] px-1.5 py-0"},t0={key:1,class:"flex flex-wrap gap-1 mt-1"},n0={key:0,class:"inline-flex items-center rounded-full bg-gray-100 text-gray-800 text-[10px] lg:text-xs px-2 py-0.5 font-semibold"},o0={class:"col-span-1 lg:col-span-7 mt-2 lg:mt-0"},r0={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2 lg:gap-3"},l0={class:"text-[9px] lg:text-[10px] text-gray-500 mb-1"},a0={class:"truncate font-medium text-xs lg:text-sm"},s0={class:"flex items-center justify-center gap-2 mt-3 lg:mt-0"},i0=["href"],c0=["href"],Il=e.defineComponent({__name:"template-3",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=m=>(m==null?void 0:m.service_id)&&(m==null?void 0:m.is_map)&&m[n.id_key]&&(m==null?void 0:m.geom),l=e.computed(()=>n.columns.find(m=>m.meta==="title")),s=e.computed(()=>n.columns.filter(m=>m.meta==="category")),i=e.computed(()=>n.columns.filter(m=>m.meta==="tags")),c=e.computed(()=>n.columns.filter(m=>m.meta!=="title")),u=e.computed(()=>"bg-blue-500"),d=(m,f)=>{if(f)return m[f]},y=m=>{const f=d(m,n.id_key);return`${n.path}?id=${f}`},a=(m,f)=>{const p=d(m,n.id_key);return`/map?layers=${f}&info=${f},${p}`};return(m,f)=>(e.openBlock(),e.createElementBlock("div",Hh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,p=>{var k,h,g;return e.openBlock(),e.createElementBlock("div",{key:p.id,class:"border-b border-slate-200 hover:bg-slate-50 transition-colors"},[e.createElementVNode("div",Wh,[e.createElementVNode("div",Yh,[e.createElementVNode("div",Gh,[e.createElementVNode("div",Kh,[e.createElementVNode("div",Zh,[e.createElementVNode("div",{class:e.normalizeClass(["w-1 h-6 lg:h-8 rounded-full mr-2 lg:mr-3 mt-1",u.value])},null,2),e.createElementVNode("div",Xh,[e.createElementVNode("p",Jh,e.toDisplayString(p[`${(k=l.value)==null?void 0:k.name}_text`]||p[(h=l.value)==null?void 0:h.name]||p[(g=l.value)==null?void 0:g.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Qh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,b=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:b.name},[p[b.name]?(e.openBlock(),e.createElementBlock("span",e0,e.toDisplayString(p[`${b.name}_text`]||p[b.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",t0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,b=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:b.name},[p[b.name]?(e.openBlock(),e.createElementBlock("span",n0,e.toDisplayString(p[`${b.name}_text`]||p[b.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",o0,[e.createElementVNode("div",r0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,b=>{var x;return e.openBlock(),e.createElementBlock("div",{key:b.name},[e.createElementVNode("p",l0,e.toDisplayString(b.ua),1),e.createElementVNode("p",a0,[Array.isArray(p[b.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(p[b.name],(C,V)=>(e.openBlock(),e.createElementBlock("span",{key:V,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 text-[10px] lg:text-xs"},e.toDisplayString(C),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[b.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Nn)(p[b.name])||"Немає даних"),1)],64)):b.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Cn)(p[b.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((x=p[b.name+"_data"])==null?void 0:x.text)||p[b.name+"_text"]||p[b.name]||"Немає даних"),1)],64))],64))])])}),128))])])])]),e.createElementVNode("div",s0,[!t.hideDetailsButton&&r(p)?(e.openBlock(),e.createElementBlock("a",{key:0,href:a(p,p.service_id),class:"inline-flex items-center justify-center gap-2 text-xs lg:text-sm font-medium hover:bg-accent hover:text-accent-foreground h-8 lg:h-9 rounded-md px-2 lg:px-3"},[...f[0]||(f[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3 w-3 lg:h-3.5 lg:w-3.5"},[e.createElementVNode("path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"}),e.createElementVNode("path",{d:"m9 10 2 2 4-4"})],-1)])],8,i0)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:y(p),class:"flex items-center justify-center hover:bg-accent hover:text-accent-foreground rounded-md h-8 w-8 lg:h-7 lg:w-7"},[...f[1]||(f[1]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3.5 w-3.5 lg:h-4 lg:w-4"},[e.createElementVNode("path",{d:"m9 18 6-6-6-6"})],-1)])],8,c0))])])])}),128))]))}}),d0={class:"flex flex-col space-y-1.5 p-6 pb-2"},u0={class:"flex items-center gap-2 flex-wrap"},f0={class:"tracking-tight text-lg font-medium"},m0={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent bg-blue-100 text-blue-800 ml-2","data-v0-t":"badge"},p0={key:1,class:"flex"},g0={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold border-transparent bg-gray-100 text-gray-800"},y0={class:"p-6 pt-0 pb-4"},h0={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},b0={class:"text-sm text-gray-500"},x0={class:"font-medium"},k0={class:"flex items-center p-6 pt-0 gap-2"},w0=["href"],_0=["href"],jl=e.defineComponent({__name:"template-4",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=a=>(a==null?void 0:a.service_id)&&(a==null?void 0:a.is_map)&&a[n.id_key]&&(a==null?void 0:a.geom),l=e.computed(()=>n.columns.find(a=>a.meta==="title")),s=e.computed(()=>n.columns.filter(a=>a.meta==="category")),i=e.computed(()=>n.columns.filter(a=>a.meta==="tags")),c=e.computed(()=>n.columns.filter(a=>a.meta!=="title")),u=(a,m)=>{if(m)return a[m]},d=a=>{const m=u(a,n.id_key);return`${n.path}?id=${m}`},y=(a,m)=>{const f=u(a,n.id_key);return`/map?layers=${m}&info=${m},${f}`};return(a,m)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,f=>{var p,k,h;return e.openBlock(),e.createElementBlock("div",{key:f.id,class:"rounded-lg border bg-card text-card-foreground shadow-sm border-l-4 border-l-blue-600","data-v0-t":"card"},[e.createElementVNode("div",d0,[e.createElementVNode("div",u0,[e.createElementVNode("h3",f0,e.toDisplayString(f[`${(p=l.value)==null?void 0:p.name}_text`]||f[(k=l.value)==null?void 0:k.name]||f[(h=l.value)==null?void 0:h.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,g=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:g.name},[f[g.name]?(e.openBlock(),e.createElementBlock("div",m0,e.toDisplayString(f[`${g.name}_text`]||f[g.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",p0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,g=>(e.openBlock(),e.createElementBlock("div",{key:g.name,class:"flex flex-wrap gap-1 ml-2"},[f[g.name]?(e.openBlock(),e.createElementBlock("span",g0,e.toDisplayString(f[`${g.name}_text`]||f[g.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",y0,[e.createElementVNode("div",h0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,g=>{var b;return e.openBlock(),e.createElementBlock("div",{key:g.name},[e.createElementVNode("p",b0,e.toDisplayString(g.ua),1),e.createElementVNode("p",x0,[Array.isArray(f[g==null?void 0:g.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(f[g==null?void 0:g.name],(x,C)=>(e.openBlock(),e.createElementBlock("span",{key:C,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1"},e.toDisplayString(x),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[g.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Nn)(f[g==null?void 0:g.name])||"Немає даних"),1)],64)):g.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Cn)(f[g==null?void 0:g.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=f[(g==null?void 0:g.name)+"_data"])==null?void 0:b.text)||f[(g==null?void 0:g.name)+"_text"]||f[g==null?void 0:g.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",k0,[!t.hideDetailsButton&&r(f)?(e.openBlock(),e.createElementBlock("a",{key:0,href:y(f,f==null?void 0:f.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border bg-background h-10 px-4 py-2 rounded-md text-black border-black hover:bg-gray-100 hover:text-black"}," На карті ",8,w0)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:d(f),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border bg-background h-10 px-4 py-2 rounded-md text-black border-black hover:bg-gray-100 hover:text-black"}," Детальніше ",8,_0))])])}),128))}}),E0={class:"grid grid-cols-1 lg:grid-cols-12 lg:divide-x divide-y lg:divide-y-0 divide-gray-100"},C0={key:0,class:"w-full lg:w-auto lg:col-span-1"},N0=["src"],V0={key:1,class:"hidden lg:flex lg:col-span-1 items-center justify-center py-4 lg:py-0"},$0={class:"col-span-1 lg:col-span-7 p-4 lg:p-4"},B0={class:"flex flex-col mb-3 lg:flex-row lg:items-center lg:mb-1"},S0={class:"text-base lg:text-base font-bold text-gray-900 mb-2 lg:mr-2 lg:mb-0"},v0={class:"flex flex-wrap gap-2 lg:gap-0"},L0={key:0,class:"inline-flex items-center rounded-full px-2.5 py-0.5 font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent hover:bg-primary/80 bg-blue-100 text-blue-800 border-0 text-xs lg:ml-2"},T0={class:"text-sm text-gray-600 line-clamp-2 lg:line-clamp-1 mb-3 lg:mb-2"},A0={class:"grid grid-cols-1 md:grid-cols-2 gap-y-3 md:gap-x-4 md:gap-y-1 text-sm"},M0={class:"flex items-center mb-1 md:mb-0 md:mr-1 max-w-[50%]"},F0=["innerHTML"],D0={class:"text-gray-500 font-medium md:font-normal"},P0={class:"text-gray-600 break-words line-clamp-2"},z0={class:"col-span-1 lg:col-span-2 p-4 lg:p-3 bg-gray-50 flex flex-col justify-center border-t lg:border-t-0 lg:border-l border-gray-100"},I0={class:"text-xs text-gray-500 mb-2 lg:mb-1.5"},j0={key:0,class:"flex flex-wrap gap-1.5 lg:gap-1"},R0={key:0,class:"inline-flex items-center rounded-full font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 hover:bg-secondary/80 bg-white border border-gray-200 text-gray-700 text-xs px-2 py-0.5 lg:px-1.5 lg:py-0"},O0={class:"col-span-1 lg:col-span-2 flex flex-col justify-center items-stretch lg:items-center bg-gray-50 border-t lg:border-t-0 lg:border-l border-gray-100 p-4 lg:p-2"},U0={class:"w-full space-y-2"},q0=["href"],H0=["href"],Rl=e.defineComponent({__name:"template-5",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=f=>(f==null?void 0:f.service_id)&&(f==null?void 0:f.is_map)&&f[n.id_key]&&(f==null?void 0:f.geom),l=e.computed(()=>n.columns.find(f=>f.meta==="title")),s=e.computed(()=>n.columns.filter(f=>f.meta==="category")),i=e.computed(()=>n.columns.filter(f=>f.meta==="tags")),c=e.computed(()=>n.columns.filter(f=>f.meta!=="title")),u=e.computed(()=>n.columns.find(f=>f.meta==="image")),d=e.computed(()=>n.columns.find(f=>f.meta==="desc")||n.columns.find(f=>f.name==="description")),y=(f,p)=>{if(p)return f[p]},a=f=>{const p=y(f,n.id_key);return`${n.path}?id=${p}`},m=(f,p)=>{const k=y(f,n.id_key);return`/map?layers=${p}&info=${p},${k}`};return(f,p)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,k=>{var h,g,b,x,C,V,E,_,N;return e.openBlock(),e.createElementBlock("div",{key:k.id,class:"bg-white border border-gray-200 rounded-lg overflow-hidden transition-all duration-200 hover:shadow-md"},[e.createElementVNode("div",E0,[u.value?(e.openBlock(),e.createElementBlock("div",C0,[k[(h=u.value)==null?void 0:h.name]?(e.openBlock(),e.createElementBlock("img",{key:0,src:k[(g=u.value)==null?void 0:g.name],alt:"image",class:"object-cover w-full h-48 lg:h-full lg:w-auto"},null,8,N0)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",V0,[...p[0]||(p[0]=[e.createElementVNode("div",{class:"w-3 h-12 rounded-sm bg-blue-500",title:"Пріоритет: Високий","aria-hidden":"true"},null,-1)])])),e.createElementVNode("div",$0,[e.createElementVNode("div",B0,[e.createElementVNode("h3",S0,e.toDisplayString(k[`${(b=l.value)==null?void 0:b.name}_text`]||k[(x=l.value)==null?void 0:x.name]||k[(C=l.value)==null?void 0:C.label]||"Не вказано"),1),e.createElementVNode("div",v0,[Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,T=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:T.name},[k[T.name]?(e.openBlock(),e.createElementBlock("div",L0,e.toDisplayString(k[`${T.name}_text`]||k[T.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0)])]),e.createElementVNode("p",T0,e.toDisplayString(((E=k[((V=d.value)==null?void 0:V.name)+"_data"])==null?void 0:E.text)||k[((_=d.value)==null?void 0:_.name)+"_text"]||k[(N=d.value)==null?void 0:N.name]),1),e.createElementVNode("div",A0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,T=>{var Y;return e.openBlock(),e.createElementBlock("div",{key:T.name,class:"flex flex-col md:flex-row md:items-center"},[e.createElementVNode("div",M0,[T.icon?(e.openBlock(),e.createElementBlock("span",{key:0,class:"mr-1 flex-shrink-0",innerHTML:T.icon},null,8,F0)):e.createCommentVNode("",!0),e.createElementVNode("span",D0,e.toDisplayString((T==null?void 0:T.ua)||T.label||T.name)+":",1)]),e.createElementVNode("span",P0,[Array.isArray(k[T==null?void 0:T.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(k[T==null?void 0:T.name],(ee,R)=>(e.openBlock(),e.createElementBlock("span",{key:R,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 inline-block"},e.toDisplayString(ee),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[T.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Nn)(k[T==null?void 0:T.name])||"Немає даних"),1)],64)):T.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Cn)(k[T==null?void 0:T.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((Y=k[(T==null?void 0:T.name)+"_data"])==null?void 0:Y.text)||k[(T==null?void 0:T.name)+"_text"]||k[T==null?void 0:T.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",z0,[e.createElementVNode("p",I0," Теги: "+e.toDisplayString(i.value.length&&k[i.value[0].name]?"":"відсутні"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",j0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,T=>(e.openBlock(),e.createElementBlock("div",{key:T.name,class:"flex flex-wrap gap-1"},[k[T.name]?(e.openBlock(),e.createElementBlock("span",R0,e.toDisplayString(k[`${T.name}_text`]||k[T.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",O0,[e.createElementVNode("div",U0,[!t.hideDetailsButton&&r(k)?(e.openBlock(),e.createElementBlock("a",{key:0,href:m(k,k==null?void 0:k.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-md px-3 w-full bg-blue-600 hover:bg-blue-700 text-white text-xs h-8"}," На карті ",8,q0)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:a(k),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-md px-3 w-full bg-blue-600 hover:bg-blue-700 text-white text-xs h-8"}," Детальніше ",8,H0))])])])])}),128))}});function W0(t){t.component("MapCustom",ho)}const Y0={key:0,class:"flex items-center text-sm text-gray-500 pb-[8px]"},G0={key:0,class:"flex items-center gap-2 flex-shrink-0"},K0={key:1,class:"text-xs text-gray-500 m-0 p-0 mt-[-0.3em]"},tn=e.defineComponent({__name:"TableFormHeader",props:{variant:{default:"table"},title:{default:""}},setup(t){const n=t,o=e.computed(()=>n.variant==="table"?"px-6 pb-4 pt-0 mt-0 flex flex-col gap-0 px-[25px] pt-[24px]":"px-6 pb-4 pt-0 mt-0 flex flex-col gap-0 px-[25px] pt-[16px]"),r=e.computed(()=>n.variant==="form"?"font-medium":"");return(l,s)=>(e.openBlock(),e.createElementBlock("header",{class:e.normalizeClass([o.value,"flex-shrink-0 pt"])},[l.$slots.breadcrumbs?(e.openBlock(),e.createElementBlock("div",Y0,[e.renderSlot(l.$slots,"breadcrumbs")])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["flex items-center justify-between",{"gap-2":t.variant==="table"}])},[e.createElementVNode("h2",{class:e.normalizeClass(["text-xl font-semibold text-gray-900 p-0 m-0 flex-shrink-0",r.value])},[e.renderSlot(l.$slots,"title",{},()=>[e.createTextVNode(e.toDisplayString(t.title),1)])],2),l.$slots.actions?(e.openBlock(),e.createElementBlock("div",G0,[e.renderSlot(l.$slots,"actions")])):e.createCommentVNode("",!0)],2),l.$slots.description?(e.openBlock(),e.createElementBlock("p",K0,[e.renderSlot(l.$slots,"description")])):e.createCommentVNode("",!0)],2))}}),Z0={class:"flex-1 flex flex-col bg-gray-50 h-screen overflow-hidden p-0 m-0"},X0={key:0,href:"/api/gis-create-xml",target:"_blank",rel:"noreferrer",class:"flex h-[2rem] items-center gap-1.5 px-3 py-1.5 bg-slate-50 text-slate-700 rounded-md border border-slate-200 hover:bg-slate-100 transition-colors text-sm"},J0={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto overflow-x-visible"},Q0={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-visible"},eb={class:"p-3 border-b border-gray-200"},tb={class:"flex flex-col sm:flex-row gap-2"},nb={class:"entity-table-root"},ob={class:"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800"},rb={key:0,class:"gap-2 inline-flex"},lb=["onClick"],ab={key:0,class:"flex flex-col gap-3 border-t border-gray-200 px-4 py-3 sm:flex-row sm:items-center sm:justify-between bg-gray-50"},sb={class:"text-sm text-gray-500"},ib={class:"font-medium text-gray-700"},cb={class:"font-medium text-gray-700"},db={class:"font-medium text-gray-700"},ub={class:"flex items-center justify-end gap-3"},bo=Object.freeze(Object.defineProperty({__proto__:null,default:Ae(e.defineComponent({__name:"EntityTablePage",props:{entityKey:{default:""},entityBasePath:{default:""},columnsConfig:{default:()=>[]}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/table")),o=Oe.useRoute(),r=Oe.useRouter(),l=t,s=e.computed(()=>l.entityKey||String(o.name??"").split("-")[0]),i=e.computed(()=>{var j;let B=(((j=o.matched[o.matched.length-1])==null?void 0:j.path)||o.path).replace(/\/:id\??\/:action\??$/,"").replace(/\/:id\??$/,"").replace(/\/:action\??$/,"");return B.startsWith("/")||(B=`/${B}`),B}),c=e.computed(()=>l.entityBasePath||i.value),u=e.computed(()=>{var B;const M=((B=o.matched[o.matched.length-1])==null?void 0:B.path)||"";return/:id\??/.test(M)&&/:action\??/.test(M)}),d=e.computed(()=>{var B,j;return(B=o.meta)!=null&&B.title?o.meta.title:o.name?o.name:((j=o.path)==null?void 0:j.replace(/^\//,""))||""||"GIS"}),y=e.computed(()=>{var M;return((M=o.meta)==null?void 0:M.description)||""}),a=e.computed(()=>{const M=String(d.value||"").trim();return M?`Пошук ${M}...`:"Пошук..."}),m=e.ref([]),f=e.ref(!0),p=e.ref([]),k=e.ref([]),h=e.ref({}),g=e.ref([]),b=e.ref(String(o.query.search??"")),x=e.ref(Math.max(1,Number(o.query.page)||1)),C=e.ref(15),V=e.ref(0),E=e.computed(()=>V.value>0),_=e.computed(()=>V.value?(x.value-1)*C.value+1:0),N=e.computed(()=>V.value?Math.min(x.value*C.value,V.value):0);function T(M){const B=new URLSearchParams;return Object.entries(M).forEach(([j,X])=>{if(!(X==null||X==="")){if(Array.isArray(X)){X.forEach(he=>{he!=null&&he!==""&&B.append(j,String(he))});return}B.append(j,String(X))}}),B.toString()}function Y(){return u.value?`${c.value}/new`:o.name==="services"?"/gis.datasets/new":o.name==="group_list"?"/gis.group/add":`${o.path}/add`}function ee(M){if(u.value)return`${c.value}/${M}/edit`;const B=String(o.name??"").split("_")[0];return B==="services"?`/gis.datasets/${M}/edit`:`/gis.${B}/edit/${M}`}const R=async()=>{const M=`/api/data/gis.${s.value}.table`;if(!M){m.value=[],f.value=!1;return}try{f.value=!0;const B=T({...h.value,page:x.value,limit:C.value}),j=await fetch(B?`${M}?${B}`:M);if(!j.ok)throw new Error(`Rows fetch failed: ${j.status}`);const X=await j.json();m.value=X.rows||[],V.value=Number(X.filtered??X.total??X.count??m.value.length)||0,p.value=l.columnsConfig.length?l.columnsConfig:X.columns||[],k.value=X.filters||[],f.value=!1,g.value=X.actions,X.card!==!1&&p.value.length&&(u.value?p.value[0].link=`${c.value}/{id}`:p.value[0].link||(p.value[0].link=`/${o.name}/{id}`))}catch{m.value=[],f.value=!1}};function ae(M){h.value=M,x.value=1,F(),R()}e.onMounted(()=>{R(),document.title=d.value}),e.watch(()=>o.name,()=>{x.value=1,b.value="",R(),document.title=d.value}),e.watch(()=>o.query,M=>{const B=Math.max(1,Number(M.page)||1),j=String(M.search??""),X=B!==x.value,he=j!==b.value;!X&&!he||(x.value=B,b.value=j,h.value={...h.value,search:j||void 0},R())});async function ue(M,B,j){const X=await fetch(`/api/form/gis.${s.value}.table/${M.id}`);if(!X.ok)throw new Error(`Form fetch failed: ${X.status}`);const Z=(await X.json()).token,P={[B]:j},q=await fetch(`/api/table/${Z}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(P)});if(!q.ok)throw Ee.notify({type:"error",title:"Помилка збереження",message:`Поле "${B}" не оновлено`}),new Error(`Save failed: ${q.status}`);Ee.notify({title:"Збережено",message:`Поле "${B}" оновлено`})}function oe(M,B){h.value={...h.value,[M]:B},x.value=1,F(),R()}function te(M){oe((M==null?void 0:M.name)||"search",(M==null?void 0:M.value)??b.value)}function J(M){b.value="",oe(M||"search",void 0)}function S(M){!M||M===x.value||(x.value=M,F(),R())}function F(){const M={...o.query,page:String(x.value),...b.value?{search:b.value}:{}};b.value||delete M.search,r.replace({query:M})}return(M,B)=>(e.openBlock(),e.createElementBlock("div",Z0,[e.createVNode(tn,{variant:"table"},e.createSlots({title:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.value),1)]),actions:e.withCtx(()=>[e.unref(o).name==="rasters"?(e.openBlock(),e.createElementBlock("a",X0,[e.createVNode(e.unref(ye.RefreshCw),{size:16}),B[2]||(B[2]=e.createTextVNode(" Оновити растри ",-1))])):e.createCommentVNode("",!0),e.createElementVNode("a",{onClick:B[0]||(B[0]=j=>e.unref(r).push(Y())),class:"hover:cursor-pointer flex items-center gap-1.5 px-3 py-1.5 bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors text-sm"},[e.createVNode(e.unref(ye.Plus),{size:16}),B[3]||(B[3]=e.createTextVNode(" Додати ",-1))])]),_:2},[y.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(y.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",J0,[e.createElementVNode("div",Q0,[e.createElementVNode("div",eb,[e.createElementVNode("div",tb,[e.createVNode(e.unref(Gn.FilterField),{modelValue:b.value,"onUpdate:modelValue":B[1]||(B[1]=j=>b.value=j),name:"search",type:"text",layout:"inline",class:"flex-1",width:"100%",cleanable:!0,onChange:te,onClear:J,placeholder:a.value},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(Gn.Filter),{schema:k.value,value:h.value,onChange:ae,layout:"inline",mode:"soft",view:"popover",limit:8,class:"flex-shrink-0"},null,8,["schema","value"])])]),e.createElementVNode("div",nb,[e.createVNode(e.unref(n),{rows:m.value,columns:p.value,loading:f.value,router:e.unref(r),selectable:!1,onCellUpdate:ue,classWrapper:"overflow-x-auto overflow-y-visible",TableStyle:"w-full",classTable:"w-full min-w-[640px]",classThead:"bg-gray-50 border-b border-gray-200",classTh:"px-3 sm:px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase tracking-wider",classTbody:"bg-white divide-y divide-gray-200",classTr:"hover:bg-gray-50 transition-colors",classTd:"px-3 sm:px-4 py-2.5 whitespace-nowrap",classLink:"text-sm font-medium text-blue-600 hover:text-blue-800 hover:underline text-left"},{badge:e.withCtx(({row:j,value:X,column:he})=>[e.renderSlot(M.$slots,"badge",{row:j,value:X,column:he},()=>[e.createElementVNode("span",ob,e.toDisplayString((X==null?void 0:X.text)||X||"-"),1)],!0)]),action:e.withCtx(({row:j})=>[e.renderSlot(M.$slots,"action",{row:j},()=>[g.value.includes("add")?(e.openBlock(),e.createElementBlock("div",rb,[e.createElementVNode("button",{onClick:X=>e.unref(r).push(ee(j.id)),class:"inline-flex items-center justify-center bg-white border rounded-md size-7 gap-x-2 hover:bg-gray-100",title:"Редагувати","aria-label":"Редагувати"},[e.createVNode(Kn)],8,lb)])):e.createCommentVNode("",!0)],!0)]),_:3},8,["rows","columns","loading","router"])]),E.value?(e.openBlock(),e.createElementBlock("div",ab,[e.createElementVNode("div",sb,[B[4]||(B[4]=e.createTextVNode(" Показано ",-1)),e.createElementVNode("span",ib,e.toDisplayString(_.value),1),B[5]||(B[5]=e.createTextVNode(" - ",-1)),e.createElementVNode("span",cb,e.toDisplayString(N.value),1),B[6]||(B[6]=e.createTextVNode(" з ",-1)),e.createElementVNode("span",db,e.toDisplayString(V.value),1)]),e.createElementVNode("div",ub,[e.createVNode(e.unref(Ee.VsPagination),{total:V.value,page:x.value,"page-size":C.value,showPageSizes:!1,pageRange:5,view:"button",color:"gray","onUpdate:page":S,onPageChange:S},null,8,["total","page","page-size"])])])):e.createCommentVNode("",!0)])])]))}}),[["__scopeId","data-v-821aeb35"]])},Symbol.toStringTag,{value:"Module"})),fb={class:"mx-1"},mb={class:"flex items-center gap-2 mt-[0.4rem]"},pb={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto"},gb={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden"},yb={class:"w-full relative overflow-auto p-5 [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar:horizontal]:h-[8px] [&::-webkit-scrollbar-track]:bg-gray-100 [&::-webkit-scrollbar-thumb]:bg-gray-300 dark:[&::-webkit-scrollbar-track]:bg-neutral-700 dark:[&::-webkit-scrollbar-thumb]:bg-neutral-500"},hb={class:"vs-form w-full"},Vn=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"EntityCreatePage",props:{entityKey:{default:""}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/form")),o=e.ref({}),r=e.ref(null),l=e.ref(null),s=Oe.useRouter(),i=Oe.useRoute(),c=t,u=e.ref({}),d=e.ref(""),y=e.computed(()=>i.path.replace(/\/(add|new)$/,"")),a=e.computed(()=>{var h;return((h=s.resolve(y.value).meta)==null?void 0:h.title)??""}),m=e.computed(()=>a.value?`Додати в ${a.value.toLowerCase()}`:"Додати"),f=e.computed(()=>{var h;return((h=i.meta)==null?void 0:h.description)??""});function p(){s.push(y.value||"/")}async function k(){if(!l.value){Ee.notify({type:"error",title:"Error",message:"Create token is missing."});return}const h=u.value.validate();if(h){Ee.notify({type:"warning",title:"Validation",message:Object.entries(h).map(([b,x])=>`${b}: ${x}`).join(`
3
3
  `)});return}const g=await fetch("/api/table/"+l.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)});if(!g.ok){Ee.notify({type:"error",title:"Error",message:`Error code: ${g.status}`});return}await g.json(),Ee.notify({title:"Success!",message:"Object created."}),s.back()}return e.onMounted(async()=>{const h=c.entityKey||String(i.name??"").split("-")[0],g=await fetch(`/api/form/gis.${h}.table`).then(b=>b.json());l.value=g.token,d.value=g.id,r.value=g.schema,document.title=m.value}),(h,g)=>{const b=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(tn,{variant:"form"},e.createSlots({breadcrumbs:e.withCtx(()=>[y.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(b,{to:y.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.value),1)]),_:1},8,["to"]),e.createElementVNode("span",fb,[e.createVNode(e.unref(ye.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),g[2]||(g[2]=e.createElementVNode("span",{class:"text-gray-900 font-semibold"},"Створення",-1))]),title:e.withCtx(()=>[e.createElementVNode("div",mb,[e.createElementVNode("button",{type:"button",class:"p-0 m-0 border-0 bg-transparent cursor-pointer text-inherit hover:opacity-80",onClick:p,"aria-label":"Назад"},[e.createVNode(e.unref(ye.ArrowLeft),{size:20,class:"shrink-0"})]),e.createElementVNode("span",null,e.toDisplayString(a.value||"Створення"),1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{class:"cursor-pointer flex items-center px-3 py-2 text-sm font-medium text-gray-800 duration-300 bg-white border border-gray-100 rounded-lg shadow gap-x-2 focus:outline-none hover:bg-gray-50 hover:border-gray-100",onClick:p}," Назад "),e.createElementVNode("button",{onClick:k,class:"cursor-pointer inline-flex items-center px-3 py-2 text-sm font-medium text-white duration-300 bg-blue-600 hover:bg-blue-700 border border-transparent rounded-lg gap-x-2 hover:text-white"}," Зберегти ")]),_:2},[f.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(f.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",pb,[e.createElementVNode("div",gb,[e.createElementVNode("div",yb,[e.createElementVNode("div",hb,[r.value?(e.openBlock(),e.createBlock(e.unref(n),{key:0,values:o.value,"onUpdate:values":g[0]||(g[0]=x=>o.value=x),form:u.value,"onUpdate:form":g[1]||(g[1]=x=>u.value=x),schema:r.value,style:{primaryColor:"blue"},formId:d.value},null,8,["values","form","schema","formId"])):e.createCommentVNode("",!0)])])])])],64)}}})},Symbol.toStringTag,{value:"Module"})),bb={class:"mx-1"},xb={class:"mx-1"},kb={class:"flex items-center gap-2 mt-[0.4rem]"},wb={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto"},_b={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden"},Eb={class:"w-full relative overflow-auto p-5 [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar:horizontal]:h-[8px] [&::-webkit-scrollbar-track]:bg-gray-100 [&::-webkit-scrollbar-thumb]:bg-gray-300 dark:[&::-webkit-scrollbar-track]:bg-neutral-700 dark:[&::-webkit-scrollbar-thumb]:bg-neutral-500"},Cb={class:"vs-form w-full"},$n=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"EntityEditPage",props:{entityKey:{default:""}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/form")),o=e.ref({}),r=e.ref(null),l=e.ref(null),s=e.ref({}),i=e.ref(""),c=Oe.useRoute(),u=Oe.useRouter(),y=t.entityKey||String(c.name??"").split("-")[0],{id:a}=c.params,m=e.computed(()=>c.path.replace(/\/edit\/[^/]+$/,"").replace(/\/[^/]+\/edit$/,"")),f=e.computed(()=>a?`${m.value}/${a}`:m.value||"/"),p=e.computed(()=>{var b;return((b=u.resolve(m.value).meta)==null?void 0:b.title)??""}),k=e.computed(()=>{var b;return((b=c.meta)==null?void 0:b.description)??""});function h(){u.push(m.value||"/")}async function g(){const b=s.value.validate();if(b){Ee.notify({type:"warning",title:"Validation",message:Object.entries(b).map(([C,V])=>`${C}: ${V}`).join(`
4
4
  `)});return}if(!l.value){Ee.notify({type:"error",title:"Error",message:"Edit token is missing."});return}const x=await fetch(`/api/table/${l.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)});if(!x.ok){Ee.notify({type:"error",title:"Error",message:`Error code: ${x.status}`});return}await x.json(),Ee.notify({title:"Success!",message:"Your changes have been saved."}),u.back()}return e.onMounted(async()=>{const b=await fetch(`/api/form/gis.${y}.table/${a}`).then(C=>C.json());o.value=b.data,l.value=b.token,r.value=b.schema;const x=b.data;i.value=(x==null?void 0:x.name)||(x==null?void 0:x.title)||(x==null?void 0:x.register_key)||(x==null?void 0:x.map_key)||""}),(b,x)=>{const C=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(tn,{variant:"form"},e.createSlots({breadcrumbs:e.withCtx(()=>[m.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(C,{to:m.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p.value),1)]),_:1},8,["to"]),e.createElementVNode("span",bb,[e.createVNode(e.unref(ye.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(C,{to:f.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.value),1)]),_:1},8,["to"]),e.createElementVNode("span",xb,[e.createVNode(e.unref(ye.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),x[2]||(x[2]=e.createElementVNode("span",{class:"text-gray-900 font-semibold"},"Редагування",-1))]),title:e.withCtx(()=>[e.createElementVNode("div",kb,[e.createElementVNode("button",{type:"button",class:"p-0 m-0 border-0 bg-transparent cursor-pointer text-inherit hover:opacity-80",onClick:h,"aria-label":"Назад"},[e.createVNode(e.unref(ye.ArrowLeft),{size:20,class:"shrink-0"})]),e.createElementVNode("span",null,e.toDisplayString(i.value||p.value||"Редагування"),1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{class:"cursor-pointer flex items-center px-3 py-2 text-sm font-medium text-gray-800 duration-300 bg-white border border-gray-100 rounded-lg shadow gap-x-2 focus:outline-none hover:bg-gray-50 hover:border-gray-100",onClick:h}," Назад "),e.createElementVNode("button",{onClick:g,class:"cursor-pointer inline-flex items-center px-3 py-2 text-sm font-medium text-white duration-300 bg-blue-600 hover:bg-blue-700 border border-transparent rounded-lg gap-x-2 hover:text-white"}," Зберегти ")]),_:2},[k.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(k.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",wb,[e.createElementVNode("div",_b,[e.createElementVNode("div",Eb,[e.createElementVNode("div",Cb,[r.value?(e.openBlock(),e.createBlock(e.unref(n),{key:0,schema:r.value,values:o.value,"onUpdate:values":x[0]||(x[0]=V=>o.value=V),form:s.value,"onUpdate:form":x[1]||(x[1]=V=>s.value=V),style:{primaryColor:"blue"}},null,8,["schema","values","form"])):e.createCommentVNode("",!0)])])])])],64)}}})},Symbol.toStringTag,{value:"Module"})),Nb={class:"flex items-center justify-center col-span-3 gap-2"},Vb={class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},$b=e.defineComponent({__name:"vs-datatable-controls",props:e.mergeModels({index:{},data:{},scheme:{}},{columns:{type:Array,default:()=>[]},columnsModifiers:{}}),emits:["update:columns"],setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/form")),o=e.defineAsyncComponent(()=>import("@opengis/core").then(y=>y.VsModal)),r=t,l=e.useModel(t,"columns"),s=e.ref(!1),i=e.ref({}),c=e.ref({...r.data||{}});e.watch(()=>r.data,y=>{c.value={...y||{}}},{deep:!0});const u=()=>l.value=l.value.filter((y,a)=>a!==r.index),d=async()=>{const y=i.value.validate();if(y){Ee.notify({type:"warning",title:"Validation",message:Object.entries(y).map(([a,m])=>`${a}: ${m}`).join(`
5
5
  `)});return}l.value[r.index]=c.value,s.value=!1};return(y,a)=>(e.openBlock(),e.createElementBlock("div",Nb,[e.createElementVNode("button",{onClick:a[0]||(a[0]=m=>{s.value=!0}),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:text-accent-foreground h-8 w-8 rounded-full hover:bg-gray-100"},[e.createVNode(e.unref(ye.Edit),{class:"w-4 h-4"})]),e.createElementVNode("button",{onClick:u,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 h-8 w-8 rounded-full hover:bg-red-100 text-red-600 hover:text-red-700"},[e.createVNode(e.unref(ye.Trash),{class:"w-4 h-4"})]),e.createVNode(e.unref(o),{teleport:"#modal",size:"lg",visible:s.value,"onUpdate:visible":a[4]||(a[4]=m=>s.value=m),title:"Редагувати поле"},{footer:e.withCtx(()=>[e.createElementVNode("div",Vb,[e.createElementVNode("button",{type:"button",class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-black border border-gray-200 rounded-lg hover:bg-gray-100 duration-300",onClick:a[3]||(a[3]=m=>s.value=!1)}," Скасувати "),e.createElementVNode("button",{class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-white bg-blue-500 rounded-lg !border-gray-200 hover:bg-blue-700 duration-300",onClick:d}," Зберегти ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(n),{values:c.value,"onUpdate:values":a[1]||(a[1]=m=>c.value=m),schema:t.scheme,form:i.value,"onUpdate:form":a[2]||(a[2]=m=>i.value=m)},null,8,["values","schema","form"])]),_:1},8,["visible"])]))}}),Bb={mounted(t){setTimeout(()=>{t.scrollWidth>t.clientWidth?t.setAttribute("title",t.textContent):t.removeAttribute("title")})},updated(t){setTimeout(()=>{t.scrollWidth>t.clientWidth?t.setAttribute("title",t.textContent):t.removeAttribute("title")})}},Sb={array:"purple",boolean:"red",date:"red",datetime:"purple",number:"green",text:"blue",file:"yellow",select:"yellow",slug:"green",image:"blue",badge:"orange",title:"blue",features:"green",status:"red",tags:"yellow",category:"purple",check:"green",range:"orange",autocomplete:"yellow",other:"gray","yes/no":"green"},Ol=t=>Sb[t==null?void 0:t.toLowerCase()]||"gray",vb=["array","boolean","date","datetime","number","text","file","select","slug","image","badge","title","features","status","tags","category","check","range","autocomplete"],Ul=t=>{var n;return vb.includes((n=t||"")==null?void 0:n.toLowerCase())},Lb={},Tb={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:"w-4 h-4 text-gray-700 lucide lucide-type",__v0_r:"0,5361,5384"};function Ab(t,n){return e.openBlock(),e.createElementBlock("svg",Tb,[...n[0]||(n[0]=[e.createElementVNode("polyline",{points:"4 7 4 4 20 4 20 7"},null,-1),e.createElementVNode("line",{x1:"9",x2:"15",y1:"20",y2:"20"},null,-1),e.createElementVNode("line",{x1:"12",x2:"12",y1:"4",y2:"20"},null,-1)])])}const Mb=Ae(Lb,[["render",Ab]]),Fb={},Db={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:"w-4 h-4 text-gray-700 lucide lucide-hash",__v0_r:"0,5361,5384"};function Pb(t,n){return e.openBlock(),e.createElementBlock("svg",Db,[...n[0]||(n[0]=[e.createElementVNode("line",{x1:"4",x2:"20",y1:"9",y2:"9"},null,-1),e.createElementVNode("line",{x1:"4",x2:"20",y1:"15",y2:"15"},null,-1),e.createElementVNode("line",{x1:"10",x2:"8",y1:"3",y2:"21"},null,-1),e.createElementVNode("line",{x1:"16",x2:"14",y1:"3",y2:"21"},null,-1)])])}const zb=Ae(Fb,[["render",Pb]]),Ib={},jb={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:"w-4 h-4 text-gray-700 lucide lucide-calendar",__v0_r:"0,5361,5384"};function Rb(t,n){return e.openBlock(),e.createElementBlock("svg",jb,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M8 2v4"},null,-1),e.createElementVNode("path",{d:"M16 2v4"},null,-1),e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"4",rx:"2"},null,-1),e.createElementVNode("path",{d:"M3 10h18"},null,-1)])])}const Ob=Ae(Ib,[["render",Rb]]),Ub={},qb={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:"w-4 h-4 text-gray-700 lucide lucide-calendar",__v0_r:"0,5361,5384"};function Hb(t,n){return e.openBlock(),e.createElementBlock("svg",qb,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M8 2v4"},null,-1),e.createElementVNode("path",{d:"M16 2v4"},null,-1),e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"4",rx:"2"},null,-1),e.createElementVNode("path",{d:"M3 10h18"},null,-1)])])}const Wb=Ae(Ub,[["render",Hb]]),Yb={},Gb={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:"w-4 h-4 text-gray-700 lucide lucide-code",__v0_r:"0,5361,5384"};function Kb(t,n){return e.openBlock(),e.createElementBlock("svg",Gb,[...n[0]||(n[0]=[e.createElementVNode("polyline",{points:"16 18 22 12 16 6"},null,-1),e.createElementVNode("polyline",{points:"8 6 2 12 8 18"},null,-1)])])}const Zb=Ae(Yb,[["render",Kb]]),Xb={},Jb={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:"w-4 h-4 text-gray-700 lucide lucide-toggle-left",__v0_r:"0,5361,5384"};function Qb(t,n){return e.openBlock(),e.createElementBlock("svg",Jb,[...n[0]||(n[0]=[e.createElementVNode("rect",{width:"20",height:"12",x:"2",y:"6",rx:"6",ry:"6"},null,-1),e.createElementVNode("circle",{cx:"8",cy:"12",r:"2"},null,-1)])])}const ex=Ae(Xb,[["render",Qb]]),tx={},nx={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:"w-4 h-4 text-gray-700 lucide lucide-file-text",__v0_r:"0,5361,5384"};function ox(t,n){return e.openBlock(),e.createElementBlock("svg",nx,[...n[0]||(n[0]=[e.createStaticVNode('<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M10 9H8"></path><path d="M16 13H8"></path><path d="M16 17H8"></path>',5)])])}const rx=Ae(tx,[["render",ox]]),lx={},ax={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:"w-4 h-4 text-gray-700 lucide lucide-image",__v0_r:"0,5361,5384"};function sx(t,n){return e.openBlock(),e.createElementBlock("svg",ax,[...n[0]||(n[0]=[e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"},null,-1),e.createElementVNode("circle",{cx:"9",cy:"9",r:"2"},null,-1),e.createElementVNode("path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"},null,-1)])])}const ix=Ae(lx,[["render",sx]]),cx={},dx={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:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function ux(t,n){return e.openBlock(),e.createElementBlock("svg",dx,[...n[0]||(n[0]=[e.createStaticVNode('<line x1="8" x2="21" y1="6" y2="6"></line><line x1="8" x2="21" y1="12" y2="12"></line><line x1="8" x2="21" y1="18" y2="18"></line><line x1="3" x2="3.01" y1="6" y2="6"></line><line x1="3" x2="3.01" y1="12" y2="12"></line><line x1="3" x2="3.01" y1="18" y2="18"></line>',6)])])}const fx=Ae(cx,[["render",ux]]),mx={},px={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:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function gx(t,n){return e.openBlock(),e.createElementBlock("svg",px,[...n[0]||(n[0]=[e.createStaticVNode('<line x1="8" x2="21" y1="6" y2="6"></line><line x1="8" x2="21" y1="12" y2="12"></line><line x1="8" x2="21" y1="18" y2="18"></line><line x1="3" x2="3.01" y1="6" y2="6"></line><line x1="3" x2="3.01" y1="12" y2="12"></line><line x1="3" x2="3.01" y1="18" y2="18"></line>',6)])])}const yx=Ae(mx,[["render",gx]]),hx={},bx={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:"w-4 h-4 text-gray-700 lucide lucide-link2",__v0_r:"0,5361,5384"};function xx(t,n){return e.openBlock(),e.createElementBlock("svg",bx,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M9 17H7A5 5 0 0 1 7 7h2"},null,-1),e.createElementVNode("path",{d:"M15 7h2a5 5 0 1 1 0 10h-2"},null,-1),e.createElementVNode("line",{x1:"8",x2:"16",y1:"12",y2:"12"},null,-1)])])}const kx=Ae(hx,[["render",xx]]),wx={},_x={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:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function Ex(t,n){return e.openBlock(),e.createElementBlock("svg",_x,[...n[0]||(n[0]=[e.createStaticVNode('<line x1="8" x2="21" y1="6" y2="6"></line><line x1="8" x2="21" y1="12" y2="12"></line><line x1="8" x2="21" y1="18" y2="18"></line><line x1="3" x2="3.01" y1="6" y2="6"></line><line x1="3" x2="3.01" y1="12" y2="12"></line><line x1="3" x2="3.01" y1="18" y2="18"></line>',6)])])}const Cx=Ae(wx,[["render",Ex]]),Nx={},Vx={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:"w-4 h-4 text-gray-700 lucide lucide-link2",__v0_r:"0,5361,5384"};function $x(t,n){return e.openBlock(),e.createElementBlock("svg",Vx,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M9 17H7A5 5 0 0 1 7 7h2"},null,-1),e.createElementVNode("path",{d:"M15 7h2a5 5 0 1 1 0 10h-2"},null,-1),e.createElementVNode("line",{x1:"8",x2:"16",y1:"12",y2:"12"},null,-1)])])}const Bx=Ae(Nx,[["render",$x]]),Sx={},vx={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:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function Lx(t,n){return e.openBlock(),e.createElementBlock("svg",vx,[...n[0]||(n[0]=[e.createStaticVNode('<line x1="8" x2="21" y1="6" y2="6"></line><line x1="8" x2="21" y1="12" y2="12"></line><line x1="8" x2="21" y1="18" y2="18"></line><line x1="3" x2="3.01" y1="6" y2="6"></line><line x1="3" x2="3.01" y1="12" y2="12"></line><line x1="3" x2="3.01" y1="18" y2="18"></line>',6)])])}const Tx=Ae(Sx,[["render",Lx]]),Ax={},Mx={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",height:"800px",width:"800px",version:"1.1",id:"_x32_",viewBox:"0 0 512 512","xml:space":"preserve"};function Fx(t,n){return e.openBlock(),e.createElementBlock("svg",Mx,[...n[0]||(n[0]=[e.createElementVNode("g",null,[e.createElementVNode("path",{class:"st0",d:"M511.989,292.396c0.021-16.486-6.344-33.136-18.945-45.703L273.605,27.242 C262.3,15.936,247.175,9.22,231.184,8.407L66.821,0.032l1.184,0.066C66.974,0.044,65.866,0,64.67,0 C47.58,0,31.105,6.783,18.944,18.955C6.783,31.106-0.001,47.58,0.011,64.67c0,1.076,0.034,2.172,0.078,3.27l8.297,163.254 c0.835,15.981,7.54,31.106,18.857,42.421l219.451,219.451c12.578,12.589,29.217,18.955,45.703,18.934 c16.496,0.021,33.124-6.356,45.703-18.934l154.956-154.945l-11.92-11.92l11.932,11.909 C505.645,325.521,512.011,308.881,511.989,292.396z M314.26,469.216c-6.08,6.08-13.895,9.044-21.864,9.067 c-7.969-0.023-15.783-2.986-21.864-9.067L51.082,249.765c-5.4-5.4-8.616-12.633-9.023-20.305L33.762,66.238l-0.034-1.569 c0-8.188,3.238-16.048,9.055-21.875c5.839-5.839,13.697-9.077,21.886-9.077l1.502,0.044l163.288,8.319 c7.683,0.396,14.904,3.6,20.305,9.012l219.45,219.45c6.059,6.069,9.033,13.884,9.056,21.853 c-0.023,7.968-2.986,15.794-9.067,21.886h0.011L314.26,469.216z"}),e.createElementVNode("path",{class:"st0",d:"M105.632,105.642c-15.366,15.378-15.366,40.27,0,55.636c15.366,15.366,40.259,15.366,55.625,0 c15.366-15.366,15.366-40.259,0-55.636C145.891,90.276,120.998,90.276,105.632,105.642z"})],-1)])])}const Dx=Ae(Ax,[["render",Fx]]),Px={},zx={xmlns:"http://www.w3.org/2000/svg",width:"800px",height:"800px",viewBox:"0 0 24 24",fill:"none"};function Ix(t,n){return e.openBlock(),e.createElementBlock("svg",zx,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M3 12C3 4.5885 4.5885 3 12 3C19.4115 3 21 4.5885 21 12C21 19.4115 19.4115 21 12 21C4.5885 21 3 19.4115 3 12Z",stroke:"#323232","stroke-width":"2"},null,-1),e.createElementVNode("path",{d:"M9 12L10.6828 13.6828V13.6828C10.858 13.858 11.142 13.858 11.3172 13.6828V13.6828L15 10",stroke:"#323232","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const ql={IconText:Mb,IconNumber:zb,IconDate:Ob,IconDatetime:Wb,IconRichtext:Zb,IconBoolean:ex,IconFile:rx,IconImage:ix,IconArray:fx,IconSelect:yx,IconSlug:kx,IconDatalist:Cx,IconReference:Bx,IconReferenceList:Tx,IconBadge:Dx,IconCheck:Ae(Px,[["render",Ix]])},jx={key:0,class:"flex items-center justify-between mb-6"},Rx={class:"flex justify-end w-full"},Ox={class:"overflow-hidden bg-white border border-gray-200 shadow-sm rounded-xl flex flex-col flex-1 min-h-0"},Ux={class:"table-scroll-wrapper flex-1 overflow-y-auto min-h-0"},qx={class:"table-fixed w-full text-[13px]"},Hx={class:"bg-gray-50 border-b border-gray-200"},Wx={key:0},Yx=["onDragstart","onDragover","onDrop"],Gx={key:0,class:"flex w-fit items-center gap-2 text-left"},Kx={class:"flex-1 min-w-0"},Zx={class:"font-medium text-gray-900 truncate"},Xx={class:"text-xs text-gray-500"},Jx={key:1,class:"flex items-center justify-center"},Qx={key:0,class:"inline-flex items-center px-2 py-1 h-fit text-[13px] font-medium rounded-md ring-1 ring-inset ring-gray-500/10 bg-gray-100"},e1={key:1,class:"text-gray-500 text-sm"},t1={key:3},n1={class:"px-6 py-4"},o1={key:1},r1=["colspan"],Tt=Ae(e.defineComponent({__name:"vs-datatable",props:e.mergeModels({columnsScheme:{},formScheme:{},addButton:{type:Boolean,default:!0},mainColWidth:{default:""}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(t,{expose:n}){function o(E){return E.charAt(0).toUpperCase()+E.slice(1)}const r=e.defineAsyncComponent(()=>import("@opengis/core").then(E=>E.VsModal)),l=e.defineAsyncComponent(()=>import("@opengis/form")),s=e.useModel(t,"modelValue"),i=t,c=e.ref({}),u=e.ref(!1),d=e.ref({}),y=e.ref(null),a=e.useSlots(),m=E=>!!(E&&a[E]);n({openCreateDialog:()=>{u.value=!0}});const f=e.computed({get(){return Array.isArray(s.value)?s.value:s.value&&Array.isArray(s.value.columns)?s.value.columns:[]},set(E){Array.isArray(s.value)?s.value=E:s.value&&Array.isArray(s.value.columns)&&(s.value.columns=E)}}),p=e.computed(()=>{const E=i.columnsScheme.map(_=>_.key);return E.includes("name")&&E.includes("label")||E.includes("id")&&E.includes("label")?[{key:"main",label:"Назва",type:"main",width:"100%"},...i.columnsScheme.filter(_=>!["name","id","label"].includes(_.key))]:i.columnsScheme});function k(){u.value=!1,d.value={},y.value=null}async function h(){const E=c.value.validate();if(E){Ee.notify({type:"warning",title:"Validation",message:Object.entries(E).map(([_,N])=>`${_}: ${N}`).join(`